equal
deleted
inserted
replaced
285 in |
285 in |
286 join_disj (Old_Z3_Proof_Literals.make_littab (thms @ explode_disj ts th)) t |
286 join_disj (Old_Z3_Proof_Literals.make_littab (thms @ explode_disj ts th)) t |
287 end |
287 end |
288 |
288 |
289 fun dest_arg2 ct = Thm.dest_arg (Thm.dest_arg ct) |
289 fun dest_arg2 ct = Thm.dest_arg (Thm.dest_arg ct) |
290 fun dest ct = pairself dest_arg2 (Thm.dest_binop ct) |
290 fun dest ct = apply2 dest_arg2 (Thm.dest_binop ct) |
291 val contrapos = |
291 val contrapos = |
292 Old_Z3_Proof_Tools.precompose2 dest @{lemma "(~P ==> ~Q) ==> Q ==> P" by fast} |
292 Old_Z3_Proof_Tools.precompose2 dest @{lemma "(~P ==> ~Q) ==> Q ==> P" by fast} |
293 in |
293 in |
294 fun unit_resolution thm thms ct = |
294 fun unit_resolution thm thms ct = |
295 Old_Z3_Proof_Literals.negate (Thm.dest_arg ct) |
295 Old_Z3_Proof_Literals.negate (Thm.dest_arg ct) |
480 local |
480 local |
481 exception MONO |
481 exception MONO |
482 |
482 |
483 fun prove_refl (ct, _) = Thm.reflexive ct |
483 fun prove_refl (ct, _) = Thm.reflexive ct |
484 fun prove_comb f g cp = |
484 fun prove_comb f g cp = |
485 let val ((ct1, ct2), (cu1, cu2)) = pairself Thm.dest_comb cp |
485 let val ((ct1, ct2), (cu1, cu2)) = apply2 Thm.dest_comb cp |
486 in Thm.combination (f (ct1, cu1)) (g (ct2, cu2)) end |
486 in Thm.combination (f (ct1, cu1)) (g (ct2, cu2)) end |
487 fun prove_arg f = prove_comb prove_refl f |
487 fun prove_arg f = prove_comb prove_refl f |
488 |
488 |
489 fun prove f cp = prove_comb (prove f) f cp handle CTERM _ => prove_refl cp |
489 fun prove f cp = prove_comb (prove f) f cp handle CTERM _ => prove_refl cp |
490 |
490 |
504 f (length (HOLogic.dest_list (Thm.term_of cl))) cp |
504 f (length (HOLogic.dest_list (Thm.term_of cl))) cp |
505 |
505 |
506 fun prove_distinct f = prove_arg (with_length (prove_list f)) |
506 fun prove_distinct f = prove_arg (with_length (prove_list f)) |
507 |
507 |
508 fun prove_eq exn lookup cp = |
508 fun prove_eq exn lookup cp = |
509 (case lookup (Logic.mk_equals (pairself Thm.term_of cp)) of |
509 (case lookup (Logic.mk_equals (apply2 Thm.term_of cp)) of |
510 SOME eq => eq |
510 SOME eq => eq |
511 | NONE => if exn then raise MONO else prove_refl cp) |
511 | NONE => if exn then raise MONO else prove_refl cp) |
512 |
512 |
513 val prove_exn = prove_eq true |
513 val prove_exn = prove_eq true |
514 and prove_safe = prove_eq false |
514 and prove_safe = prove_eq false |