equal
deleted
inserted
replaced
89 |
89 |
90 (* lambda terms *) |
90 (* lambda terms *) |
91 |
91 |
92 fun abs_conv cv ctxt ct = |
92 fun abs_conv cv ctxt ct = |
93 (case Thm.term_of ct of |
93 (case Thm.term_of ct of |
94 Abs (x, _, _) => |
94 Abs (a, _, _) => |
95 let |
95 let |
96 val (u, ctxt') = yield_singleton Variable.variant_fixes Name.uu ctxt; |
96 val ((v, ct'), ctxt') = Variable.dest_abs_cterm ct ctxt; |
97 val (v, ct') = Thm.dest_abs_name u ct; |
|
98 val eq = cv (v, ctxt') ct'; |
97 val eq = cv (v, ctxt') ct'; |
99 in if Thm.is_reflexive eq then all_conv ct else Thm.abstract_rule x v eq end |
98 in if Thm.is_reflexive eq then all_conv ct else Thm.abstract_rule a v eq end |
100 | _ => raise CTERM ("abs_conv", [ct])); |
99 | _ => raise CTERM ("abs_conv", [ct])); |
101 |
100 |
102 fun combination_conv cv1 cv2 ct = |
101 fun combination_conv cv1 cv2 ct = |
103 let val (ct1, ct2) = Thm.dest_comb ct |
102 let val (ct1, ct2) = Thm.dest_comb ct |
104 in Thm.combination (cv1 ct1) (cv2 ct2) end; |
103 in Thm.combination (cv1 ct1) (cv2 ct2) end; |