src/HOL/Tools/Sledgehammer/sledgehammer_try0.ML
author blanchet
Tue, 10 Dec 2013 15:24:17 +0800
changeset 54712 cbebe2cf77f1
parent 54700 64177ce0a7bd
child 54764 1c9ef5c834e8
permissions -rw-r--r--
more work on Z3 Isar proofs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
     1
(*  Title:      HOL/Tools/Sledgehammer/sledgehammer_try0.ML
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
     2
    Author:     Jasmin Blanchette, TU Muenchen
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
     3
    Author:     Steffen Juilf Smolka, TU Muenchen
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
     4
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
     5
Try replacing calls to metis with calls to other proof methods in order to
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
     6
speed up proofs, eliminate dependencies, and repair broken proof steps.
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
     7
*)
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
     8
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
     9
signature SLEDGEHAMMER_TRY0 =
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    10
sig
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    11
  type isar_proof = Sledgehammer_Proof.isar_proof
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    12
  type preplay_interface = Sledgehammer_Preplay.preplay_interface
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    13
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    14
  val try0 : Time.time -> preplay_interface -> isar_proof -> isar_proof
54504
blanchet
parents: 52629
diff changeset
    15
end;
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    16
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    17
structure Sledgehammer_Try0 : SLEDGEHAMMER_TRY0 =
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    18
struct
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    19
54712
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    20
open Sledgehammer_Util
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    21
open Sledgehammer_Proof
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    22
open Sledgehammer_Preplay
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    23
54712
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    24
val variant_methods = [SimpM, AutoM, ArithM, FastforceM, BlastM, ForceM, MetisM]
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    25
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    26
fun variants_of_step (Let _) = raise Fail "Sledgehammer_Try0: variants_of_step"
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    27
  | variants_of_step (Prove (qs, xs, l, t, subproofs, (facts, meth))) =
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    28
    variant_methods
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    29
    |> remove (op =) meth
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    30
    |> map (fn meth' => Prove (qs, xs, l, t, subproofs, (facts, meth')))
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    31
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    32
val slack = seconds 0.05
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    33
52612
smolkas
parents: 52611
diff changeset
    34
fun try0_step _ _ (step as Let _) = step
54712
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    35
  | try0_step preplay_timeout
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    36
      ({preplay_quietly, get_preplay_time, set_preplay_time, ...} : preplay_interface)
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    37
      (step as Prove (_, _, l, _, _, _)) =
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    38
    let
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    39
      val timeout =
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    40
        (case get_preplay_time l of
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    41
          (true, _) => preplay_timeout
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    42
        | (false, t) => Time.+ (t, slack))
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    43
54712
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    44
      fun try_variant variant =
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    45
        (case preplay_quietly timeout variant of
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    46
          (true, _) => NONE
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    47
        | time as (false, _) => SOME (variant, time))
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    48
    in
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    49
      (case Par_List.get_some try_variant (variants_of_step step) of
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    50
        SOME (step, time) => (set_preplay_time l time; step)
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    51
      | NONE => step)
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    52
    end
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    53
54712
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    54
val try0 = map_isar_steps oo try0_step
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    55
54504
blanchet
parents: 52629
diff changeset
    56
end;