author | wenzelm |
Thu, 30 Oct 2014 22:45:19 +0100 | |
changeset 58839 | ccda99401bc8 |
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:
47411
diff
changeset
|
5 |
Specialised for handling LEO-II proofs. |
47411 | 6 |
*) |
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 | 9 |
signature TPTP_PROOF = |
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 | 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:
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 | 50 |
open TPTP_Syntax |
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 | 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:
47411
diff
changeset
|
57 |
fun extract_source_info annot = |
47411 | 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 | 145 |
in |
146 |
case annot of |
|
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 | 149 |
end |
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 | 159 |
end |