src/HOL/Tools/Sledgehammer/sledgehammer_isar_try0.ML
author blanchet
Sun, 02 Feb 2014 20:53:51 +0100
changeset 55244 12e1a5d8ee48
parent 55243 66709d41601e
child 55252 0dc4993b4f56
permissions -rw-r--r--
simplified data structure -- eliminated distinction between 'first-class' and 'second-class' proof methods
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
55202
824c48a539c9 renamed many Sledgehammer ML files to clarify structure
blanchet
parents: 54828
diff changeset
     1
(*  Title:      HOL/Tools/Sledgehammer/sledgehammer_isar_try0.ML
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
     2
    Author:     Steffen Juilf Smolka, TU Muenchen
54766
6ac273f176cd store alternative proof methods in Isar data structure
blanchet
parents: 54765
diff changeset
     3
    Author:     Jasmin Blanchette, TU Muenchen
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
     4
55202
824c48a539c9 renamed many Sledgehammer ML files to clarify structure
blanchet
parents: 54828
diff changeset
     5
Try replacing calls to "metis" with calls to other proof methods to speed up proofs, eliminate
54766
6ac273f176cd store alternative proof methods in Isar data structure
blanchet
parents: 54765
diff changeset
     6
dependencies, and repair broken proof steps.
52592
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
55202
824c48a539c9 renamed many Sledgehammer ML files to clarify structure
blanchet
parents: 54828
diff changeset
     9
signature SLEDGEHAMMER_ISAR_TRY0 =
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    10
sig
55202
824c48a539c9 renamed many Sledgehammer ML files to clarify structure
blanchet
parents: 54828
diff changeset
    11
  type isar_proof = Sledgehammer_Isar_Proof.isar_proof
55213
dcb36a2540bc tuned ML function names
blanchet
parents: 55212
diff changeset
    12
  type isar_preplay_data = Sledgehammer_Isar_Preplay.isar_preplay_data
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    13
55213
dcb36a2540bc tuned ML function names
blanchet
parents: 55212
diff changeset
    14
  val try0_isar_proof : Time.time -> isar_preplay_data -> 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
55202
824c48a539c9 renamed many Sledgehammer ML files to clarify structure
blanchet
parents: 54828
diff changeset
    17
structure Sledgehammer_Isar_Try0 : SLEDGEHAMMER_ISAR_TRY0 =
52592
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
54828
b2271ad695db don't do 'isar_try0' if preplaying is off
blanchet
parents: 54827
diff changeset
    21
open Sledgehammer_Reconstructor
55202
824c48a539c9 renamed many Sledgehammer ML files to clarify structure
blanchet
parents: 54828
diff changeset
    22
open Sledgehammer_Isar_Proof
824c48a539c9 renamed many Sledgehammer ML files to clarify structure
blanchet
parents: 54828
diff changeset
    23
open Sledgehammer_Isar_Preplay
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    24
55244
12e1a5d8ee48 simplified data structure -- eliminated distinction between 'first-class' and 'second-class' proof methods
blanchet
parents: 55243
diff changeset
    25
fun variants_of_step (Prove (qs, xs, l, t, subproofs, (facts, meths))) =
12e1a5d8ee48 simplified data structure -- eliminated distinction between 'first-class' and 'second-class' proof methods
blanchet
parents: 55243
diff changeset
    26
    map (fn meth => Prove (qs, xs, l, t, subproofs, (facts, [meth]))) (tl meths)
55202
824c48a539c9 renamed many Sledgehammer ML files to clarify structure
blanchet
parents: 54828
diff changeset
    27
  | variants_of_step _ = raise Fail "Sledgehammer_Isar_Try0: variants_of_step"
54712
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    28
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    29
val slack = seconds 0.05
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    30
52612
smolkas
parents: 52611
diff changeset
    31
fun try0_step _ _ (step as Let _) = step
54712
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    32
  | try0_step preplay_timeout
55221
blanchet
parents: 55213
diff changeset
    33
      ({preplay_outcome, set_preplay_outcome, preplay_quietly, ...} : isar_preplay_data)
55244
12e1a5d8ee48 simplified data structure -- eliminated distinction between 'first-class' and 'second-class' proof methods
blanchet
parents: 55243
diff changeset
    34
      (step as Prove (_, _, l, _, _, (_, meth :: _))) =
54712
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    35
    let
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    36
      val timeout =
55223
3c593bad6b31 generalized preplaying infrastructure to store various results for various methods
blanchet
parents: 55221
diff changeset
    37
        (case Lazy.force (preplay_outcome l meth) of
54828
b2271ad695db don't do 'isar_try0' if preplaying is off
blanchet
parents: 54827
diff changeset
    38
          Played time => Time.+ (time, slack)
54826
79745ba60a5a data structure rationalization
blanchet
parents: 54767
diff changeset
    39
        | _ => preplay_timeout)
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    40
54712
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    41
      fun try_variant variant =
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    42
        (case preplay_quietly timeout variant of
54828
b2271ad695db don't do 'isar_try0' if preplaying is off
blanchet
parents: 54827
diff changeset
    43
          result as Played _ => SOME (variant, result)
54827
14e2c7616209 more data structure refactoring
blanchet
parents: 54826
diff changeset
    44
        | _ => NONE)
54712
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    45
    in
55243
66709d41601e reset timing information after changes
blanchet
parents: 55223
diff changeset
    46
      (* FIXME: create variant after success *)
54712
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    47
      (case Par_List.get_some try_variant (variants_of_step step) of
55244
12e1a5d8ee48 simplified data structure -- eliminated distinction between 'first-class' and 'second-class' proof methods
blanchet
parents: 55243
diff changeset
    48
        SOME (step' as Prove (_, _, _, _, _, (_, meth' :: _)), result) =>
55223
3c593bad6b31 generalized preplaying infrastructure to store various results for various methods
blanchet
parents: 55221
diff changeset
    49
        (set_preplay_outcome l meth' result; step')
54712
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    50
      | NONE => step)
cbebe2cf77f1 more work on Z3 Isar proofs
blanchet
parents: 54700
diff changeset
    51
    end
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    52
55212
blanchet
parents: 55202
diff changeset
    53
val try0_isar_proof = map_isar_steps oo try0_step
52592
8a25b17e3d79 optimize isar-proofs by trying different proof methods
smolkas
parents:
diff changeset
    54
54504
blanchet
parents: 52629
diff changeset
    55
end;