src/HOL/TPTP/TPTP_Parser/tptp_proof.ML
author wenzelm
Thu, 30 Oct 2014 22:45:19 +0100
changeset 58839 ccda99401bc8
parent 55589 8e6b2ad9cfe0
permissions -rw-r--r--
eliminated aliases;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47411
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
     1
(*  Title:      HOL/TPTP/TPTP_Parser/tptp_proof.ML
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
     2
    Author:     Nik Sultana, Cambridge University Computer Laboratory
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
     3
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
     4
Collection of functions for handling TPTP proofs.
53387
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
     5
Specialised for handling LEO-II proofs.
47411
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
     6
*)
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
     7
53387
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
     8
(*FIXME actually this is more general than proofs*)
47411
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
     9
signature TPTP_PROOF =
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    10
sig
53387
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    11
  datatype parent_detail =
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    12
    Bind of string(*variable name*) * TPTP_Syntax.tptp_formula
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    13
  datatype parent_info_as =
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    14
      Parent of string(*node name*)
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    15
    | ParentWithDetails of string(*node name*) *
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    16
        parent_detail list
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    17
  datatype useful_info_as = Status of TPTP_Syntax.status_value
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    18
  datatype source_info =
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    19
      File of string * string
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    20
    | Inference of
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    21
       string *
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    22
       useful_info_as list *
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    23
       parent_info_as list
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    24
  val extract_source_info : (TPTP_Syntax.general_term * 'a list) option ->
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    25
                               source_info option
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    26
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    27
  val is_inference_called : string -> source_info -> bool
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    28
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    29
  val parent_name : parent_info_as -> string
47411
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    30
end
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    31
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    32
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    33
structure TPTP_Proof : TPTP_PROOF =
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    34
struct
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    35
53387
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    36
datatype parent_detail =
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    37
  Bind of string(*variable name*) * TPTP_Syntax.tptp_formula
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    38
datatype parent_info_as =
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    39
    Parent of string(*node name*)
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    40
  | ParentWithDetails of string(*node name*) *
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    41
      parent_detail list
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    42
datatype useful_info_as = Status of TPTP_Syntax.status_value
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    43
datatype source_info =
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    44
    File of string * string
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    45
  | Inference of
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    46
     string *
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    47
     useful_info_as list *
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    48
     parent_info_as list
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    49
47411
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    50
open TPTP_Syntax
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    51
53391
b6fd2f441462 now allowing numeric identifiers to be used in 'file' annotations;
sultana
parents: 53387
diff changeset
    52
exception ANNOT_STRUCTURE of general_term
b6fd2f441462 now allowing numeric identifiers to be used in 'file' annotations;
sultana
parents: 53387
diff changeset
    53
47411
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    54
(*Extract name of inference rule, and the inferences it relies on*)
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    55
(*This is tuned to work with LEO-II, and is brittle wrt upstream
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    56
  changes of the proof protocol.*)
53387
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    57
fun extract_source_info annot =
47411
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    58
  let
53387
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    59
      fun analyse_parent_details [] acc = acc
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    60
        | analyse_parent_details (x :: xs) acc =
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    61
            case x of
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    62
                General_Data
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    63
                 (Application
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    64
                  ("bind",
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    65
                   [General_Data (V var),
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    66
                    General_Data (Formula_Data (THF, fmla))])) =>
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    67
                  analyse_parent_details xs (Bind (var, fmla) :: acc)
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    68
              (*FIXME incomplete*)
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    69
            | _ => analyse_parent_details xs acc
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    70
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    71
      fun analyse_parent_info [] acc = acc
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    72
        | analyse_parent_info (x :: xs) acc =
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    73
            case x of
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    74
                General_Data (Number (Int_num, num)) =>
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    75
                  analyse_parent_info
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    76
                    xs (Parent num :: acc)
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    77
              | General_Data (Atomic_Word name) =>
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    78
                  analyse_parent_info
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    79
                    xs (Parent name :: acc)
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    80
              | General_Term
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    81
                  (Number (Int_num, num),
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    82
                   General_List
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    83
                    parent_details) =>
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    84
                  let
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    85
                    val parent_details' = analyse_parent_details parent_details []
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    86
                  in
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    87
                    analyse_parent_info
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    88
                      xs (ParentWithDetails
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    89
                          (num, parent_details') :: acc)
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    90
                  end
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    91
              (*FIXME incomplete*)
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    92
              | _ => analyse_parent_info xs acc
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    93
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    94
      fun analyse_useful_info [] acc = acc
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    95
        | analyse_useful_info (x :: xs) acc =
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    96
          case x of
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    97
            General_Data
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    98
              (Application
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
    99
                 ("status", [General_Data (Atomic_Word status_str)])) =>
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   100
              analyse_useful_info
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   101
                xs (Status (read_status status_str) :: acc)
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   102
            (*FIXME incomplete*)
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   103
            | _ => analyse_useful_info xs acc
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   104
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   105
    fun analyse_annot
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   106
        (General_Data
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   107
          (Application
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   108
            ("inference",
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   109
             [General_Data (Atomic_Word inference_name),
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   110
              General_List useful_info,
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   111
              General_List parent_info])), _) =
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   112
                (SOME (Inference
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   113
                       (inference_name,
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   114
                        analyse_useful_info useful_info [],
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   115
                        analyse_parent_info parent_info [])))
55589
8e6b2ad9cfe0 added case for handling 'assumption' lines in Satallax proofs;
sultana
parents: 53391
diff changeset
   116
53387
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   117
      | analyse_annot
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   118
         (General_Data
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   119
          (Application
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   120
            ("file",
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   121
             [General_Data (Atomic_Word filename),
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   122
              General_Data (Atomic_Word defname)])), _) =
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   123
                (SOME (File (filename, defname)))
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   124
53391
b6fd2f441462 now allowing numeric identifiers to be used in 'file' annotations;
sultana
parents: 53387
diff changeset
   125
      | analyse_annot
b6fd2f441462 now allowing numeric identifiers to be used in 'file' annotations;
sultana
parents: 53387
diff changeset
   126
         (General_Data
b6fd2f441462 now allowing numeric identifiers to be used in 'file' annotations;
sultana
parents: 53387
diff changeset
   127
           (Application
b6fd2f441462 now allowing numeric identifiers to be used in 'file' annotations;
sultana
parents: 53387
diff changeset
   128
             ("file",
b6fd2f441462 now allowing numeric identifiers to be used in 'file' annotations;
sultana
parents: 53387
diff changeset
   129
              [General_Data (Atomic_Word filename),
b6fd2f441462 now allowing numeric identifiers to be used in 'file' annotations;
sultana
parents: 53387
diff changeset
   130
               General_Data (Number (Int_num, defname))])), _) =
b6fd2f441462 now allowing numeric identifiers to be used in 'file' annotations;
sultana
parents: 53387
diff changeset
   131
                (SOME (File (filename, defname)))
b6fd2f441462 now allowing numeric identifiers to be used in 'file' annotations;
sultana
parents: 53387
diff changeset
   132
55589
8e6b2ad9cfe0 added case for handling 'assumption' lines in Satallax proofs;
sultana
parents: 53391
diff changeset
   133
      (*This was added to support Satallax proofs.*)
8e6b2ad9cfe0 added case for handling 'assumption' lines in Satallax proofs;
sultana
parents: 53391
diff changeset
   134
      | analyse_annot
8e6b2ad9cfe0 added case for handling 'assumption' lines in Satallax proofs;
sultana
parents: 53391
diff changeset
   135
         (General_Data
8e6b2ad9cfe0 added case for handling 'assumption' lines in Satallax proofs;
sultana
parents: 53391
diff changeset
   136
           (Application
8e6b2ad9cfe0 added case for handling 'assumption' lines in Satallax proofs;
sultana
parents: 53391
diff changeset
   137
             ("introduced",
8e6b2ad9cfe0 added case for handling 'assumption' lines in Satallax proofs;
sultana
parents: 53391
diff changeset
   138
              [General_Data (Atomic_Word "assumption"),
8e6b2ad9cfe0 added case for handling 'assumption' lines in Satallax proofs;
sultana
parents: 53391
diff changeset
   139
               General_List []])), _) =
8e6b2ad9cfe0 added case for handling 'assumption' lines in Satallax proofs;
sultana
parents: 53391
diff changeset
   140
                (SOME (Inference
8e6b2ad9cfe0 added case for handling 'assumption' lines in Satallax proofs;
sultana
parents: 53391
diff changeset
   141
                       ("assumption", [], [])))
8e6b2ad9cfe0 added case for handling 'assumption' lines in Satallax proofs;
sultana
parents: 53391
diff changeset
   142
8e6b2ad9cfe0 added case for handling 'assumption' lines in Satallax proofs;
sultana
parents: 53391
diff changeset
   143
53391
b6fd2f441462 now allowing numeric identifiers to be used in 'file' annotations;
sultana
parents: 53387
diff changeset
   144
      | analyse_annot (other, _) = raise (ANNOT_STRUCTURE other)
47411
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
   145
  in
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
   146
    case annot of
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
   147
      NONE => NONE
53387
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   148
    | SOME annot => analyse_annot annot
47411
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
   149
  end
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
   150
53387
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   151
fun is_inference_called s src =
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   152
  case src of
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   153
      Inference (n, _, _) => s = n
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   154
    | _ => false
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   155
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   156
fun parent_name (Parent n) = n
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   157
  | parent_name (ParentWithDetails (n, _)) = n
ea754ae93b55 extracting more info from formula annotation in proof;
sultana
parents: 47411
diff changeset
   158
47411
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
   159
end