isabelle - Quotienting a mutually recursive family of datatypes -
is possible quotient family of mutually recursive datatypes in isabelle/hol using quotient_type
mechanism family of equivalence relations?
if so, there example of somewhere already? searching isabelle documentation, , paper describing revamped quotient_type
mechanism, doesn't prove helpful.
the command quotient_type
can handle 1 type @ time. if want quotient on several mutual types, must encoding , decoding manually, pretty simple.
suppose 2 types t1
, t2
equivalence relations r1 :: t1 => t1 => bool
, r2 :: t2 => t2 => bool
. then,
quotient_type q = "t1 + t2" / "rel_sum r1 r2"
is combined quotient type. can define 2 quotients projections:
lift_definition abs1 :: "t1 ⇒ q" "inl" . lift_definition abs2 :: "t2 ⇒ q" "inr" . typedef q1 = "range abs1" blast typedef q2 = "range abs2" blast
with setup_lifting
, can register q1
, q2
lifting package, too. then, decent automation lifting proofs , definitions. have 2 lifting steps (first t1 + t2
q
, q
q1
or q2
) definitions , 2 unlifting steps proofs.
Comments
Post a Comment