src/Pure/drule.ML
changeset 18820 24dcd5b0e26b
parent 18799 f137c5e971f5
child 18922 b05a2952de73
equal deleted inserted replaced
18819:67f9347ea21d 18820:24dcd5b0e26b
    63   val reflexive_thm: thm
    63   val reflexive_thm: thm
    64   val symmetric_thm: thm
    64   val symmetric_thm: thm
    65   val transitive_thm: thm
    65   val transitive_thm: thm
    66   val symmetric_fun: thm -> thm
    66   val symmetric_fun: thm -> thm
    67   val extensional: thm -> thm
    67   val extensional: thm -> thm
       
    68   val equals_cong: thm
    68   val imp_cong: thm
    69   val imp_cong: thm
    69   val swap_prems_eq: thm
    70   val swap_prems_eq: thm
    70   val equal_abs_elim: cterm  -> thm -> thm
    71   val equal_abs_elim: cterm  -> thm -> thm
    71   val equal_abs_elim_list: cterm list -> thm -> thm
    72   val equal_abs_elim_list: cterm list -> thm -> thm
    72   val asm_rl: thm
    73   val asm_rl: thm
   625 fun extensional eq =
   626 fun extensional eq =
   626   let val eq' =
   627   let val eq' =
   627     abstract_rule "x" (snd (Thm.dest_comb (fst (dest_equals (cprop_of eq))))) eq
   628     abstract_rule "x" (snd (Thm.dest_comb (fst (dest_equals (cprop_of eq))))) eq
   628   in equal_elim (eta_conversion (cprop_of eq')) eq' end;
   629   in equal_elim (eta_conversion (cprop_of eq')) eq' end;
   629 
   630 
       
   631 val equals_cong =
       
   632   store_standard_thm_open "equals_cong" (Thm.reflexive (read_prop "x == y"));
       
   633 
   630 val imp_cong =
   634 val imp_cong =
   631   let
   635   let
   632     val ABC = read_prop "PROP A ==> PROP B == PROP C"
   636     val ABC = read_prop "PROP A ==> PROP B == PROP C"
   633     val AB = read_prop "PROP A ==> PROP B"
   637     val AB = read_prop "PROP A ==> PROP B"
   634     val AC = read_prop "PROP A ==> PROP C"
   638     val AC = read_prop "PROP A ==> PROP C"