| author | Elisabeth Lempa | 
| Fri, 19 Sep 2025 13:11:51 +0200 | |
| changeset 83191 | 76878779e355 | 
| parent 82967 | 73af47bc277c | 
| permissions | -rw-r--r-- | 
| 75806 
2b106aae897c
added support for cvc5 (whose interface is almost identical to CVC4)
 blanchet parents: 
75365diff
changeset | 1 | (* Title: HOL/Tools/SMT/cvc_proof_parse.ML | 
| 59015 | 2 | Author: Jasmin Blanchette, TU Muenchen | 
| 3 | ||
| 75806 
2b106aae897c
added support for cvc5 (whose interface is almost identical to CVC4)
 blanchet parents: 
75365diff
changeset | 4 | CVC4 and cvc5 proof (actually, unsat core) parsing. | 
| 59015 | 5 | *) | 
| 6 | ||
| 75806 
2b106aae897c
added support for cvc5 (whose interface is almost identical to CVC4)
 blanchet parents: 
75365diff
changeset | 7 | signature CVC_PROOF_PARSE = | 
| 59015 | 8 | sig | 
| 9 | val parse_proof: SMT_Translate.replay_data -> | |
| 10 | ((string * ATP_Problem_Generate.stature) * thm) list -> term list -> term -> string list -> | |
| 11 | SMT_Solver.parsed_proof | |
| 78177 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 12 | val parse_proof_lethe: SMT_Translate.replay_data -> | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 13 | ((string * ATP_Problem_Generate.stature) * thm) list -> term list -> term -> string list -> | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 14 | SMT_Solver.parsed_proof | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 15 | val cvc_matching_assms: Proof.context -> thm list -> term list -> term -> thm -> bool | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 16 | |
| 59015 | 17 | end; | 
| 18 | ||
| 75806 
2b106aae897c
added support for cvc5 (whose interface is almost identical to CVC4)
 blanchet parents: 
75365diff
changeset | 19 | structure CVC_Proof_Parse: CVC_PROOF_PARSE = | 
| 59015 | 20 | struct | 
| 21 | ||
| 78177 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 22 | open ATP_Util | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 23 | open ATP_Problem | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 24 | open ATP_Proof | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 25 | open ATP_Proof_Reconstruct | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 26 | open Lethe_Isar | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 27 | open Lethe_Proof | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 28 | |
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 29 | (*taken from verit*) | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 30 | fun add_used_asserts_in_step (Lethe_Proof.Lethe_Step {prems, ...}) =
 | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 31 | union (op =) (map_filter (try (snd o SMTLIB_Interface.role_and_index_of_assert_name)) prems) | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 32 | |
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 33 | fun cvc_matching_assms ctxt rewrite_rules ll_defs th th' = | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 34 | let | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 35 | val expand = | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 36 | not (null ll_defs) ? SMTLIB_Isar.unlift_term ll_defs | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 37 | #> Object_Logic.dest_judgment ctxt o (Thm.cterm_of ctxt) | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 38 | #> Thm.eta_long_conversion | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 39 | #> Thm.prop_of | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 40 | #> snd o Logic.dest_equals | 
| 82643 
f1c14af17591
prefer Simplifier over bootstrap-only Raw_Simplifier
 haftmann parents: 
78177diff
changeset | 41 | #> Simplifier.rewrite_term (Proof_Context.theory_of | 
| 82967 | 42 |           (empty_simpset ctxt |> Simplifier.add_simps rewrite_rules (*@ @{thms eq_True} still useful?*))) rewrite_rules []
 | 
| 78177 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 43 | |
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 44 | |
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 45 | val normalize = | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 46 | Object_Logic.dest_judgment ctxt o (Thm.cprop_of) | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 47 | #> Thm.eta_long_conversion | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 48 | #> Thm.prop_of | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 49 | #> snd o Logic.dest_equals | 
| 82643 
f1c14af17591
prefer Simplifier over bootstrap-only Raw_Simplifier
 haftmann parents: 
78177diff
changeset | 50 | #> Simplifier.rewrite_term (Proof_Context.theory_of | 
| 82967 | 51 |           (empty_simpset ctxt |> Simplifier.add_simps (rewrite_rules @ @{thms eq_True}))) rewrite_rules []
 | 
