src/HOL/Tools/Sledgehammer/sledgehammer_proof.ML
author blanchet
Fri, 04 Jan 2013 21:56:19 +0100
changeset 50733 7ce87037fbeb
parent 50672 ab5b8b5c9cbe
child 51128 0021ea861129
permissions -rw-r--r--
tuning
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50264
a9ec48b98734 renamed sledgehammer_isar_reconstruct to sledgehammer_proof
smolkas
parents: 50263
diff changeset
     1
(*  Title:      HOL/Tools/Sledgehammer/sledgehammer_proof.ML
50263
0b430064296a added comments to new source files
smolkas
parents: 50260
diff changeset
     2
    Author:     Jasmin Blanchette, TU Muenchen
0b430064296a added comments to new source files
smolkas
parents: 50260
diff changeset
     3
    Author:     Steffen Juilf Smolka, TU Muenchen
0b430064296a added comments to new source files
smolkas
parents: 50260
diff changeset
     4
0b430064296a added comments to new source files
smolkas
parents: 50260
diff changeset
     5
Basic data structures for representing and basic methods
0b430064296a added comments to new source files
smolkas
parents: 50260
diff changeset
     6
for dealing with Isar proof texts.
0b430064296a added comments to new source files
smolkas
parents: 50260
diff changeset
     7
*)
0b430064296a added comments to new source files
smolkas
parents: 50260
diff changeset
     8
50268
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
     9
signature SLEDGEHAMMER_PROOF =
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    10
sig
50268
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    11
	type label = string * int
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    12
  type facts = label list * string list
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    13
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    14
  datatype isar_qualifier = Show | Then | Ultimately
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    15
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    16
  datatype isar_step =
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    17
    Fix of (string * typ) list |
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    18
    Let of term * term |
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    19
    Assume of label * term |
50672
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    20
    Obtain of
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    21
      isar_qualifier list * (string * typ) list * label * term * byline |
50268
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    22
    Prove of isar_qualifier list * label * term * byline
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    23
  and byline =
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    24
    By_Metis of facts |
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    25
    Case_Split of isar_step list list * facts
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    26
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    27
  val string_for_label : label -> string
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    28
  val metis_steps_top_level : isar_step list -> int
50269
20a01c3e8072 renaming, minor tweaks, added signature
smolkas
parents: 50268
diff changeset
    29
  val metis_steps_total : isar_step list -> int
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    30
end
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    31
50672
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    32
structure Sledgehammer_Proof : SLEDGEHAMMER_PROOF =
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    33
struct
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    34
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    35
type label = string * int
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    36
type facts = label list * string list
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    37
50260
87ddf7eddfc9 simplified isar_qualifiers and qs merging
smolkas
parents: 50259
diff changeset
    38
datatype isar_qualifier = Show | Then | Ultimately
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    39
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    40
datatype isar_step =
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    41
  Fix of (string * typ) list |
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    42
  Let of term * term |
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    43
  Assume of label * term |
50672
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    44
  Obtain of isar_qualifier list * (string * typ) list * label * term * byline |
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    45
  Prove of isar_qualifier list * label * term * byline
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    46
and byline =
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    47
  By_Metis of facts |
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    48
  Case_Split of isar_step list list * facts
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    49
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    50
fun string_for_label (s, num) = s ^ string_of_int num
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    51
50672
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    52
fun metis_steps_top_level proof =
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    53
  fold (fn Obtain _ => Integer.add 1 | Prove _ => Integer.add 1 | _ => I)
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    54
       proof 0
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    55
fun metis_steps_total proof =
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    56
  fold (fn Obtain _ => Integer.add 1
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    57
         | Prove (_, _, _, By_Metis _) => Integer.add 1
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    58
         | Prove (_, _, _, Case_Split (cases, _)) =>
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    59
           Integer.add (fold (Integer.add o metis_steps_total) cases 1)
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    60
         | _ => I) proof 0
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    61
50260
87ddf7eddfc9 simplified isar_qualifiers and qs merging
smolkas
parents: 50259
diff changeset
    62
end