src/Pure/goal.ML
changeset 19862 7f29aa958b72
parent 19774 5fe7731d0836
child 20056 0698a403a066
equal deleted inserted replaced
19861:620d90091788 19862:7f29aa958b72
   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