src/Provers/blast.ML
changeset 26928 ca87aff1ad2d
parent 25365 4e7a1dabd7ef
child 26938 64e850c3da9e
equal deleted inserted replaced
26927:8684b5240f11 26928:ca87aff1ad2d
   493 fun rot_subgoals_tac (rot, rl) =
   493 fun rot_subgoals_tac (rot, rl) =
   494      rot_tac (if rot then map nNewHyps rl else [])
   494      rot_tac (if rot then map nNewHyps rl else [])
   495 end;
   495 end;
   496 
   496 
   497 
   497 
   498 fun TRACE rl tac st i = if !trace then (prth rl; tac st i) else tac st i;
   498 fun TRACE rl tac st i = if !trace then (Display.prth rl; tac st i) else tac st i;
   499 
   499 
   500 (*Resolution/matching tactics: if upd then the proof state may be updated.
   500 (*Resolution/matching tactics: if upd then the proof state may be updated.
   501   Matching makes the tactics more deterministic in the presence of Vars.*)
   501   Matching makes the tactics more deterministic in the presence of Vars.*)
   502 fun emtac upd rl = TRACE rl (if upd then etac rl else ematch_tac [rl]);
   502 fun emtac upd rl = TRACE rl (if upd then etac rl else ematch_tac [rl]);
   503 fun rmtac upd rl = TRACE rl (if upd then rtac rl else match_tac [rl]);
   503 fun rmtac upd rl = TRACE rl (if upd then rtac rl else match_tac [rl]);
   511         emtac upd (if dup then rev_dup_elim rl else rl) i
   511         emtac upd (if dup then rev_dup_elim rl else rl) i
   512         THEN
   512         THEN
   513         rot_subgoals_tac (rot, #2 trl) i
   513         rot_subgoals_tac (rot, #2 trl) i
   514   in Option.SOME (trl, tac) end
   514   in Option.SOME (trl, tac) end
   515   handle ElimBadPrem => (*reject: prems don't preserve conclusion*)
   515   handle ElimBadPrem => (*reject: prems don't preserve conclusion*)
   516             (warning("Ignoring weak elimination rule\n" ^ string_of_thm rl);
   516             (warning("Ignoring weak elimination rule\n" ^ Display.string_of_thm rl);
   517              Option.NONE)
   517              Option.NONE)
   518        | ElimBadConcl => (*ignore: conclusion is not just a variable*)
   518        | ElimBadConcl => (*ignore: conclusion is not just a variable*)
   519            (if !trace then (warning("Ignoring ill-formed elimination rule:\n" ^
   519            (if !trace then (warning("Ignoring ill-formed elimination rule:\n" ^
   520                        "conclusion should be a variable\n" ^ string_of_thm rl))
   520                        "conclusion should be a variable\n" ^ Display.string_of_thm rl))
   521             else ();
   521             else ();
   522             Option.NONE);
   522             Option.NONE);
   523 
   523 
   524 
   524 
   525 (*** Conversion of Introduction Rules ***)
   525 (*** Conversion of Introduction Rules ***)