10 type locality = Sledgehammer_Filter.locality |
10 type locality = Sledgehammer_Filter.locality |
11 type params = Sledgehammer_Provers.params |
11 type params = Sledgehammer_Provers.params |
12 |
12 |
13 val filter_used_facts : ''a list -> (''a * 'b) list -> (''a * 'b) list |
13 val filter_used_facts : ''a list -> (''a * 'b) list -> (''a * 'b) list |
14 val minimize_facts : |
14 val minimize_facts : |
15 params -> bool -> int -> int -> Proof.state |
15 string -> params -> bool -> int -> int -> Proof.state |
16 -> ((string * locality) * thm list) list |
16 -> ((string * locality) * thm list) list |
17 -> ((string * locality) * thm list) list option * string |
17 -> ((string * locality) * thm list) list option * string |
18 val run_minimize : |
18 val run_minimize : |
19 params -> int -> (Facts.ref * Attrib.src list) list -> Proof.state -> unit |
19 params -> int -> (Facts.ref * Attrib.src list) list -> Proof.state -> unit |
20 end; |
20 end; |
122 (* Give the external prover some slack. The ATP gets further slack because the |
122 (* Give the external prover some slack. The ATP gets further slack because the |
123 Sledgehammer preprocessing time is included in the estimate below but isn't |
123 Sledgehammer preprocessing time is included in the estimate below but isn't |
124 part of the timeout. *) |
124 part of the timeout. *) |
125 val fudge_msecs = 1000 |
125 val fudge_msecs = 1000 |
126 |
126 |
127 fun minimize_facts {provers = [], ...} _ _ _ _ _ = error "No prover is set." |
127 fun minimize_facts prover_name (params as {timeout, ...}) silent i n state |
128 | minimize_facts (params as {provers = prover_name :: _, timeout, ...}) silent |
128 facts = |
129 i n state facts = |
|
130 let |
129 let |
131 val thy = Proof.theory_of state |
130 val thy = Proof.theory_of state |
132 val ctxt = Proof.context_of state |
131 val ctxt = Proof.context_of state |
133 val prover = get_prover ctxt false prover_name |
132 val prover = get_prover ctxt false prover_name |
134 val msecs = Time.toMilliseconds timeout |
133 val msecs = Time.toMilliseconds timeout |
175 string_of_int (10 + msecs div 1000) ^ "\").") |
174 string_of_int (10 + msecs div 1000) ^ "\").") |
176 | {message, ...} => (NONE, "Prover error: " ^ message)) |
175 | {message, ...} => (NONE, "Prover error: " ^ message)) |
177 handle ERROR msg => (NONE, "Error: " ^ msg) |
176 handle ERROR msg => (NONE, "Error: " ^ msg) |
178 end |
177 end |
179 |
178 |
180 fun run_minimize params i refs state = |
179 fun run_minimize (params as {provers, ...}) i refs state = |
181 let |
180 let |
182 val ctxt = Proof.context_of state |
181 val ctxt = Proof.context_of state |
183 val reserved = reserved_isar_keyword_table () |
182 val reserved = reserved_isar_keyword_table () |
184 val chained_ths = #facts (Proof.goal state) |
183 val chained_ths = #facts (Proof.goal state) |
185 val facts = |
184 val facts = |
186 refs |
185 refs |
187 |> maps (map (apsnd single) o fact_from_ref ctxt reserved chained_ths) |
186 |> maps (map (apsnd single) o fact_from_ref ctxt reserved chained_ths) |
188 in |
187 in |
189 case subgoal_count state of |
188 case subgoal_count state of |
190 0 => Output.urgent_message "No subgoal!" |
189 0 => Output.urgent_message "No subgoal!" |
191 | n => |
190 | n => case provers of |
192 (kill_provers (); |
191 [] => error "No prover is set." |
193 Output.urgent_message (#2 (minimize_facts params false i n state facts))) |
192 | prover :: _ => |
|
193 (kill_provers (); |
|
194 minimize_facts prover params false i n state facts |
|
195 |> #2 |> Output.urgent_message) |
194 end |
196 end |
195 |
197 |
196 end; |
198 end; |