| 78177 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 52 | in (expand th) aconv (normalize th') end | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 53 | |
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 54 | fun parse_proof_unsatcore ({ll_defs, assms, ...} : SMT_Translate.replay_data) xfacts prems _ output =
 | 
| 60201 | 55 | if exists (String.isPrefix "(error \"This build of CVC4 doesn't have proof support") output then | 
| 56 |     {outcome = NONE, fact_ids = NONE, atp_proof = K []}
 | |
| 57 | else | |
| 58 | let | |
| 59 | val num_ll_defs = length ll_defs | |
| 59015 | 60 | |
| 60201 | 61 | val id_of_index = Integer.add num_ll_defs | 
| 62 | val index_of_id = Integer.add (~ num_ll_defs) | |
| 59015 | 63 | |
| 75274 
e89709b80b6e
used more descriptive assert names in SMT-Lib output
 desharna parents: 
60201diff
changeset | 64 | val used_assert_ids = | 
| 
e89709b80b6e
used more descriptive assert names in SMT-Lib output
 desharna parents: 
60201diff
changeset | 65 | map_filter (try (snd o SMTLIB_Interface.role_and_index_of_assert_name)) output | 
| 60201 | 66 | val used_assm_js = | 
| 67 | map_filter (fn id => let val i = index_of_id id in if i >= 0 then SOME i else NONE end) | |
| 68 | used_assert_ids | |
| 59015 | 69 | |
| 60201 | 70 | val conjecture_i = 0 | 
| 71 | val prems_i = conjecture_i + 1 | |
| 72 | val num_prems = length prems | |
| 73 | val facts_i = prems_i + num_prems | |
| 59015 | 74 | |
| 60201 | 75 | val fact_ids' = | 
| 76 | map_filter (fn j => | |
| 75365 | 77 | let val ((i, _), _) = nth assms j in | 
| 60201 | 78 | try (apsnd (nth xfacts)) (id_of_index j, i - facts_i) | 
| 79 | end) used_assm_js | |
| 80 | in | |
| 81 |       {outcome = NONE, fact_ids = SOME fact_ids', atp_proof = K []}
 | |
| 82 | end | |
| 59015 | 83 | |
| 78177 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 84 | |
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 85 | fun parse_proof_lethe | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 86 |     ({context = ctxt, typs, terms, ll_defs, rewrite_rules, assms} : SMT_Translate.replay_data)
 | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 87 | xfacts prems concl output = | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 88 | if exists (String.isPrefix "(error \"This build of CVC4 doesn't have proof support") output then | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 89 |      {outcome = NONE, fact_ids = NONE, atp_proof = K []}
 | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 90 | else | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 91 | let | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 92 | val num_ll_defs = length ll_defs | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 93 | val id_of_index = Integer.add num_ll_defs | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 94 | val index_of_id = Integer.add (~ num_ll_defs) | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 95 | |
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 96 | fun step_of_assume i ((_, role), th) = | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 97 | let | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 98 | val th = Thm.prop_of th | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 99 | fun matching (_, th') = cvc_matching_assms ctxt rewrite_rules ll_defs th th' | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 100 | in | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 101 | case List.find matching assms of | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 102 | NONE => [] | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 103 | | SOME (k, _) => | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 104 | Lethe_Proof.Lethe_Step | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 105 |            {id = SMTLIB_Interface.assert_name_of_role_and_index role (id_of_index i),
 | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 106 | rule = input_rule, prems = [], proof_ctxt = [], concl = th, fixes = []} | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 107 | |> single | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 108 | end | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 109 | |
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 110 | val (actual_steps, _) = Lethe_Proof.parse typs terms output ctxt | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 111 | val used_assert_ids = fold add_used_asserts_in_step actual_steps [] | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 112 | val used_assm_js = | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 113 | map_filter (fn id => let val i = index_of_id id in if i >= 0 then SOME i else NONE end) | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 114 | used_assert_ids | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 115 | val used_assms = map (nth assms) used_assm_js | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 116 | val assm_steps = map2 step_of_assume used_assm_js used_assms | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 117 | |> flat | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 118 | val steps = assm_steps @ actual_steps | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 119 | |
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 120 | val conjecture_i = 0 | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 121 | val prems_i = conjecture_i + 1 | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 122 | val num_prems = length prems | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 123 | val facts_i = prems_i + num_prems | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 124 | val num_facts = length xfacts | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 125 | val helpers_i = facts_i + num_facts | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 126 | |
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 127 | val conjecture_id = id_of_index conjecture_i | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 128 | val prem_ids = map id_of_index (prems_i upto prems_i + num_prems - 1) | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 129 | val fact_ids' = | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 130 | map_filter (fn j => | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 131 | let val ((i, _), _) = nth assms j in | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 132 | try (apsnd (nth xfacts)) (id_of_index j, i - facts_i) | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 133 | end) used_assm_js | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 134 | val helper_ids' = | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 135 | map_filter (fn ((i, _), thm) => if i >= helpers_i then SOME (i, thm) else NONE) used_assms | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 136 | |
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 137 | val fact_helper_ts = | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 138 | map (fn (_, th) => (ATP_Util.short_thm_name ctxt th, Thm.prop_of th)) helper_ids' @ | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 139 | map (fn (_, ((s, _), th)) => (s, Thm.prop_of th)) fact_ids' | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 140 | val fact_helper_ids' = | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 141 | map (apsnd (ATP_Util.short_thm_name ctxt)) helper_ids' @ map (apsnd (fst o fst)) fact_ids' | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 142 | in | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 143 |     {outcome = NONE, fact_ids = SOME fact_ids',
 | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 144 | atp_proof = fn () => atp_proof_of_veriT_proof ctxt ll_defs rewrite_rules prems concl | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 145 | fact_helper_ts prem_ids conjecture_id fact_helper_ids' steps} | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 146 | end | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 147 | |
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 148 | fun parse_proof (rep as {context = ctxt, ...}) =
 | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 149 | if SMT_Config.use_lethe_proof_from_cvc ctxt | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 150 | then parse_proof_unsatcore rep | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 151 | else parse_proof_unsatcore rep | 
| 
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
75806diff
changeset | 152 | |
| 59015 | 153 | end; |