| author | wenzelm | 
| Fri, 21 Oct 2005 18:14:50 +0200 | |
| changeset 17970 | a84ac7c201ea | 
| parent 17908 | ac97527724ba | 
| child 17993 | e6e5b28740ec | 
| permissions | -rw-r--r-- | 
| 15347 | 1  | 
(* Author: Jia Meng, Cambridge University Computer Laboratory  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
2  | 
|
| 15347 | 3  | 
ID: $Id$  | 
4  | 
Copyright 2004 University of Cambridge  | 
|
5  | 
||
6  | 
ML data structure for storing/printing FOL clauses and arity clauses.  | 
|
7  | 
Typed equality is treated differently.  | 
|
8  | 
*)  | 
|
9  | 
||
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
10  | 
(* works for writeoutclasimp on typed *)  | 
| 15347 | 11  | 
signature RES_CLAUSE =  | 
12  | 
sig  | 
|
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
13  | 
val keep_types : bool ref  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
14  | 
val special_equal : bool ref  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
15  | 
val tagged : bool ref  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
16  | 
|
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
17  | 
exception ARCLAUSE of string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
18  | 
exception CLAUSE of string * term  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
19  | 
type arityClause  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
20  | 
type classrelClause  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
21  | 
type clause  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
22  | 
val init : theory -> unit  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
23  | 
val make_axiom_clause : Term.term -> string * int -> clause  | 
| 17888 | 24  | 
val make_conjecture_clauses : term list -> clause list  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
25  | 
val get_axiomName : clause -> string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
26  | 
val isTaut : clause -> bool  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
27  | 
val num_of_clauses : clause -> int  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
28  | 
|
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
29  | 
val clause2dfg : clause -> string * string list  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
30  | 
val clauses2dfg : clause list -> string -> clause list -> clause list ->  | 
| 17422 | 31  | 
(string * int) list -> (string * int) list -> string  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
32  | 
val tfree_dfg_clause : string -> string  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
33  | 
|
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
34  | 
val arity_clause_thy: theory -> arityClause list  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
35  | 
val classrel_clauses_thy: theory -> classrelClause list  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
36  | 
|
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
37  | 
val tptp_arity_clause : arityClause -> string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
38  | 
val tptp_classrelClause : classrelClause -> string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
39  | 
val tptp_clause : clause -> string list  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
40  | 
val clause2tptp : clause -> string * string list  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
41  | 
val tfree_clause : string -> string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
42  | 
val schematic_var_prefix : string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
43  | 
val fixed_var_prefix : string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
44  | 
val tvar_prefix : string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
45  | 
val tfree_prefix : string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
46  | 
val clause_prefix : string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
47  | 
val arclause_prefix : string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
48  | 
val const_prefix : string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
49  | 
val tconst_prefix : string  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
50  | 
val class_prefix : string  | 
| 
17908
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
51  | 
|
| 
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
52  | 
val union_all : ''a list list -> ''a list  | 
| 
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
53  | 
val ascii_of : String.string -> String.string  | 
| 
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
54  | 
val paren_pack : string list -> string  | 
| 
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
55  | 
val bracket_pack : string list -> string  | 
| 
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
56  | 
val make_schematic_var : String.string * int -> string  | 
| 
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
57  | 
val make_fixed_var : String.string -> string  | 
| 
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
58  | 
val make_schematic_type_var : string * int -> string  | 
| 
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
59  | 
val make_fixed_type_var : string -> string  | 
| 
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
60  | 
val make_fixed_const : String.string -> string  | 
| 
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
61  | 
val make_fixed_type_const : String.string -> string  | 
| 
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
62  | 
val make_type_class : String.string -> string  | 
| 
 
ac97527724ba
More functions are added to the signature of ResClause
 
mengj 
parents: 
17888 
diff
changeset
 | 
63  | 
|
| 15347 | 64  | 
end;  | 
65  | 
||
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
66  | 
structure ResClause: RES_CLAUSE =  | 
| 15347 | 67  | 
struct  | 
68  | 
||
69  | 
(* Added for typed equality *)  | 
|
70  | 
val special_equal = ref false; (* by default,equality does not carry type information *)  | 
|
71  | 
val eq_typ_wrapper = "typeinfo"; (* default string *)  | 
|
72  | 
||
73  | 
||
74  | 
val schematic_var_prefix = "V_";  | 
|
75  | 
val fixed_var_prefix = "v_";  | 
|
76  | 
||
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
77  | 
val tvar_prefix = "T_";  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
78  | 
val tfree_prefix = "t_";  | 
| 15347 | 79  | 
|
80  | 
val clause_prefix = "cls_";  | 
|
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
81  | 
val arclause_prefix = "clsarity_"  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
82  | 
val clrelclause_prefix = "clsrel_";  | 
| 15347 | 83  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
84  | 
val const_prefix = "c_";  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
85  | 
val tconst_prefix = "tc_";  | 
| 15347 | 86  | 
|
| 
16199
 
ee95ab217fee
no longer emits literals for type class HOL.type; also minor tidying
 
paulson 
parents: 
16039 
diff
changeset
 | 
87  | 
val class_prefix = "class_";  | 
| 15347 | 88  | 
|
89  | 
||
| 17775 | 90  | 
fun union_all xss = foldl (op union) [] xss;  | 
91  | 
||
| 15347 | 92  | 
|
| 17775 | 93  | 
(*Provide readable names for the more common symbolic functions*)  | 
| 15347 | 94  | 
val const_trans_table =  | 
95  | 
      Symtab.make [("op =", "equal"),
 | 
|
96  | 
	  	   ("op <=", "lessequals"),
 | 
|
97  | 
		   ("op <", "less"),
 | 
|
98  | 
		   ("op &", "and"),
 | 
|
99  | 
		   ("op |", "or"),
 | 
|
| 17375 | 100  | 
		   ("op +", "plus"),
 | 
101  | 
		   ("op -", "minus"),
 | 
|
102  | 
		   ("op *", "times"),
 | 
|
| 15347 | 103  | 
		   ("op -->", "implies"),
 | 
| 17375 | 104  | 
		   ("{}", "emptyset"),
 | 
| 15347 | 105  | 
		   ("op :", "in"),
 | 
106  | 
		   ("op Un", "union"),
 | 
|
107  | 
		   ("op Int", "inter")];
 | 
|
108  | 
||
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
109  | 
val type_const_trans_table =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
110  | 
      Symtab.make [("*", "t_prod"),
 | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
111  | 
	  	   ("+", "t_sum"),
 | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
112  | 
		   ("~=>", "t_map")];
 | 
| 15347 | 113  | 
|
| 15610 | 114  | 
(*Escaping of special characters.  | 
115  | 
Alphanumeric characters are left unchanged.  | 
|
116  | 
The character _ goes to __  | 
|
117  | 
Characters in the range ASCII space to / go to _A to _P, respectively.  | 
|
118  | 
Other printing characters go to _NNN where NNN is the decimal ASCII code.*)  | 
|
119  | 
local  | 
|
120  | 
||
121  | 
val A_minus_space = Char.ord #"A" - Char.ord #" ";  | 
|
122  | 
||
| 15347 | 123  | 
fun ascii_of_c c =  | 
| 15610 | 124  | 
if Char.isAlphaNum c then String.str c  | 
125  | 
else if c = #"_" then "__"  | 
|
126  | 
else if #" " <= c andalso c <= #"/"  | 
|
127  | 
then "_" ^ String.str (Char.chr (Char.ord c + A_minus_space))  | 
|
128  | 
  else if Char.isPrint c then ("_" ^ Int.toString (Char.ord c))
 | 
|
129  | 
else ""  | 
|
| 15347 | 130  | 
|
| 15610 | 131  | 
in  | 
132  | 
||
133  | 
val ascii_of = String.translate ascii_of_c;  | 
|
134  | 
||
135  | 
end;  | 
|
| 15347 | 136  | 
|
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
137  | 
(* convert a list of strings into one single string; surrounded by brackets *)  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
138  | 
fun paren_pack strings = "(" ^ commas strings ^ ")";
 | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
