author | wenzelm |
Wed, 25 Jun 2025 16:35:25 +0200 | |
changeset 82768 | 8f866fd6fae1 |
parent 82643 | f1c14af17591 |
permissions | -rw-r--r-- |
75806
2b106aae897c
added support for cvc5 (whose interface is almost identical to CVC4)
blanchet
parents:
75365
diff
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:
75365
diff
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:
75365
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
16 |
|
59015 | 17 |
end; |
18 |
||
75806
2b106aae897c
added support for cvc5 (whose interface is almost identical to CVC4)
blanchet
parents:
75365
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
28 |
|
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
32 |
|
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
changeset
|
34 |
let |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
40 |
#> snd o Logic.dest_equals |
82643
f1c14af17591
prefer Simplifier over bootstrap-only Raw_Simplifier
haftmann
parents:
78177
diff
changeset
|
41 |
#> Simplifier.rewrite_term (Proof_Context.theory_of |
78177
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
changeset
|
42 |
(empty_simpset ctxt addsimps rewrite_rules (*@ @{thms eq_True} still useful?*))) rewrite_rules [] |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
changeset
|
43 |
|
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
changeset
|
44 |
|
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
49 |
#> snd o Logic.dest_equals |
82643
f1c14af17591
prefer Simplifier over bootstrap-only Raw_Simplifier
haftmann
parents:
78177
diff
changeset
|
50 |
#> Simplifier.rewrite_term (Proof_Context.theory_of |
78177
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
changeset
|
51 |
(empty_simpset ctxt addsimps rewrite_rules @ @{thms eq_True})) rewrite_rules [] |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
changeset
|
53 |
|
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
60201
diff
changeset
|
64 |
val used_assert_ids = |
e89709b80b6e
used more descriptive assert names in SMT-Lib output
desharna
parents:
60201
diff
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:
75806
diff
changeset
|
84 |
|
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
90 |
else |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
changeset
|
91 |
let |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
95 |
|
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
changeset
|
97 |
let |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
100 |
in |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
changeset
|
102 |
NONE => [] |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
107 |
|> single |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
changeset
|
108 |
end |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
changeset
|
109 |
|
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
117 |
|> flat |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
changeset
|
119 |
|
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
126 |
|
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
136 |
|
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
142 |
in |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
146 |
end |
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
changeset
|
147 |
|
ea7a3cc64df5
early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
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:
75806
diff
changeset
|
152 |
|
59015 | 153 |
end; |