src/HOL/Tools/ATP_Manager/atp_manager.ML
changeset 32936 9491bec20595
parent 32865 f8d1e16ec758
child 32937 34f66c9dd8a2
equal deleted inserted replaced
32935:2218b970325a 32936:9491bec20595
    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