equal
deleted
inserted
replaced
103 Thm.bicompose false (false, Drule.lift_all (Thm.cprem_of thb i) tha, 0) i thb; |
103 Thm.bicompose false (false, Drule.lift_all (Thm.cprem_of thb i) tha, 0) i thb; |
104 |
104 |
105 fun compose_hhf_tac th i = PRIMSEQ (compose_hhf th i); |
105 fun compose_hhf_tac th i = PRIMSEQ (compose_hhf th i); |
106 |
106 |
107 fun comp_hhf tha thb = |
107 fun comp_hhf tha thb = |
108 (case Seq.chop (2, compose_hhf tha 1 thb) of |
108 (case Seq.chop 2 (compose_hhf tha 1 thb) of |
109 ([th], _) => th |
109 ([th], _) => th |
110 | ([], _) => raise THM ("comp_hhf: no unifiers", 1, [tha, thb]) |
110 | ([], _) => raise THM ("comp_hhf: no unifiers", 1, [tha, thb]) |
111 | _ => raise THM ("comp_hhf: multiple unifiers", 1, [tha, thb])); |
111 | _ => raise THM ("comp_hhf: multiple unifiers", 1, [tha, thb])); |
112 |
112 |
113 |
113 |
142 (case SINGLE (tac prems) (init (cert_safe prop)) of |
142 (case SINGLE (tac prems) (init (cert_safe prop)) of |
143 NONE => err "Tactic failed." |
143 NONE => err "Tactic failed." |
144 | SOME res => res); |
144 | SOME res => res); |
145 val [results] = |
145 val [results] = |
146 Conjunction.elim_precise [length props] (finish res) handle THM (msg, _, _) => err msg; |
146 Conjunction.elim_precise [length props] (finish res) handle THM (msg, _, _) => err msg; |
147 val _ = Pattern.matches_seq thy (map (Thm.term_of o cert_safe) props) (map Thm.prop_of results) |
147 val _ = Unify.matches_list thy (map (Thm.term_of o cert_safe) props) (map Thm.prop_of results) |
148 orelse err ("Proved a different theorem: " ^ Sign.string_of_term thy (Thm.prop_of res)); |
148 orelse err ("Proved a different theorem: " ^ Sign.string_of_term thy (Thm.prop_of res)); |
149 in |
149 in |
150 results |> map |
150 results |> map |
151 (Drule.implies_intr_list casms |
151 (Drule.implies_intr_list casms |
152 #> Drule.forall_intr_list cparams |
152 #> Drule.forall_intr_list cparams |