src/HOL/Tools/Sledgehammer/sledgehammer_try0.ML
author wenzelm
Thu, 29 Aug 2013 15:53:56 +0200
changeset 53281 251e1a2aa792
parent 52629 d6f2a7c196f7
child 54504 096f7d452164
permissions -rw-r--r--
clarified SideKick parser name, which serves as quasi "mode" here;
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
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    15
end
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
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    20
open Sledgehammer_Proof
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    21
open Sledgehammer_Preplay
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    22
52612
smolkas
parents: 52611
diff changeset
    23
fun variants (Let _) = raise Fail "Sledgehammer_Try0: variants"
smolkas
parents: 52611
diff changeset
    24
  | variants (Prove (qs, xs, l, t, subproofs, By (facts, _))) =
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    25
      let
52629
d6f2a7c196f7 added blast, force
smolkas
parents: 52626
diff changeset
    26
        val methods = [SimpM, FastforceM, AutoM, ArithM, ForceM, BlastM]
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    27
        fun step method = Prove (qs, xs, l, t, subproofs, By (facts, method))
52612
smolkas
parents: 52611
diff changeset
    28
        (*fun step_without_facts method =
smolkas
parents: 52611
diff changeset
    29
          Prove (qs, xs, l, t, subproofs, By (no_facts, method))*)
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    30
      in
52611
831f7479c74f minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents: 52592
diff changeset
    31
        (* FIXME *)
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    32
        (* There seems to be a bias for methods earlier in the list, so we put
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    33
           the variants using no facts first. *)
52611
831f7479c74f minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents: 52592
diff changeset
    34
        (*map step_without_facts methods @*) map step methods
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    35
      end
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    36
52612
smolkas
parents: 52611
diff changeset
    37
fun try0_step _ _ (step as Let _) = step
52626
79a4e7f8d758 cleaner preplay interface
smolkas
parents: 52612
diff changeset
    38
  | try0_step preplay_timeout ({preplay_quietly, get_preplay_time,
79a4e7f8d758 cleaner preplay interface
smolkas
parents: 52612
diff changeset
    39
    set_preplay_time, ...} : preplay_interface)
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    40
    (step as Prove (_, _, l, _, _, _)) =
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    41
      let
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    42
52626
79a4e7f8d758 cleaner preplay interface
smolkas
parents: 52612
diff changeset
    43
        val timeout =
79a4e7f8d758 cleaner preplay interface
smolkas
parents: 52612
diff changeset
    44
          case get_preplay_time l of
79a4e7f8d758 cleaner preplay interface
smolkas
parents: 52612
diff changeset
    45
            (true, _) => preplay_timeout
79a4e7f8d758 cleaner preplay interface
smolkas
parents: 52612
diff changeset
    46
          | (false, t) => t
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    47
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    48
        fun try_variant variant =
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    49
           case preplay_quietly timeout variant of
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    50
             (true, _) => NONE
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    51
           | time as (false, _) => SOME (variant, time)
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    52
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    53
      in
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    54
        case Par_List.get_some try_variant (variants step) of
52626
79a4e7f8d758 cleaner preplay interface
smolkas
parents: 52612
diff changeset
    55
          SOME (step, time) => (set_preplay_time l time; step)
79a4e7f8d758 cleaner preplay interface
smolkas
parents: 52612
diff changeset
    56
        | NONE => step
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    57
      end
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    58
52626
79a4e7f8d758 cleaner preplay interface
smolkas
parents: 52612
diff changeset
    59
fun try0 preplay_timeout preplay_interface proof =
79a4e7f8d758 cleaner preplay interface
smolkas
parents: 52612
diff changeset
    60
     map_isar_steps (try0_step preplay_timeout preplay_interface) proof
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    61
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    62
end