| author | paulson <lp15@cam.ac.uk> | 
| Mon, 27 Feb 2023 17:09:59 +0000 | |
| changeset 77406 | c2013f617a70 | 
| parent 75956 | 1e2a9d2251b0 | 
| child 82643 | f1c14af17591 | 
| permissions | -rw-r--r-- | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 1 | (* Title: HOL/Tools/SMT/verit_replay.ML | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 2 | Author: Mathias Fleury, MPII | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 3 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 4 | VeriT proof parsing and replay. | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 5 | *) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 6 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 7 | signature VERIT_REPLAY = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 8 | sig | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 9 | val replay: Proof.context -> SMT_Translate.replay_data -> string list -> thm | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 10 | end; | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 11 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 12 | structure Verit_Replay: VERIT_REPLAY = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 13 | struct | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 14 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 15 | fun subst_only_free pairs = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 16 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 17 | fun substf u = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 18 | (case Termtab.lookup pairs u of | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 19 | SOME u' => u' | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 20 | | NONE => | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 21 | (case u of | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 22 | (Abs(a,T,t)) => Abs(a, T, substf t) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 23 | | (t$u') => substf t $ substf u' | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 24 | | u => u)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 25 | in substf end; | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 26 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 27 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 28 | fun under_fixes f unchanged_prems (prems, nthms) names args insts decls (concl, ctxt) = | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 29 | let | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 30 | val thms1 = unchanged_prems @ map (SMT_Replay.varify ctxt) prems | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 31 |     val _ =  SMT_Config.verit_msg ctxt (fn () => \<^print>  ("names =", names))
 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 32 | val thms2 = map snd nthms | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 33 |     val _ = SMT_Config.verit_msg ctxt (fn () => \<^print> ("prems=", prems))
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 34 |     val _ = SMT_Config.verit_msg ctxt (fn () => \<^print> ("nthms=", nthms))
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 35 |     val _ = SMT_Config.verit_msg ctxt (fn () => \<^print> ("thms1=", thms1))
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 36 |     val _ = SMT_Config.verit_msg ctxt (fn () => \<^print> ("thms2=", thms2))
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 37 | in (f ctxt (thms1 @ thms2) args insts decls concl) end | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 38 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 39 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 40 | (** Replaying **) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 41 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 42 | fun replay_thm method_for rewrite_rules ll_defs ctxt assumed unchanged_prems prems nthms | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 43 | concl_transformation global_transformation args insts | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 44 |     (Lethe_Proof.Lethe_Replay_Node {id, rule, concl, bounds, declarations = decls, ...}) =
 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 45 | let | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 46 | val _ = SMT_Config.verit_msg ctxt (fn () => \<^print> id) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 47 | val rewrite = let val thy = Proof_Context.theory_of (empty_simpset ctxt) in | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 48 | Raw_Simplifier.rewrite_term thy rewrite_rules [] | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 49 | #> not (null ll_defs andalso Lethe_Proof.keep_raw_lifting rule) ? SMTLIB_Isar.unlift_term ll_defs | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 50 | end | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 51 | val rewrite_concl = if Lethe_Proof.keep_app_symbols rule then | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 52 |           filter (curry Term.could_unify (Thm.concl_of @{thm SMT.fun_app_def}) o Thm.concl_of) rewrite_rules
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 53 | else rewrite_rules | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 54 | val post = let val thy = Proof_Context.theory_of (empty_simpset ctxt) in | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 55 | Raw_Simplifier.rewrite_term thy rewrite_concl [] | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 56 | #> Object_Logic.atomize_term ctxt | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 57 | #> not (null ll_defs) ? SMTLIB_Isar.unlift_term ll_defs | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 58 | #> SMTLIB_Isar.unskolemize_names ctxt | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 59 | #> HOLogic.mk_Trueprop | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 60 | end | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 61 | val concl = concl | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 62 | |> Term.subst_free concl_transformation | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 63 | |> subst_only_free global_transformation | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 64 | |> post | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 65 | in | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 66 | if rule = Lethe_Proof.input_rule then | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 67 | (case Symtab.lookup assumed id of | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 68 | SOME (_, thm) => thm | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 69 |       | _ => raise Fail ("assumption " ^ @{make_string} id ^ " not found"))
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 70 | else | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 71 | under_fixes (method_for rule) unchanged_prems | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 72 | (prems, nthms) (map fst bounds) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 73 | (map rewrite args) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 74 | (Symtab.map (K rewrite) insts) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 75 | decls | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 76 | (concl, ctxt) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 77 | |> Simplifier.simplify (empty_simpset ctxt addsimps rewrite_rules) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 78 | end | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 79 | |
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 80 | fun add_used_asserts_in_step (Lethe_Proof.Lethe_Replay_Node {prems,
 | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 81 | subproof = (_, _, _, subproof), ...}) = | 
| 75274 
e89709b80b6e
used more descriptive assert names in SMT-Lib output
 desharna parents: 
72513diff
changeset | 82 | union (op =) (map_filter (try (snd o SMTLIB_Interface.role_and_index_of_assert_name)) prems @ | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 83 | flat (map (fn x => add_used_asserts_in_step x []) subproof)) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 84 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 85 | fun remove_rewrite_rules_from_rules n = | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 86 |   (fn (step as Lethe_Proof.Lethe_Replay_Node {id, ...}) =>
 | 
| 75274 
e89709b80b6e
used more descriptive assert names in SMT-Lib output
 desharna parents: 
72513diff
changeset | 87 | (case try (snd o SMTLIB_Interface.role_and_index_of_assert_name) id of | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 88 | NONE => SOME step | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 89 | | SOME a => if a < n then NONE else SOME step)) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 90 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 91 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 92 | fun replay_theorem_step rewrite_rules ll_defs assumed inputs proof_prems | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 93 |   (step as Lethe_Proof.Lethe_Replay_Node {id, rule, prems, bounds, args, insts,
 | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 94 | subproof = (fixes, assms, input, subproof), concl, ...}) state = | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 95 | let | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 96 | val (proofs, stats, ctxt, concl_tranformation, global_transformation) = state | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 97 | val (_, ctxt) = Variable.variant_fixes (map fst bounds) ctxt | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 98 | |> (fn (names, ctxt) => (names, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 99 | fold Variable.declare_term [SMTLIB_Isar.unskolemize_names ctxt concl] ctxt)) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 100 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 101 | val (names, sub_ctxt) = Variable.variant_fixes (map fst fixes) ctxt | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 102 | ||> fold Variable.declare_term (map Free fixes) | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 103 | val export_vars = concl_tranformation @ | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 104 | (ListPair.zip (map Free fixes, map Free (ListPair.zip (names, map snd fixes)))) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 105 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 106 | val post = let val thy = Proof_Context.theory_of (empty_simpset ctxt) in | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 107 | Raw_Simplifier.rewrite_term thy ((if Lethe_Proof.keep_raw_lifting rule then tl rewrite_rules else rewrite_rules)) [] | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 108 | #> Object_Logic.atomize_term ctxt | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 109 | #> not (null ll_defs andalso Lethe_Proof.keep_raw_lifting rule) ? SMTLIB_Isar.unlift_term ll_defs | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 110 | #> SMTLIB_Isar.unskolemize_names ctxt | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 111 | #> HOLogic.mk_Trueprop | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 112 | end | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 113 | val assms = map (subst_only_free global_transformation o Term.subst_free (export_vars) o post) assms | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 114 | val input = map (subst_only_free global_transformation o Term.subst_free (export_vars) o post) input | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 115 | val (all_proof_prems', sub_ctxt2) = Assumption.add_assumes (map (Thm.cterm_of sub_ctxt) (assms @ input)) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 116 | sub_ctxt | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 117 | fun is_refl thm = Thm.concl_of thm |> (fn (_ $ t) => t) |> HOLogic.dest_eq |> (op =) handle TERM _=> false | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 118 | val all_proof_prems' = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 119 | all_proof_prems' | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 120 | |> filter_out is_refl | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 121 | val proof_prems' = take (length assms) all_proof_prems' | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 122 | val input = drop (length assms) all_proof_prems' | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 123 | val all_proof_prems = proof_prems @ proof_prems' | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 124 | val replay = replay_theorem_step rewrite_rules ll_defs assumed (input @ inputs) all_proof_prems | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 125 | val (proofs', stats, _, _, sub_global_rew) = | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 126 | fold replay subproof (proofs, stats, sub_ctxt2, export_vars, global_transformation) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 127 | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 128 | val export_thm = singleton (Proof_Context.export sub_ctxt2 ctxt) | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 129 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 130 | (*for sko_ex and sko_forall, assumptions are in proofs', but the definition of the skolem | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 131 | function is in proofs *) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 132 | val nthms = prems | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 133 | |> filter_out Lethe_Proof.is_lethe_def | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 134 | |> map (apsnd export_thm) o map_filter (Symtab.lookup (if (null subproof) then proofs else proofs')) | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 135 | val nthms' = (if Lethe_Proof.is_skolemization rule then prems else []) | 
| 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 136 | |> filter Lethe_Proof.is_lethe_def | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 137 | |> map_filter (Symtab.lookup proofs) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 138 | val args = map (Term.subst_free concl_tranformation o subst_only_free global_transformation) args | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 139 | val insts = Symtab.map (K (Term.subst_free concl_tranformation o subst_only_free global_transformation)) insts | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 140 | val proof_prems = | 
| 75299 
da591621d6ae
split veriT reconstruction into Lethe and veriT part
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75274diff
changeset | 141 | if Lethe_Replay_Methods.requires_subproof_assms prems rule then proof_prems else [] | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 142 | val local_inputs = | 
| 75299 
da591621d6ae
split veriT reconstruction into Lethe and veriT part
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75274diff
changeset | 143 | if Lethe_Replay_Methods.requires_local_input prems rule then input @ inputs else [] | 
| 72459 
15fc6320da68
reconstruction of veriT proofs in NEWS
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 144 | val replay = Timing.timing (replay_thm Verit_Replay_Methods.method_for rewrite_rules ll_defs | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 145 | ctxt assumed [] (proof_prems @ local_inputs) (nthms @ nthms') concl_tranformation | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 146 | global_transformation args insts) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 147 | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 148 |     val ({elapsed, ...}, thm) =
 | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 149 | SMT_Config.with_time_limit ctxt SMT_Config.reconstruction_step_timeout replay step | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 150 | handle Timeout.TIMEOUT _ => raise SMT_Failure.SMT SMT_Failure.Time_Out | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 151 | val stats' = Symtab.cons_list (rule, Time.toNanoseconds elapsed) stats | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 152 | val proofs = Symtab.update (id, (map fst bounds, thm)) proofs | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 153 | in (proofs, stats', ctxt, | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 154 | concl_tranformation, sub_global_rew) end | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 155 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 156 | fun replay_definition_step rewrite_rules ll_defs _ _ _ | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 157 |   (Lethe_Proof.Lethe_Replay_Node {id, declarations = raw_declarations, subproof = (_, _, _, subproof), ...}) state =
 | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 158 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 159 | val _ = if null subproof then () | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 160 |           else raise (Fail ("unrecognized veriT proof, definition has a subproof"))
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 161 | val (proofs, stats, ctxt, concl_tranformation, global_transformation) = state | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 162 | val global_transformer = subst_only_free global_transformation | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 163 | val rewrite = let val thy = Proof_Context.theory_of ctxt in | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 164 | Raw_Simplifier.rewrite_term thy (rewrite_rules) [] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 165 | #> not (null ll_defs) ? SMTLIB_Isar.unlift_term ll_defs | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 166 | end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 167 | val start0 = Timing.start () | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 168 | val declaration = map (apsnd (rewrite o global_transformer)) raw_declarations | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 169 | val (names, ctxt) = Variable.variant_fixes (map fst declaration) ctxt | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 170 | ||> fold Variable.declare_term (map Free (map (apsnd fastype_of) declaration)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 171 | val old_names = map Free (map (fn (a, b) => (a, fastype_of b)) declaration) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 172 | val new_names = map Free (ListPair.zip (names, map (fastype_of o snd) declaration)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 173 | fun update_mapping (a, b) tab = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 174 | if a <> b andalso Termtab.lookup tab a = NONE | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 175 | then Termtab.update_new (a, b) tab else tab | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 176 | val global_transformation = global_transformation | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 177 | |> fold update_mapping (ListPair.zip (old_names, new_names)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 178 | val global_transformer = subst_only_free global_transformation | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 179 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 180 | val generate_definition = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 181 | (fn (name, term) => (HOLogic.mk_Trueprop | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 182 |         (Const(\<^const_name>\<open>HOL.eq\<close>, fastype_of term --> fastype_of term --> @{typ bool}) $
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 183 | Free (name, fastype_of term) $ term))) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 184 | #> global_transformer | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 185 | #> Thm.cterm_of ctxt | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 186 | val decls = map generate_definition declaration | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 187 | val (defs, ctxt) = Assumption.add_assumes decls ctxt | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 188 | val thms_with_old_name = ListPair.zip (map fst declaration, defs) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 189 | val proofs = fold | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 190 |       (fn (name, thm) => Symtab.update (id, ([name], @{thm sym} OF [thm])))
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 191 | thms_with_old_name proofs | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 192 | val total = Time.toNanoseconds (#elapsed (Timing.result start0)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 193 |     val stats = Symtab.cons_list ("choice", total) stats
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 194 | in (proofs, stats, ctxt, concl_tranformation, global_transformation) end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 195 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 196 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 197 | fun replay_assumed assms ll_defs rewrite_rules stats ctxt term = | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 198 | let | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 199 | val rewrite = let val thy = Proof_Context.theory_of (empty_simpset ctxt) in | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 200 | Raw_Simplifier.rewrite_term thy rewrite_rules [] | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 201 | #> not (null ll_defs) ? SMTLIB_Isar.unlift_term ll_defs | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 202 | end | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 203 | val replay = Timing.timing (SMT_Replay_Methods.prove ctxt (rewrite term)) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 204 |     val ({elapsed, ...}, thm) =
 | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 205 | SMT_Config.with_time_limit ctxt SMT_Config.reconstruction_step_timeout replay | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 206 | (fn _ => Method.insert_tac ctxt (map snd assms) THEN' Classical.fast_tac ctxt) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 207 | handle Timeout.TIMEOUT _ => raise SMT_Failure.SMT SMT_Failure.Time_Out | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 208 | val stats' = Symtab.cons_list (Lethe_Proof.input_rule, Time.toNanoseconds elapsed) stats | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 209 | in | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 210 | (thm, stats') | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 211 | end | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 212 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 213 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 214 | fun replay_step rewrite_rules ll_defs assumed inputs proof_prems | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 215 |   (step as Lethe_Proof.Lethe_Replay_Node {rule, ...}) state =
 | 
| 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 216 | if rule = Lethe_Proof.lethe_def | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 217 | then replay_definition_step rewrite_rules ll_defs assumed inputs proof_prems step state | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 218 | else replay_theorem_step rewrite_rules ll_defs assumed inputs proof_prems step state | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 219 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 220 | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 221 | fun replay outer_ctxt | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 222 |     ({context = ctxt, typs, terms, rewrite_rules, assms, ll_defs, ...} : SMT_Translate.replay_data)
 | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 223 | output = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 224 | let | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 225 | val rewrite_rules = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 226 |       filter_out (fn thm => Term.could_unify (Thm.prop_of @{thm verit_eq_true_simplify},
 | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 227 | Thm.prop_of thm)) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 228 | rewrite_rules | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 229 | val num_ll_defs = length ll_defs | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 230 | val index_of_id = Integer.add (~ num_ll_defs) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 231 | val id_of_index = Integer.add num_ll_defs | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 232 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 233 | val start0 = Timing.start () | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 234 | val (actual_steps, ctxt2) = | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 235 | Lethe_Proof.parse_replay typs terms output ctxt | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 236 | val parsing_time = Time.toNanoseconds (#elapsed (Timing.result start0)) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 237 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 238 | fun step_of_assume (j, (_, th)) = | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 239 |       Lethe_Proof.Lethe_Replay_Node {
 | 
| 75274 
e89709b80b6e
used more descriptive assert names in SMT-Lib output
 desharna parents: 
72513diff
changeset | 240 | id = SMTLIB_Interface.assert_name_of_role_and_index SMT_Util.Axiom (id_of_index j), | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 241 | rule = Lethe_Proof.input_rule, | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 242 | args = [], | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 243 | prems = [], | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 244 | proof_ctxt = [], | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 245 | concl = Thm.prop_of th | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 246 | |> Raw_Simplifier.rewrite_term (Proof_Context.theory_of | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 247 | (empty_simpset ctxt addsimps rewrite_rules)) rewrite_rules [], | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 248 | bounds = [], | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 249 | insts = Symtab.empty, | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 250 | declarations = [], | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 251 | subproof = ([], [], [], [])} | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 252 | val used_assert_ids = fold add_used_asserts_in_step actual_steps [] | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 253 | fun normalize_tac ctxt = let val thy = Proof_Context.theory_of (empty_simpset ctxt) in | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 254 | Raw_Simplifier.rewrite_term thy rewrite_rules [] end | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 255 | val used_assm_js = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 256 | map_filter (fn id => let val i = index_of_id id in if i >= 0 then SOME (i, nth assms i) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 257 | else NONE end) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 258 | used_assert_ids | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 259 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 260 | val assm_steps = map step_of_assume used_assm_js | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 261 | |
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 262 |     fun extract (Lethe_Proof.Lethe_Replay_Node {id, rule, concl, bounds, ...}) =
 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 263 | (id, rule, concl, map fst bounds) | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 264 | fun cond rule = rule = Lethe_Proof.input_rule | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 265 | val add_asssert = SMT_Replay.add_asserted Symtab.update Symtab.empty extract cond | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 266 | val ((_, _), (ctxt3, assumed)) = | 
| 75365 | 267 | add_asssert outer_ctxt rewrite_rules (map (apfst fst) assms) | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 268 | (map_filter (remove_rewrite_rules_from_rules num_ll_defs) assm_steps) ctxt2 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 269 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 270 | val used_rew_js = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 271 | map_filter (fn id => let val i = index_of_id id in if i < 0 | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 272 | then SOME (id, normalize_tac ctxt (nth ll_defs id)) else NONE end) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 273 | used_assert_ids | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 274 | val (assumed, stats) = fold (fn ((id, thm)) => fn (assumed, stats) => | 
| 75274 
e89709b80b6e
used more descriptive assert names in SMT-Lib output
 desharna parents: 
72513diff
changeset | 275 | let | 
| 
e89709b80b6e
used more descriptive assert names in SMT-Lib output
 desharna parents: 
72513diff
changeset | 276 | val (thm, stats) = replay_assumed assms ll_defs rewrite_rules stats ctxt thm | 
| 
e89709b80b6e
used more descriptive assert names in SMT-Lib output
 desharna parents: 
72513diff
changeset | 277 | val name = SMTLIB_Interface.assert_name_of_role_and_index SMT_Util.Axiom id | 
| 
e89709b80b6e
used more descriptive assert names in SMT-Lib output
 desharna parents: 
72513diff
changeset | 278 | in | 
| 
e89709b80b6e
used more descriptive assert names in SMT-Lib output
 desharna parents: 
72513diff
changeset | 279 | (Symtab.update (name, ([], thm)) assumed, stats) | 
| 
e89709b80b6e
used more descriptive assert names in SMT-Lib output
 desharna parents: 
72513diff
changeset | 280 | end) | 
| 
e89709b80b6e
used more descriptive assert names in SMT-Lib output
 desharna parents: 
72513diff
changeset | 281 |       used_rew_js (assumed, Symtab.cons_list ("parsing", parsing_time) Symtab.empty)
 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 282 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 283 | val ctxt4 = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 284 | ctxt3 | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 285 | |> put_simpset (SMT_Replay.make_simpset ctxt3 []) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 286 | |> Config.put SAT.solver (Config.get ctxt3 SMT_Config.sat_solver) | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 287 | val len = Lethe_Proof.number_of_steps actual_steps | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 288 | fun steps_with_depth _ [] = [] | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 289 | | steps_with_depth i (p :: ps) = (i + Lethe_Proof.number_of_steps [p], p) :: | 
| 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 290 | steps_with_depth (i + Lethe_Proof.number_of_steps [p]) ps | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 291 | val actual_steps = steps_with_depth 0 actual_steps | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 292 | val start = Timing.start () | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 293 | val print_runtime_statistics = SMT_Replay.intermediate_statistics ctxt4 start len | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 294 | fun blockwise f (i, x) (next, y) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 295 | (if i > next then print_runtime_statistics i else (); | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 296 | (if i > next then i + 10 else next, f x y)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 297 | val global_transformation : term Termtab.table = Termtab.empty | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 298 | val (_, (proofs, stats, ctxt5, _, _)) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 299 | fold (blockwise (replay_step rewrite_rules ll_defs assumed [] [])) actual_steps | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 300 | (1, (assumed, stats, ctxt4, [], global_transformation)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 301 | val total = Time.toMilliseconds (#elapsed (Timing.result start)) | 
| 75956 
1e2a9d2251b0
remove duplicate parsing for alethe; fix skolemization;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75366diff
changeset | 302 |     val (_, (_, Lethe_Proof.Lethe_Replay_Node {id, ...})) = split_last actual_steps
 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 303 | val _ = print_runtime_statistics len | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 304 | val thm_with_defs = Symtab.lookup proofs id |> the |> snd | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 305 | |> singleton (Proof_Context.export ctxt5 outer_ctxt) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 306 | val _ = SMT_Config.statistics_msg ctxt5 | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 307 | (Pretty.string_of o SMT_Replay.pretty_statistics "veriT" total) stats | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 308 | val _ = SMT_Replay.spying (SMT_Config.spy_verit ctxt) ctxt | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69593diff
changeset | 309 | (fn () => SMT_Replay.print_stats (Symtab.dest stats)) "spy_verit" | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 310 | in | 
| 72459 
15fc6320da68
reconstruction of veriT proofs in NEWS
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 311 |     Verit_Replay_Methods.discharge ctxt [thm_with_defs] @{term False}
 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 312 | end | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 313 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: diff
changeset | 314 | end |