author | desharna |
Thu, 08 Oct 2020 16:07:10 +0200 | |
changeset 72398 | 5d1a7b688f6d |
parent 70930 | 1019b8609552 |
permissions | -rw-r--r-- |
57706 | 1 |
(* Title: HOL/Tools/ATP/atp_satallax.ML |
2 |
Author: Mathias Fleury, ENS Rennes |
|
3 |
Author: Jasmin Blanchette, TU Muenchen |
|
4 |
||
5 |
Satallax proof parser and transformation for Sledgehammer. |
|
6 |
*) |
|
7 |
||
8 |
signature ATP_SATALLAX = |
|
9 |
sig |
|
10 |
val atp_proof_of_tstplike_proof : string -> string ATP_Proof.atp_problem -> string -> |
|
11 |
string ATP_Proof.atp_proof |
|
12 |
end; |
|
13 |
||
14 |
structure ATP_Satallax : ATP_SATALLAX = |
|
15 |
struct |
|
16 |
||
17 |
open ATP_Proof |
|
18 |
open ATP_Util |
|
19 |
open ATP_Problem |
|
20 |
||
21 |
(*Undocumented format: |
|
22 |
thf (number, plain | Axiom | ..., inference(rule, [status(thm), assumptions ([hypotheses list]), |
|
23 |
detailed_rule(discharge,used_hypothese_list) *], used_hypotheses_list, premises)) |
|
24 |
(seen by tab_mat) |
|
25 |
||
26 |
Also seen -- but we can ignore it: |
|
27 |
"tab_inh (a) __11." meaning that the type a is inhabited usueful of variable eigen__11, |
|
28 |
*) |
|
29 |
fun parse_satallax_tstp_information x = |
|
30 |
((Symbol.scan_ascii_id || ($$ "$" |-- Symbol.scan_ascii_id)) |
|
58325 | 31 |
-- Scan.option ( $$ "(" |
32 |
|-- (Scan.option (Symbol.scan_ascii_id --| $$ ",") |
|
33 |
-- ((Scan.option (($$ "[" |-- (Scan.option ((scan_general_id |
|
57716 | 34 |
-- Scan.repeat ($$ "," |-- scan_general_id)) >> op ::) --| $$ "]")) |
58325 | 35 |
|| (scan_general_id) >> (fn x => SOME [x])) |
36 |
>> (fn (SOME x) => x | NONE => NONE)) --| $$ ")")) |
|
37 |
|| (skip_term >> K (NONE, NONE)))) x |
|
57706 | 38 |
|
39 |
fun parse_prem x = |
|
40 |
((Symbol.scan_ascii_id || scan_general_id) --| Scan.option ($$ ":" -- skip_term)) x |
|
41 |
||
42 |
fun parse_prems x = |
|
43 |
(($$ "[" |-- parse_prem -- Scan.repeat ($$ "," |-- parse_prem) --| $$ "]") |
|
57716 | 44 |
>> op ::) x |
57706 | 45 |
|
46 |
fun parse_tstp_satallax_extra_arguments x = |
|
47 |
($$ "," |-- scan_general_id -- (($$ "(" |-- Symbol.scan_ascii_id --| $$ "," ) |
|
48 |
-- ($$ "[" |-- Scan.option ((parse_satallax_tstp_information |
|
57716 | 49 |
-- Scan.repeat ($$ "," |-- parse_satallax_tstp_information)) >> op ::) |
57706 | 50 |
--| $$ "]") -- |
51 |
(Scan.optional ($$ "," |-- parse_prems) [] -- Scan.optional ($$ "," |-- parse_prems) [] |
|
52 |
>> (fn (x, []) => x | (_, x) => x)) |
|
53 |
--| $$ ")")) x |
|
54 |
||
55 |
val dummy_satallax_step = ((("~1", "tab_inh"), AAtom (ATerm(("False", []), []))), NONE) |
|
56 |
fun parse_tstp_thf0_satallax_line x = |
|
57 |
(((Scan.this_string tptp_thf |
|
58 |
-- $$ "(") |-- scan_general_id --| $$ "," -- Symbol.scan_ascii_id --| $$ "," |
|
72398 | 59 |
-- parse_hol_formula -- Scan.option parse_tstp_satallax_extra_arguments --| $$ ")" --| $$ ".") |
57706 | 60 |
|| (Scan.this_string "tab_inh" |-- skip_term --| $$ ".") |
61 |
>> K dummy_satallax_step) x |
|
62 |
||
63 |
datatype satallax_step = Satallax_Step of { |
|
64 |
id: string, |
|
65 |
role: string, |
|
66 |
theorem: (string, string, (string, string ATP_Problem.atp_type) ATP_Problem.atp_term, string) |
|
67 |
ATP_Problem.atp_formula, |
|
68 |
assumptions: string list, |
|
69 |
rule: string, |
|
70 |
used_assumptions: string list, |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
71 |
detailed_eigen: string, |
57706 | 72 |
generated_goal_assumptions: (string * string list) list} |
73 |
||
74 |
fun mk_satallax_step id role theorem assumptions rule used_assumptions |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
75 |
generated_goal_assumptions detailed_eigen = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
76 |
Satallax_Step {id = id, role = role, theorem = theorem, assumptions = assumptions, rule = rule, |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
77 |
used_assumptions = used_assumptions, generated_goal_assumptions = generated_goal_assumptions, |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
78 |
detailed_eigen = detailed_eigen} |
57706 | 79 |
|
80 |
fun get_assumptions (("assumptions", SOME (_ , assumptions)) :: _) = |
|
81 |
the_default [] assumptions |
|
82 |
| get_assumptions (_ :: l) = get_assumptions l |
|
83 |
| get_assumptions [] = [] |
|
84 |
||
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
85 |
fun get_detailled_eigen ((_, SOME (SOME "eigenvar" , var)) :: _) = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
86 |
hd (the_default [""] var) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
87 |
| get_detailled_eigen (_ :: l) = get_detailled_eigen l |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
88 |
| get_detailled_eigen [] = "" |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
89 |
|
57706 | 90 |
fun seperate_dependices dependencies = |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
91 |
let |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
92 |
fun sep_dep [] used_assumptions new_goals generated_assumptions _ = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
93 |
(used_assumptions, new_goals, generated_assumptions) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
94 |
| sep_dep (x :: l) used_assumptions new_goals generated_assumptions state = |
58325 | 95 |
if hd (raw_explode x) = "h" orelse Int.fromString x = NONE then |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
96 |
if state = 0 then |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
97 |
sep_dep l (x :: used_assumptions) new_goals generated_assumptions state |
57706 | 98 |
else |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
99 |
sep_dep l used_assumptions new_goals (x :: generated_assumptions) 3 |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
100 |
else |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
101 |
if state = 1 orelse state = 0 then |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
102 |
sep_dep l used_assumptions (x :: new_goals) generated_assumptions 1 |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
103 |
else |
69593 | 104 |
raise Fail ("incorrect Satallax proof: " ^ \<^make_string> l) |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
105 |
in |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
106 |
sep_dep dependencies [] [] [] 0 |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
107 |
end |
57706 | 108 |
|
109 |
fun create_grouped_goal_assumption rule new_goals generated_assumptions = |
|
57714
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
110 |
let |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
111 |
val number_of_new_goals = length new_goals |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
112 |
val number_of_new_assms = length generated_assumptions |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
113 |
in |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
114 |
if number_of_new_goals = number_of_new_assms then |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
115 |
new_goals ~~ (map single generated_assumptions) |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
116 |
else if 2 * number_of_new_goals = number_of_new_assms then |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
117 |
let |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
118 |
fun group_by_pair (new_goal :: new_goals) (assumpt1 :: assumpt2 :: generated_assumptions) = |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
119 |
(new_goal, [assumpt1, assumpt2]) :: group_by_pair new_goals generated_assumptions |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
120 |
| group_by_pair [] [] = [] |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
121 |
in |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
122 |
group_by_pair new_goals generated_assumptions |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
123 |
end |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
124 |
else |
63692 | 125 |
raise Fail ("the rule " ^ rule ^" is not supported in the reconstruction") |
57714
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
126 |
end |
70930
1019b8609552
removed support for remote Satallax because its output does not clearly identify the lemmas used
blanchet
parents:
69593
diff
changeset
|
127 |
|
57706 | 128 |
fun to_satallax_step (((id, role), formula), (SOME (_,((rule, l), used_rules)))) = |
129 |
let |
|
130 |
val (used_assumptions, new_goals, generated_assumptions) = seperate_dependices used_rules |
|
131 |
in |
|
132 |
mk_satallax_step id role formula (get_assumptions (the_default [] l)) rule used_assumptions |
|
133 |
(create_grouped_goal_assumption rule new_goals generated_assumptions) |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
134 |
(get_detailled_eigen (the_default [] l)) |
57706 | 135 |
end |
136 |
| to_satallax_step (((id, role), formula), NONE) = |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
137 |
mk_satallax_step id role formula [] "assumption" [] [] "" |
57706 | 138 |
|
139 |
fun is_assumption (Satallax_Step {role, ...}) = role = "assumption" orelse role = "axiom" orelse |
|
140 |
role = "negated_conjecture" orelse role = "conjecture" |
|
141 |
||
142 |
fun seperate_assumptions_and_steps l = |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
143 |
let |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
144 |
fun seperate_assumption [] l l' = (l, l') |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
145 |
| seperate_assumption (step :: steps) l l' = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
146 |
if is_assumption step then |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
147 |
seperate_assumption steps (step :: l) l' |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
148 |
else |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
149 |
seperate_assumption steps l (step :: l') |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
150 |
in |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
151 |
seperate_assumption l [] [] |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
152 |
end |
57706 | 153 |
|
154 |
datatype satallax_proof_graph = |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
155 |
Linear_Part of {node: satallax_step, succs: satallax_proof_graph list} | |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
156 |
Tree_Part of {node: satallax_step, deps: satallax_proof_graph list} |
57706 | 157 |
|
158 |
fun find_proof_step ((x as Satallax_Step {id, ...}) :: l) h = |
|
159 |
if h = id then x else find_proof_step l h |
|
69593 | 160 |
| find_proof_step [] h = raise Fail ("not_found: " ^ \<^make_string> h ^ " (probably a parsing \ |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
161 |
\error)") |
57706 | 162 |
|
163 |
fun remove_not_not (x as ATerm ((op1, _), [ATerm ((op2, _), [th])])) = |
|
164 |
if op1 = op2 andalso op1 = tptp_not then th else x |
|
165 |
| remove_not_not th = th |
|
166 |
||
167 |
fun tptp_term_equal (ATerm((op1, _), l1), ATerm((op2, _), l2)) = op1 = op2 andalso |
|
168 |
fold2 (fn t1 => fn t2 => fn c => c andalso t1 = t2) l1 l2 true |
|
169 |
| tptp_term_equal (_, _) = false |
|
170 |
||
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
171 |
val dummy_true_aterm = ATerm (("$true", [dummy_atype]), []) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
172 |
|
57706 | 173 |
fun find_assumptions_to_inline ths (assm :: assms) to_inline no_inline = |
174 |
(case List.find (curry (op =) assm o fst) no_inline of |
|
175 |
SOME _ => find_assumptions_to_inline ths assms to_inline no_inline |
|
176 |
| NONE => |
|
177 |
(case List.find (curry (op =) assm o fst) to_inline of |
|
178 |
NONE => find_assumptions_to_inline ths assms to_inline no_inline |
|
179 |
| SOME (_, th) => |
|
180 |
let |
|
58325 | 181 |
val simplified_ths_with_inlined_asms = |
57714
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
182 |
(case List.partition (curry tptp_term_equal th o remove_not_not) ths of |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
183 |
([], ths) => ATerm ((tptp_not, [dummy_atype]), [th]) :: ths |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
184 |
| (_, _) => []) |
57706 | 185 |
in |
58325 | 186 |
find_assumptions_to_inline simplified_ths_with_inlined_asms assms to_inline no_inline |
57706 | 187 |
end)) |
188 |
| find_assumptions_to_inline ths [] _ _ = ths |
|
189 |
||
190 |
fun inline_if_needed_and_simplify th assms to_inline no_inline = |
|
58325 | 191 |
(case find_assumptions_to_inline [th] assms to_inline no_inline of |
192 |
[] => dummy_true_aterm |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
193 |
| l => foldl1 (fn (a, b) => |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
194 |
(case b of |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
195 |
ATerm (("$false", _), _) => a |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
196 |
| ATerm (("~", _ ), [ATerm (("$true", _), _)]) => a |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
197 |
| _ => ATerm ((tptp_or, [dummy_atype]), [a, b]))) l) |
57706 | 198 |
|
199 |
fun get_conclusion (Satallax_Step {theorem = AAtom theorem, ...}) = theorem |
|
200 |
||
58325 | 201 |
fun add_assumptions new_used_assumptions (Satallax_Step {id, role, theorem, assumptions, |
202 |
rule, generated_goal_assumptions, used_assumptions, detailed_eigen}) = |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
203 |
mk_satallax_step id role theorem assumptions rule (new_used_assumptions @ used_assumptions) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
204 |
generated_goal_assumptions detailed_eigen |
57706 | 205 |
|
206 |
fun set_rule new_rule (Satallax_Step {id, role, theorem, assumptions, |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
207 |
generated_goal_assumptions, used_assumptions, detailed_eigen, ...}) = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
208 |
mk_satallax_step id role theorem assumptions new_rule used_assumptions |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
209 |
generated_goal_assumptions detailed_eigen |
57706 | 210 |
|
58325 | 211 |
fun add_detailled_eigen eigen (Satallax_Step {id, role, theorem, assumptions, |
212 |
rule, generated_goal_assumptions, used_assumptions, detailed_eigen}) = |
|
213 |
mk_satallax_step id role theorem assumptions rule used_assumptions |
|
214 |
generated_goal_assumptions (if detailed_eigen <> "" then detailed_eigen else eigen) |
|
215 |
||
57706 | 216 |
fun transform_inline_assumption hypotheses_step proof_sketch = |
217 |
let |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
218 |
fun inline_in_step (Linear_Part {node as Satallax_Step {generated_goal_assumptions, |
58325 | 219 |
used_assumptions, rule, detailed_eigen, ...}, succs}) = |
57706 | 220 |
if generated_goal_assumptions = [] then |
57714
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
221 |
Linear_Part {node = node, succs = []} |
57706 | 222 |
else |
223 |
let |
|
70930
1019b8609552
removed support for remote Satallax because its output does not clearly identify the lemmas used
blanchet
parents:
69593
diff
changeset
|
224 |
(*one single goal is created, two hypothesis can be created, for the "and" rule: |
57706 | 225 |
(A /\ B) create two hypotheses A, and B.*) |
226 |
fun set_hypotheses_as_goal [hypothesis] succs = |
|
58325 | 227 |
Linear_Part {node = add_detailled_eigen detailed_eigen |
228 |
(set_rule rule (add_assumptions used_assumptions |
|
229 |
(find_proof_step hypotheses_step hypothesis))), |
|
57706 | 230 |
succs = map inline_in_step succs} |
231 |
| set_hypotheses_as_goal (hypothesis :: new_goal_hypotheses) succs = |
|
58325 | 232 |
Linear_Part {node = set_rule rule (add_assumptions used_assumptions |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
233 |
(find_proof_step hypotheses_step hypothesis)), |
57706 | 234 |
succs = [set_hypotheses_as_goal new_goal_hypotheses succs]} |
235 |
in |
|
236 |
set_hypotheses_as_goal (snd (hd generated_goal_assumptions)) succs |
|
237 |
end |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
238 |
| inline_in_step (Tree_Part {node = node, deps}) = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
239 |
Tree_Part {node = node, deps = map inline_in_step deps} |
57706 | 240 |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
241 |
fun inline_contradictory_assumptions (Linear_Part {node as Satallax_Step{id, theorem, ...}, |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
242 |
succs}) (to_inline, no_inline) = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
243 |
let |
58325 | 244 |
val (succs, inliner) = fold_map inline_contradictory_assumptions succs |
57714
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
245 |
(to_inline, (id, theorem) :: no_inline) |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
246 |
in |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
247 |
(Linear_Part {node = node, succs = succs}, inliner) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
248 |
end |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
249 |
| inline_contradictory_assumptions (Tree_Part {node = Satallax_Step {id, role, |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
250 |
theorem = AAtom theorem, assumptions, rule, generated_goal_assumptions, |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
251 |
used_assumptions, detailed_eigen}, deps}) (to_inline, no_inline) = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
252 |
let |
58325 | 253 |
val (dep', (to_inline', no_inline')) = fold_map inline_contradictory_assumptions deps |
57714
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
254 |
(to_inline, no_inline) |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
255 |
val to_inline'' = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
256 |
map (fn s => (s, get_conclusion (find_proof_step hypotheses_step s))) |
58325 | 257 |
(filter (fn s => (nth_string s 0 = "h") andalso List.find (curry (op =) s o fst) |
258 |
no_inline' = NONE) (used_assumptions @ (map snd generated_goal_assumptions |> flat))) |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
259 |
@ to_inline' |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
260 |
val node' = Satallax_Step {id = id, role = role, theorem = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
261 |
AAtom (inline_if_needed_and_simplify theorem assumptions to_inline'' no_inline'), |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
262 |
assumptions = assumptions, rule = rule, |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
263 |
generated_goal_assumptions = generated_goal_assumptions, detailed_eigen = detailed_eigen, |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
264 |
used_assumptions = |
58325 | 265 |
filter (fn s => List.find (curry (op =) s o fst) to_inline'' = NONE) |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
266 |
used_assumptions} |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
267 |
in |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
268 |
(Tree_Part {node = node', deps = dep'}, (to_inline'', no_inline')) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
269 |
end |
57706 | 270 |
in |
271 |
fst (inline_contradictory_assumptions (inline_in_step proof_sketch) ([], [])) |
|
272 |
end |
|
273 |
||
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
274 |
fun correct_dependencies (Linear_Part {node, succs}) = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
275 |
Linear_Part {node = node, succs = map correct_dependencies succs} |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
276 |
| correct_dependencies (Tree_Part {node, deps}) = |
57706 | 277 |
let |
278 |
val new_used_assumptions = |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
279 |
map (fn Linear_Part {node = (Satallax_Step{id, ...}), ...} => id |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
280 |
| Tree_Part {node = (Satallax_Step{id, ...}), ...} => id) deps |
57706 | 281 |
in |
58325 | 282 |
Tree_Part {node = add_assumptions new_used_assumptions node, |
57706 | 283 |
deps = map correct_dependencies deps} |
284 |
end |
|
285 |
||
286 |
fun create_satallax_proof_graph (hypotheses_step, proof_sketch) = |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
287 |
let |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
288 |
fun create_step (step as Satallax_Step {generated_goal_assumptions, ...}) = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
289 |
Linear_Part {node = step, |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
290 |
succs = map (create_step o (find_proof_step (hypotheses_step @ proof_sketch))) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
291 |
(map fst generated_goal_assumptions)} |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
292 |
fun reverted_discharged_steps is_branched (Linear_Part {node as |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
293 |
Satallax_Step {generated_goal_assumptions, ...}, succs}) = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
294 |
if is_branched orelse length generated_goal_assumptions > 1 then |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
295 |
Tree_Part {node = node, deps = map (reverted_discharged_steps true) succs} |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
296 |
else |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
297 |
Linear_Part {node = node, succs = map (reverted_discharged_steps is_branched) succs} |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
298 |
val proof_with_correct_sense = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
299 |
correct_dependencies (reverted_discharged_steps false |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
300 |
(create_step (find_proof_step proof_sketch "0" ))) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
301 |
in |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
302 |
transform_inline_assumption hypotheses_step proof_with_correct_sense |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
303 |
end |
57706 | 304 |
|
58325 | 305 |
val satallax_known_rules = ["eq_ind", "eq_trans2", "eq_trans3", "eq_neg_neg_id", "eq_true", |
57714
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
306 |
"eq_and_nor", "eq_or_nand", "eq_or_imp", "eq_and_imp", "eq_imp_or", "eq_iff", "eq_sym_eq", |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
307 |
"eq_forall_nexists", "eq_exists_nforall", "eq_leib1", "eq_leib2", "eq_leib3", "eq_leib4", |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
308 |
"eq_eta", "SinhE", "eq_forall_Seps", "eq_SPi_Seps", "eq_exists_Seps"] |
58325 | 309 |
val is_special_satallax_rule = member (op =) satallax_known_rules |
57706 | 310 |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
311 |
fun terms_to_upper_case var (AAbs (((var', ty), b), ts)) = |
57714
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
312 |
let |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
313 |
val bdy = terms_to_upper_case var b |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
314 |
val ts' = map (terms_to_upper_case var) ts |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
315 |
in |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
316 |
AAbs (((((var = var' ? String.implode o (map Char.toUpper) o String.explode) var'), ty), |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
317 |
bdy), ts') |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
318 |
end |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
319 |
| terms_to_upper_case var (ATerm ((var', ty), ts)) = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
320 |
ATerm ((((var = var' ? String.implode o (map Char.toUpper) o String.explode) var'), |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
321 |
ty), map (terms_to_upper_case var) ts) |
57706 | 322 |
|
58325 | 323 |
fun add_quantifier_in_tree_part var_rule_to_add assumption_to_add |
324 |
(Linear_Part {node as Satallax_Step {detailed_eigen, rule, ...} , succs}) = |
|
325 |
Linear_Part {node = node, succs = map (add_quantifier_in_tree_part |
|
326 |
((detailed_eigen <> "" ? cons (detailed_eigen, rule)) var_rule_to_add) assumption_to_add) |
|
327 |
succs} |
|
328 |
| add_quantifier_in_tree_part var_rule_to_add assumption_to_add |
|
329 |
(Tree_Part {node = Satallax_Step {rule, detailed_eigen, id, role, theorem = AAtom th, |
|
330 |
assumptions, used_assumptions, generated_goal_assumptions}, deps}) = |
|
57706 | 331 |
let |
58325 | 332 |
val theorem' = fold (fn v => fn body => terms_to_upper_case (fst v) body) var_rule_to_add th |
333 |
fun add_quantified_var (var, rule) = fn body => |
|
334 |
let |
|
335 |
val quant = if rule = "tab_ex" then tptp_ho_exists else tptp_ho_forall |
|
336 |
val upperVar = (String.implode o (map Char.toUpper) o String.explode) var |
|
337 |
val quant_bdy = if rule = "tab_ex" |
|
338 |
then ATerm ((quant, []), [AAbs (((upperVar, dummy_atype), body), []) ]) else body |
|
339 |
in |
|
340 |
quant_bdy |
|
341 |
end |
|
342 |
val theorem'' = fold add_quantified_var var_rule_to_add theorem' |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
343 |
val node' = mk_satallax_step id role (AAtom theorem'') assumptions rule |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
344 |
(used_assumptions @ (filter (curry (op <=) (the (Int.fromString id)) o size) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
345 |
assumption_to_add)) generated_goal_assumptions detailed_eigen |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
346 |
in |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
347 |
if detailed_eigen <> "" then |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
348 |
Tree_Part {node = node', |
58325 | 349 |
deps = map (add_quantifier_in_tree_part ((detailed_eigen, rule) :: var_rule_to_add) |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
350 |
(used_assumptions @ assumption_to_add)) deps} |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
351 |
else |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
352 |
Tree_Part {node = node', |
58325 | 353 |
deps = map (add_quantifier_in_tree_part var_rule_to_add assumption_to_add) deps} |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
354 |
end |
57706 | 355 |
|
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
356 |
fun transform_to_standard_atp_step already_transformed proof = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
357 |
let |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
358 |
fun create_fact_step id = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
359 |
((id, [id]), Axiom, AAtom (ATerm((id, []), [])), "", []) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
360 |
fun transform_one_step already_transformed (Satallax_Step {id, theorem, used_assumptions, role, |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
361 |
rule, ...}) = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
362 |
let |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
363 |
val role' = role_of_tptp_string role |
58412 | 364 |
val new_transformed = filter |
70930
1019b8609552
removed support for remote Satallax because its output does not clearly identify the lemmas used
blanchet
parents:
69593
diff
changeset
|
365 |
(fn s => size s >= 4 andalso not (is_special_satallax_rule s) andalso not |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
366 |
(member (op =) already_transformed s)) used_assumptions |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
367 |
in |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
368 |
(map create_fact_step new_transformed |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
369 |
@ [((id, []), if role' = Unknown then Plain else role', theorem, rule, |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
370 |
map (fn s => (s, [])) (filter_out is_special_satallax_rule used_assumptions))], |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
371 |
new_transformed @ already_transformed) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
372 |
end |
58325 | 373 |
fun transform_steps (Linear_Part {node, succs}) already_transformed = |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
374 |
transform_one_step already_transformed node |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
375 |
||> (fold_map transform_steps succs) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
376 |
||> apfst flat |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
377 |
|> (fn (a, (b, transformed)) => (a @ b, transformed)) |
58325 | 378 |
| transform_steps (Tree_Part {node, deps}) already_transformed = |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
379 |
fold_map transform_steps deps already_transformed |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
380 |
|>> flat |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
381 |
||> (fn transformed => transform_one_step transformed node) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
382 |
|> (fn (a, (b, transformed)) => (a @ b, transformed)) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
383 |
in |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
384 |
fst (transform_steps proof already_transformed) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
385 |
end |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
386 |
|
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
387 |
fun remove_unused_dependency steps = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
388 |
let |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
389 |
fun find_all_ids [] = [] |
57714
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
390 |
| find_all_ids (((id, _), _, _, _, _) :: steps) = id :: find_all_ids steps |
57710
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
391 |
fun keep_only_used used_ids steps = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
392 |
let |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
393 |
fun remove_unused (((id, ids), role, theorem, rule, deps) :: steps) = |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
394 |
(((id, ids), role, theorem, rule, filter (member (op =) used_ids o fst) deps) :: steps) |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
395 |
| remove_unused [] = [] |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
396 |
in |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
397 |
remove_unused steps |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
398 |
end |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
399 |
in |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
400 |
keep_only_used (find_all_ids steps) steps |
323a57d7455c
imported patch satallax_skolemization_in_tree_part
fleury
parents:
57707
diff
changeset
|
401 |
end |
57706 | 402 |
|
403 |
fun parse_proof local_name problem = |
|
57714
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
404 |
strip_spaces_except_between_idents |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
405 |
#> raw_explode |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
406 |
#> |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
407 |
(if local_name <> satallaxN then |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
408 |
(Scan.error (!! (fn _ => raise UNRECOGNIZED_ATP_PROOF ()) |
61476 | 409 |
(Scan.finite Symbol.stopper (Scan.repeats1 (parse_line local_name problem)))) |
57714
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
410 |
#> fst) |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
411 |
else |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
412 |
(Scan.error (!! (fn _ => raise UNRECOGNIZED_ATP_PROOF ()) |
67022
49309fe530fd
more robust parsing for THF proofs (esp. polymorphic Leo-III proofs)
blanchet
parents:
63692
diff
changeset
|
413 |
(Scan.finite Symbol.stopper (Scan.repeat1 parse_tstp_thf0_satallax_line))) |
57714
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
414 |
#> fst |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
415 |
#> rev |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
416 |
#> map to_satallax_step |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
417 |
#> seperate_assumptions_and_steps |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
418 |
#> create_satallax_proof_graph |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
419 |
#> add_quantifier_in_tree_part [] [] |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
420 |
#> transform_to_standard_atp_step [] |
4856a7b8b9c3
Changing the role of rule "tmp_ite_elim" of the SMT solver veriT to Lemma.
fleury
parents:
57710
diff
changeset
|
421 |
#> remove_unused_dependency)) |
57706 | 422 |
|
423 |
fun atp_proof_of_tstplike_proof _ _ "" = [] |
|
424 |
| atp_proof_of_tstplike_proof local_prover problem tstp = |
|
425 |
(case core_of_agsyhol_proof tstp of |
|
426 |
SOME facts => facts |> map (core_inference agsyhol_core_rule) |
|
427 |
| NONE => |
|
428 |
tstp ^ "$" (* the $ sign acts as a sentinel (FIXME: needed?) *) |
|
429 |
|> parse_proof local_prover problem |
|
59058
a78612c67ec0
renamed "pairself" to "apply2", in accordance to @{apply 2};
wenzelm
parents:
58412
diff
changeset
|
430 |
|> local_prover = vampireN ? perhaps (try (sort (vampire_step_name_ord o apply2 #1))) |
57706 | 431 |
|> local_prover = zipperpositionN ? rev) |
432 |
||
433 |
end; |