139  | 
|
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
140  | 
fun bracket_pack strings = "[" ^ commas strings ^ "]";  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
141  | 
|
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
142  | 
|
| 
16925
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
143  | 
(*Remove the initial ' character from a type variable, if it is present*)  | 
| 
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
144  | 
fun trim_type_var s =  | 
| 
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
145  | 
if s <> "" andalso String.sub(s,0) = #"'" then String.extract(s,1,NONE)  | 
| 
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
146  | 
  else error ("trim_type: Malformed type variable encountered: " ^ s);
 | 
| 
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
147  | 
|
| 16903 | 148  | 
fun ascii_of_indexname (v,0) = ascii_of v  | 
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
149  | 
| ascii_of_indexname (v,i) = ascii_of v ^ "_" ^ Int.toString i;  | 
| 15347 | 150  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
151  | 
fun make_schematic_var v = schematic_var_prefix ^ (ascii_of_indexname v);  | 
| 15347 | 152  | 
fun make_fixed_var x = fixed_var_prefix ^ (ascii_of x);  | 
153  | 
||
| 16903 | 154  | 
(*Type variables contain _H because the character ' translates to that.*)  | 
| 
16925
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
155  | 
fun make_schematic_type_var (x,i) =  | 
| 
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
156  | 
tvar_prefix ^ (ascii_of_indexname (trim_type_var x,i));  | 
| 
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
157  | 
fun make_fixed_type_var x = tfree_prefix ^ (ascii_of (trim_type_var x));  | 
| 15347 | 158  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
159  | 
fun make_fixed_const c =  | 
| 17412 | 160  | 
case Symtab.lookup const_trans_table c of  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
161  | 
SOME c' => c'  | 
| 17261 | 162  | 
| NONE => const_prefix ^ ascii_of c;  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
163  | 
|
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
164  | 
fun make_fixed_type_const c =  | 
| 17412 | 165  | 
case Symtab.lookup type_const_trans_table c of  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
166  | 
SOME c' => c'  | 
| 17261 | 167  | 
| NONE => tconst_prefix ^ ascii_of c;  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
168  | 
|
| 17261 | 169  | 
fun make_type_class clas = class_prefix ^ ascii_of clas;  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
170  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
171  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
172  | 
|
| 15347 | 173  | 
(***** definitions and functions for FOL clauses, prepared for conversion into TPTP format or SPASS format. *****)  | 
174  | 
||
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
175  | 
val keep_types = ref true;  | 
| 15347 | 176  | 
|
177  | 
datatype kind = Axiom | Hypothesis | Conjecture;  | 
|
178  | 
fun name_of_kind Axiom = "axiom"  | 
|
179  | 
| name_of_kind Hypothesis = "hypothesis"  | 
|
180  | 
| name_of_kind Conjecture = "conjecture";  | 
|
181  | 
||
182  | 
type clause_id = int;  | 
|
183  | 
type axiom_name = string;  | 
|
184  | 
||
185  | 
||
186  | 
type polarity = bool;  | 
|
187  | 
||
188  | 
type indexname = Term.indexname;  | 
|
189  | 
||
190  | 
||
191  | 
(* "tag" is used for vampire specific syntax *)  | 
|
192  | 
type tag = bool;  | 
|
193  | 
||
194  | 
||
195  | 
(**** Isabelle FOL clauses ****)  | 
|
196  | 
||
197  | 
val tagged = ref false;  | 
|
198  | 
||
199  | 
type pred_name = string;  | 
|
200  | 
type sort = Term.sort;  | 
|
201  | 
type fol_type = string;  | 
|
202  | 
||
203  | 
||
204  | 
datatype type_literal = LTVar of string | LTFree of string;  | 
|
205  | 
||
206  | 
||
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
207  | 
datatype folTerm = UVar of string * fol_type  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
208  | 
| Fun of string * fol_type * folTerm list;  | 
| 15347 | 209  | 
datatype predicate = Predicate of pred_name * fol_type * folTerm list;  | 
210  | 
||
211  | 
datatype literal = Literal of polarity * predicate * tag;  | 
|
212  | 
||
213  | 
datatype typ_var = FOLTVar of indexname | FOLTFree of string;  | 
|
214  | 
||
215  | 
||
216  | 
(* ML datatype used to repsent one single clause: disjunction of literals. *)  | 
|
217  | 
datatype clause =  | 
|
218  | 
	 Clause of {clause_id: clause_id,
 | 
|
219  | 
axiom_name: axiom_name,  | 
|
220  | 
kind: kind,  | 
|
221  | 
literals: literal list,  | 
|
222  | 
types_sorts: (typ_var * sort) list,  | 
|
223  | 
tvar_type_literals: type_literal list,  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
224  | 
tfree_type_literals: type_literal list ,  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
225  | 
tvars: string list,  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
226  | 
predicates: (string*int) list,  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
227  | 
functions: (string*int) list};  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
228  | 
|
| 15347 | 229  | 
|
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
230  | 
exception CLAUSE of string * term;  | 
| 15347 | 231  | 
|
232  | 
||
233  | 
(*** make clauses ***)  | 
|
234  | 
||
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
235  | 
fun isFalse (Literal (pol,Predicate(a,_,[]),_)) =  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
236  | 
(pol andalso a = "c_False") orelse  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
237  | 
(not pol andalso a = "c_True")  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
238  | 
| isFalse _ = false;  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
239  | 
|
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
240  | 
fun isTrue (Literal (pol,Predicate(a,_,[]),_)) =  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
241  | 
(pol andalso a = "c_True") orelse  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
242  | 
(not pol andalso a = "c_False")  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
243  | 
| isTrue _ = false;  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
244  | 
|
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
245  | 
fun isTaut (Clause {literals,...}) = exists isTrue literals;  
 | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
246  | 
|
| 17234 | 247  | 
fun make_clause (clause_id,axiom_name,kind,literals,  | 
248  | 
types_sorts,tvar_type_literals,  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
249  | 
tfree_type_literals,tvars, predicates, functions) =  | 
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
250  | 
if forall isFalse literals  | 
| 17234 | 251  | 
then error "Problem too trivial for resolution (empty clause)"  | 
252  | 
else  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
253  | 
     Clause {clause_id = clause_id, axiom_name = axiom_name, kind = kind, 
 | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
254  | 
literals = literals, types_sorts = types_sorts,  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
255  | 
tvar_type_literals = tvar_type_literals,  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
256  | 
tfree_type_literals = tfree_type_literals,  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
257  | 
tvars = tvars, predicates = predicates,  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
258  | 
functions = functions};  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
259  | 
|
| 15347 | 260  | 
|
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
261  | 
(** Some Clause destructor functions **)  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
262  | 
|
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
263  | 
fun string_of_kind (Clause cls) = name_of_kind (#kind cls);  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
264  | 
|
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
265  | 
fun get_axiomName (Clause cls) = #axiom_name cls;  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
266  | 
|
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
267  | 
fun get_clause_id (Clause cls) = #clause_id cls;  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
268  | 
|
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
269  | 
fun funcs_of_cls (Clause cls) = #functions cls;  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
270  | 
|
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
271  | 
fun preds_of_cls (Clause cls) = #predicates cls;  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
272  | 
|
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
273  | 
|
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
274  | 
|
| 
16925
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
275  | 
(*Definitions of the current theory--to allow suppressing types.*)  | 
| 
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
276  | 
val curr_defs = ref Defs.empty;  | 
| 
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
277  | 
|
| 
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
278  | 
(*Initialize the type suppression mechanism with the current theory before  | 
| 
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
279  | 
producing any clauses!*)  | 
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
280  | 
fun init thy = (curr_defs := Theory.defs_of thy);  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
281  | 
|
| 16976 | 282  | 
fun no_types_needed s = Defs.monomorphic (!curr_defs) s;  | 
| 
16925
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
283  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
284  | 
|
| 
16925
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
285  | 
(*Flatten a type to a string while accumulating sort constraints on the TFress and  | 
| 
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
286  | 
TVars it contains.*)  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
287  | 
fun type_of (Type (a, [])) =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
288  | 
let val t = make_fixed_type_const a  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
289  | 
in (t,([],[(t,0)])) end  | 
| 15347 | 290  | 
| type_of (Type (a, Ts)) =  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
291  | 
let val foltyps_ts = map type_of Ts  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
292  | 
val (folTyps,ts_funcs) = ListPair.unzip foltyps_ts  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
293  | 
val (ts, funcslist) = ListPair.unzip ts_funcs  | 
| 17775 | 294  | 
val ts' = union_all ts  | 
295  | 
val funcs' = union_all funcslist  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
296  | 
val t = make_fixed_type_const a  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
297  | 
in  | 
| 17764 | 298  | 
((t ^ paren_pack folTyps), (ts', (t, length Ts)::funcs'))  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
299  | 
end  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
300  | 
| type_of (TFree (a, s)) =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
301  | 
let val t = make_fixed_type_var a  | 
| 17764 | 302  | 
in (t, ([((FOLTFree a),s)],[(t,0)])) end  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
303  | 
| type_of (TVar (v, s)) = (make_schematic_type_var v, ([((FOLTVar v),s)], []))  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
304  | 
|
| 15390 | 305  | 
|
| 
16925
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
306  | 
fun maybe_type_of c T =  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
307  | 
 if no_types_needed c then ("",([],[])) else type_of T;
 | 
| 
16925
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
308  | 
|
| 16903 | 309  | 
(* Any variables created via the METAHYPS tactical should be treated as  | 
310  | 
universal vars, although it is represented as "Free(...)" by Isabelle *)  | 
|
311  | 
val isMeta = String.isPrefix "METAHYP1_"  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
312  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
313  | 
fun pred_name_type (Const(c,T)) =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
314  | 
let val (typof,(folTyps,funcs)) = maybe_type_of c T  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
315  | 
in (make_fixed_const c, (typof,folTyps), funcs) end  | 
| 15390 | 316  | 
| pred_name_type (Free(x,T)) =  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
317  | 
      if isMeta x then raise CLAUSE("Predicate Not First Order 1", Free(x,T)) 
 | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
318  | 
      else (make_fixed_var x, ("",[]), [])
 | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
319  | 
  | pred_name_type (v as Var _) = raise CLAUSE("Predicate Not First Order 2", v)
 | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
320  | 
  | pred_name_type t        = raise CLAUSE("Predicate input unexpected", t);
 | 
| 15347 | 321  | 
|
| 15615 | 322  | 
|
323  | 
(* For type equality *)  | 
|
324  | 
(* here "arg_typ" is the type of "="'s argument's type, not the type of the equality *)  | 
|
325  | 
(* Find type of equality arg *)  | 
|
326  | 
fun eq_arg_type (Type("fun",[T,_])) = 
 | 
|
327  | 
let val (folT,_) = type_of T;  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
328  | 
in folT end;  | 
| 15347 | 329  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
330  | 
fun fun_name_type (Const(c,T)) args =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
331  | 
let val t = make_fixed_const c  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
332  | 
val (typof, (folTyps,funcs)) = maybe_type_of c T  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
333  | 
val arity = if !keep_types andalso not (no_types_needed c)  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
334  | 
then 1 + length args  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
335  | 
else length args  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
336  | 
in  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
337  | 
(t, (typof,folTyps), ((t,arity)::funcs))  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
338  | 
end  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
339  | 
| fun_name_type (Free(x,T)) args =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
340  | 
let val t = make_fixed_var x  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
341  | 
in  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
342  | 
	    (t, ("",[]), [(t, length args)])
 | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
343  | 
end  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
344  | 
  | fun_name_type f args = raise CLAUSE("Function Not First Order 1", f);
 | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
345  | 
|
| 15615 | 346  | 
|
| 15347 | 347  | 
fun term_of (Var(ind_nm,T)) =  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
348  | 
let val (folType,(ts,funcs)) = type_of T  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
349  | 
in  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
350  | 
(UVar(make_schematic_var ind_nm, folType), (ts, funcs))  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
351  | 
end  | 
| 15347 | 352  | 
| term_of (Free(x,T)) =  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
353  | 
let val (folType, (ts,funcs)) = type_of T  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
354  | 
in  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
355  | 
if isMeta x then (UVar(make_schematic_var(x,0),folType),  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
356  | 
(ts, ((make_schematic_var(x,0)),0)::funcs))  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
357  | 
else  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
358  | 
(Fun(make_fixed_var x, folType, []),  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
359  | 
(ts, ((make_fixed_var x),0)::funcs))  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
360  | 
end  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
361  | 
| term_of (Const(c,T)) = (* impossible to be equality *)  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
362  | 
let val (folType,(ts,funcs)) = type_of T  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
363  | 
in  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
364  | 
(Fun(make_fixed_const c, folType, []),  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
365  | 
(ts, ((make_fixed_const c),0)::funcs))  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
366  | 
end  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
367  | 
| term_of (app as (t $ a)) =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
368  | 
let val (f,args) = strip_comb app  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
369  | 
fun term_of_aux () =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
370  | 
let val (funName,(funType,ts1),funcs) = fun_name_type f args  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
371  | 
val (args',ts_funcs) = ListPair.unzip (map term_of args)  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
372  | 
val (ts2,funcs') = ListPair.unzip ts_funcs  | 
| 17775 | 373  | 
val ts3 = union_all (ts1::ts2)  | 
374  | 
val funcs'' = union_all(funcs::funcs')  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
375  | 
in  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
376  | 
(Fun(funName,funType,args'), (ts3,funcs''))  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
377  | 
end  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
378  | 
	  fun term_of_eq ((Const ("op =", typ)),args) =
 | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
379  | 
let val arg_typ = eq_arg_type typ  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
380  | 
val (args',ts_funcs) = ListPair.unzip (map term_of args)  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
381  | 
val (ts,funcs) = ListPair.unzip ts_funcs  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
382  | 
		  val equal_name = make_fixed_const ("op =")
 | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
383  | 
in  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
384  | 
(Fun(equal_name,arg_typ,args'),  | 
| 17775 | 385  | 
(union_all ts,  | 
386  | 
(make_fixed_var equal_name, 2):: union_all funcs))  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
387  | 
end  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
388  | 
in  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
389  | 
	 case f of Const ("op =", typ) => term_of_eq (f,args)
 | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
390  | 
| Const(_,_) => term_of_aux ()  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
391  | 
| Free(s,_) =>  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
392  | 
if isMeta s  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
393  | 
		     then raise CLAUSE("Function Not First Order 2", f)
 | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
394  | 
else term_of_aux()  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
395  | 
		 | _ => raise CLAUSE("Function Not First Order 3", f)
 | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
396  | 
end  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
397  | 
  | term_of t = raise CLAUSE("Function Not First Order 4", t); 
 | 
| 15390 | 398  | 
|
| 15347 | 399  | 
|
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
400  | 
fun pred_of (Const("op =", typ), args) =
 | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
401  | 
let val arg_typ = eq_arg_type typ  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
402  | 
val (args',ts_funcs) = ListPair.unzip (map term_of args)  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
403  | 
val (ts,funcs) = ListPair.unzip ts_funcs  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
404  | 
val equal_name = make_fixed_const "op ="  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
405  | 
in  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
406  | 
(Predicate(equal_name,arg_typ,args'),  | 
| 17775 | 407  | 
union_all ts,  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
408  | 
[((make_fixed_var equal_name), 2)],  | 
| 17775 | 409  | 
union_all funcs)  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
410  | 
end  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
411  | 
| pred_of (pred,args) =  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
412  | 
let val (predName,(predType,ts1), pfuncs) = pred_name_type pred  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
413  | 
val (args',ts_funcs) = ListPair.unzip (map term_of args)  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
414  | 
val (ts2,ffuncs) = ListPair.unzip ts_funcs  | 
| 17775 | 415  | 
val ts3 = union_all (ts1::ts2)  | 
416  | 
val ffuncs' = union_all ffuncs  | 
|
| 17888 | 417  | 
val newfuncs = pfuncs union ffuncs'  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
418  | 
val arity =  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
419  | 
case pred of  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
420  | 
Const (c,_) =>  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
421  | 
if !keep_types andalso not (no_types_needed c)  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
422  | 
then 1 + length args  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
423  | 
else length args  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
424  | 
| _ => length args  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
425  | 
in  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
426  | 
(Predicate(predName,predType,args'), ts3,  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
427  | 
[(predName, arity)], newfuncs)  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
428  | 
end;  | 
| 15347 | 429  | 
|
430  | 
||
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
431  | 
(*Treatment of literals, possibly negated or tagged*)  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
432  | 
fun predicate_of ((Const("Not",_) $ P), polarity, tag) =
 | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
433  | 
predicate_of (P, not polarity, tag)  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
434  | 
  | predicate_of ((Const("HOL.tag",_) $ P), polarity, tag) =
 | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
435  | 
predicate_of (P, polarity, true)  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
436  | 
| predicate_of (term,polarity,tag) =  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
437  | 
(pred_of (strip_comb term), polarity, tag);  | 
| 15347 | 438  | 
|
| 17888 | 439  | 
fun literals_of_term1 args (Const("Trueprop",_) $ P) = literals_of_term1 args P
 | 
440  | 
  | literals_of_term1 (args as (lits, ts, preds, funcs)) (Const("op |",_) $ P $ Q) = 
 | 
|
441  | 
let val (lits', ts', preds', funcs') = literals_of_term1 args P  | 
|
| 17234 | 442  | 
in  | 
| 17888 | 443  | 
literals_of_term1 (lits', ts', preds' union preds, funcs' union funcs) Q  | 
| 17234 | 444  | 
end  | 
| 17888 | 445  | 
| literals_of_term1 (lits, ts, preds, funcs) P =  | 
446  | 
let val ((pred, ts', preds', funcs'), pol, tag) = predicate_of (P,true,false)  | 
|
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
447  | 
val lits' = Literal(pol,pred,tag) :: lits  | 
| 17234 | 448  | 
in  | 
| 17888 | 449  | 
(lits', ts union ts', preds' union preds, funcs' union funcs)  | 
| 17234 | 450  | 
end;  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
451  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
452  | 
|
| 17888 | 453  | 
val literals_of_term = literals_of_term1 ([],[],[],[]);  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
454  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
455  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
456  | 
(* FIX: not sure what to do with these funcs *)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
457  | 
|
| 
16199
 
ee95ab217fee
no longer emits literals for type class HOL.type; also minor tidying
 
paulson 
parents: 
16039 
diff
changeset
 | 
458  | 
(*Make literals for sorted type variables*)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
459  | 
fun sorts_on_typs (_, []) = ([])  | 
| 
16199
 
ee95ab217fee
no longer emits literals for type class HOL.type; also minor tidying
 
paulson 
parents: 
16039 
diff
changeset
 | 
460  | 
| sorts_on_typs (v, "HOL.type" :: s) =  | 
| 
 
ee95ab217fee
no longer emits literals for type class HOL.type; also minor tidying
 
paulson 
parents: 
16039 
diff
changeset
 | 
461  | 
sorts_on_typs (v,s) (*Ignore sort "type"*)  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
462  | 
| sorts_on_typs ((FOLTVar indx), (s::ss)) =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
463  | 
LTVar((make_type_class s) ^  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
464  | 
        "(" ^ (make_schematic_type_var indx) ^ ")") :: 
 | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
465  | 
(sorts_on_typs ((FOLTVar indx), ss))  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
466  | 
| sorts_on_typs ((FOLTFree x), (s::ss)) =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
467  | 
      LTFree((make_type_class s) ^ "(" ^ (make_fixed_type_var x) ^ ")") :: 
 | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
468  | 
(sorts_on_typs ((FOLTFree x), ss));  | 
| 15347 | 469  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
470  | 
|
| 17312 | 471  | 
(*UGLY: seems to be parsing the "show sorts" output, removing anything that  | 
472  | 
starts with a left parenthesis.*)  | 
|
473  | 
fun remove_type str = hd (String.fields (fn c => c = #"(") str);
 | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
474  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
475  | 
fun pred_of_sort (LTVar x) = ((remove_type x),1)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
476  | 
| pred_of_sort (LTFree x) = ((remove_type x),1)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
477  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
478  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
479  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
480  | 
|
| 
16199
 
ee95ab217fee
no longer emits literals for type class HOL.type; also minor tidying
 
paulson 
parents: 
16039 
diff
changeset
 | 
481  | 
(*Given a list of sorted type variables, return two separate lists.  | 
| 
 
ee95ab217fee
no longer emits literals for type class HOL.type; also minor tidying
 
paulson 
parents: 
16039 
diff
changeset
 | 
482  | 
The first is for TVars, the second for TFrees.*)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
483  | 
fun add_typs_aux [] preds = ([],[], preds)  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
484  | 
| add_typs_aux ((FOLTVar indx,s)::tss) preds =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
485  | 
let val vs = sorts_on_typs (FOLTVar indx, s)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
486  | 
val preds' = (map pred_of_sort vs)@preds  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
487  | 
val (vss,fss, preds'') = add_typs_aux tss preds'  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
488  | 
in  | 
| 17775 | 489  | 
(vs union vss, fss, preds'')  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
490  | 
end  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
491  | 
| add_typs_aux ((FOLTFree x,s)::tss) preds =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
492  | 
let val fs = sorts_on_typs (FOLTFree x, s)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
493  | 
val preds' = (map pred_of_sort fs)@preds  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
494  | 
val (vss,fss, preds'') = add_typs_aux tss preds'  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
495  | 
in  | 
| 17775 | 496  | 
(vss, fs union fss, preds'')  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
497  | 
end;  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
498  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
499  | 
fun add_typs (Clause cls) preds = add_typs_aux (#types_sorts cls) preds  | 
| 15347 | 500  | 
|
501  | 
||
502  | 
(** make axiom clauses, hypothesis clauses and conjecture clauses. **)  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
503  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
504  | 
fun get_tvar_strs [] = []  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
505  | 
| get_tvar_strs ((FOLTVar indx,s)::tss) =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
506  | 
let val vstr = make_schematic_type_var indx  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
507  | 
in  | 
| 17888 | 508  | 
vstr ins (get_tvar_strs tss)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
509  | 
end  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
510  | 
| get_tvar_strs((FOLTFree x,s)::tss) = distinct (get_tvar_strs tss)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
511  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
512  | 
(* FIX add preds and funcs to add typs aux here *)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
513  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
514  | 
fun make_axiom_clause_thm thm (ax_name,cls_id) =  | 
| 17888 | 515  | 
let val (lits,types_sorts, preds, funcs) = literals_of_term (prop_of thm)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
516  | 
val (tvar_lits,tfree_lits, preds) = add_typs_aux types_sorts preds  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
517  | 
val tvars = get_tvar_strs types_sorts  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
518  | 
in  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
519  | 
make_clause(cls_id,ax_name,Axiom,  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
520  | 
lits,types_sorts,tvar_lits,tfree_lits,  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
521  | 
tvars, preds, funcs)  | 
| 15347 | 522  | 
end;  | 
523  | 
||
524  | 
||
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
525  | 
|
| 17888 | 526  | 
fun make_conjecture_clause n t =  | 
527  | 
let val (lits,types_sorts, preds, funcs) = literals_of_term t  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
528  | 
val (tvar_lits,tfree_lits, preds) = add_typs_aux types_sorts preds  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
529  | 
val tvars = get_tvar_strs types_sorts  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
530  | 
in  | 
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
531  | 
make_clause(n,"conjecture",Conjecture,  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
532  | 
lits,types_sorts,tvar_lits,tfree_lits,  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
533  | 
tvars, preds, funcs)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
534  | 
end;  | 
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
535  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
536  | 
fun make_conjecture_clauses_aux _ [] = []  | 
| 17888 | 537  | 
| make_conjecture_clauses_aux n (t::ts) =  | 
538  | 
make_conjecture_clause n t :: make_conjecture_clauses_aux (n+1) ts  | 
|
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
539  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
540  | 
val make_conjecture_clauses = make_conjecture_clauses_aux 0  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
541  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
542  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
543  | 
fun make_axiom_clause term (ax_name,cls_id) =  | 
| 17888 | 544  | 
let val (lits,types_sorts, preds,funcs) = literals_of_term term  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
545  | 
val (tvar_lits,tfree_lits, preds) = add_typs_aux types_sorts preds  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
546  | 
val tvars = get_tvar_strs types_sorts  | 
| 15347 | 547  | 
in  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
548  | 
make_clause(cls_id,ax_name,Axiom,  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
549  | 
lits,types_sorts,tvar_lits,tfree_lits,  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
550  | 
tvars, preds,funcs)  | 
| 15347 | 551  | 
end;  | 
552  | 
||
553  | 
||
554  | 
||
555  | 
||
556  | 
(**** Isabelle arities ****)  | 
|
557  | 
||
558  | 
exception ARCLAUSE of string;  | 
|
559  | 
||
560  | 
||
561  | 
type class = string;  | 
|
562  | 
type tcons = string;  | 
|
563  | 
||
564  | 
||
565  | 
datatype arLit = TConsLit of bool * (class * tcons * string list) | TVarLit of bool * (class * string);  | 
|
566  | 
||
567  | 
datatype arityClause =  | 
|
568  | 
	 ArityClause of {clause_id: clause_id,
 | 
|
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
569  | 
axiom_name: axiom_name,  | 
| 15347 | 570  | 
kind: kind,  | 
571  | 
conclLit: arLit,  | 
|
572  | 
premLits: arLit list};  | 
|
573  | 
||
574  | 
||
575  | 
fun get_TVars 0 = []  | 
|
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
576  | 
  | get_TVars n = ("T_" ^ (Int.toString n)) :: get_TVars (n-1);
 | 
| 15347 | 577  | 
|
578  | 
||
579  | 
||
580  | 
fun pack_sort(_,[])  = raise ARCLAUSE("Empty Sort Found") 
 | 
|
581  | 
| pack_sort(tvar, [cls]) = [(make_type_class cls, tvar)]  | 
|
582  | 
| pack_sort(tvar, cls::srt) = (make_type_class cls,tvar) :: (pack_sort(tvar, srt));  | 
|
583  | 
||
584  | 
||
585  | 
fun make_TVarLit (b,(cls,str)) = TVarLit(b,(cls,str));  | 
|
586  | 
fun make_TConsLit (b,(cls,tcons,tvars)) = TConsLit(b,(make_type_class cls,make_fixed_type_const tcons,tvars));  | 
|
587  | 
||
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
588  | 
fun make_axiom_arity_clause (tcons,n,(res,args)) =  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
589  | 
let val nargs = length args  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
590  | 
val tvars = get_TVars nargs  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
591  | 
val tvars_srts = ListPair.zip (tvars,args)  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
592  | 
val tvars_srts' = union_all(map pack_sort tvars_srts)  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
593  | 
val false_tvars_srts' = map (pair false) tvars_srts'  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
594  | 
in  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
595  | 
      ArityClause {clause_id = n, kind = Axiom, 
 | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
596  | 
axiom_name = tcons,  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
597  | 
conclLit = make_TConsLit(true,(res,tcons,tvars)),  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
598  | 
premLits = map make_TVarLit false_tvars_srts'}  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
599  | 
end;  | 
| 15347 | 600  | 
|
| 
17305
 
6cef3aedd661
axioms  now included in tptp files, no /bin/cat and various tidying
 
paulson 
parents: 
17261 
diff
changeset
 | 
601  | 
(*The number of clauses generated from cls, including type clauses*)  | 
| 
 
6cef3aedd661
axioms  now included in tptp files, no /bin/cat and various tidying
 
paulson 
parents: 
17261 
diff
changeset
 | 
602  | 
fun num_of_clauses (Clause cls) =  | 
| 
 
6cef3aedd661
axioms  now included in tptp files, no /bin/cat and various tidying
 
paulson 
parents: 
17261 
diff
changeset
 | 
603  | 
let val num_tfree_lits =  | 
| 
 
6cef3aedd661
axioms  now included in tptp files, no /bin/cat and various tidying
 
paulson 
parents: 
17261 
diff
changeset
 | 
604  | 
if !keep_types then length (#tfree_type_literals cls)  | 
| 
 
6cef3aedd661
axioms  now included in tptp files, no /bin/cat and various tidying
 
paulson 
parents: 
17261 
diff
changeset
 | 
605  | 
else 0  | 
| 
 
6cef3aedd661
axioms  now included in tptp files, no /bin/cat and various tidying
 
paulson 
parents: 
17261 
diff
changeset
 | 
606  | 
in 1 + num_tfree_lits end;  | 
| 15347 | 607  | 
|
608  | 
||
609  | 
(**** Isabelle class relations ****)  | 
|
610  | 
||
611  | 
||
612  | 
datatype classrelClause =  | 
|
613  | 
	 ClassrelClause of {clause_id: clause_id,
 | 
|
614  | 
subclass: class,  | 
|
| 15531 | 615  | 
superclass: class option};  | 
| 15347 | 616  | 
|
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
617  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
618  | 
fun make_axiom_classrelClause n subclass superclass =  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
619  | 
  ClassrelClause {clause_id = n,
 | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
620  | 
subclass = subclass, superclass = superclass};  | 
| 15347 | 621  | 
|
622  | 
||
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
623  | 
fun classrelClauses_of_aux n sub [] = []  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
624  | 
| classrelClauses_of_aux n sub (sup::sups) =  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
625  | 
make_axiom_classrelClause n sub (SOME sup) :: classrelClauses_of_aux (n+1) sub sups;  | 
| 15347 | 626  | 
|
627  | 
||
628  | 
fun classrelClauses_of (sub,sups) =  | 
|
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
629  | 
case sups of [] => [make_axiom_classrelClause 0 sub NONE]  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
630  | 
| _ => classrelClauses_of_aux 0 sub sups;  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
631  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
632  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
633  | 
(***** Isabelle arities *****)  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
634  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
635  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
636  | 
fun arity_clause _ (tcons, []) = []  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
637  | 
| arity_clause n (tcons, ar::ars) =  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
638  | 
make_axiom_arity_clause (tcons,n,ar) ::  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
639  | 
arity_clause (n+1) (tcons,ars);  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
640  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
641  | 
fun multi_arity_clause [] = []  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
642  | 
| multi_arity_clause (tcon_ar :: tcons_ars) =  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
643  | 
arity_clause 0 tcon_ar @ multi_arity_clause tcons_ars  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
644  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
645  | 
fun arity_clause_thy thy =  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
646  | 
let val arities = #arities (Type.rep_tsig (Sign.tsig_of thy))  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
647  | 
in multi_arity_clause (Symtab.dest arities) end;  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
648  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
649  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
650  | 
(* Isabelle classes *)  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
651  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
652  | 
type classrelClauses = classrelClause list Symtab.table;  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
653  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
654  | 
val classrel_of = #2 o #classes o Type.rep_tsig o Sign.tsig_of;  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
655  | 
fun classrel_clauses_classrel (C: Sorts.classes) = map classrelClauses_of (Graph.dest C);  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
656  | 
val classrel_clauses_thy = List.concat o classrel_clauses_classrel o classrel_of;  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
657  | 
|
| 15347 | 658  | 
|
659  | 
||
660  | 
(****!!!! Changed for typed equality !!!!****)  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
661  | 
|
| 15347 | 662  | 
fun wrap_eq_type typ t = eq_typ_wrapper ^"(" ^ t ^ "," ^ typ ^ ")";
 | 
663  | 
||
664  | 
(* Only need to wrap equality's arguments with "typeinfo" if the output clauses are typed && if we specifically ask for types to be included. *)  | 
|
665  | 
fun string_of_equality (typ,terms) =  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
666  | 
let val [tstr1,tstr2] = map string_of_term terms  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
667  | 
in  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
668  | 
if !keep_types andalso !special_equal  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
669  | 
	  then "equal(" ^ (wrap_eq_type typ tstr1) ^ "," ^ 
 | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
670  | 
(wrap_eq_type typ tstr2) ^ ")"  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
671  | 
	  else "equal(" ^ tstr1 ^ "," ^ tstr2 ^ ")"
 | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
672  | 
end  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
673  | 
and string_of_term (UVar(x,_)) = x  | 
| 15615 | 674  | 
  | string_of_term (Fun("equal",typ,terms)) = string_of_equality(typ,terms)
 | 
675  | 
| string_of_term (Fun (name,typ,[])) = name  | 
|
676  | 
| string_of_term (Fun (name,typ,terms)) =  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
677  | 
let val terms' = map string_of_term terms  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
678  | 
in  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
679  | 
if !keep_types andalso typ<>""  | 
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
680  | 
then name ^ (paren_pack (terms' @ [typ]))  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
681  | 
else name ^ (paren_pack terms')  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
682  | 
end;  | 
| 15347 | 683  | 
|
684  | 
(* before output the string of the predicate, check if the predicate corresponds to an equality or not. *)  | 
|
| 17234 | 685  | 
fun string_of_predicate (Predicate("equal",typ,terms)) = 
 | 
686  | 
string_of_equality(typ,terms)  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
687  | 
| string_of_predicate (Predicate(name,_,[])) = name  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
688  | 
| string_of_predicate (Predicate(name,typ,terms)) =  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
689  | 
let val terms_as_strings = map string_of_term terms  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
690  | 
in  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
691  | 
if !keep_types andalso typ<>""  | 
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
692  | 
then name ^ (paren_pack (terms_as_strings @ [typ]))  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
693  | 
else name ^ (paren_pack terms_as_strings)  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
694  | 
end;  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
695  | 
|
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
696  | 
|
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
697  | 
fun string_of_clausename (cls_id,ax_name) =  | 
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
698  | 
clause_prefix ^ ascii_of ax_name ^ "_" ^ Int.toString cls_id;  | 
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
699  | 
|
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
700  | 
fun string_of_type_clsname (cls_id,ax_name,idx) =  | 
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
701  | 
string_of_clausename (cls_id,ax_name) ^ "_tcs" ^ (Int.toString idx);  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
702  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
703  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
704  | 
(********************************)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
705  | 
(* Code for producing DFG files *)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
706  | 
(********************************)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
707  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
708  | 
fun dfg_literal (Literal(pol,pred,tag)) =  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
709  | 
let val pred_string = string_of_predicate pred  | 
| 17234 | 710  | 
in  | 
711  | 
	if pol then pred_string else "not(" ^pred_string ^ ")"  
 | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
712  | 
end;  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
713  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
714  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
715  | 
(* FIX: what does this mean? *)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
716  | 
(*fun dfg_of_typeLit (LTVar x) = "not(" ^ x ^ ")"
 | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
717  | 
  | dfg_of_typeLit (LTFree x) = "(" ^ x ^ ")";*)
 | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
718  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
719  | 
fun dfg_of_typeLit (LTVar x) = x  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
720  | 
| dfg_of_typeLit (LTFree x) = x ;  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
721  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
722  | 
(*Make the string of universal quantifiers for a clause*)  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
723  | 
fun forall_open ([],[]) = ""  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
724  | 
| forall_open (vars,tvars) = "forall([" ^ (commas (tvars@vars))^ "],\n"  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
725  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
726  | 
fun forall_close ([],[]) = ""  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
727  | 
| forall_close (vars,tvars) = ")"  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
728  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
729  | 
fun gen_dfg_cls (cls_id,ax_name,knd,lits,tvars,vars) =  | 
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
730  | 
    "clause( %(" ^ knd ^ ")\n" ^ forall_open(vars,tvars) ^ 
 | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
731  | 
    "or(" ^ lits ^ ")" ^ forall_close(vars,tvars) ^ ",\n" ^ 
 | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
732  | 
string_of_clausename (cls_id,ax_name) ^ ").";  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
733  | 
|
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
734  | 
fun gen_dfg_type_cls (cls_id,ax_name,knd,tfree_lit,idx,tvars,vars) =  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
735  | 
    "clause( %(" ^ knd ^ ")\n" ^ forall_open(vars,tvars) ^ 
 | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
736  | 
"or( " ^ tfree_lit ^ ")" ^ forall_close(vars,tvars) ^ ",\n" ^  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
737  | 
string_of_type_clsname (cls_id,ax_name,idx) ^ ").";  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
738  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
739  | 
fun dfg_clause_aux (Clause cls) =  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
740  | 
let val lits = map dfg_literal (#literals cls)  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
741  | 
val tvar_lits_strs =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
742  | 
if !keep_types then map dfg_of_typeLit (#tvar_type_literals cls)  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
743  | 
else []  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
744  | 
val tfree_lits =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
745  | 
if !keep_types then map dfg_of_typeLit (#tfree_type_literals cls)  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
746  | 
else []  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
747  | 
in  | 
| 17234 | 748  | 
(tvar_lits_strs @ lits, tfree_lits)  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
749  | 
end;  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
750  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
751  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
752  | 
fun dfg_folterms (Literal(pol,pred,tag)) =  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
753  | 
let val Predicate (predname, foltype, folterms) = pred  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
754  | 
in  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
755  | 
folterms  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
756  | 
end  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
757  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
758  | 
|
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
759  | 
fun get_uvars (UVar(a,typ)) = [a]  | 
| 17775 | 760  | 
| get_uvars (Fun (_,typ,tlist)) = union_all(map get_uvars tlist)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
761  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
762  | 
|
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
763  | 
fun is_uvar (UVar _) = true  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
764  | 
| is_uvar (Fun _) = false;  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
765  | 
|
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
766  | 
fun uvar_name (UVar(a,_)) = a  | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
767  | 
|   uvar_name (Fun (a,_,_)) = raise CLAUSE("Not a variable", Const(a,dummyT));
 | 
| 
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
768  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
769  | 
fun mergelist [] = []  | 
| 17764 | 770  | 
| mergelist (x::xs) = x @ mergelist xs  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
771  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
772  | 
fun dfg_vars (Clause cls) =  | 
| 
17404
 
d16c3a62c396
the experimental tagging system, and the usual tidying
 
paulson 
parents: 
17375 
diff
changeset
 | 
773  | 
let val lits = #literals cls  | 
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
774  | 
val folterms = mergelist(map dfg_folterms lits)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
775  | 
in  | 
| 17775 | 776  | 
union_all(map get_uvars folterms)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
777  | 
end  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
778  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
779  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
780  | 
fun dfg_tvars (Clause cls) =(#tvars cls)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
781  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
782  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
783  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
784  | 
(* make this return funcs and preds too? *)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
785  | 
fun string_of_predname (Predicate("equal",typ,terms)) = "EQUALITY"
 | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
786  | 
| string_of_predname (Predicate(name,_,[])) = name  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
787  | 
| string_of_predname (Predicate(name,typ,terms)) = name  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
788  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
789  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
790  | 
(* make this return funcs and preds too? *)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
791  | 
|
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
792  | 
fun string_of_predicate (Predicate("equal",typ,terms)) =  
 | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
793  | 
string_of_equality(typ,terms)  | 
| 15347 | 794  | 
| string_of_predicate (Predicate(name,_,[])) = name  | 
795  | 
| string_of_predicate (Predicate(name,typ,terms)) =  | 
|
| 16903 | 796  | 
let val terms_as_strings = map string_of_term terms  | 
797  | 
in  | 
|
| 
16925
 
0fd7b1438d28
simpler variable names, and no types for monomorphic constants
 
paulson 
parents: 
16903 
diff
changeset
 | 
798  | 
if !keep_types andalso typ<>""  | 
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
799  | 
then name ^ (paren_pack (terms_as_strings @ [typ]))  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
800  | 
else name ^ (paren_pack terms_as_strings)  | 
| 16903 | 801  | 
end;  | 
| 15347 | 802  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
803  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
804  | 
fun concat_with sep [] = ""  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
805  | 
  | concat_with sep [x] = "(" ^ x ^ ")"
 | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
806  | 
  | concat_with sep (x::xs) = "(" ^ x ^ ")" ^  sep ^ (concat_with sep xs);
 | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
807  | 
|
| 17234 | 808  | 
fun dfg_pred (Literal(pol,pred,tag)) ax_name =  | 
809  | 
(string_of_predname pred) ^ " " ^ ax_name  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
810  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
811  | 
fun dfg_clause cls =  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
812  | 
let val (lits,tfree_lits) = dfg_clause_aux cls  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
813  | 
(*"lits" includes the typing assumptions (TVars)*)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
814  | 
val vars = dfg_vars cls  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
815  | 
val tvars = dfg_tvars cls  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
816  | 
val knd = string_of_kind cls  | 
| 17234 | 817  | 
val lits_str = commas lits  | 
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
818  | 
val cls_id = get_clause_id cls  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
819  | 
val axname = get_axiomName cls  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
820  | 
val cls_str = gen_dfg_cls(cls_id,axname,knd,lits_str,tvars, vars)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
821  | 
fun typ_clss k [] = []  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
822  | 
| typ_clss k (tfree :: tfrees) =  | 
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
823  | 
(gen_dfg_type_cls(cls_id,axname,knd,tfree,k, tvars,vars)) ::  | 
| 17234 | 824  | 
(typ_clss (k+1) tfrees)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
825  | 
in  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
826  | 
cls_str :: (typ_clss 0 tfree_lits)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
827  | 
end;  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
828  | 
|
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
829  | 
fun string_of_arity (name, num) = name ^ "," ^ (Int.toString num)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
830  | 
|
| 17234 | 831  | 
fun string_of_preds preds =  | 
832  | 
"predicates[" ^ (concat_with ", " (map string_of_arity preds)) ^ "].\n";  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
833  | 
|
| 17234 | 834  | 
fun string_of_funcs funcs =  | 
835  | 
"functions[" ^ (concat_with ", " (map string_of_arity funcs)) ^ "].\n" ;  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
836  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
837  | 
|
| 17234 | 838  | 
fun string_of_symbols predstr funcstr =  | 
839  | 
"list_of_symbols.\n" ^ predstr ^ funcstr ^ "end_of_list.\n\n";  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
840  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
841  | 
|
| 17234 | 842  | 
fun string_of_axioms axstr =  | 
843  | 
"list_of_clauses(axioms,cnf).\n" ^ axstr ^ "end_of_list.\n\n";  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
844  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
845  | 
|
| 17234 | 846  | 
fun string_of_conjectures conjstr =  | 
847  | 
"list_of_clauses(conjectures,cnf).\n" ^ conjstr ^ "end_of_list.\n\n";  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
848  | 
|
| 17234 | 849  | 
fun string_of_descrip () =  | 
850  | 
  "list_of_descriptions.\nname({*[ File     : ],[ Names    :]*}).\nauthor({*[ Source   :]*}).\nstatus(unknown).\ndescription({*[ Refs     :]*}).\nend_of_list.\n\n"
 | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
851  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
852  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
853  | 
fun string_of_start name = "%------------------------------------------------------------------------------\nbegin_problem(" ^ name ^ ").\n\n";
 | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
854  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
855  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
856  | 
fun string_of_end () = "end_problem.\n%------------------------------------------------------------------------------";  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
857  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
858  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
859  | 
fun clause2dfg cls =  | 
| 17234 | 860  | 
let val (lits,tfree_lits) = dfg_clause_aux cls  | 
861  | 
(*"lits" includes the typing assumptions (TVars)*)  | 
|
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
862  | 
val cls_id = get_clause_id cls  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
863  | 
val ax_name = get_axiomName cls  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
864  | 
val vars = dfg_vars cls  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
865  | 
val tvars = dfg_tvars cls  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
866  | 
val funcs = funcs_of_cls cls  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
867  | 
val preds = preds_of_cls cls  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
868  | 
val knd = string_of_kind cls  | 
| 17234 | 869  | 
val lits_str = commas lits  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
870  | 
val cls_str = gen_dfg_cls(cls_id,ax_name,knd,lits_str,tvars,vars)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
871  | 
in  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
872  | 
(cls_str,tfree_lits)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
873  | 
end;  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
874  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
875  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
876  | 
|
| 17234 | 877  | 
fun tfree_dfg_clause tfree_lit =  | 
| 17422 | 878  | 
"clause( %(conjecture)\n" ^ "or( " ^ tfree_lit ^ "),\n" ^ "tfree_tcs" ^ ")."  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
879  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
880  | 
|
| 17422 | 881  | 
fun gen_dfg_file probname axioms conjectures funcs preds =  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
882  | 
let val axstrs_tfrees = (map clause2dfg axioms)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
883  | 
val (axstrs, atfrees) = ListPair.unzip axstrs_tfrees  | 
| 17764 | 884  | 
val axstr = (space_implode "\n" axstrs) ^ "\n\n"  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
885  | 
val conjstrs_tfrees = (map clause2dfg conjectures)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
886  | 
val (conjstrs, atfrees) = ListPair.unzip conjstrs_tfrees  | 
| 17775 | 887  | 
val tfree_clss = map tfree_dfg_clause (union_all atfrees)  | 
| 17764 | 888  | 
val conjstr = (space_implode "\n" (tfree_clss@conjstrs)) ^ "\n\n"  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
889  | 
val funcstr = string_of_funcs funcs  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
890  | 
val predstr = string_of_preds preds  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
891  | 
in  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
892  | 
(string_of_start probname) ^ (string_of_descrip ()) ^  | 
| 17764 | 893  | 
(string_of_symbols funcstr predstr) ^  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
894  | 
(string_of_axioms axstr) ^  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
895  | 
(string_of_conjectures conjstr) ^ (string_of_end ())  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
896  | 
end;  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
897  | 
|
| 17422 | 898  | 
fun clauses2dfg [] probname axioms conjectures funcs preds =  | 
| 17775 | 899  | 
let val funcs' = (union_all(map funcs_of_cls axioms)) @ funcs  | 
900  | 
val preds' = (union_all(map preds_of_cls axioms)) @ preds  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
901  | 
in  | 
| 17422 | 902  | 
gen_dfg_file probname axioms conjectures funcs' preds'  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
903  | 
end  | 
| 17422 | 904  | 
| clauses2dfg (cls::clss) probname axioms conjectures funcs preds =  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
905  | 
let val (lits,tfree_lits) = dfg_clause_aux cls  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
906  | 
(*"lits" includes the typing assumptions (TVars)*)  | 
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
907  | 
val cls_id = get_clause_id cls  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
908  | 
val ax_name = get_axiomName cls  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
909  | 
val vars = dfg_vars cls  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
910  | 
val tvars = dfg_tvars cls  | 
| 17888 | 911  | 
val funcs' = (funcs_of_cls cls) union funcs  | 
912  | 
val preds' = (preds_of_cls cls) union preds  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
913  | 
val knd = string_of_kind cls  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
914  | 
val lits_str = concat_with ", " lits  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
915  | 
val axioms' = if knd = "axiom" then (cls::axioms) else axioms  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
916  | 
val conjectures' =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
917  | 
if knd = "conjecture" then (cls::conjectures) else conjectures  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
918  | 
in  | 
| 17422 | 919  | 
clauses2dfg clss probname axioms' conjectures' funcs' preds'  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
920  | 
end;  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
921  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
922  | 
|
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
923  | 
fun string_of_arClauseID (ArityClause {clause_id,axiom_name,...}) =
 | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
924  | 
arclause_prefix ^ ascii_of axiom_name ^ "_" ^ Int.toString clause_id;  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
925  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
926  | 
fun string_of_arKind (ArityClause arcls) = name_of_kind(#kind arcls);  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
927  | 
|
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
928  | 
(*FIXME!!! currently is TPTP format!*)  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
929  | 
fun dfg_of_arLit (TConsLit(b,(c,t,args))) =  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
930  | 
let val pol = if b then "++" else "--"  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
931  | 
val arg_strs = (case args of [] => "" | _ => paren_pack args)  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
932  | 
in  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
933  | 
	  pol ^ c ^ "(" ^ t ^ arg_strs ^ ")"
 | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
934  | 
end  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
935  | 
| dfg_of_arLit (TVarLit(b,(c,str))) =  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
936  | 
let val pol = if b then "++" else "--"  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
937  | 
in  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
938  | 
	  pol ^ c ^ "(" ^ str ^ ")"
 | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
939  | 
end;  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
940  | 
|
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
941  | 
|
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
942  | 
fun dfg_of_conclLit (ArityClause arcls) = dfg_of_arLit (#conclLit arcls);  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
943  | 
|
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
944  | 
|
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
945  | 
fun dfg_of_premLits (ArityClause arcls) = map dfg_of_arLit (#premLits arcls);  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
946  | 
|
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
947  | 
|
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
948  | 
|
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
949  | 
(*FIXME: would this have variables in a forall? *)  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
950  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
951  | 
fun dfg_arity_clause arcls =  | 
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
952  | 
let val arcls_id = string_of_arClauseID arcls  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
953  | 
val concl_lit = dfg_of_conclLit arcls  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
954  | 
val prems_lits = dfg_of_premLits arcls  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
955  | 
val knd = string_of_arKind arcls  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
956  | 
val all_lits = concl_lit :: prems_lits  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
957  | 
in  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
958  | 
      "clause( %(" ^ knd ^ ")\n" ^  "or( " ^ (bracket_pack all_lits) ^ ")),\n" ^
 | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
959  | 
arcls_id ^ ")."  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
960  | 
end;  | 
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
961  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
962  | 
|
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
963  | 
(********************************)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
964  | 
(* code to produce TPTP files *)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
965  | 
(********************************)  | 
| 
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
966  | 
|
| 15347 | 967  | 
fun tptp_literal (Literal(pol,pred,tag)) =  | 
968  | 
let val pred_string = string_of_predicate pred  | 
|
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
969  | 
val tagged_pol =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
970  | 
if (tag andalso !tagged) then (if pol then "+++" else "---")  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
971  | 
else (if pol then "++" else "--")  | 
| 15347 | 972  | 
in  | 
973  | 
tagged_pol ^ pred_string  | 
|
974  | 
end;  | 
|
975  | 
||
976  | 
||
977  | 
||
978  | 
fun tptp_of_typeLit (LTVar x) = "--" ^ x  | 
|
979  | 
| tptp_of_typeLit (LTFree x) = "++" ^ x;  | 
|
980  | 
||
981  | 
||
982  | 
fun gen_tptp_cls (cls_id,ax_name,knd,lits) =  | 
|
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
983  | 
    "input_clause(" ^ string_of_clausename (cls_id,ax_name) ^ "," ^ 
 | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
984  | 
knd ^ "," ^ lits ^ ").";  | 
| 15347 | 985  | 
|
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
986  | 
fun gen_tptp_type_cls (cls_id,ax_name,knd,tfree_lit,idx) =  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
987  | 
    "input_clause(" ^ string_of_type_clsname (cls_id,ax_name,idx) ^ "," ^ 
 | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
988  | 
knd ^ ",[" ^ tfree_lit ^ "]).";  | 
| 15347 | 989  | 
|
| 17422 | 990  | 
fun tptp_type_lits (Clause cls) =  | 
| 15347 | 991  | 
let val lits = map tptp_literal (#literals cls)  | 
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
992  | 
val tvar_lits_strs =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
993  | 
if !keep_types  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
994  | 
then (map tptp_of_typeLit (#tvar_type_literals cls))  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
995  | 
else []  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
996  | 
val tfree_lits =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
997  | 
if !keep_types  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
998  | 
then (map tptp_of_typeLit (#tfree_type_literals cls))  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
999  | 
else []  | 
| 15347 | 1000  | 
in  | 
| 
17305
 
6cef3aedd661
axioms  now included in tptp files, no /bin/cat and various tidying
 
paulson 
parents: 
17261 
diff
changeset
 | 
1001  | 
(tvar_lits_strs @ lits, tfree_lits)  | 
| 15347 | 1002  | 
end;  | 
1003  | 
||
1004  | 
fun tptp_clause cls =  | 
|
| 17422 | 1005  | 
let val (lits,tfree_lits) = tptp_type_lits cls  | 
| 
17305
 
6cef3aedd661
axioms  now included in tptp files, no /bin/cat and various tidying
 
paulson 
parents: 
17261 
diff
changeset
 | 
1006  | 
(*"lits" includes the typing assumptions (TVars)*)  | 
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
1007  | 
val cls_id = get_clause_id cls  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
1008  | 
val ax_name = get_axiomName cls  | 
| 15347 | 1009  | 
val knd = string_of_kind cls  | 
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1010  | 
val lits_str = bracket_pack lits  | 
| 
17305
 
6cef3aedd661
axioms  now included in tptp files, no /bin/cat and various tidying
 
paulson 
parents: 
17261 
diff
changeset
 | 
1011  | 
val cls_str = gen_tptp_cls(cls_id,ax_name,knd,lits_str)  | 
| 
 
6cef3aedd661
axioms  now included in tptp files, no /bin/cat and various tidying
 
paulson 
parents: 
17261 
diff
changeset
 | 
1012  | 
fun typ_clss k [] = []  | 
| 15347 | 1013  | 
| typ_clss k (tfree :: tfrees) =  | 
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
1014  | 
gen_tptp_type_cls(cls_id,ax_name,knd,tfree,k) ::  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
1015  | 
typ_clss (k+1) tfrees  | 
| 15347 | 1016  | 
in  | 
1017  | 
cls_str :: (typ_clss 0 tfree_lits)  | 
|
1018  | 
end;  | 
|
1019  | 
||
| 15608 | 1020  | 
fun clause2tptp cls =  | 
| 17422 | 1021  | 
let val (lits,tfree_lits) = tptp_type_lits cls  | 
| 
17305
 
6cef3aedd661
axioms  now included in tptp files, no /bin/cat and various tidying
 
paulson 
parents: 
17261 
diff
changeset
 | 
1022  | 
(*"lits" includes the typing assumptions (TVars)*)  | 
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
1023  | 
val cls_id = get_clause_id cls  | 
| 
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
1024  | 
val ax_name = get_axiomName cls  | 
| 15608 | 1025  | 
val knd = string_of_kind cls  | 
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1026  | 
val lits_str = bracket_pack lits  | 
| 15608 | 1027  | 
val cls_str = gen_tptp_cls(cls_id,ax_name,knd,lits_str)  | 
1028  | 
in  | 
|
1029  | 
(cls_str,tfree_lits)  | 
|
1030  | 
end;  | 
|
1031  | 
||
1032  | 
||
| 
17230
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
1033  | 
fun tfree_clause tfree_lit =  | 
| 
 
77e93bf303a5
fixed arities and restored changes that had gone missing
 
paulson 
parents: 
17150 
diff
changeset
 | 
1034  | 
    "input_clause(" ^ "tfree_tcs," ^ "conjecture" ^ ",[" ^ tfree_lit ^ "]).";
 | 
| 15608 | 1035  | 
|
| 15347 | 1036  | 
|
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1037  | 
fun tptp_of_arLit (TConsLit(b,(c,t,args))) =  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1038  | 
let val pol = if b then "++" else "--"  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1039  | 
val arg_strs = (case args of [] => "" | _ => paren_pack args)  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1040  | 
in  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1041  | 
	  pol ^ c ^ "(" ^ t ^ arg_strs ^ ")"
 | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1042  | 
end  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1043  | 
| tptp_of_arLit (TVarLit(b,(c,str))) =  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1044  | 
let val pol = if b then "++" else "--"  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1045  | 
in  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1046  | 
	  pol ^ c ^ "(" ^ str ^ ")"
 | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1047  | 
end;  | 
| 15347 | 1048  | 
|
1049  | 
||
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1050  | 
fun tptp_of_conclLit (ArityClause arcls) = tptp_of_arLit (#conclLit arcls);  | 
| 15347 | 1051  | 
|
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1052  | 
fun tptp_of_premLits (ArityClause arcls) = map tptp_of_arLit (#premLits arcls);  | 
| 15347 | 1053  | 
|
1054  | 
fun tptp_arity_clause arcls =  | 
|
1055  | 
let val arcls_id = string_of_arClauseID arcls  | 
|
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1056  | 
val concl_lit = tptp_of_conclLit arcls  | 
| 
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1057  | 
val prems_lits = tptp_of_premLits arcls  | 
| 15347 | 1058  | 
val knd = string_of_arKind arcls  | 
1059  | 
val all_lits = concl_lit :: prems_lits  | 
|
1060  | 
in  | 
|
| 
17317
 
3f12de2e2e6e
Isabelle-ATP link: sortable axiom names; no spaces in switches; general tidying
 
paulson 
parents: 
17312 
diff
changeset
 | 
1061  | 
	"input_clause(" ^ arcls_id ^ "," ^ knd ^ "," ^ 
 | 
| 
17525
 
ae5bb6001afb
tidying, and support for axclass/classrel clauses
 
paulson 
parents: 
17422 
diff
changeset
 | 
1062  | 
(bracket_pack all_lits) ^ ")."  | 
| 15347 | 1063  | 
end;  | 
1064  | 
||
1065  | 
fun tptp_classrelLits sub sup =  | 
|
1066  | 
let val tvar = "(T)"  | 
|
1067  | 
in  | 
|
| 15531 | 1068  | 
case sup of NONE => "[++" ^ sub ^ tvar ^ "]"  | 
1069  | 
| (SOME supcls) => "[--" ^ sub ^ tvar ^ ",++" ^ supcls ^ tvar ^ "]"  | 
|
| 15347 | 1070  | 
end;  | 
1071  | 
||
1072  | 
||
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
1073  | 
fun tptp_classrelClause (ClassrelClause {clause_id,subclass,superclass,...}) =
 | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
1074  | 
let val relcls_id = clrelclause_prefix ^ ascii_of subclass ^ "_" ^  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
1075  | 
Int.toString clause_id  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
1076  | 
val lits = tptp_classrelLits (make_type_class subclass)  | 
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
1077  | 
(Option.map make_type_class superclass)  | 
| 15347 | 1078  | 
in  | 
1079  | 
	"input_clause(" ^ relcls_id ^ ",axiom," ^ lits ^ ")."
 | 
|
1080  | 
end;  | 
|
| 
17150
 
ce2a1aeb42aa
DFG output now works for untyped rules (ML "ResClause.untyped();")
 
quigley 
parents: 
16976 
diff
changeset
 | 
1081  | 
|
| 
17845
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
1082  | 
|
| 
 
1438291d57f0
deletion of Tools/res_types_sorts; removal of absolute numbering of clauses
 
paulson 
parents: 
17775 
diff
changeset
 | 
1083  | 
|
| 15347 | 1084  | 
end;  |