| author | krauss | 
| Tue, 01 Oct 2013 23:46:46 +0200 | |
| changeset 54017 | 2a3c07f49615 | 
| parent 53391 | b6fd2f441462 | 
| child 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 [])))  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
116  | 
| analyse_annot  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
117  | 
(General_Data  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
118  | 
(Application  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
119  | 
            ("file",
 | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
120  | 
[General_Data (Atomic_Word filename),  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
121  | 
General_Data (Atomic_Word defname)])), _) =  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
122  | 
(SOME (File (filename, defname)))  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
123  | 
|
| 
53391
 
b6fd2f441462
now allowing numeric identifiers to be used in 'file' annotations;
 
sultana 
parents: 
53387 
diff
changeset
 | 
124  | 
| analyse_annot  | 
| 
 
b6fd2f441462
now allowing numeric identifiers to be used in 'file' annotations;
 
sultana 
parents: 
53387 
diff
changeset
 | 
125  | 
(General_Data  | 
| 
 
b6fd2f441462
now allowing numeric identifiers to be used in 'file' annotations;
 
sultana 
parents: 
53387 
diff
changeset
 | 
126  | 
(Application  | 
| 
 
b6fd2f441462
now allowing numeric identifiers to be used in 'file' annotations;
 
sultana 
parents: 
53387 
diff
changeset
 | 
127  | 
             ("file",
 | 
| 
 
b6fd2f441462
now allowing numeric identifiers to be used in 'file' annotations;
 
sultana 
parents: 
53387 
diff
changeset
 | 
128  | 
[General_Data (Atomic_Word filename),  | 
| 
 
b6fd2f441462
now allowing numeric identifiers to be used in 'file' annotations;
 
sultana 
parents: 
53387 
diff
changeset
 | 
129  | 
General_Data (Number (Int_num, defname))])), _) =  | 
| 
 
b6fd2f441462
now allowing numeric identifiers to be used in 'file' annotations;
 
sultana 
parents: 
53387 
diff
changeset
 | 
130  | 
(SOME (File (filename, defname)))  | 
| 
 
b6fd2f441462
now allowing numeric identifiers to be used in 'file' annotations;
 
sultana 
parents: 
53387 
diff
changeset
 | 
131  | 
|
| 
 
b6fd2f441462
now allowing numeric identifiers to be used in 'file' annotations;
 
sultana 
parents: 
53387 
diff
changeset
 | 
132  | 
| analyse_annot (other, _) = raise (ANNOT_STRUCTURE other)  | 
| 47411 | 133  | 
in  | 
134  | 
case annot of  | 
|
135  | 
NONE => NONE  | 
|
| 
53387
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
136  | 
| SOME annot => analyse_annot annot  | 
| 47411 | 137  | 
end  | 
138  | 
||
| 
53387
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
139  | 
fun is_inference_called s src =  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
140  | 
case src of  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
141  | 
Inference (n, _, _) => s = n  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
142  | 
| _ => false  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
143  | 
|
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
144  | 
fun parent_name (Parent n) = n  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
145  | 
| parent_name (ParentWithDetails (n, _)) = n  | 
| 
 
ea754ae93b55
extracting more info from formula annotation in proof;
 
sultana 
parents: 
47411 
diff
changeset
 | 
146  | 
|
| 47411 | 147  | 
end  |