src/HOL/Tools/Sledgehammer/sledgehammer_proof.ML
author smolkas
Wed, 28 Nov 2012 12:25:43 +0100
changeset 50268 5d6494332b0b
parent 50267 1da2e67242d6
child 50269 20a01c3e8072
permissions -rw-r--r--
added signature
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 |
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    20
    Prove of isar_qualifier list * label * term * byline
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    21
  and byline =
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    22
    By_Metis of facts |
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    23
    Case_Split of isar_step list list * facts
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    24
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    25
  val string_for_label : label -> string
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    26
  val metis_steps_top_level : isar_step list -> int
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    27
  val metis_steps_recursive : isar_step list -> int
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    28
end
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    29
50268
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    30
structure Sledgehammer_Proof : SLEDGEHAMMER_PROOF = 
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    31
struct
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    32
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    33
type label = string * int
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    34
type facts = label list * string list
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    35
50260
87ddf7eddfc9 simplified isar_qualifiers and qs merging
smolkas
parents: 50259
diff changeset
    36
datatype isar_qualifier = Show | Then | Ultimately
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    37
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    38
datatype isar_step =
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    39
  Fix of (string * typ) list |
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    40
  Let of term * term |
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    41
  Assume of label * term |
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    42
  Prove of isar_qualifier list * label * term * byline
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    43
and byline =
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    44
  By_Metis of facts |
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    45
  Case_Split of isar_step list list * facts
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    46
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    47
fun string_for_label (s, num) = s ^ string_of_int num
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    48
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    49
val inc = curry op+
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    50
fun metis_steps_top_level proof = fold (fn Prove _ => inc 1 | _ => I) proof 0
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    51
fun metis_steps_recursive proof = 
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    52
  fold (fn Prove (_,_,_, By_Metis _) => inc 1
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    53
         | Prove (_,_,_, Case_Split (cases, _)) => 
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    54
           inc (fold (inc o metis_steps_recursive) cases 1)
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    55
         | _ => I) proof 0
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    56
50260
87ddf7eddfc9 simplified isar_qualifiers and qs merging
smolkas
parents: 50259
diff changeset
    57
end