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