src/ZF/ex/LList.ML
changeset 71 729fe026c5f3
parent 34 747f1aad03cf
child 85 914270f33f2d
equal deleted inserted replaced
70:8a29f8b4aca1 71:729fe026c5f3
    19   val ext = None
    19   val ext = None
    20   val sintrs = 
    20   val sintrs = 
    21       ["LNil : llist(A)",
    21       ["LNil : llist(A)",
    22        "[| a: A;  l: llist(A) |] ==> LCons(a,l) : llist(A)"];
    22        "[| a: A;  l: llist(A) |] ==> LCons(a,l) : llist(A)"];
    23   val monos = [];
    23   val monos = [];
    24   val type_intrs = co_data_typechecks
    24   val type_intrs = co_datatype_intrs
    25   val type_elims = []);
    25   val type_elims = []);
    26   
    26   
    27 val [LNilI, LConsI] = LList.intrs;
    27 val [LNilI, LConsI] = LList.intrs;
    28 
    28 
    29 (*An elimination rule, for type-checking*)
    29 (*An elimination rule, for type-checking*)
    47  [Transset_quniv, QPair_Int_quniv_in_quniv, Int_Vfrom_0_in_quniv, 
    47  [Transset_quniv, QPair_Int_quniv_in_quniv, Int_Vfrom_0_in_quniv, 
    48   zero_Int_in_quniv, one_Int_in_quniv,
    48   zero_Int_in_quniv, one_Int_in_quniv,
    49   QPair_Int_Vfrom_succ_in_quniv, QPair_Int_Vfrom_in_quniv];
    49   QPair_Int_Vfrom_succ_in_quniv, QPair_Int_Vfrom_in_quniv];
    50 
    50 
    51 val quniv_cs = ZF_cs addSIs in_quniv_rls 
    51 val quniv_cs = ZF_cs addSIs in_quniv_rls 
    52                      addIs (Int_quniv_in_quniv::co_data_typechecks);
    52                      addIs (Int_quniv_in_quniv::co_datatype_intrs);
    53 
    53 
    54 (*Keep unfolding the lazy list until the induction hypothesis applies*)
    54 (*Keep unfolding the lazy list until the induction hypothesis applies*)
    55 goal LList.thy
    55 goal LList.thy
    56    "!!i. i : nat ==> 	\
    56    "!!i. i : nat ==> 	\
    57 \        ALL l: llist(quniv(A)). l Int Vfrom(quniv(A), i) : quniv(A)";
    57 \        ALL l: llist(quniv(A)). l Int Vfrom(quniv(A), i) : quniv(A)";