src/CCL/coinduction.ML
changeset 642 0db578095e6a
parent 289 78541329ff35
child 757 2ca12511676d
equal deleted inserted replaced
641:49fc43cd6a35 642:0db578095e6a
     5 
     5 
     6 Lemmas and tactics for using the rule coinduct3 on [= and =.
     6 Lemmas and tactics for using the rule coinduct3 on [= and =.
     7 *)
     7 *)
     8 
     8 
     9 val [mono,prem] = goal Lfp.thy "[| mono(f);  a : f(lfp(f)) |] ==> a : lfp(f)";
     9 val [mono,prem] = goal Lfp.thy "[| mono(f);  a : f(lfp(f)) |] ==> a : lfp(f)";
    10 br ((mono RS lfp_Tarski) RS ssubst) 1;
    10 by (rtac ((mono RS lfp_Tarski) RS ssubst) 1);
    11 br prem 1;
    11 by (rtac prem 1);
    12 val lfpI = result();
    12 val lfpI = result();
    13 
    13 
    14 val prems = goal CCL.thy "[| a=a';  a' : A |] ==> a : A";
    14 val prems = goal CCL.thy "[| a=a';  a' : A |] ==> a : A";
    15 by (simp_tac (term_ss addsimps prems) 1);
    15 by (simp_tac (term_ss addsimps prems) 1);
    16 val ssubst_single = result();
    16 val ssubst_single = result();
    39                              @ prems)) 1)]);
    39                              @ prems)) 1)]);
    40 
    40 
    41 (** POgen **)
    41 (** POgen **)
    42 
    42 
    43 goal Term.thy "<a,a> : PO";
    43 goal Term.thy "<a,a> : PO";
    44 br (po_refl RS (XH_to_D PO_iff)) 1;
    44 by (rtac (po_refl RS (XH_to_D PO_iff)) 1);
    45 val PO_refl = result();
    45 val PO_refl = result();
    46 
    46 
    47 val POgenIs = map (mk_genIs Term.thy data_defs POgenXH POgen_mono)
    47 val POgenIs = map (mk_genIs Term.thy data_defs POgenXH POgen_mono)
    48       ["<true,true> : POgen(R)",
    48       ["<true,true> : POgen(R)",
    49        "<false,false> : POgen(R)",
    49        "<false,false> : POgen(R)",
    69                    (POgenIs RL [POgen_mono RS ci3_AgenI]) @ [POgen_mono RS ci3_RI]) i));
    69                    (POgenIs RL [POgen_mono RS ci3_AgenI]) @ [POgen_mono RS ci3_RI]) i));
    70 
    70 
    71 (** EQgen **)
    71 (** EQgen **)
    72 
    72 
    73 goal Term.thy "<a,a> : EQ";
    73 goal Term.thy "<a,a> : EQ";
    74 br (refl RS (EQ_iff RS iffD1)) 1;
    74 by (rtac (refl RS (EQ_iff RS iffD1)) 1);
    75 val EQ_refl = result();
    75 val EQ_refl = result();
    76 
    76 
    77 val EQgenIs = map (mk_genIs Term.thy data_defs EQgenXH EQgen_mono)
    77 val EQgenIs = map (mk_genIs Term.thy data_defs EQgenXH EQgen_mono)
    78 ["<true,true> : EQgen(R)",
    78 ["<true,true> : EQgen(R)",
    79  "<false,false> : EQgen(R)",
    79  "<false,false> : EQgen(R)",