16 datatype arLit = |
16 datatype arLit = |
17 TConsLit of name * name * name list | |
17 TConsLit of name * name * name list | |
18 TVarLit of name * name |
18 TVarLit of name * name |
19 datatype arity_clause = ArityClause of |
19 datatype arity_clause = ArityClause of |
20 {axiom_name: string, conclLit: arLit, premLits: arLit list} |
20 {axiom_name: string, conclLit: arLit, premLits: arLit list} |
21 datatype classrel_clause = ClassrelClause of |
21 datatype class_rel_clause = ClassRelClause of |
22 {axiom_name: string, subclass: name, superclass: name} |
22 {axiom_name: string, subclass: name, superclass: name} |
23 datatype combtyp = |
23 datatype combtyp = |
24 CombTVar of name | |
24 CombTVar of name | |
25 CombTFree of name | |
25 CombTFree of name | |
26 CombType of name * combtyp list |
26 CombType of name * combtyp list |
57 val skolem_prefix: string |
57 val skolem_prefix: string |
58 val skolem_infix: string |
58 val skolem_infix: string |
59 val is_skolem_const_name: string -> bool |
59 val is_skolem_const_name: string -> bool |
60 val num_type_args: theory -> string -> int |
60 val num_type_args: theory -> string -> int |
61 val type_literals_for_types : typ list -> type_literal list |
61 val type_literals_for_types : typ list -> type_literal list |
62 val make_classrel_clauses: theory -> class list -> class list -> classrel_clause list |
62 val make_class_rel_clauses: theory -> class list -> class list -> class_rel_clause list |
63 val make_arity_clauses: theory -> string list -> class list -> class list * arity_clause list |
63 val make_arity_clauses: theory -> string list -> class list -> class list * arity_clause list |
64 val type_of_combterm : combterm -> combtyp |
64 val type_of_combterm : combterm -> combtyp |
65 val strip_combterm_comb : combterm -> combterm * combterm list |
65 val strip_combterm_comb : combterm -> combterm * combterm list |
66 val literals_of_term : theory -> term -> fol_literal list * typ list |
66 val literals_of_term : theory -> term -> fol_literal list * typ list |
67 val conceal_skolem_terms : |
67 val conceal_skolem_terms : |
83 val fixed_var_prefix = "v_"; |
83 val fixed_var_prefix = "v_"; |
84 |
84 |
85 val tvar_prefix = "T_"; |
85 val tvar_prefix = "T_"; |
86 val tfree_prefix = "t_"; |
86 val tfree_prefix = "t_"; |
87 |
87 |
88 val classrel_clause_prefix = "clsrel_"; |
88 val class_rel_clause_prefix = "clsrel_"; |
89 |
89 |
90 val const_prefix = "c_"; |
90 val const_prefix = "c_"; |
91 val type_const_prefix = "tc_"; |
91 val type_const_prefix = "tc_"; |
92 val class_prefix = "class_"; |
92 val class_prefix = "class_"; |
93 |
93 |
286 end |
286 end |
287 |
287 |
288 |
288 |
289 (**** Isabelle class relations ****) |
289 (**** Isabelle class relations ****) |
290 |
290 |
291 datatype classrel_clause = |
291 datatype class_rel_clause = |
292 ClassrelClause of {axiom_name: string, subclass: name, superclass: name} |
292 ClassRelClause of {axiom_name: string, subclass: name, superclass: name} |
293 |
293 |
294 (*Generate all pairs (sub,super) such that sub is a proper subclass of super in theory thy.*) |
294 (*Generate all pairs (sub,super) such that sub is a proper subclass of super in theory thy.*) |
295 fun class_pairs _ [] _ = [] |
295 fun class_pairs _ [] _ = [] |
296 | class_pairs thy subs supers = |
296 | class_pairs thy subs supers = |
297 let |
297 let |
298 val class_less = Sorts.class_less (Sign.classes_of thy) |
298 val class_less = Sorts.class_less (Sign.classes_of thy) |
299 fun add_super sub super = class_less (sub, super) ? cons (sub, super) |
299 fun add_super sub super = class_less (sub, super) ? cons (sub, super) |
300 fun add_supers sub = fold (add_super sub) supers |
300 fun add_supers sub = fold (add_super sub) supers |
301 in fold add_supers subs [] end |
301 in fold add_supers subs [] end |
302 |
302 |
303 fun make_classrel_clause (sub,super) = |
303 fun make_class_rel_clause (sub,super) = |
304 ClassrelClause {axiom_name = classrel_clause_prefix ^ ascii_of sub ^ "_" ^ |
304 ClassRelClause {axiom_name = class_rel_clause_prefix ^ ascii_of sub ^ "_" ^ |
305 ascii_of super, |
305 ascii_of super, |
306 subclass = `make_type_class sub, |
306 subclass = `make_type_class sub, |
307 superclass = `make_type_class super}; |
307 superclass = `make_type_class super}; |
308 |
308 |
309 fun make_classrel_clauses thy subs supers = |
309 fun make_class_rel_clauses thy subs supers = |
310 map make_classrel_clause (class_pairs thy subs supers); |
310 map make_class_rel_clause (class_pairs thy subs supers); |
311 |
311 |
312 |
312 |
313 (** Isabelle arities **) |
313 (** Isabelle arities **) |
314 |
314 |
315 fun arity_clause _ _ (_, []) = [] |
315 fun arity_clause _ _ (_, []) = [] |