Re: [isabelle] Question about classes



Hello Florian,

Thank you for your answer. In my development I need the order
on 'a types as well as on  pairs 'a * 'b, and I have a general
result using a order on 'a which is instantiated later to a order on pairs.

I think that I have finally reached a conclusion which is flexible enough,
and also sound.

I will define the class of well founded and transitive relations

class well_founded_transitive = ord +
 assumes order_trans1: "x < y /\ y < z ==> x < z"
 ...
 begin...end

I will also declare an uninterpreted constant

consts
 pair:: "'a => 'b => 'c::well_founded_transitive"

and I will prove all results based on these facts

Later for concrete examples I instantiate both the
class for pairs, as well as I define the pair
using an axiom:

instantiation "*":: (well_founded_transitive, well_founded_transitive) well_founded_transitive
begin ...end

axioms pair_def: "pair a b = (a, b)";

I have tested this approach and it seems to work. I also
think that I am not introducing inconsistencies, because
I only introduce this axiom once after I instantiate
the class for pairs.

Viorel


Florian Haftmann wrote:
Hi Viorel,

I have also tried to have the function pair defined by the class,
but then it was not possible to be of the type:
pair:: 'b * 'c => 'a.

something like

class pair_ord =
  fixes pair_less_eq :: "'a * 'b => 'a * 'b => bool"
  assumes ...

is indeed beyond the rather restricted Isabelle polymorphism.

Perhaps a possible solution is to formulate this order as locale and
develope your specfication relative to this:

locale pair_ord =
  fixes pair_less_eq :: "'a * 'b => 'a * 'b => bool"
  assumes ...
begin

definition ...

lemma ...

primrec ...

...

end

This could then be interpreted on different pair order predicates:

definition pair_less_eq_nat_int :: "nat * int => nat * int => bool"
where ...

definition pair_less_eq_list_unit :: 'a list * unit => 'a list * unit =>
bool" where ...

interpretation pair_ord_nat_int: pair_ord pair_less_eq_nat_int ...

interpretation pair_ord_list_unit: pair_ord pair_less_eq_list_unit ...


Hope this helps,
	Florian







This archive was generated by a fusion of Pipermail (Mailman edition) and MHonArc.