9 (*Previously used <*> in the domain and variant pairs as elements. But |
9 (*Previously used <*> in the domain and variant pairs as elements. But |
10 standard pairs work just as well. To use variant pairs, must change prefix |
10 standard pairs work just as well. To use variant pairs, must change prefix |
11 a q/Q to the Sigma, Pair and converse rules.*) |
11 a q/Q to the Sigma, Pair and converse rules.*) |
12 |
12 |
13 structure LList_Eq = CoInductive_Fun |
13 structure LList_Eq = CoInductive_Fun |
14 (val thy = LList.thy |> add_consts [("lleq","i=>i",NoSyn)] |
14 (val thy = LList.thy |> add_consts [("lleq","i=>i",NoSyn)] |
15 val thy_name = "LList_Eq" |
15 val thy_name = "LList_Eq" |
16 val rec_doms = [("lleq", "llist(A) * llist(A)")] |
16 val rec_doms = [("lleq", "llist(A) * llist(A)")] |
17 val sintrs = |
17 val sintrs = |
18 ["<LNil, LNil> : lleq(A)", |
18 ["<LNil, LNil> : lleq(A)", |
19 "[| a:A; <l,l'>: lleq(A) |] ==> <LCons(a,l), LCons(a,l')>: lleq(A)"] |
19 "[| a:A; <l,l'>: lleq(A) |] ==> <LCons(a,l), LCons(a,l')>: lleq(A)"] |
20 val monos = [] |
20 val monos = [] |
21 val con_defs = [] |
21 val con_defs = [] |
22 val type_intrs = LList.intrs @ [SigmaI] |
22 val type_intrs = LList.intrs |
23 val type_elims = [SigmaE2]); |
23 val type_elims = []); |
24 |
24 |
25 (** Alternatives for above: |
25 (** Alternatives for above: |
26 val con_defs = LList.con_defs |
26 val con_defs = LList.con_defs |
27 val type_intrs = codatatype_intrs |
27 val type_intrs = codatatype_intrs |
28 val type_elims = [quniv_QPair_E] |
28 val type_elims = [quniv_QPair_E] |