src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML
changeset 50669 84c7cf36b2e0
parent 50667 e0cba8893691
child 50759 495ae21b0958
--- a/src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML	Wed Jan 02 10:41:53 2013 +0100
+++ b/src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML	Wed Jan 02 10:54:36 2013 +0100
@@ -77,7 +77,7 @@
     {outcome : failure option,
      used_facts : (string * stature) list,
      run_time : Time.time,
-     preplay : unit -> play,
+     preplay : play Lazy.lazy,
      message : play -> string,
      message_tail : string}
 
@@ -370,7 +370,7 @@
   {outcome : failure option,
    used_facts : (string * stature) list,
    run_time : Time.time,
-   preplay : unit -> play,
+   preplay : play Lazy.lazy,
    message : play -> string,
    message_tail : string}
 
@@ -884,15 +884,15 @@
                                     else metis_default_lam_trans))
         in
           (used_facts,
-           fn () =>
-              let
-                val used_pairs =
-                  facts |> map untranslated_fact
-                        |> filter_used_facts false used_facts
-              in
-                play_one_line_proof mode debug verbose preplay_timeout
-                    used_pairs state subgoal (hd reconstrs) reconstrs
-              end,
+           Lazy.lazy (fn () =>
+             let
+               val used_pairs =
+                 facts |> map untranslated_fact
+                       |> filter_used_facts false used_facts
+             in
+               play_one_line_proof mode debug verbose preplay_timeout
+                   used_pairs state subgoal (hd reconstrs) reconstrs
+             end),
            fn preplay =>
               let
                 val _ =
@@ -923,7 +923,7 @@
               ""))
         end
       | SOME failure =>
-        ([], K (Failed_to_Play plain_metis),
+        ([], Lazy.value (Failed_to_Play plain_metis),
          fn _ => string_for_failure failure, "")
   in
     {outcome = outcome, used_facts = used_facts, run_time = run_time,
@@ -1086,13 +1086,11 @@
     val (preplay, message, message_tail) =
       case outcome of
         NONE =>
-        (fn () =>
-            play_one_line_proof mode debug verbose preplay_timeout used_pairs
-                state subgoal SMT
-                (bunch_of_reconstructors false
-                     (fn desperate =>
-                         if desperate then liftingN
-                         else metis_default_lam_trans)),
+        (Lazy.lazy (fn () =>
+           play_one_line_proof mode debug verbose preplay_timeout used_pairs
+               state subgoal SMT
+               (bunch_of_reconstructors false (fn desperate =>
+                  if desperate then liftingN else metis_default_lam_trans))),
          fn preplay =>
             let
               val one_line_params =
@@ -1106,7 +1104,8 @@
          else
            "")
       | SOME failure =>
-        (K (Failed_to_Play plain_metis), fn _ => string_for_failure failure, "")
+        (Lazy.value (Failed_to_Play plain_metis),
+         fn _ => string_for_failure failure, "")
   in
     {outcome = outcome, used_facts = used_facts, run_time = run_time,
      preplay = preplay, message = message, message_tail = message_tail}
@@ -1133,7 +1132,7 @@
                              [reconstr] of
       play as Played (_, time) =>
       {outcome = NONE, used_facts = used_facts, run_time = time,
-       preplay = K play,
+       preplay = Lazy.value play,
        message =
          fn play =>
             let
@@ -1150,8 +1149,8 @@
         val failure = case play of Failed_to_Play _ => GaveUp | _ => TimedOut
       in
         {outcome = SOME failure, used_facts = [], run_time = Time.zeroTime,
-         preplay = K play, message = fn _ => string_for_failure failure,
-         message_tail = ""}
+         preplay = Lazy.value play,
+         message = fn _ => string_for_failure failure, message_tail = ""}
       end
   end