19 val get_full_types: unit -> bool |
19 val get_full_types: unit -> bool |
20 val set_full_types: bool -> unit |
20 val set_full_types: bool -> unit |
21 val kill: unit -> unit |
21 val kill: unit -> unit |
22 val info: unit -> unit |
22 val info: unit -> unit |
23 val messages: int option -> unit |
23 val messages: int option -> unit |
24 val add_prover: string * AtpWrapper.prover -> theory -> theory |
24 val add_prover: string * ATP_Wrapper.prover -> theory -> theory |
25 val print_provers: theory -> unit |
25 val print_provers: theory -> unit |
26 val get_prover: string -> theory -> AtpWrapper.prover option |
26 val get_prover: string -> theory -> ATP_Wrapper.prover option |
27 val sledgehammer: string list -> Proof.state -> unit |
27 val sledgehammer: string list -> Proof.state -> unit |
28 end; |
28 end; |
29 |
29 |
30 structure AtpManager: ATP_MANAGER = |
30 structure ATP_Manager: ATP_MANAGER = |
31 struct |
31 struct |
32 |
32 |
33 (** preferences **) |
33 (** preferences **) |
34 |
34 |
35 val message_store_limit = 20; |
35 val message_store_limit = 20; |
300 |
300 |
301 fun err_dup_prover name = error ("Duplicate prover: " ^ quote name); |
301 fun err_dup_prover name = error ("Duplicate prover: " ^ quote name); |
302 |
302 |
303 structure Provers = TheoryDataFun |
303 structure Provers = TheoryDataFun |
304 ( |
304 ( |
305 type T = (AtpWrapper.prover * stamp) Symtab.table |
305 type T = (ATP_Wrapper.prover * stamp) Symtab.table |
306 val empty = Symtab.empty |
306 val empty = Symtab.empty |
307 val copy = I |
307 val copy = I |
308 val extend = I |
308 val extend = I |
309 fun merge _ tabs : T = Symtab.merge (eq_snd op =) tabs |
309 fun merge _ tabs : T = Symtab.merge (eq_snd op =) tabs |
310 handle Symtab.DUP dup => err_dup_prover dup |
310 handle Symtab.DUP dup => err_dup_prover dup |
335 "external prover " ^ quote name ^ " for subgoal " ^ string_of_int i ^ ":\n" ^ |
335 "external prover " ^ quote name ^ " for subgoal " ^ string_of_int i ^ ":\n" ^ |
336 Syntax.string_of_term ctxt (Thm.term_of (Thm.cprem_of goal i)) |
336 Syntax.string_of_term ctxt (Thm.term_of (Thm.cprem_of goal i)) |
337 val _ = SimpleThread.fork true (fn () => |
337 val _ = SimpleThread.fork true (fn () => |
338 let |
338 let |
339 val _ = register birthtime deadtime (Thread.self (), desc) |
339 val _ = register birthtime deadtime (Thread.self (), desc) |
340 val problem = AtpWrapper.atp_problem_of_goal (get_full_types ()) i |
340 val problem = ATP_Wrapper.atp_problem_of_goal (get_full_types ()) i |
341 (Proof.get_goal proof_state) |
341 (Proof.get_goal proof_state) |
342 val result = |
342 val result = |
343 let val AtpWrapper.Prover_Result {success, message, ...} = |
343 let val ATP_Wrapper.Prover_Result {success, message, ...} = |
344 prover problem (get_timeout ()) |
344 prover problem (get_timeout ()) |
345 in (success, message) end |
345 in (success, message) end |
346 handle ResHolClause.TOO_TRIVIAL |
346 handle ResHolClause.TOO_TRIVIAL |
347 => (true, "Empty clause: Try this command: " ^ Markup.markup Markup.sendback "apply metis") |
347 => (true, "Empty clause: Try this command: " ^ Markup.markup Markup.sendback "apply metis") |
348 | ERROR msg |
348 | ERROR msg |