| author | wenzelm | 
| Thu, 22 Dec 2005 00:28:53 +0100 | |
| changeset 18467 | bb7b309ac395 | 
| parent 18164 | eb4206c930cd | 
| child 18667 | 85d04c28224a | 
| permissions | -rw-r--r-- | 
| 19 | 1 | (* Title: Pure/sign.ML | 
| 0 | 2 | ID: $Id$ | 
| 251 | 3 | Author: Lawrence C Paulson and Markus Wenzel | 
| 0 | 4 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 5 | Logical signature content: naming conventions, concrete syntax, type | 
| 18062 | 6 | signature, polymorphic constants. | 
| 0 | 7 | *) | 
| 8 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 9 | signature SIGN_THEORY = | 
| 3791 
c5db2c87a646
now supports qualified names (intern vs. extern) !!!
 wenzelm parents: 
3552diff
changeset | 10 | sig | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 11 | val add_defsort: string -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 12 | val add_defsort_i: sort -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 13 | val add_types: (bstring * int * mixfix) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 14 | val add_typedecls: (bstring * string list * mixfix) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 15 | val add_nonterminals: bstring list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 16 | val add_tyabbrs: (bstring * string list * string * mixfix) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 17 | val add_tyabbrs_i: (bstring * string list * typ * mixfix) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 18 | val add_arities: (xstring * string list * string) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 19 | val add_arities_i: (string * sort list * sort) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 20 | val add_syntax: (bstring * string * mixfix) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 21 | val add_syntax_i: (bstring * typ * mixfix) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 22 | val add_modesyntax: (string * bool) -> (bstring * string * mixfix) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 23 | val add_modesyntax_i: (string * bool) -> (bstring * typ * mixfix) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 24 | val del_modesyntax: (string * bool) -> (bstring * string * mixfix) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 25 | val del_modesyntax_i: (string * bool) -> (bstring * typ * mixfix) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 26 | val add_consts: (bstring * string * mixfix) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 27 | val add_consts_i: (bstring * typ * mixfix) list -> theory -> theory | 
| 16941 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 28 | val add_const_constraint: xstring * string -> theory -> theory | 
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 29 | val add_const_constraint_i: string * typ -> theory -> theory | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 30 | val add_classes: (bstring * xstring list) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 31 | val add_classes_i: (bstring * class list) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 32 | val add_classrel: (xstring * xstring) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 33 | val add_classrel_i: (class * class) list -> theory -> theory | 
| 1501 | 34 | val add_trfuns: | 
| 4344 | 35 | (string * (ast list -> ast)) list * | 
| 36 | (string * (term list -> term)) list * | |
| 37 | (string * (term list -> term)) list * | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 38 | (string * (ast list -> ast)) list -> theory -> theory | 
| 2385 | 39 | val add_trfunsT: | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 40 | (string * (bool -> typ -> term list -> term)) list -> theory -> theory | 
| 14645 | 41 | val add_advanced_trfuns: | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 42 | (string * (theory -> ast list -> ast)) list * | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 43 | (string * (theory -> term list -> term)) list * | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 44 | (string * (theory -> term list -> term)) list * | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 45 | (string * (theory -> ast list -> ast)) list -> theory -> theory | 
| 14645 | 46 | val add_advanced_trfunsT: | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 47 | (string * (theory -> bool -> typ -> term list -> term)) list -> theory -> theory | 
| 2693 | 48 | val add_tokentrfuns: | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 49 | (string * string * (string -> string * real)) list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 50 | val add_mode_tokentrfuns: string -> (string * (string -> string * real)) list | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 51 | -> theory -> theory | 
| 17102 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 52 | val parse_ast_translation: bool * string -> theory -> theory | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 53 | val parse_translation: bool * string -> theory -> theory | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 54 | val print_translation: bool * string -> theory -> theory | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 55 | val typed_print_translation: bool * string -> theory -> theory | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 56 | val print_ast_translation: bool * string -> theory -> theory | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 57 | val token_translation: string -> theory -> theory | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 58 | val add_trrules: (xstring * string) Syntax.trrule list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 59 | val add_trrules_i: ast Syntax.trrule list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 60 | val add_path: string -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 61 | val parent_path: theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 62 | val root_path: theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 63 | val absolute_path: theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 64 | val local_path: theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 65 | val qualified_names: theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 66 | val no_base_names: theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 67 | val custom_accesses: (string list -> string list list) -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 68 | val set_policy: (string -> bstring -> string) * (string list -> string list list) -> | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 69 | theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 70 | val restore_naming: theory -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 71 | val hide_classes: bool -> xstring list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 72 | val hide_classes_i: bool -> string list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 73 | val hide_types: bool -> xstring list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 74 | val hide_types_i: bool -> string list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 75 | val hide_consts: bool -> xstring list -> theory -> theory | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 76 | val hide_consts_i: bool -> string list -> theory -> theory | 
| 17343 | 77 | val hide_names: bool -> string * xstring list -> theory -> theory | 
| 78 | val hide_names_i: bool -> string * string list -> theory -> theory | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 79 | end | 
| 0 | 80 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 81 | signature SIGN = | 
| 5642 | 82 | sig | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 83 | type sg (*obsolete*) | 
| 16536 | 84 | val init_data: theory -> theory | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 85 | val rep_sg: theory -> | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 86 |    {naming: NameSpace.naming,
 | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 87 | syn: Syntax.syntax, | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 88 | tsig: Type.tsig, | 
| 18062 | 89 | consts: Consts.T} | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 90 | val naming_of: theory -> NameSpace.naming | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 91 | val base_name: string -> bstring | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 92 | val full_name: theory -> bstring -> string | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 93 | val full_name_path: theory -> string -> bstring -> string | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 94 | val declare_name: theory -> string -> NameSpace.T -> NameSpace.T | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 95 | val syn_of: theory -> Syntax.syntax | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 96 | val tsig_of: theory -> Type.tsig | 
| 17039 
78159411623f
added selectors 'classes_of' and 'classes_arities_of'
 haftmann parents: 
17037diff
changeset | 97 | val classes_of: theory -> Sorts.classes | 
| 
78159411623f
added selectors 'classes_of' and 'classes_arities_of'
 haftmann parents: 
