src/HOL/Tools/ATP/atp_systems.ML
changeset 46409 d4754183ccce
parent 46407 30e9720cc0b9
child 46427 4fd25dadbd94
equal deleted inserted replaced
46408:2520cd337056 46409:d4754183ccce
     9 sig
     9 sig
    10   type atp_format = ATP_Problem.atp_format
    10   type atp_format = ATP_Problem.atp_format
    11   type formula_kind = ATP_Problem.formula_kind
    11   type formula_kind = ATP_Problem.formula_kind
    12   type failure = ATP_Proof.failure
    12   type failure = ATP_Proof.failure
    13 
    13 
       
    14   type slice_spec = int * atp_format * string * string * bool
    14   type atp_config =
    15   type atp_config =
    15     {exec : string * string,
    16     {exec : string * string,
    16      required_execs : (string * string) list,
    17      required_execs : (string * string) list,
    17      arguments :
    18      arguments :
    18        Proof.context -> bool -> string -> Time.time
    19        Proof.context -> bool -> string -> Time.time
    20      proof_delims : (string * string) list,
    21      proof_delims : (string * string) list,
    21      known_failures : (failure * string) list,
    22      known_failures : (failure * string) list,
    22      conj_sym_kind : formula_kind,
    23      conj_sym_kind : formula_kind,
    23      prem_kind : formula_kind,
    24      prem_kind : formula_kind,
    24      best_slices :
    25      best_slices :
    25        Proof.context
    26        Proof.context -> (real * (bool * (slice_spec * string))) list}
    26        -> (real * (bool * ((int * atp_format * string * string) * string)))
       
    27             list}
       
    28 
    27 
    29   val force_sos : bool Config.T
    28   val force_sos : bool Config.T
    30   val e_smartN : string
    29   val e_smartN : string
    31   val e_autoN : string
    30   val e_autoN : string
    32   val e_fun_weightN : string
    31   val e_fun_weightN : string
    56   val z3_tptpN : string
    55   val z3_tptpN : string
    57   val remote_prefix : string
    56   val remote_prefix : string
    58   val remote_atp :
    57   val remote_atp :
    59     string -> string -> string list -> (string * string) list
    58     string -> string -> string list -> (string * string) list
    60     -> (failure * string) list -> formula_kind -> formula_kind
    59     -> (failure * string) list -> formula_kind -> formula_kind
    61     -> (Proof.context -> int * atp_format * string * string)
    60     -> (Proof.context -> slice_spec) -> string * atp_config
    62     -> string * atp_config
       
    63   val add_atp : string * atp_config -> theory -> theory
    61   val add_atp : string * atp_config -> theory -> theory
    64   val get_atp : theory -> string -> atp_config
    62   val get_atp : theory -> string -> atp_config
    65   val supported_atps : theory -> string list
    63   val supported_atps : theory -> string list
    66   val is_atp_installed : theory -> string -> bool
    64   val is_atp_installed : theory -> string -> bool
    67   val refresh_systems_on_tptp : unit -> unit
    65   val refresh_systems_on_tptp : unit -> unit
    74 open ATP_Problem
    72 open ATP_Problem
    75 open ATP_Proof
    73 open ATP_Proof
    76 open ATP_Problem_Generate
    74 open ATP_Problem_Generate
    77 
    75 
    78 (* ATP configuration *)
    76 (* ATP configuration *)
       
    77 
       
    78 type slice_spec = int * atp_format * string * string * bool
    79 
    79 
    80 type atp_config =
    80 type atp_config =
    81   {exec : string * string,
    81   {exec : string * string,
    82    required_execs : (string * string) list,
    82    required_execs : (string * string) list,
    83    arguments :
    83    arguments :
    85      -> (unit -> (string * real) list) -> string,
    85      -> (unit -> (string * real) list) -> string,
    86    proof_delims : (string * string) list,
    86    proof_delims : (string * string) list,
    87    known_failures : (failure * string) list,
    87    known_failures : (failure * string) list,
    88    conj_sym_kind : formula_kind,
    88    conj_sym_kind : formula_kind,
    89    prem_kind : formula_kind,
    89    prem_kind : formula_kind,
    90    best_slices :
    90    best_slices : Proof.context -> (real * (bool * (slice_spec * string))) list}
    91      Proof.context
       
    92      -> (real * (bool * ((int * atp_format * string * string) * string))) list}
       
    93 
    91 
    94 (* "best_slices" must be found empirically, taking a wholistic approach since
    92 (* "best_slices" must be found empirically, taking a wholistic approach since
    95    the ATPs are run in parallel. The "real" component gives the faction of the
    93    the ATPs are run in parallel. The "real" component gives the faction of the
    96    time available given to the slice and should add up to 1.0. The "bool"
    94    time available given to the slice and should add up to 1.0. The first "bool"
    97    component indicates whether the slice's strategy is complete; the "int", the
    95    component indicates whether the slice's strategy is complete; the "int", the
    98    preferred number of facts to pass; the first "string", the preferred type
    96    preferred number of facts to pass; the first "string", the preferred type
    99    system (which should be sound or quasi-sound); the second "string", the
    97    system (which should be sound or quasi-sound); the second "string", the
   100    preferred lambda translation scheme; the third "string", extra information to
    98    preferred lambda translation scheme; the second "bool", whether uncurried
       
    99    aliased should be generated; the third "string", extra information to
   101    the prover (e.g., SOS or no SOS).
   100    the prover (e.g., SOS or no SOS).
   102 
   101 
   103    The last slice should be the most "normal" one, because it will get all the
   102    The last slice should be the most "normal" one, because it will get all the
   104    time available if the other slices fail early and also because it is used if
   103    time available if the other slices fail early and also because it is used if
   105    slicing is disabled (e.g., by the minimizer). *)
   104    slicing is disabled (e.g., by the minimizer). *)
   246    prem_kind = Conjecture,
   245    prem_kind = Conjecture,
   247    best_slices = fn ctxt =>
   246    best_slices = fn ctxt =>
   248      let val method = effective_e_weight_method ctxt in
   247      let val method = effective_e_weight_method ctxt in
   249        (* FUDGE *)
   248        (* FUDGE *)
   250        if method = e_smartN then
   249        if method = e_smartN then
   251          [(0.333, (true, ((500, FOF, "mono_tags??", combsN), e_fun_weightN))),
   250          [(0.333, (true, ((500, FOF, "mono_tags??", combsN, false),
   252           (0.334, (true, ((50, FOF, "mono_guards??", combsN), e_fun_weightN))),
   251                           e_fun_weightN))),
   253           (0.333, (true, ((1000, FOF, "mono_tags??", combsN),
   252           (0.334, (true, ((50, FOF, "mono_guards??", combsN, false),
       
   253                           e_fun_weightN))),
       
   254           (0.333, (true, ((1000, FOF, "mono_tags??", combsN, false),
   254                           e_sym_offset_weightN)))]
   255                           e_sym_offset_weightN)))]
   255        else
   256        else
   256          [(1.0, (true, ((500, FOF, "mono_tags??", combsN), method)))]
   257          [(1.0, (true, ((500, FOF, "mono_tags??", combsN, false), method)))]
   257      end}
   258      end}
   258 
   259 
   259 val e = (eN, e_config)
   260 val e = (eN, e_config)
   260 
   261 
   261 
   262 
   276      [(TimedOut, "CPU time limit exceeded, terminating")],
   277      [(TimedOut, "CPU time limit exceeded, terminating")],
   277    conj_sym_kind = Axiom,
   278    conj_sym_kind = Axiom,
   278    prem_kind = Hypothesis,
   279    prem_kind = Hypothesis,
   279    best_slices = fn ctxt =>
   280    best_slices = fn ctxt =>
   280      (* FUDGE *)
   281      (* FUDGE *)
   281      [(0.667, (false, ((150, leo2_thf0, "mono_simple_higher", liftingN),
   282      [(0.667, (false, ((150, leo2_thf0, "mono_simple_higher", liftingN, false),
   282                        sosN))),
   283                        sosN))),
   283       (0.333, (true, ((50, leo2_thf0, "mono_simple_higher", liftingN),
   284       (0.333, (true, ((50, leo2_thf0, "mono_simple_higher", liftingN, false),
   284                       no_sosN)))]
   285                       no_sosN)))]
   285      |> (if Config.get ctxt force_sos then hd #> apfst (K 1.0) #> single
   286      |> (if Config.get ctxt force_sos then hd #> apfst (K 1.0) #> single
   286          else I)}
   287          else I)}
   287 
   288 
   288 val leo2 = (leo2N, leo2_config)
   289 val leo2 = (leo2N, leo2_config)
   303    known_failures = known_szs_status_failures,
   304    known_failures = known_szs_status_failures,
   304    conj_sym_kind = Axiom,
   305    conj_sym_kind = Axiom,
   305    prem_kind = Hypothesis,
   306    prem_kind = Hypothesis,
   306    best_slices =
   307    best_slices =
   307      (* FUDGE *)
   308      (* FUDGE *)
   308      K [(1.0, (true, ((100, satallax_thf0, "mono_simple_higher", keep_lamsN),
   309      K [(1.0, (true, ((100, satallax_thf0, "mono_simple_higher", keep_lamsN,
   309                       "")))]}
   310                        false), "")))]}
   310 
   311 
   311 val satallax = (satallaxN, satallax_config)
   312 val satallax = (satallaxN, satallax_config)
   312 
   313 
   313 
   314 
   314 (* SPASS *)
   315 (* SPASS *)
   336       (InternalError, "Please report this error")],
   337       (InternalError, "Please report this error")],
   337    conj_sym_kind = Hypothesis,
   338    conj_sym_kind = Hypothesis,
   338    prem_kind = Conjecture,
   339    prem_kind = Conjecture,
   339    best_slices = fn ctxt =>
   340    best_slices = fn ctxt =>
   340      (* FUDGE *)
   341      (* FUDGE *)
   341      [(0.333, (false, ((150, DFG DFG_Unsorted, "mono_tags??", liftingN),
   342      [(0.333, (false, ((150, DFG DFG_Unsorted, "mono_tags??", liftingN, false),
   342                        sosN))),
   343                        sosN))),
   343       (0.333, (false, ((300, DFG DFG_Unsorted, "poly_tags??", liftingN),
   344       (0.333, (false, ((300, DFG DFG_Unsorted, "poly_tags??", liftingN, false),
   344                        sosN))),
   345                        sosN))),
   345       (0.334, (false, ((50, DFG DFG_Unsorted, "mono_tags??", liftingN),
   346       (0.334, (false, ((50, DFG DFG_Unsorted, "mono_tags??", liftingN, false),
   346                        no_sosN)))]
   347                        no_sosN)))]
   347      |> (if Config.get ctxt force_sos then hd #> apfst (K 1.0) #> single
   348      |> (if Config.get ctxt force_sos then hd #> apfst (K 1.0) #> single
   348          else I)}
   349          else I)}
   349 
   350 
   350 val spass = (spassN, spass_config)
   351 val spass = (spassN, spass_config)
   351 
   352 
   352 val spass_new_macro_slice_1 = (300, DFG DFG_Sorted, "mono_simple", combsN)
   353 val spass_new_slice_1 = (300, DFG DFG_Sorted, "mono_simple", combsN, true)
   353 val spass_new_macro_slice_2 = (50, DFG DFG_Sorted, "mono_simple", combsN)
   354 val spass_new_slice_2 = (50, DFG DFG_Sorted, "mono_simple", combsN, true)
   354 val spass_new_macro_slice_3 = (150, DFG DFG_Sorted, "mono_simple", liftingN)
   355 val spass_new_slice_3 = (150, DFG DFG_Sorted, "mono_simple", liftingN, true)
   355 
   356 
   356 (* Experimental *)
   357 (* Experimental *)
   357 val spass_new_config : atp_config =
   358 val spass_new_config : atp_config =
   358   {exec = ("ISABELLE_ATP", "scripts/spass_new"),
   359   {exec = ("ISABELLE_ATP", "scripts/spass_new"),
   359    required_execs =
   360    required_execs =
   366    known_failures = #known_failures spass_config,
   367    known_failures = #known_failures spass_config,
   367    conj_sym_kind = #conj_sym_kind spass_config,
   368    conj_sym_kind = #conj_sym_kind spass_config,
   368    prem_kind = #prem_kind spass_config,
   369    prem_kind = #prem_kind spass_config,
   369    best_slices = fn _ =>
   370    best_slices = fn _ =>
   370      (* FUDGE *)
   371      (* FUDGE *)
   371      [(0.300, (true, (spass_new_macro_slice_1, ""))),
   372      [(0.300, (true, (spass_new_slice_1, ""))),
   372       (0.333, (true, (spass_new_macro_slice_2, ""))),
   373       (0.333, (true, (spass_new_slice_2, ""))),
   373       (0.333, (true, (spass_new_macro_slice_3, "")))]}
   374       (0.333, (true, (spass_new_slice_3, "")))]}
   374 
   375 
   375 val spass_new = (spass_newN, spass_new_config)
   376 val spass_new = (spass_newN, spass_new_config)
   376 
   377 
   377 
   378 
   378 (* Vampire *)
   379 (* Vampire *)
   408    conj_sym_kind = Conjecture,
   409    conj_sym_kind = Conjecture,
   409    prem_kind = Conjecture,
   410    prem_kind = Conjecture,
   410    best_slices = fn ctxt =>
   411    best_slices = fn ctxt =>
   411      (* FUDGE *)
   412      (* FUDGE *)
   412      (if is_old_vampire_version () then
   413      (if is_old_vampire_version () then
   413         [(0.333, (false, ((150, FOF, "poly_guards??", combs_or_liftingN),
   414         [(0.333, (false, ((150, FOF, "poly_guards??", combs_or_liftingN, false),
   414                            sosN))),
   415                           sosN))),
   415          (0.333, (false, ((500, FOF, "mono_tags??", combs_or_liftingN), sosN))),
   416          (0.333, (false, ((500, FOF, "mono_tags??", combs_or_liftingN, false),
   416          (0.334, (true, ((50, FOF, "mono_guards??", combs_or_liftingN),
   417                           sosN))),
       
   418          (0.334, (true, ((50, FOF, "mono_guards??", combs_or_liftingN, false),
   417                          no_sosN)))]
   419                          no_sosN)))]
   418       else
   420       else
   419         [(0.333, (false, ((150, vampire_tff0, "poly_guards??",
   421         [(0.333, (false, ((150, vampire_tff0, "poly_guards??",
   420                            combs_or_liftingN), sosN))),
   422                            combs_or_liftingN, false), sosN))),
   421          (0.333, (false, ((500, vampire_tff0, "mono_simple", combs_or_liftingN),
   423          (0.333, (false, ((500, vampire_tff0, "mono_simple", combs_or_liftingN,
   422                           sosN))),
   424                            false), sosN))),
   423          (0.334, (true, ((50, vampire_tff0, "mono_simple", combs_or_liftingN),
   425          (0.334, (true, ((50, vampire_tff0, "mono_simple", combs_or_liftingN,
   424                          no_sosN)))])
   426                           false), no_sosN)))])
   425      |> (if Config.get ctxt force_sos then hd #> apfst (K 1.0) #> single
   427      |> (if Config.get ctxt force_sos then hd #> apfst (K 1.0) #> single
   426          else I)}
   428          else I)}
   427 
   429 
   428 val vampire = (vampireN, vampire_config)
   430 val vampire = (vampireN, vampire_config)
   429 
   431 
   441    known_failures = known_szs_status_failures,
   443    known_failures = known_szs_status_failures,
   442    conj_sym_kind = Hypothesis,
   444    conj_sym_kind = Hypothesis,
   443    prem_kind = Hypothesis,
   445    prem_kind = Hypothesis,
   444    best_slices =
   446    best_slices =
   445      (* FUDGE *)
   447      (* FUDGE *)
   446      K [(0.5, (false, ((250, z3_tff0, "mono_simple", combsN), ""))),
   448      K [(0.5, (false, ((250, z3_tff0, "mono_simple", combsN, false), ""))),
   447         (0.25, (false, ((125, z3_tff0, "mono_simple", combsN), ""))),
   449         (0.25, (false, ((125, z3_tff0, "mono_simple", combsN, false), ""))),
   448         (0.125, (false, ((62, z3_tff0, "mono_simple", combsN), ""))),
   450         (0.125, (false, ((62, z3_tff0, "mono_simple", combsN, false), ""))),
   449         (0.125, (false, ((31, z3_tff0, "mono_simple", combsN), "")))]}
   451         (0.125, (false, ((31, z3_tff0, "mono_simple", combsN, false), "")))]}
   450 
   452 
   451 val z3_tptp = (z3_tptpN, z3_tptp_config)
   453 val z3_tptp = (z3_tptpN, z3_tptp_config)
   452 
   454 
   453 
   455 
   454 (* Not really a prover: Experimental Polymorphic TFF and THF output *)
   456 (* Not really a prover: Experimental Polymorphic TFF and THF output *)
   462    conj_sym_kind = Hypothesis,
   464    conj_sym_kind = Hypothesis,
   463    prem_kind = Hypothesis,
   465    prem_kind = Hypothesis,
   464    best_slices =
   466    best_slices =
   465      K [(1.0, (false, ((200, format, type_enc,
   467      K [(1.0, (false, ((200, format, type_enc,
   466                         if is_format_higher_order format then keep_lamsN
   468                         if is_format_higher_order format then keep_lamsN
   467                         else combsN), "")))]}
   469                         else combsN, false), "")))]}
   468 
   470 
   469 val dummy_tff1_format = TFF (TPTP_Polymorphic, TPTP_Explicit)
   471 val dummy_tff1_format = TFF (TPTP_Polymorphic, TPTP_Explicit)
   470 val dummy_tff1_config = dummy_config dummy_tff1_format "poly_simple"
   472 val dummy_tff1_config = dummy_config dummy_tff1_format "poly_simple"
   471 val dummy_tff1 = (dummy_tff1N, dummy_tff1_config)
   473 val dummy_tff1 = (dummy_tff1N, dummy_tff1_config)
   472 
   474 
   513 fun remote_config system_name system_versions proof_delims known_failures
   515 fun remote_config system_name system_versions proof_delims known_failures
   514                   conj_sym_kind prem_kind best_slice : atp_config =
   516                   conj_sym_kind prem_kind best_slice : atp_config =
   515   {exec = ("ISABELLE_ATP", "scripts/remote_atp"),
   517   {exec = ("ISABELLE_ATP", "scripts/remote_atp"),
   516    required_execs = [],
   518    required_execs = [],
   517    arguments = fn _ => fn _ => fn _ => fn timeout => fn _ =>
   519    arguments = fn _ => fn _ => fn _ => fn timeout => fn _ =>
   518      "-t " ^ string_of_int (Int.min (max_remote_secs, to_secs 1 timeout))
   520      "-t " ^ string_of_int (Int.min (max_remote_secs, to_secs 1 timeout)) ^
   519      ^ " -s " ^ the_system system_name system_versions,
   521      " -s " ^ the_system system_name system_versions,
   520    proof_delims = union (op =) tstp_proof_delims proof_delims,
   522    proof_delims = union (op =) tstp_proof_delims proof_delims,
   521    known_failures = known_failures @ known_perl_failures @ known_says_failures,
   523    known_failures = known_failures @ known_perl_failures @ known_says_failures,
   522    conj_sym_kind = conj_sym_kind,
   524    conj_sym_kind = conj_sym_kind,
   523    prem_kind = prem_kind,
   525    prem_kind = prem_kind,
   524    best_slices = fn ctxt =>
   526    best_slices = fn ctxt => [(1.0, (false, (best_slice ctxt, "")))]}
   525      let val (max_relevant, format, type_enc, lam_trans) = best_slice ctxt in
       
   526        [(1.0, (false, ((max_relevant, format, type_enc, lam_trans), "")))]
       
   527      end}
       
   528 
   527 
   529 fun remotify_config system_name system_versions best_slice
   528 fun remotify_config system_name system_versions best_slice
   530         ({proof_delims, known_failures, conj_sym_kind, prem_kind, ...}
   529         ({proof_delims, known_failures, conj_sym_kind, prem_kind, ...}
   531          : atp_config) : atp_config =
   530          : atp_config) : atp_config =
   532   remote_config system_name system_versions proof_delims known_failures
   531   remote_config system_name system_versions proof_delims known_failures
   543 
   542 
   544 val explicit_tff0 = TFF (TPTP_Monomorphic, TPTP_Explicit)
   543 val explicit_tff0 = TFF (TPTP_Monomorphic, TPTP_Explicit)
   545 
   544 
   546 val remote_e =
   545 val remote_e =
   547   remotify_atp e "EP" ["1.0", "1.1", "1.2"]
   546   remotify_atp e "EP" ["1.0", "1.1", "1.2"]
   548       (K (750, FOF, "mono_tags??", combsN) (* FUDGE *))
   547       (K (750, FOF, "mono_tags??", combsN, false) (* FUDGE *))
   549 val remote_leo2 =
   548 val remote_leo2 =
   550   remotify_atp leo2 "LEO-II" ["1.2.8", "1.2.6"]
   549   remotify_atp leo2 "LEO-II" ["1.2.8", "1.2.6"]
   551       (K (100, leo2_thf0, "mono_simple_higher", liftingN) (* FUDGE *))
   550       (K (100, leo2_thf0, "mono_simple_higher", liftingN, false) (* FUDGE *))
   552 val remote_satallax =
   551 val remote_satallax =
   553   remotify_atp satallax "Satallax" ["2.1", "2.0", "2"]
   552   remotify_atp satallax "Satallax" ["2.1", "2.0", "2"]
   554       (K (100, satallax_thf0, "mono_simple_higher", keep_lamsN) (* FUDGE *))
   553       (K (100, satallax_thf0, "mono_simple_higher", keep_lamsN, false)
       
   554          (* FUDGE *))
   555 val remote_vampire =
   555 val remote_vampire =
   556   remotify_atp vampire "Vampire" ["1.8"]
   556   remotify_atp vampire "Vampire" ["1.8"]
   557       (K (250, FOF, "mono_guards??", combs_or_liftingN) (* FUDGE *))
   557       (K (250, FOF, "mono_guards??", combs_or_liftingN, false) (* FUDGE *))
   558 val remote_z3_tptp =
   558 val remote_z3_tptp =
   559   remotify_atp z3_tptp "Z3" ["3.0"]
   559   remotify_atp z3_tptp "Z3" ["3.0"]
   560       (K (250, z3_tff0, "mono_simple", combsN) (* FUDGE *))
   560       (K (250, z3_tff0, "mono_simple", combsN, false) (* FUDGE *))
   561 val remote_e_sine =
   561 val remote_e_sine =
   562   remote_atp e_sineN "SInE" ["0.4"] [] (#known_failures e_config) Axiom
   562   remote_atp e_sineN "SInE" ["0.4"] [] (#known_failures e_config) Axiom
   563       Conjecture (K (500, FOF, "mono_guards??", combsN) (* FUDGE *))
   563       Conjecture (K (500, FOF, "mono_guards??", combsN, false) (* FUDGE *))
   564 val remote_iprover =
   564 val remote_iprover =
   565   remote_atp iproverN "iProver" [] [] [] Axiom Conjecture
   565   remote_atp iproverN "iProver" [] [] [] Axiom Conjecture
   566       (K (150, FOF, "mono_guards??", liftingN) (* FUDGE *))
   566       (K (150, FOF, "mono_guards??", liftingN, false) (* FUDGE *))
   567 val remote_iprover_eq =
   567 val remote_iprover_eq =
   568   remote_atp iprover_eqN "iProver-Eq" [] [] [] Axiom Conjecture
   568   remote_atp iprover_eqN "iProver-Eq" [] [] [] Axiom Conjecture
   569       (K (150, FOF, "mono_guards??", liftingN) (* FUDGE *))
   569       (K (150, FOF, "mono_guards??", liftingN, false) (* FUDGE *))
   570 val remote_snark =
   570 val remote_snark =
   571   remote_atp snarkN "SNARK" ["20080805r029", "20080805r024"]
   571   remote_atp snarkN "SNARK" ["20080805r029", "20080805r024"]
   572       [("refutation.", "end_refutation.")] [] Hypothesis Hypothesis
   572       [("refutation.", "end_refutation.")] [] Hypothesis Hypothesis
   573       (K (100, explicit_tff0, "mono_simple", liftingN) (* FUDGE *))
   573       (K (100, explicit_tff0, "mono_simple", liftingN, false) (* FUDGE *))
   574 val remote_e_tofof =
   574 val remote_e_tofof =
   575   remote_atp e_tofofN "ToFoF" ["0.1"] [] (#known_failures e_config) Axiom
   575   remote_atp e_tofofN "ToFoF" ["0.1"] [] (#known_failures e_config) Axiom
   576       Hypothesis
   576       Hypothesis
   577       (K (150, explicit_tff0, "mono_simple", liftingN) (* FUDGE *))
   577       (K (150, explicit_tff0, "mono_simple", liftingN, false) (* FUDGE *))
   578 val remote_waldmeister =
   578 val remote_waldmeister =
   579   remote_atp waldmeisterN "Waldmeister" ["710"]
   579   remote_atp waldmeisterN "Waldmeister" ["710"]
   580       [("#START OF PROOF", "Proved Goals:")]
   580       [("#START OF PROOF", "Proved Goals:")]
   581       [(OutOfResources, "Too many function symbols"),
   581       [(OutOfResources, "Too many function symbols"),
   582        (Crashed, "Unrecoverable Segmentation Fault")]
   582        (Crashed, "Unrecoverable Segmentation Fault")]
   583       Hypothesis Hypothesis
   583       Hypothesis Hypothesis
   584       (K (50, CNF_UEQ, "mono_tags??", combsN) (* FUDGE *))
   584       (K (50, CNF_UEQ, "mono_tags??", combsN, false) (* FUDGE *))
   585 
   585 
   586 (* Setup *)
   586 (* Setup *)
   587 
   587 
   588 fun add_atp (name, config) thy =
   588 fun add_atp (name, config) thy =
   589   Data.map (Symtab.update_new (name, (config, stamp ()))) thy
   589   Data.map (Symtab.update_new (name, (config, stamp ()))) thy