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