17037diff
changeset | 98 | val classes_arities_of: theory -> Sorts.classes * Sorts.arities | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 99 | val classes: theory -> class list | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 100 | val defaultS: theory -> sort | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 101 | val subsort: theory -> sort * sort -> bool | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 102 | val of_sort: theory -> typ * sort -> bool | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 103 | val witness_sorts: theory -> sort list -> sort list -> (typ * sort) list | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 104 | val universal_witness: theory -> (typ * sort) option | 
| 16655 | 105 | val all_sorts_nonempty: theory -> bool | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 106 | val typ_instance: theory -> typ * typ -> bool | 
| 16941 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 107 | val typ_match: theory -> typ * typ -> Type.tyenv -> Type.tyenv | 
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 108 | val typ_unify: theory -> typ * typ -> Type.tyenv * int -> Type.tyenv * int | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 109 | val is_logtype: theory -> string -> bool | 
| 16941 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 110 | val const_constraint: theory -> string -> typ option | 
| 17037 | 111 | val the_const_constraint: theory -> string -> typ | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 112 | val const_type: theory -> string -> typ option | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 113 | val the_const_type: theory -> string -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 114 | val declared_tyname: theory -> string -> bool | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 115 | val declared_const: theory -> string -> bool | 
| 18062 | 116 | val const_monomorphic: theory -> string -> bool | 
| 18146 | 117 | val const_typargs: theory -> string * typ -> typ list | 
| 18164 | 118 | val const_instance: theory -> string * typ list -> typ | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 119 | val class_space: theory -> NameSpace.T | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 120 | val type_space: theory -> NameSpace.T | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 121 | val const_space: theory -> NameSpace.T | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 122 | val intern_class: theory -> xstring -> string | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 123 | val extern_class: theory -> string -> xstring | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 124 | val intern_type: theory -> xstring -> string | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 125 | val extern_type: theory -> string -> xstring | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 126 | val intern_const: theory -> xstring -> string | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 127 | val extern_const: theory -> string -> xstring | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 128 | val intern_sort: theory -> sort -> sort | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 129 | val extern_sort: theory -> sort -> sort | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 130 | val intern_typ: theory -> typ -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 131 | val extern_typ: theory -> typ -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 132 | val intern_term: theory -> term -> term | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 133 | val extern_term: theory -> term -> term | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 134 | val intern_tycons: theory -> typ -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 135 | val pretty_term': Syntax.syntax -> theory -> term -> Pretty.T | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 136 | val pretty_term: theory -> term -> Pretty.T | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 137 | val pretty_typ: theory -> typ -> Pretty.T | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 138 | val pretty_sort: theory -> sort -> Pretty.T | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 139 | val pretty_classrel: theory -> class list -> Pretty.T | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 140 | val pretty_arity: theory -> arity -> Pretty.T | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 141 | val string_of_term: theory -> term -> string | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 142 | val string_of_typ: theory -> typ -> string | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 143 | val string_of_sort: theory -> sort -> string | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 144 | val string_of_classrel: theory -> class list -> string | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 145 | val string_of_arity: theory -> arity -> string | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 146 | val pprint_term: theory -> term -> pprint_args -> unit | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 147 | val pprint_typ: theory -> typ -> pprint_args -> unit | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 148 | val pp: theory -> Pretty.pp | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 149 | val certify_class: theory -> class -> class | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 150 | val certify_sort: theory -> sort -> sort | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 151 | val certify_typ: theory -> typ -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 152 | val certify_typ_syntax: theory -> typ -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 153 | val certify_typ_abbrev: theory -> typ -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 154 | val certify_term: Pretty.pp -> theory -> term -> term * typ * int | 
| 16494 | 155 | val certify_prop: Pretty.pp -> theory -> term -> term * typ * int | 
| 156 | val cert_term: theory -> term -> term | |
| 157 | val cert_prop: theory -> term -> term | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 158 | val read_sort': Syntax.syntax -> theory -> string -> sort | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 159 | val read_sort: theory -> string -> sort | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 160 | val read_typ': Syntax.syntax -> theory * (indexname -> sort option) -> string -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 161 | val read_typ_syntax': Syntax.syntax -> theory * (indexname -> sort option) -> string -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 162 | val read_typ_abbrev': Syntax.syntax -> theory * (indexname -> sort option) -> string -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 163 | val read_typ: theory * (indexname -> sort option) -> string -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 164 | val read_typ_syntax: theory * (indexname -> sort option) -> string -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 165 | val read_typ_abbrev: theory * (indexname -> sort option) -> string -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 166 | val read_tyname: theory -> string -> typ | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 167 | val read_const: theory -> string -> term | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 168 | val infer_types_simult: Pretty.pp -> theory -> (indexname -> typ option) -> | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 169 | (indexname -> sort option) -> string list -> bool | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 170 | -> (term list * typ) list -> term list * (indexname * typ) list | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 171 | val infer_types: Pretty.pp -> theory -> (indexname -> typ option) -> | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 172 | (indexname -> sort option) -> string list -> bool | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 173 | -> term list * typ -> term * (indexname * typ) list | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 174 | val read_def_terms': Pretty.pp -> (string -> bool) -> Syntax.syntax -> | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 175 | theory * (indexname -> typ option) * (indexname -> sort option) -> | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 176 | string list -> bool -> (string * typ) list -> term list * (indexname * typ) list | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 177 | val read_def_terms: | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 178 | theory * (indexname -> typ option) * (indexname -> sort option) -> | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 179 | string list -> bool -> (string * typ) list -> term list * (indexname * typ) list | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 180 | val simple_read_term: theory -> typ -> string -> term | 
| 16494 | 181 | val read_term: theory -> string -> term | 
| 182 | val read_prop: theory -> string -> term | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 183 | val const_of_class: class -> string | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 184 | val class_of_const: string -> class | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 185 | include SIGN_THEORY | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 186 | end | 
| 5642 | 187 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 188 | structure Sign: SIGN = | 
| 143 | 189 | struct | 
| 0 | 190 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 191 | type sg = theory; | 
| 2185 | 192 | |
| 402 | 193 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 194 | (** datatype sign **) | 
| 16337 | 195 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 196 | datatype sign = Sign of | 
| 18062 | 197 |  {naming: NameSpace.naming,     (*common naming conventions*)
 | 
| 198 | syn: Syntax.syntax, (*concrete syntax for terms, types, sorts*) | |
| 199 | tsig: Type.tsig, (*order-sorted signature of types*) | |
| 200 | consts: Consts.T}; (*polymorphic constants*) | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 201 | |
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 202 | fun make_sign (naming, syn, tsig, consts) = | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 203 |   Sign {naming = naming, syn = syn, tsig = tsig, consts = consts};
 | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 204 | |
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 205 | structure SignData = TheoryDataFun | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 206 | (struct | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 207 | val name = "Pure/sign"; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 208 | type T = sign; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 209 | val copy = I; | 
| 17405 | 210 |   fun extend (Sign {syn, tsig, consts, ...}) =
 | 
| 211 | make_sign (NameSpace.default_naming, syn, tsig, consts); | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 212 | |
| 18062 | 213 | val empty = | 
| 214 | make_sign (NameSpace.default_naming, Syntax.pure_syn, Type.empty_tsig, Consts.empty); | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 215 | |
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 216 | fun merge pp (sign1, sign2) = | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 217 | let | 
| 18062 | 218 |       val Sign {naming = _, syn = syn1, tsig = tsig1, consts = consts1} = sign1;
 | 
| 219 |       val Sign {naming = _, syn = syn2, tsig = tsig2, consts = consts2} = sign2;
 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 220 | |
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 221 | val naming = NameSpace.default_naming; | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 222 | val syn = Syntax.merge_syntaxes syn1 syn2; | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 223 | val tsig = Type.merge_tsigs pp (tsig1, tsig2); | 
| 18062 | 224 | val consts = Consts.merge (consts1, consts2); | 
| 225 | in make_sign (naming, syn, tsig, consts) end; | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 226 | |
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 227 | fun print _ _ = (); | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 228 | end); | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 229 | |
| 16536 | 230 | val init_data = SignData.init; | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 231 | |
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 232 | fun rep_sg thy = SignData.get thy |> (fn Sign args => args); | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 233 | |
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 234 | fun map_sign f = SignData.map (fn Sign {naming, syn, tsig, consts} =>
 | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 235 | make_sign (f (naming, syn, tsig, consts))); | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 236 | |
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 237 | fun map_naming f = map_sign (fn (naming, syn, tsig, consts) => (f naming, syn, tsig, consts)); | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 238 | fun map_syn f = map_sign (fn (naming, syn, tsig, consts) => (naming, f syn, tsig, consts)); | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 239 | fun map_tsig f = map_sign (fn (naming, syn, tsig, consts) => (naming, syn, f tsig, consts)); | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 240 | fun map_consts f = map_sign (fn (naming, syn, tsig, consts) => (naming, syn, tsig, f consts)); | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 241 | |
| 16337 | 242 | |
| 243 | (* naming *) | |
| 244 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 245 | val naming_of = #naming o rep_sg; | 
| 16337 | 246 | val base_name = NameSpace.base; | 
| 247 | val full_name = NameSpace.full o naming_of; | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 248 | fun full_name_path thy elems = NameSpace.full (NameSpace.add_path elems (naming_of thy)); | 
| 16337 | 249 | val declare_name = NameSpace.declare o naming_of; | 
| 14645 | 250 | |
| 251 | ||
| 252 | (* syntax *) | |
| 253 | ||
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 254 | val syn_of = #syn o rep_sg; | 
| 14645 | 255 | |
| 0 | 256 | |
| 16337 | 257 | (* type signature *) | 
| 258 | ||
| 259 | val tsig_of = #tsig o rep_sg; | |
| 17204 | 260 | val classes_of = snd o #classes o Type.rep_tsig o tsig_of; | 
| 261 | fun classes_arities_of thy = (classes_of thy, #arities (Type.rep_tsig (tsig_of thy))); | |
| 7640 | 262 | val classes = Type.classes o tsig_of; | 
| 4844 | 263 | val defaultS = Type.defaultS o tsig_of; | 
| 4568 | 264 | val subsort = Type.subsort o tsig_of; | 
| 7640 | 265 | val of_sort = Type.of_sort o tsig_of; | 
| 266 | val witness_sorts = Type.witness_sorts o tsig_of; | |
| 14784 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 267 | val universal_witness = Type.universal_witness o tsig_of; | 
| 16655 | 268 | val all_sorts_nonempty = is_some o universal_witness; | 
| 14784 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 269 | val typ_instance = Type.typ_instance o tsig_of; | 
| 16941 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 270 | val typ_match = Type.typ_match o tsig_of; | 
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 271 | val typ_unify = Type.unify o tsig_of; | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 272 | fun is_logtype thy c = c mem_string Type.logical_types (tsig_of thy); | 
| 4256 | 273 | |
| 274 | ||
| 18062 | 275 | (* polymorphic constants *) | 
| 16941 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 276 | |
| 18062 | 277 | val consts_of = #consts o rep_sg; | 
| 278 | val the_const_constraint = Consts.constraint o consts_of; | |
| 279 | val const_constraint = try o the_const_constraint; | |
| 280 | val the_const_type = Consts.declaration o consts_of; | |
| 281 | val const_type = try o the_const_type; | |
| 282 | val const_monomorphic = Consts.monomorphic o consts_of; | |
| 283 | val const_typargs = Consts.typargs o consts_of; | |
| 18164 | 284 | val const_instance = Consts.instance o consts_of; | 
| 4256 | 285 | |
| 16894 | 286 | val declared_tyname = Symtab.defined o #2 o #types o Type.rep_tsig o tsig_of; | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 287 | val declared_const = is_some oo const_type; | 
| 620 | 288 | |
| 402 | 289 | |
| 0 | 290 | |
| 16337 | 291 | (** intern / extern names **) | 
| 292 | ||
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 293 | val class_space = #1 o #classes o Type.rep_tsig o tsig_of; | 
| 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 294 | val type_space = #1 o #types o Type.rep_tsig o tsig_of; | 
| 18062 | 295 | val const_space = Consts.space o consts_of; | 
| 14645 | 296 | |
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 297 | val intern_class = NameSpace.intern o class_space; | 
| 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 298 | val extern_class = NameSpace.extern o class_space; | 
| 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 299 | val intern_type = NameSpace.intern o type_space; | 
| 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 300 | val extern_type = NameSpace.extern o type_space; | 
| 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 301 | val intern_const = NameSpace.intern o const_space; | 
| 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 302 | val extern_const = NameSpace.extern o const_space; | 
| 16337 | 303 | |
| 304 | val intern_sort = map o intern_class; | |
| 305 | val extern_sort = map o extern_class; | |
| 306 | ||
| 307 | local | |
| 14645 | 308 | |
| 16337 | 309 | fun mapping add_names f t = | 
| 310 | let | |
| 311 | fun f' x = let val y = f x in if x = y then NONE else SOME (x, y) end; | |
| 312 | val tab = List.mapPartial f' (add_names (t, [])); | |
| 17184 | 313 | fun get x = if_none (AList.lookup (op =) tab x) x; | 
| 16337 | 314 | in get end; | 
| 315 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 316 | fun typ_mapping f g thy T = | 
| 16337 | 317 | T |> Term.map_typ | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 318 | (mapping add_typ_classes (f thy) T) | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 319 | (mapping add_typ_tycons (g thy) T); | 
| 14645 | 320 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 321 | fun term_mapping f g h thy t = | 
| 16337 | 322 | t |> Term.map_term | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 323 | (mapping add_term_classes (f thy) t) | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 324 | (mapping add_term_tycons (g thy) t) | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 325 | (mapping add_term_consts (h thy) t); | 
| 16337 | 326 | |
| 327 | in | |
| 14645 | 328 | |
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 329 | val intern_typ = typ_mapping intern_class intern_type; | 
| 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 330 | val extern_typ = typ_mapping extern_class extern_type; | 
| 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 331 | val intern_term = term_mapping intern_class intern_type intern_const; | 
| 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 332 | val extern_term = term_mapping extern_class extern_type extern_const; | 
| 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 333 | val intern_tycons = typ_mapping (K I) intern_type; | 
| 16337 | 334 | |
| 335 | end; | |
| 14645 | 336 | |
| 337 | ||
| 338 | ||
| 4249 | 339 | (** pretty printing of terms, types etc. **) | 
| 3937 | 340 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 341 | fun pretty_term' syn thy t = | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 342 | Syntax.pretty_term thy syn (Context.exists_name Context.CPureN thy) (extern_term thy t); | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 343 | fun pretty_term thy t = pretty_term' (syn_of thy) thy t; | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 344 | fun pretty_typ thy T = Syntax.pretty_typ thy (syn_of thy) (extern_typ thy T); | 
| 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 345 | fun pretty_sort thy S = Syntax.pretty_sort thy (syn_of thy) (extern_sort thy S); | 
| 3937 | 346 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 347 | fun pretty_classrel thy cs = Pretty.block (List.concat | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 348 | (separate [Pretty.str " <", Pretty.brk 1] (map (single o pretty_sort thy o single) cs))); | 
| 3937 | 349 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 350 | fun pretty_arity thy (a, Ss, S) = | 
| 3937 | 351 | let | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 352 | val a' = extern_type thy a; | 
| 3937 | 353 | val dom = | 
| 354 | if null Ss then [] | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 355 |       else [Pretty.list "(" ")" (map (pretty_sort thy) Ss), Pretty.brk 1];
 | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 356 | in Pretty.block ([Pretty.str (a' ^ " ::"), Pretty.brk 1] @ dom @ [pretty_sort thy S]) end; | 
| 3937 | 357 | |
| 14828 | 358 | val string_of_term = Pretty.string_of oo pretty_term; | 
| 359 | val string_of_typ = Pretty.string_of oo pretty_typ; | |
| 360 | val string_of_sort = Pretty.string_of oo pretty_sort; | |
| 361 | val string_of_classrel = Pretty.string_of oo pretty_classrel; | |
| 362 | val string_of_arity = Pretty.string_of oo pretty_arity; | |
| 3937 | 363 | |
| 16337 | 364 | val pprint_term = (Pretty.pprint o Pretty.quote) oo pretty_term; | 
| 365 | val pprint_typ = (Pretty.pprint o Pretty.quote) oo pretty_typ; | |
| 3937 | 366 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 367 | fun pp thy = Pretty.pp (pretty_term thy, pretty_typ thy, pretty_sort thy, | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 368 | pretty_classrel thy, pretty_arity thy); | 
| 14828 | 369 | |
| 3937 | 370 | |
| 371 | ||
| 16337 | 372 | (** certify entities **) (*exception TYPE*) | 
| 8898 | 373 | |
| 16337 | 374 | (* certify wrt. type signature *) | 
| 8898 | 375 | |
| 16723 | 376 | fun certify cert = cert o tsig_of o Context.check_thy; | 
| 562 | 377 | |
| 16337 | 378 | val certify_class = certify Type.cert_class; | 
| 379 | val certify_sort = certify Type.cert_sort; | |
| 380 | val certify_typ = certify Type.cert_typ; | |
| 381 | val certify_typ_syntax = certify Type.cert_typ_syntax; | |
| 382 | val certify_typ_abbrev = certify Type.cert_typ_abbrev; | |
| 10443 
0a68dc9edba5
added certify_tycon, certify_tyabbr, certify_const;
 wenzelm parents: 
10404diff
changeset | 383 | |
| 4961 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 384 | |
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 385 | (* certify_term *) | 
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 386 | |
| 14987 | 387 | local | 
| 1494 
22f67e796445
added nodup_Vars check in cterm_of. Prevents same var with distinct types.
 nipkow parents: 
1460diff
changeset | 388 | |
| 16337 | 389 | (*determine and check the type of a term*) | 
| 390 | fun type_check pp tm = | |
| 4961 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 391 | let | 
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 392 | fun err_appl why bs t T u U = | 
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 393 | let | 
| 10404 | 394 | val xs = map Free bs; (*we do not rename here*) | 
| 4961 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 395 | val t' = subst_bounds (xs, t); | 
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 396 | val u' = subst_bounds (xs, u); | 
| 16337 | 397 | val msg = cat_lines | 
| 14828 | 398 | (TypeInfer.appl_error (Syntax.pp_show_brackets pp) why t' T u' U); | 
| 16337 | 399 | in raise TYPE (msg, [T, U], [t', u']) end; | 
| 4961 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 400 | |
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 401 | fun typ_of (_, Const (_, T)) = T | 
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 402 | | typ_of (_, Free (_, T)) = T | 
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 403 | | typ_of (_, Var (_, T)) = T | 
| 15570 | 404 | | typ_of (bs, Bound i) = snd (List.nth (bs, i) handle Subscript => | 
| 4961 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 405 |           raise TYPE ("Loose bound variable: B." ^ string_of_int i, [], [Bound i]))
 | 
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 406 | | typ_of (bs, Abs (x, T, body)) = T --> typ_of ((x, T) :: bs, body) | 
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 407 | | typ_of (bs, t $ u) = | 
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 408 | let val T = typ_of (bs, t) and U = typ_of (bs, u) in | 
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 409 | (case T of | 
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 410 |               Type ("fun", [T1, T2]) =>
 | 
| 14828 | 411 | if T1 = U then T2 else err_appl "Incompatible operand type" bs t T u U | 
| 412 | | _ => err_appl "Operator not of function type" bs t T u U) | |
| 4961 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 413 | end; | 
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 414 | |
| 
27f559b54c57
certify_term: type_check replaces Term.type_of, providing sensible
 wenzelm parents: 
4951diff
changeset | 415 | in typ_of ([], tm) end; | 
| 0 | 416 | |
| 14987 | 417 | in | 
| 418 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 419 | fun certify_term pp thy tm = | 
| 251 | 420 | let | 
| 16723 | 421 | val _ = Context.check_thy thy; | 
| 14784 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 422 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 423 | val tm' = map_term_types (certify_typ thy) tm; | 
| 14784 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 424 | val tm' = if tm = tm' then tm else tm'; (*avoid copying of already normal term*) | 
| 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 425 | |
| 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 426 | fun err msg = raise TYPE (msg, [], [tm']); | 
| 3969 | 427 | |
| 14828 | 428 | fun show_const a T = quote a ^ " :: " ^ Pretty.string_of_typ pp T; | 
| 169 | 429 | |
| 14784 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 430 | fun check_atoms (t $ u) = (check_atoms t; check_atoms u) | 
| 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 431 | | check_atoms (Abs (_, _, t)) = check_atoms t | 
| 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 432 | | check_atoms (Const (a, T)) = | 
| 18062 | 433 | (case const_type thy a of | 
| 15531 | 434 |             NONE => err ("Undeclared constant " ^ show_const a T)
 | 
| 18062 | 435 | | SOME U => | 
| 436 | if typ_instance thy (T, U) then () | |
| 14784 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 437 |               else err ("Illegal type for constant " ^ show_const a T))
 | 
| 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 438 | | check_atoms (Var ((x, i), _)) = | 
| 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 439 |           if i < 0 then err ("Malformed variable: " ^ quote x) else ()
 | 
| 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 440 | | check_atoms _ = (); | 
| 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 441 | in | 
| 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 442 | check_atoms tm'; | 
| 16337 | 443 | (tm', type_check pp tm', maxidx_of_term tm') | 
| 14784 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 444 | end; | 
| 251 | 445 | |
| 14987 | 446 | end; | 
| 447 | ||
| 16494 | 448 | fun certify_prop pp thy tm = | 
| 449 | let val res as (tm', T, _) = certify_term pp thy tm | |
| 450 |   in if T <> propT then raise TYPE ("Term not of type prop", [T], [tm']) else res end;
 | |
| 451 | ||
| 452 | fun cert_term thy tm = #1 (certify_term (pp thy) thy tm); | |
| 453 | fun cert_prop thy tm = #1 (certify_prop (pp thy) thy tm); | |
| 454 | ||
| 251 | 455 | |
| 16337 | 456 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 457 | (** read and certify entities **) (*exception ERROR*) | 
| 16337 | 458 | |
| 459 | (* sorts *) | |
| 460 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 461 | fun read_sort' syn thy str = | 
| 16337 | 462 | let | 
| 16723 | 463 | val _ = Context.check_thy thy; | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 464 | val S = intern_sort thy (Syntax.read_sort thy syn str); | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 465 | in certify_sort thy S handle TYPE (msg, _, _) => error msg end; | 
| 16337 | 466 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 467 | fun read_sort thy str = read_sort' (syn_of thy) thy str; | 
| 16337 | 468 | |
| 469 | ||
| 470 | (* types *) | |
| 471 | ||
| 472 | local | |
| 473 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 474 | fun gen_read_typ' cert syn (thy, def_sort) str = | 
| 16337 | 475 | let | 
| 16723 | 476 | val _ = Context.check_thy thy; | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 477 | val get_sort = TypeInfer.get_sort (tsig_of thy) def_sort (intern_sort thy); | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 478 | val T = intern_tycons thy (Syntax.read_typ thy syn get_sort (intern_sort thy) str); | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 479 | in cert thy T handle TYPE (msg, _, _) => error msg end | 
| 16337 | 480 |   handle ERROR => error ("The error(s) above occurred in type " ^ quote str);
 | 
| 481 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 482 | fun gen_read_typ cert (thy, def_sort) str = | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 483 | gen_read_typ' cert (syn_of thy) (thy, def_sort) str; | 
| 16337 | 484 | |
| 485 | in | |
| 486 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 487 | fun no_def_sort thy = (thy: theory, K NONE); | 
| 16337 | 488 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 489 | val read_typ' = gen_read_typ' certify_typ; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 490 | val read_typ_syntax' = gen_read_typ' certify_typ_syntax; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 491 | val read_typ_abbrev' = gen_read_typ' certify_typ_abbrev; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 492 | val read_typ = gen_read_typ certify_typ; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 493 | val read_typ_syntax = gen_read_typ certify_typ_syntax; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 494 | val read_typ_abbrev = gen_read_typ certify_typ_abbrev; | 
| 16337 | 495 | |
| 496 | end; | |
| 497 | ||
| 498 | ||
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 499 | (* type and constant names *) | 
| 15703 | 500 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 501 | fun read_tyname thy raw_c = | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 502 | let val c = intern_type thy raw_c in | 
| 17412 | 503 | (case Symtab.lookup (#2 (#types (Type.rep_tsig (tsig_of thy)))) c of | 
| 15703 | 504 | SOME (Type.LogicalType n, _) => Type (c, replicate n dummyT) | 
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 505 |     | _ => error ("Undeclared type constructor: " ^ quote c))
 | 
| 15703 | 506 | end; | 
| 507 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 508 | fun read_const thy raw_c = | 
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 509 | let | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 510 | val c = intern_const thy raw_c; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 511 | val _ = the_const_type thy c handle TYPE (msg, _, _) => error msg; | 
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 512 | in Const (c, dummyT) end; | 
| 15703 | 513 | |
| 514 | ||
| 251 | 515 | |
| 583 | 516 | (** infer_types **) (*exception ERROR*) | 
| 251 | 517 | |
| 2979 | 518 | (* | 
| 16337 | 519 | def_type: partial map from indexnames to types (constrains Frees and Vars) | 
| 520 | def_sort: partial map from indexnames to sorts (constrains TFrees and TVars) | |
| 2979 | 521 | used: list of already used type variables | 
| 522 | freeze: if true then generated parameters are turned into TFrees, else TVars | |
| 4249 | 523 | |
| 524 | termss: lists of alternative parses (only one combination should be type-correct) | |
| 525 | typs: expected types | |
| 2979 | 526 | *) | 
| 527 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 528 | fun infer_types_simult pp thy def_type def_sort used freeze args = | 
| 251 | 529 | let | 
| 18146 | 530 | val termss = fold_rev (multiply o fst) args [[]]; | 
| 4249 | 531 | val typs = | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 532 | map (fn (_, T) => certify_typ thy T handle TYPE (msg, _, _) => error msg) args; | 
| 169 | 533 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 534 | fun infer ts = OK (TypeInfer.infer_types (Syntax.pp_show_brackets pp) (tsig_of thy) | 
| 16941 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 535 | (const_constraint thy) def_type def_sort (intern_const thy) (intern_tycons thy) | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 536 | (intern_sort thy) used freeze typs ts) | 
| 4249 | 537 | handle TYPE (msg, _, _) => Error msg; | 
| 623 | 538 | |
| 4249 | 539 | val err_results = map infer termss; | 
| 15570 | 540 | val errs = List.mapPartial get_error err_results; | 
| 541 | val results = List.mapPartial get_ok err_results; | |
| 4249 | 542 | |
| 14645 | 543 | val ambiguity = length termss; | 
| 544 | ||
| 4249 | 545 | fun ambig_msg () = | 
| 546 | if ambiguity > 1 andalso ambiguity <= ! Syntax.ambiguity_level | |
| 547 | then | |
| 548 | error_msg "Got more than one parse tree.\n\ | |
| 3805 | 549 | \Retry with smaller Syntax.ambiguity_level for more information." | 
| 952 
9e10962866b0
Removed an old bug which made some simultaneous instantiations fail if they
 nipkow parents: 
949diff
changeset | 550 | else (); | 
| 4249 | 551 | in | 
| 552 | if null results then (ambig_msg (); error (cat_lines errs)) | |
| 553 | else if length results = 1 then | |
| 554 | (if ambiguity > ! Syntax.ambiguity_level then | |
| 555 | warning "Fortunately, only one parse tree is type correct.\n\ | |
| 556 | \You may still want to disambiguate your grammar or your input." | |
| 557 | else (); hd results) | |
| 558 |     else (ambig_msg (); error ("More than one term is type correct:\n" ^
 | |
| 15570 | 559 | cat_lines (map (Pretty.string_of_term pp) (List.concat (map fst results))))) | 
| 4249 | 560 | end; | 
| 623 | 561 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 562 | fun infer_types pp thy def_type def_sort used freeze tsT = | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 563 | apfst hd (infer_types_simult pp thy def_type def_sort used freeze [tsT]); | 
| 251 | 564 | |
| 565 | ||
| 16494 | 566 | (* read_def_terms -- read terms and infer types *) (*exception ERROR*) | 
| 16337 | 567 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 568 | fun read_def_terms' pp is_logtype syn (thy, types, sorts) used freeze sTs = | 
| 8607 | 569 | let | 
| 570 | fun read (s, T) = | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 571 | let val T' = certify_typ thy T handle TYPE (msg, _, _) => error msg | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 572 | in (Syntax.read thy is_logtype syn T' s, T') end; | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 573 | in infer_types_simult pp thy types sorts used freeze (map read sTs) end; | 
| 8607 | 574 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 575 | fun read_def_terms (thy, types, sorts) = | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 576 | read_def_terms' (pp thy) (is_logtype thy) (syn_of thy) (thy, types, sorts); | 
| 12068 
469f372d63db
added pretty_term', read_typ', read_typ_no_norm', read_def_terms'
 wenzelm parents: 
11720diff
changeset | 577 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 578 | fun simple_read_term thy T s = | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 579 | let val ([t], _) = read_def_terms (thy, K NONE, K NONE) [] true [(s, T)] | 
| 16337 | 580 | in t end | 
| 581 |   handle ERROR => error ("The error(s) above occurred for term " ^ s);
 | |
| 8802 | 582 | |
| 16494 | 583 | fun read_term thy = simple_read_term thy TypeInfer.logicT; | 
| 584 | fun read_prop thy = simple_read_term thy propT; | |
| 585 | ||
| 8607 | 586 | |
| 2979 | 587 | |
| 16337 | 588 | (** signature extension functions **) (*exception ERROR/TYPE*) | 
| 386 | 589 | |
| 590 | (* add default sort *) | |
| 591 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 592 | fun gen_add_defsort prep_sort s thy = | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 593 | thy |> map_tsig (Type.set_defsort (prep_sort thy s)); | 
| 8898 | 594 | |
| 16337 | 595 | val add_defsort = gen_add_defsort read_sort; | 
| 596 | val add_defsort_i = gen_add_defsort certify_sort; | |
| 386 | 597 | |
| 598 | ||
| 599 | (* add type constructors *) | |
| 600 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 601 | fun add_types types thy = thy |> map_sign (fn (naming, syn, tsig, consts) => | 
| 14856 | 602 | let | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 603 | val syn' = Syntax.extend_type_gram types syn; | 
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 604 | val decls = map (fn (a, n, mx) => (Syntax.type_name a mx, n)) types; | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 605 | val tsig' = Type.add_types naming decls tsig; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 606 | in (naming, syn', tsig', consts) end); | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 607 | |
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 608 | fun add_typedecls decls thy = | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 609 | let | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 610 | fun type_of (a, vs, mx) = | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 611 | if null (duplicates vs) then (a, length vs, mx) | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 612 |       else error ("Duplicate parameters in type declaration: " ^ quote a);
 | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 613 | in add_types (map type_of decls) thy end; | 
| 16337 | 614 | |
| 615 | ||
| 616 | (* add nonterminals *) | |
| 617 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 618 | fun add_nonterminals ns thy = thy |> map_sign (fn (naming, syn, tsig, consts) => | 
| 16337 | 619 | let | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 620 | val syn' = Syntax.extend_consts ns syn; | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 621 | val tsig' = Type.add_nonterminals naming ns tsig; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 622 | in (naming, syn', tsig', consts) end); | 
| 386 | 623 | |
| 624 | ||
| 625 | (* add type abbreviations *) | |
| 626 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 627 | fun gen_add_tyabbr prep_typ (a, vs, rhs, mx) thy = | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 628 | thy |> map_sign (fn (naming, syn, tsig, consts) => | 
| 16337 | 629 | let | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 630 | val syn' = Syntax.extend_type_gram [(a, length vs, mx)] syn; | 
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 631 | val a' = Syntax.type_name a mx; | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 632 | val abbr = (a', vs, prep_typ thy rhs) | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 633 |         handle ERROR => error ("in type abbreviation " ^ quote a');
 | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 634 | val tsig' = Type.add_abbrevs naming [abbr] tsig; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 635 | in (naming, syn', tsig', consts) end); | 
| 386 | 636 | |
| 16337 | 637 | val add_tyabbrs = fold (gen_add_tyabbr (read_typ_syntax o no_def_sort)); | 
| 638 | val add_tyabbrs_i = fold (gen_add_tyabbr certify_typ_syntax); | |
| 14784 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 639 | |
| 
e65d77313a94
xxx_typ_raw replace xxx_typ_no_norm forms; prevent duplicate consts declarations in merge; misc cleanup;
 wenzelm parents: 
14700diff
changeset | 640 | |
| 386 | 641 | (* add type arities *) | 
| 642 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 643 | fun gen_add_arities int_type prep_sort arities thy = thy |> map_tsig (fn tsig => | 
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 644 | let | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 645 | fun prep_arity (a, Ss, S) = (int_type thy a, map (prep_sort thy) Ss, prep_sort thy S) | 
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 646 |       handle ERROR => error ("in arity for type " ^ quote a);
 | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 647 | val tsig' = Type.add_arities (pp thy) (map prep_arity arities) tsig; | 
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 648 | in tsig' end); | 
| 386 | 649 | |
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 650 | val add_arities = gen_add_arities intern_type read_sort; | 
| 16337 | 651 | val add_arities_i = gen_add_arities (K I) certify_sort; | 
| 8898 | 652 | |
| 386 | 653 | |
| 16337 | 654 | (* modify syntax *) | 
| 655 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 656 | fun gen_syntax change_gram prep_typ prmode args thy = | 
| 16337 | 657 | let | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 658 | fun prep (c, T, mx) = (c, prep_typ thy T, mx) | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 659 |       handle ERROR => error ("in syntax declaration " ^ quote (Syntax.const_name c mx));
 | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 660 | in thy |> map_syn (change_gram (is_logtype thy) prmode (map prep args)) end; | 
| 16337 | 661 | |
| 662 | fun gen_add_syntax x = gen_syntax Syntax.extend_const_gram x; | |
| 386 | 663 | |
| 16337 | 664 | val add_modesyntax = gen_add_syntax (read_typ_syntax o no_def_sort); | 
| 665 | val add_modesyntax_i = gen_add_syntax certify_typ_syntax; | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 666 | val add_syntax = add_modesyntax Syntax.default_mode; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 667 | val add_syntax_i = add_modesyntax_i Syntax.default_mode; | 
| 16337 | 668 | val del_modesyntax = gen_syntax Syntax.remove_const_gram (read_typ_syntax o no_def_sort); | 
| 669 | val del_modesyntax_i = gen_syntax Syntax.remove_const_gram certify_typ_syntax; | |
| 3805 | 670 | |
| 16337 | 671 | |
| 672 | (* add constants *) | |
| 386 | 673 | |
| 17995 | 674 | local | 
| 675 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 676 | fun gen_add_consts prep_typ raw_args thy = | 
| 386 | 677 | let | 
| 16988 | 678 | val prepT = Compress.typ thy o Type.varifyT o Type.no_tvars o Term.no_dummyT o prep_typ thy; | 
| 16337 | 679 | fun prep (c, T, mx) = ((c, prepT T, mx) handle TYPE (msg, _, _) => error msg) | 
| 680 |       handle ERROR => error ("in declaration of constant " ^ quote (Syntax.const_name c mx));
 | |
| 681 | val args = map prep raw_args; | |
| 18062 | 682 | val decls = args |> map (fn (c, T, mx) => (Syntax.const_name c mx, T)); | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 683 | in | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 684 | thy | 
| 18062 | 685 | |> map_consts (fold (Consts.declare (naming_of thy)) decls) | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 686 | |> add_syntax_i args | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 687 | end; | 
| 386 | 688 | |
| 17995 | 689 | in | 
| 690 | ||
| 16337 | 691 | val add_consts = gen_add_consts (read_typ o no_def_sort); | 
| 692 | val add_consts_i = gen_add_consts certify_typ; | |
| 386 | 693 | |
| 17995 | 694 | end; | 
| 695 | ||
| 386 | 696 | |
| 16941 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 697 | (* add constraints *) | 
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 698 | |
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 699 | fun gen_add_constraint int_const prep_typ (raw_c, raw_T) thy = | 
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 700 | let | 
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 701 | val c = int_const thy raw_c; | 
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 702 | val T = Term.zero_var_indexesT (Term.no_dummyT (prep_typ thy raw_T)) | 
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 703 | handle TYPE (msg, _, _) => error msg; | 
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 704 | val _ = cert_term thy (Const (c, T)) | 
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 705 | handle TYPE (msg, _, _) => error msg; | 
| 18062 | 706 | in thy |> map_consts (Consts.constrain (c, T)) end; | 
| 16941 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 707 | |
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 708 | val add_const_constraint = gen_add_constraint intern_const (read_typ o no_def_sort); | 
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 709 | val add_const_constraint_i = gen_add_constraint (K I) certify_typ; | 
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 710 | |
| 
0bda949449ee
added add_const_constraint(_i), const_constraint;
 wenzelm parents: 
16894diff
changeset | 711 | |
| 386 | 712 | (* add type classes *) | 
| 713 | ||
| 16337 | 714 | val classN = "_class"; | 
| 386 | 715 | |
| 16337 | 716 | val const_of_class = suffix classN; | 
| 717 | fun class_of_const c = unsuffix classN c | |
| 718 |   handle Fail _ => raise TERM ("class_of_const: bad name " ^ quote c, []);
 | |
| 386 | 719 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 720 | fun gen_add_class int_class (bclass, raw_classes) thy = | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 721 | thy |> map_sign (fn (naming, syn, tsig, consts) => | 
| 16337 | 722 | let | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 723 | val classes = map (int_class thy) raw_classes; | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 724 | val syn' = Syntax.extend_consts [bclass] syn; | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 725 | val tsig' = Type.add_classes (pp thy) naming [(bclass, classes)] tsig; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 726 | in (naming, syn', tsig', consts) end) | 
| 16337 | 727 | |> add_consts_i [(const_of_class bclass, a_itselfT --> propT, Syntax.NoSyn)]; | 
| 3791 
c5db2c87a646
now supports qualified names (intern vs. extern) !!!
 wenzelm parents: 
3552diff
changeset | 728 | |
| 16337 | 729 | val add_classes = fold (gen_add_class intern_class); | 
| 730 | val add_classes_i = fold (gen_add_class (K I)); | |
| 386 | 731 | |
| 732 | ||
| 2963 | 733 | (* add to classrel *) | 
| 421 | 734 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 735 | fun gen_add_classrel int_class raw_pairs thy = thy |> map_tsig (fn tsig => | 
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 736 | let | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 737 | val pairs = map (pairself (int_class thy)) raw_pairs; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 738 | val tsig' = Type.add_classrel (pp thy) pairs tsig; | 
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 739 | in tsig' end); | 
| 16337 | 740 | |
| 741 | val add_classrel = gen_add_classrel intern_class; | |
| 742 | val add_classrel_i = gen_add_classrel (K I); | |
| 421 | 743 | |
| 744 | ||
| 14645 | 745 | (* add translation functions *) | 
| 746 | ||
| 15746 | 747 | local | 
| 748 | ||
| 749 | fun mk trs = map Syntax.mk_trfun trs; | |
| 750 | ||
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 751 | fun gen_add_trfuns ext non_typed (atrs, trs, tr's, atr's) = | 
| 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 752 | map_syn (ext (mk atrs, mk trs, mk (map (apsnd non_typed) tr's), mk atr's)); | 
| 14645 | 753 | |
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 754 | fun gen_add_trfunsT ext tr's = map_syn (ext ([], [], mk tr's, [])); | 
| 14645 | 755 | |
| 15746 | 756 | in | 
| 757 | ||
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 758 | val add_trfuns = gen_add_trfuns Syntax.extend_trfuns Syntax.non_typed_tr'; | 
| 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 759 | val add_trfunsT = gen_add_trfunsT Syntax.extend_trfuns; | 
| 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 760 | val add_advanced_trfuns = gen_add_trfuns Syntax.extend_advanced_trfuns Syntax.non_typed_tr''; | 
| 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 761 | val add_advanced_trfunsT = gen_add_trfunsT Syntax.extend_advanced_trfuns; | 
| 14645 | 762 | |
| 15746 | 763 | end; | 
| 764 | ||
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 765 | val add_tokentrfuns = map_syn o Syntax.extend_tokentrfuns; | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 766 | fun add_mode_tokentrfuns m = add_tokentrfuns o map (fn (s, f) => (m, s, f)); | 
| 14645 | 767 | |
| 768 | ||
| 17102 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 769 | (* compile translation functions *) | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 770 | |
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 771 | local | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 772 | |
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 773 | fun advancedT false = "" | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 774 | | advancedT true = "theory -> "; | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 775 | |
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 776 | fun advancedN false = "" | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 777 | | advancedN true = "advanced_"; | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 778 | |
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 779 | in | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 780 | |
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 781 | fun parse_ast_translation (a, txt) = | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 782 |   txt |> Context.use_let ("val parse_ast_translation: (string * (" ^ advancedT a ^
 | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 783 | "Syntax.ast list -> Syntax.ast)) list") | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 784 |     ("Sign.add_" ^ advancedN a ^ "trfuns (parse_ast_translation, [], [], [])");
 | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 785 | |
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 786 | fun parse_translation (a, txt) = | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 787 |   txt |> Context.use_let ("val parse_translation: (string * (" ^ advancedT a ^
 | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 788 | "term list -> term)) list") | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 789 |     ("Sign.add_" ^ advancedN a ^ "trfuns ([], parse_translation, [], [])");
 | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 790 | |
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 791 | fun print_translation (a, txt) = | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 792 |   txt |> Context.use_let ("val print_translation: (string * (" ^ advancedT a ^
 | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 793 | "term list -> term)) list") | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 794 |     ("Sign.add_" ^ advancedN a ^ "trfuns ([], [], print_translation, [])");
 | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 795 | |
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 796 | fun print_ast_translation (a, txt) = | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 797 |   txt |> Context.use_let ("val print_ast_translation: (string * (" ^ advancedT a ^
 | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 798 | "Syntax.ast list -> Syntax.ast)) list") | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 799 |     ("Sign.add_" ^ advancedN a ^ "trfuns ([], [], [], print_ast_translation)");
 | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 800 | |
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 801 | fun typed_print_translation (a, txt) = | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 802 |   txt |> Context.use_let ("val typed_print_translation: (string * (" ^ advancedT a ^
 | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 803 | "bool -> typ -> term list -> term)) list") | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 804 |     ("Sign.add_" ^ advancedN a ^ "trfunsT typed_print_translation");
 | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 805 | |
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 806 | val token_translation = | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 807 | Context.use_let "val token_translation: (string * string * (string -> string * real)) list" | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 808 | "Sign.add_tokentrfuns token_translation"; | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 809 | |
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 810 | end; | 
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 811 | |
| 
a83a80f1c8dd
added interfaces for compile translation functions (from Isar/isar_thy.ML);
 wenzelm parents: 
17039diff
changeset | 812 | |
| 4619 | 813 | (* add translation rules *) | 
| 814 | ||
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 815 | fun add_trrules args thy = thy |> map_syn (fn syn => | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 816 | let val rules = map (Syntax.map_trrule (apfst (intern_type thy))) args | 
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 817 | in Syntax.extend_trrules thy (is_logtype thy) syn rules syn end); | 
| 8725 | 818 | |
| 16597 
5a5229a55964
eliminated separate syn type -- advanced trfuns already part of Syntax.syntax;
 wenzelm parents: 
16536diff
changeset | 819 | val add_trrules_i = map_syn o Syntax.extend_trrules_i; | 
| 386 | 820 | |
| 821 | ||
| 16337 | 822 | (* modify naming *) | 
| 6546 | 823 | |
| 16337 | 824 | val add_path = map_naming o NameSpace.add_path; | 
| 825 | val qualified_names = map_naming NameSpace.qualified_names; | |
| 826 | val no_base_names = map_naming NameSpace.no_base_names; | |
| 827 | val custom_accesses = map_naming o NameSpace.custom_accesses; | |
| 828 | val set_policy = map_naming o NameSpace.set_policy; | |
| 829 | val restore_naming = map_naming o K o naming_of; | |
| 6546 | 830 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 831 | val parent_path = add_path ".."; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 832 | val root_path = add_path "/"; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 833 | val absolute_path = add_path "//"; | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 834 | |
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 835 | fun local_path thy = thy |> root_path |> add_path (Context.theory_name thy); | 
| 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 836 | |
| 6546 | 837 | |
| 16337 | 838 | (* hide names *) | 
| 386 | 839 | |
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 840 | fun hide_classes b xs thy = thy |> map_tsig (Type.hide_classes b (map (intern_class thy) xs)); | 
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 841 | val hide_classes_i = map_tsig oo Type.hide_classes; | 
| 16442 
1171ecf7fb7e
obsolete type sg is now an alias for Context.theory;
 wenzelm parents: 
16368diff
changeset | 842 | fun hide_types b xs thy = thy |> map_tsig (Type.hide_types b (map (intern_type thy) xs)); | 
| 16368 
a06868ebeb0f
discontinued named name spaces (classK, typeK, constK);
 wenzelm parents: 
16354diff
changeset | 843 | val hide_types_i = map_tsig oo Type.hide_types; | 
| 18062 | 844 | fun hide_consts b xs thy = thy |> map_consts (fold (Consts.hide b o intern_const thy) xs); | 
| 845 | val hide_consts_i = map_consts oo (fold o Consts.hide); | |
| 386 | 846 | |
| 17343 | 847 | local | 
| 848 | ||
| 849 | val kinds = | |
| 850 |  [("class", (intern_class, can o certify_class, hide_classes_i)),
 | |
| 851 |   ("type", (intern_type, declared_tyname, hide_types_i)),
 | |
| 852 |   ("const", (intern_const, declared_const, hide_consts_i))];
 | |
| 853 | ||
| 854 | fun gen_hide int b (kind, xnames) thy = | |
| 855 | (case AList.lookup (op =) kinds kind of | |
| 856 | SOME (intern, check, hide) => | |
| 857 | let | |
| 858 | val names = if int then map (intern thy) xnames else xnames; | |
| 859 | val bads = filter_out (check thy) names; | |
| 860 | in | |
| 861 | if null bads then hide b names thy | |
| 862 |         else error ("Attempt to hide undeclared item(s): " ^ commas_quote bads)
 | |
| 863 | end | |
| 864 |   | NONE => error ("Bad name space specification: " ^ quote kind));
 | |
| 865 | ||
| 866 | in | |
| 867 | ||
| 868 | val hide_names = gen_hide true; | |
| 869 | val hide_names_i = gen_hide false; | |
| 870 | ||
| 0 | 871 | end; | 
| 17343 | 872 | |
| 873 | end; |