src/HOL/TPTP/TPTP_Parser/tptp_proof.ML
author sultana
Mon, 23 Apr 2012 12:23:23 +0100
changeset 47689 f5c05e51668f
parent 47411 7df9a4f320a5
child 53387 ea754ae93b55
permissions -rw-r--r--
improved handling of single-quoted names;
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.
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
     5
*)
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
signature TPTP_PROOF =
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
     8
sig
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
     9
  val extract_inference_info : (TPTP_Syntax.general_term * 'a list) option ->
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    10
                               (string * string list) option
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    11
end
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    12
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    13
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    14
structure TPTP_Proof : TPTP_PROOF =
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    15
struct
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    16
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    17
open TPTP_Syntax
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    18
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    19
(*Extract name of inference rule, and the inferences it relies on*)
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    20
(*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
    21
  changes of the proof protocol.*)
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    22
fun extract_inference_info annot =
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    23
  let
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    24
    fun get_line_id (General_Data (Number (Int_num, num))) = [num]
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    25
      | get_line_id (General_Data (Atomic_Word name)) = [name]
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    26
      | get_line_id (General_Term (Number (Int_num, num), _ (*e.g. a bind*))) = [num]
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    27
      | get_line_id _ = []
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    28
        (*e.g. General_Data (Application ("theory", [General_Data
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    29
          (Atomic_Word "equality")])) -- which would come from E through LEO-II*)
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    30
  in
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    31
    case annot of
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    32
      NONE => NONE
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    33
    | SOME annot =>
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    34
      (case annot of
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    35
        (General_Data (Application ("inference",
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    36
        [General_Data (Atomic_Word inference_name),
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    37
         _,
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    38
         General_List related_lines])), _) =>
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    39
          (SOME (inference_name, map get_line_id related_lines |> List.concat))
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    40
      | _ => NONE)
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    41
  end
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    42
7df9a4f320a5 moved non-interpret-specific code to different module
sultana
parents:
diff changeset
    43
end