src/HOL/Tools/Sledgehammer/sledgehammer_shrink.ML
changeset 50785 34e8e0e86639
parent 50780 4174abe2c5fd
child 50786 af8ecf09a58c
equal deleted inserted replaced
50784:cbc7002cc273 50785:34e8e0e86639
    67       open Unsynchronized
    67       open Unsynchronized
    68       val metis_fail = ref false
    68       val metis_fail = ref false
    69     in
    69     in
    70       fun handle_metis_fail try_metis () =
    70       fun handle_metis_fail try_metis () =
    71         try_metis () handle exp =>
    71         try_metis () handle exp =>
    72           (if debug then raise exp else metis_fail := true; SOME Time.zeroTime)
    72           (if Exn.is_interrupt exp orelse debug then reraise exp 
       
    73            else metis_fail := true; SOME Time.zeroTime)
    73       fun get_time lazy_time =
    74       fun get_time lazy_time =
    74         if !metis_fail then SOME Time.zeroTime else Lazy.force lazy_time
    75         if !metis_fail then SOME Time.zeroTime else Lazy.force lazy_time
    75       val metis_fail = fn () => !metis_fail
    76       val metis_fail = fn () => !metis_fail
    76     end
    77     end
    77 
    78 
   206             val (step_constructor, lfs2, gfs2) =
   207             val (step_constructor, lfs2, gfs2) =
   207               (case step2 of
   208               (case step2 of
   208                 (Prove (qs2, label2, t, By_Metis (lfs2, gfs2))) =>
   209                 (Prove (qs2, label2, t, By_Metis (lfs2, gfs2))) =>
   209                   (fn by => Prove (qs2, label2, t, by), lfs2, gfs2)
   210                   (fn by => Prove (qs2, label2, t, by), lfs2, gfs2)
   210               | (Obtain(qs2, xs, label2, t, By_Metis (lfs2, gfs2))) =>
   211               | (Obtain(qs2, xs, label2, t, By_Metis (lfs2, gfs2))) =>
   211                   (fn by => Obtain (qs2, xs, label2, t, by), lfs2, gfs2) )
   212                   (fn by => Obtain (qs2, xs, label2, t, by), lfs2, gfs2)
       
   213               | _ => error "Internal error: unmergeable Isar steps" )
   212             val lfs = remove (op =) label1 lfs2 |> union (op =) lfs1
   214             val lfs = remove (op =) label1 lfs2 |> union (op =) lfs1
   213             val gfs = union (op =) gfs1 gfs2
   215             val gfs = union (op =) gfs1 gfs2
   214           in step_constructor (By_Metis (lfs, gfs)) end
   216           in step_constructor (By_Metis (lfs, gfs)) end
   215         | merge _ _ = error "Internal error: Unmergeable Isar steps"
   217         | merge _ _ = error "Internal error: unmergeable Isar steps"
   216 
   218 
   217       fun try_merge metis_time (s1, i) (s2, j) =
   219       fun try_merge metis_time (s1, i) (s2, j) =
   218         (case get i metis_time |> Lazy.force of
   220         (case get i metis_time |> Lazy.force of
   219           NONE => (NONE, metis_time)
   221           NONE => (NONE, metis_time)
   220         | SOME t1 =>
   222         | SOME t1 =>