run SPASS and Vampire in SOS mode only if >= 50 facts are passed -- otherwise we are probably minimizing and then it's better if the prover is run only once with a full strategy
authorblanchet
Mon, 20 Dec 2010 14:55:24 +0100
changeset 41318 adcb92c0513b
parent 41317 fc48faccd77b
child 41319 33e107788595
run SPASS and Vampire in SOS mode only if >= 50 facts are passed -- otherwise we are probably minimizing and then it's better if the prover is run only once with a full strategy
src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML
--- a/src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML	Mon Dec 20 14:17:49 2010 +0100
+++ b/src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML	Mon Dec 20 14:55:24 2010 +0100
@@ -53,6 +53,7 @@
   type prover = params -> minimize_command -> prover_problem -> prover_result
 
   (* for experimentation purposes -- do not use in production code *)
+  val atp_run_twice_threshold : int Unsynchronized.ref
   val atp_first_iter_time_frac : real Unsynchronized.ref
   val smt_weights : bool Unsynchronized.ref
   val smt_weight_min_facts : int Unsynchronized.ref
@@ -328,6 +329,7 @@
 fun int_opt_add (SOME m) (SOME n) = SOME (m + n)
   | int_opt_add _ _ = NONE
 
+val atp_run_twice_threshold = Unsynchronized.ref 50
 val atp_first_iter_time_frac = Unsynchronized.ref 0.67
 
 (* Important messages are important but not so important that users want to see
@@ -411,10 +413,12 @@
                   extract_tstplike_proof_and_outcome verbose complete res_code
                       proof_delims known_failures output
               in (output, msecs, tstplike_proof, outcome) end
-            val run_twice = has_incomplete_mode andalso not auto
+            val run_twice =
+              has_incomplete_mode andalso not auto andalso
+              length facts >= !atp_run_twice_threshold
             val timer = Timer.startRealTimer ()
             val result =
-              run false
+              run (not run_twice)
                  (if run_twice then
                     seconds (0.001 * !atp_first_iter_time_frac
                              * Real.fromInt (Time.toMilliseconds timeout))