src/HOL/Tools/Sledgehammer/sledgehammer_proof.ML
author blanchet
Fri, 15 Feb 2013 10:18:44 +0100
changeset 51147 020a6812a204
parent 51132 f8dc1c94ef8b
child 51178 06689dbfe072
permissions -rw-r--r--
removed dead weight from data structure
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 |
51147
020a6812a204 removed dead weight from data structure
blanchet
parents: 51132
diff changeset
    25
    Case_Split of isar_step list list |
51128
0021ea861129 introduced subblock in isar_step datatype for conjecture herbrandization
smolkas
parents: 50672
diff changeset
    26
    Subblock of isar_step list
50268
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    27
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    28
  val string_for_label : label -> string
5d6494332b0b added signature
smolkas
parents: 50267
diff changeset
    29
  val metis_steps_top_level : isar_step list -> int
50269
20a01c3e8072 renaming, minor tweaks, added signature
smolkas
parents: 50268
diff changeset
    30
  val metis_steps_total : isar_step list -> int
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    31
end
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    32
50672
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    33
structure Sledgehammer_Proof : SLEDGEHAMMER_PROOF =
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    34
struct
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    35
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    36
type label = string * int
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    37
type facts = label list * string list
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    38
50260
87ddf7eddfc9 simplified isar_qualifiers and qs merging
smolkas
parents: 50259
diff changeset
    39
datatype isar_qualifier = Show | Then | Ultimately
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    40
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    41
datatype isar_step =
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    42
  Fix of (string * typ) list |
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    43
  Let of term * term |
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    44
  Assume of label * term |
50672
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    45
  Obtain of isar_qualifier list * (string * typ) list * label * term * byline |
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    46
  Prove of isar_qualifier list * label * term * byline
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    47
and byline =
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    48
  By_Metis of facts |
51147
020a6812a204 removed dead weight from data structure
blanchet
parents: 51132
diff changeset
    49
  Case_Split of isar_step list list |
51128
0021ea861129 introduced subblock in isar_step datatype for conjecture herbrandization
smolkas
parents: 50672
diff changeset
    50
  Subblock of isar_step list
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    51
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    52
fun string_for_label (s, num) = s ^ string_of_int num
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    53
50672
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    54
fun metis_steps_top_level proof =
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    55
  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
    56
       proof 0
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    57
fun metis_steps_total proof =
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    58
  fold (fn Obtain _ => Integer.add 1
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    59
         | Prove (_, _, _, By_Metis _) => Integer.add 1
51147
020a6812a204 removed dead weight from data structure
blanchet
parents: 51132
diff changeset
    60
         | Prove (_, _, _, Case_Split cases) =>
50672
ab5b8b5c9cbe added "obtain" to Isar proof construction data structure
blanchet
parents: 50269
diff changeset
    61
           Integer.add (fold (Integer.add o metis_steps_total) cases 1)
51128
0021ea861129 introduced subblock in isar_step datatype for conjecture herbrandization
smolkas
parents: 50672
diff changeset
    62
         | Prove (_, _, _, Subblock subproof) =>
51132
f8dc1c94ef8b fixed metis_steps_total - was off by one
smolkas
parents: 51128
diff changeset
    63
           Integer.add (metis_steps_total subproof + 1)
50259
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    64
         | _ => I) proof 0
9c64a52ae499 put shrink in own structure
smolkas
parents:
diff changeset
    65
50260
87ddf7eddfc9 simplified isar_qualifiers and qs merging
smolkas
parents: 50259
diff changeset
    66
end