equal
deleted
inserted
replaced
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" |