| author | wenzelm | 
| Sat, 24 May 2008 20:12:18 +0200 | |
| changeset 26984 | d0e098e206f3 | 
| parent 26959 | f8f2df3e4d83 | 
| child 27198 | 79e9bf691aed | 
| permissions | -rw-r--r-- | 
| 3987 | 1 | (* Title: Pure/pure_thy.ML | 
| 2 | ID: $Id$ | |
| 3 | Author: Markus Wenzel, TU Muenchen | |
| 4 | ||
| 26430 | 5 | Theorem storage. Pure theory syntax and logical content. | 
| 3987 | 6 | *) | 
| 7 | ||
| 8 | signature PURE_THY = | |
| 9 | sig | |
| 23657 | 10 | val tag_rule: Markup.property -> thm -> thm | 
| 18801 | 11 | val untag_rule: string -> thm -> thm | 
| 23657 | 12 | val tag: Markup.property -> attribute | 
| 18801 | 13 | val untag: string -> attribute | 
| 21964 | 14 | val has_name_hint: thm -> bool | 
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 15 | val get_name_hint: thm -> string | 
| 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 16 | val put_name_hint: string -> thm -> thm | 
| 25981 | 17 | val get_group: thm -> string option | 
| 18 | val put_group: string -> thm -> thm | |
| 19 | val group: string -> attribute | |
| 22251 | 20 | val has_kind: thm -> bool | 
| 18801 | 21 | val get_kind: thm -> string | 
| 22 | val kind_rule: string -> thm -> thm | |
| 23 | val kind: string -> attribute | |
| 24 | val kind_internal: attribute | |
| 23657 | 25 | val has_internal: Markup.property list -> bool | 
| 18801 | 26 | val is_internal: thm -> bool | 
| 26666 | 27 | val intern_fact: theory -> xstring -> string | 
| 26693 | 28 | val defined_fact: theory -> string -> bool | 
| 26683 | 29 | val get_fact: Context.generic -> theory -> Facts.ref -> thm list | 
| 26344 
04dacc6809b6
simplified get_thm(s): back to plain name argument;
 wenzelm parents: 
26336diff
changeset | 30 | val get_thms: theory -> xstring -> thm list | 
| 
04dacc6809b6
simplified get_thm(s): back to plain name argument;
 wenzelm parents: 
26336diff
changeset | 31 | val get_thm: theory -> xstring -> thm | 
| 17162 | 32 | val theorems_of: theory -> thm list NameSpace.table | 
| 26666 | 33 | val facts_of: theory -> Facts.T | 
| 16336 | 34 | val thms_of: theory -> (string * thm) list | 
| 35 | val all_thms_of: theory -> (string * thm) list | |
| 26666 | 36 | val hide_fact: bool -> string -> theory -> theory | 
| 21580 | 37 |   val map_facts: ('a -> 'b) -> ('c * ('a list * 'd) list) list -> ('c * ('b list * 'd) list) list
 | 
| 21567 | 38 |   val burrow_fact: ('a list -> 'b list) -> ('a list * 'c) list -> ('b list * 'c) list
 | 
| 21580 | 39 |   val burrow_facts: ('a list -> 'b list) ->
 | 
| 40 |     ('c * ('a list * 'd) list) list -> ('c * ('b list * 'd) list) list
 | |
| 41 | val name_multi: string -> 'a list -> (string * 'a) list | |
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 42 | val name_thm: bool -> bool -> string -> thm -> thm | 
| 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 43 | val name_thms: bool -> bool -> string -> thm list -> thm list | 
| 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 44 | val name_thmss: bool -> string -> (thm list * 'a) list -> (thm list * 'a) list | 
| 26488 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 45 | val store_thms: bstring * thm list -> theory -> thm list * theory | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 46 | val store_thm: bstring * thm -> theory -> thm * theory | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 47 | val store_thm_open: bstring * thm -> theory -> thm * theory | 
| 18728 | 48 | val add_thms: ((bstring * thm) * attribute list) list -> theory -> thm list * theory | 
| 24965 | 49 | val add_thmss: ((bstring * thm list) * attribute list) list -> theory -> thm list list * theory | 
| 26488 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 50 | val add_thms_dynamic: bstring * (Context.generic -> thm list) -> theory -> theory | 
| 25598 | 51 | val note: string -> string * thm -> theory -> thm * theory | 
| 18801 | 52 | val note_thmss: string -> ((bstring * attribute list) * | 
| 26336 
a0e2b706ce73
renamed datatype thmref to Facts.ref, tuned interfaces;
 wenzelm parents: 
26320diff
changeset | 53 | (Facts.ref * attribute list) list) list -> theory -> (bstring * thm list) list * theory | 
| 18801 | 54 | val note_thmss_i: string -> ((bstring * attribute list) * | 
| 55 | (thm list * attribute list) list) list -> theory -> (bstring * thm list) list * theory | |
| 25981 | 56 | val note_thmss_grouped: string -> string -> ((bstring * attribute list) * | 
| 57 | (thm list * attribute list) list) list -> theory -> (bstring * thm list) list * theory | |
| 18801 | 58 | val note_thmss_qualified: string -> string -> ((bstring * attribute list) * | 
| 18728 | 59 | (thm list * attribute list) list) list -> theory -> (bstring * thm list) list * theory | 
| 60 | val add_axioms: ((bstring * string) * attribute list) list -> theory -> thm list * theory | |
| 61 | val add_axioms_i: ((bstring * term) * attribute list) list -> theory -> thm list * theory | |
| 62 | val add_defs: bool -> ((bstring * string) * attribute list) list -> | |
| 18377 | 63 | theory -> thm list * theory | 
| 18728 | 64 | val add_defs_i: bool -> ((bstring * term) * attribute list) list -> | 
| 18377 | 65 | theory -> thm list * theory | 
| 19629 | 66 | val add_defs_unchecked: bool -> ((bstring * string) * attribute list) list -> | 
| 67 | theory -> thm list * theory | |
| 68 | val add_defs_unchecked_i: bool -> ((bstring * term) * attribute list) list -> | |
| 69 | theory -> thm list * theory | |
| 26959 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 70 | val old_appl_syntax: theory -> bool | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 71 | val old_appl_syntax_setup: theory -> theory | 
| 3987 | 72 | end; | 
| 73 | ||
| 74 | structure PureThy: PURE_THY = | |
| 75 | struct | |
| 76 | ||
| 77 | ||
| 18801 | 78 | (*** theorem tags ***) | 
| 79 | ||
| 80 | (* add / delete tags *) | |
| 81 | ||
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 82 | fun tag_rule tg = Thm.map_tags (insert (op =) tg); | 
| 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 83 | fun untag_rule s = Thm.map_tags (filter_out (fn (s', _) => s = s')); | 
| 18801 | 84 | |
| 85 | fun tag tg x = Thm.rule_attribute (K (tag_rule tg)) x; | |
| 86 | fun untag s x = Thm.rule_attribute (K (untag_rule s)) x; | |
| 87 | ||
| 88 | ||
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 89 | (* unofficial theorem names *) | 
| 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 90 | |
| 23657 | 91 | fun the_name_hint thm = the (AList.lookup (op =) (Thm.get_tags thm) Markup.nameN); | 
| 22251 | 92 | |
| 93 | val has_name_hint = can the_name_hint; | |
| 94 | val get_name_hint = the_default "??.unknown" o try the_name_hint; | |
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 95 | |
| 23657 | 96 | fun put_name_hint name = untag_rule Markup.nameN #> tag_rule (Markup.nameN, name); | 
| 21964 | 97 | |
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 98 | |
| 25981 | 99 | (* theorem groups *) | 
| 100 | ||
| 101 | fun get_group thm = AList.lookup (op =) (Thm.get_tags thm) Markup.groupN; | |
| 102 | ||
| 103 | fun put_group name = | |
| 104 | if name = "" then I else Thm.map_tags (AList.update (op =) (Markup.groupN, name)); | |
| 105 | ||
| 106 | fun group name = Thm.rule_attribute (K (put_group name)); | |
| 107 | ||
| 108 | ||
| 18801 | 109 | (* theorem kinds *) | 
| 110 | ||
| 23657 | 111 | fun the_kind thm = the (AList.lookup (op =) (Thm.get_tags thm) Markup.kindN); | 
| 22251 | 112 | |
| 113 | val has_kind = can the_kind; | |
| 25981 | 114 | val get_kind = the_default "" o try the_kind; | 
| 18801 | 115 | |
| 23657 | 116 | fun kind_rule k = tag_rule (Markup.kindN, k) o untag_rule Markup.kindN; | 
| 18801 | 117 | fun kind k x = if k = "" then x else Thm.rule_attribute (K (kind_rule k)) x; | 
| 22363 | 118 | fun kind_internal x = kind Thm.internalK x; | 
| 23657 | 119 | fun has_internal tags = exists (fn tg => tg = (Markup.kindN, Thm.internalK)) tags; | 
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 120 | val is_internal = has_internal o Thm.get_tags; | 
| 18801 | 121 | |
| 122 | ||
| 123 | ||
| 4922 
03b81b6e1baa
added thms_closure: theory -> xstring -> tthm list option;
 wenzelm parents: 
4853diff
changeset | 124 | (*** theorem database ***) | 
| 3987 | 125 | |
| 16441 | 126 | (** dataype theorems **) | 
| 3987 | 127 | |
| 26282 
305d5ca4fa9d
replaced obsolete FactIndex.T by Facts.T (cumulative version, assumes that facts are only added to unfinished theories);
 wenzelm parents: 
26050diff
changeset | 128 | datatype thms = Thms of | 
| 
305d5ca4fa9d
replaced obsolete FactIndex.T by Facts.T (cumulative version, assumes that facts are only added to unfinished theories);
 wenzelm parents: 
26050diff
changeset | 129 |  {theorems: thm list NameSpace.table,   (* FIXME legacy *)
 | 
| 
305d5ca4fa9d
replaced obsolete FactIndex.T by Facts.T (cumulative version, assumes that facts are only added to unfinished theories);
 wenzelm parents: 
26050diff
changeset | 130 | all_facts: Facts.T}; | 
| 
305d5ca4fa9d
replaced obsolete FactIndex.T by Facts.T (cumulative version, assumes that facts are only added to unfinished theories);
 wenzelm parents: 
26050diff
changeset | 131 | |
| 26488 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 132 | fun make_thms (theorems, all_facts) = Thms {theorems = theorems, all_facts = all_facts};
 | 
| 26282 
305d5ca4fa9d
replaced obsolete FactIndex.T by Facts.T (cumulative version, assumes that facts are only added to unfinished theories);
 wenzelm parents: 
26050diff
changeset | 133 | |
| 16441 | 134 | structure TheoremsData = TheoryDataFun | 
| 24713 | 135 | ( | 
| 26488 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 136 | type T = thms; | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 137 | val empty = make_thms (NameSpace.empty_table, Facts.empty); | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 138 | val copy = I; | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 139 |   fun extend (Thms {theorems = _, all_facts}) = make_thms (NameSpace.empty_table, all_facts);
 | 
| 26282 
305d5ca4fa9d
replaced obsolete FactIndex.T by Facts.T (cumulative version, assumes that facts are only added to unfinished theories);
 wenzelm parents: 
26050diff
changeset | 140 | fun merge _ | 
| 26488 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 141 |      (Thms {theorems = _, all_facts = all_facts1},
 | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 142 |       Thms {theorems = _, all_facts = all_facts2}) =
 | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 143 | make_thms (NameSpace.empty_table, Facts.merge (all_facts1, all_facts2)); | 
| 24713 | 144 | ); | 
| 3987 | 145 | |
| 26488 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 146 | fun map_theorems f = | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 147 |   TheoremsData.map (fn Thms {theorems, all_facts} => make_thms (f (theorems, all_facts)));
 | 
| 26430 | 148 | |
| 26488 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 149 | val get_theorems = (fn Thms args => args) o TheoremsData.get; | 
| 17162 | 150 | val theorems_of = #theorems o get_theorems; | 
| 26666 | 151 | val facts_of = #all_facts o get_theorems; | 
| 152 | ||
| 153 | val intern_fact = Facts.intern o facts_of; | |
| 26693 | 154 | val defined_fact = Facts.defined o facts_of; | 
| 16023 
66561f6814bd
added string_of_thmref, selections, fact_index_of, valid_thms;
 wenzelm parents: 
15975diff
changeset | 155 | |
| 6367 | 156 | |
| 3987 | 157 | |
| 4022 
0770a19c48d3
added ignored_consts, thms_containing, add_store_axioms(_i),
 wenzelm parents: 
4013diff
changeset | 158 | (** retrieve theorems **) | 
| 3987 | 159 | |
| 26292 
009e56d16080
get_thm(s): check facts lookup vs. old thm database;
 wenzelm parents: 
26282diff
changeset | 160 | local | 
| 
009e56d16080
get_thm(s): check facts lookup vs. old thm database;
 wenzelm parents: 
26282diff
changeset | 161 | |
| 
009e56d16080
get_thm(s): check facts lookup vs. old thm database;
 wenzelm parents: 
26282diff
changeset | 162 | fun lookup_thms thy xname = | 
| 9564 | 163 | let | 
| 16493 | 164 | val (space, thms) = #theorems (get_theorems thy); | 
| 26292 
009e56d16080
get_thm(s): check facts lookup vs. old thm database;
 wenzelm parents: 
26282diff
changeset | 165 | val name = NameSpace.intern space xname; | 
| 
009e56d16080
get_thm(s): check facts lookup vs. old thm database;
 wenzelm parents: 
26282diff
changeset | 166 | in Option.map (pair name) (Symtab.lookup thms name) end; | 
| 
009e56d16080
get_thm(s): check facts lookup vs. old thm database;
 wenzelm parents: 
26282diff
changeset | 167 | |
| 26683 | 168 | fun lookup_fact context thy xname = | 
| 26666 | 169 | let val name = intern_fact thy xname | 
| 26683 | 170 | in Option.map (pair name) (Facts.lookup context (facts_of thy) name) end; | 
| 4022 
0770a19c48d3
added ignored_consts, thms_containing, add_store_axioms(_i),
 wenzelm parents: 
4013diff
changeset | 171 | |
| 26320 | 172 | in | 
| 173 | ||
| 26683 | 174 | fun get_fact context theory xthmref = | 
| 175 | let | |
| 176 | val xname = Facts.name_of_ref xthmref; | |
| 177 | val pos = Facts.pos_of_ref xthmref; | |
| 178 | val new_res = lookup_fact context theory xname; | |
| 179 | val old_res = get_first (fn thy => lookup_thms thy xname) (theory :: Theory.ancestors_of theory); | |
| 180 | val _ = Theory.check_thy theory; | |
| 181 | in | |
| 182 | (case (new_res, old_res) of | |
| 183 | (SOME (_, ths1), SOME (_, ths2)) => Thm.eq_thms (ths1, ths2) orelse | |
| 184 |         error ("Fact lookup differs from old-style thm database:\n" ^
 | |
| 185 | fst (the new_res) ^ " vs " ^ fst (the old_res) ^ Position.str_of pos) | |
| 186 | | _ => true); | |
| 187 | (case new_res of | |
| 188 |       NONE => error ("Unknown fact " ^ quote xname ^ Position.str_of pos)
 | |
| 189 | | SOME (_, ths) => Facts.select xthmref (map (Thm.transfer theory) ths)) | |
| 190 | end; | |
| 26344 
04dacc6809b6
simplified get_thm(s): back to plain name argument;
 wenzelm parents: 
26336diff
changeset | 191 | |
| 26683 | 192 | fun get_thms thy = get_fact (Context.Theory thy) thy o Facts.named; | 
| 26344 
04dacc6809b6
simplified get_thm(s): back to plain name argument;
 wenzelm parents: 
26336diff
changeset | 193 | fun get_thm thy name = Facts.the_single name (get_thms thy name); | 
| 4783 | 194 | |
| 26292 
009e56d16080
get_thm(s): check facts lookup vs. old thm database;
 wenzelm parents: 
26282diff
changeset | 195 | end; | 
| 
009e56d16080
get_thm(s): check facts lookup vs. old thm database;
 wenzelm parents: 
26282diff
changeset | 196 | |
| 4022 
0770a19c48d3
added ignored_consts, thms_containing, add_store_axioms(_i),
 wenzelm parents: 
4013diff
changeset | 197 | |
| 16336 | 198 | (* thms_of etc. *) | 
| 15882 
a191d2bee3e1
new thms_containing that searches for patterns instead of constants
 kleing parents: 
15801diff
changeset | 199 | |
| 16023 
66561f6814bd
added string_of_thmref, selections, fact_index_of, valid_thms;
 wenzelm parents: 
15975diff
changeset | 200 | fun thms_of thy = | 
| 17162 | 201 | let val thms = #2 (theorems_of thy) | 
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 202 | in map (`(get_name_hint)) (maps snd (Symtab.dest thms)) end; | 
| 15703 | 203 | |
| 19482 
9f11af8f7ef9
tuned basic list operators (flat, maps, map_filter);
 wenzelm parents: 
19473diff
changeset | 204 | fun all_thms_of thy = maps thms_of (thy :: Theory.ancestors_of thy); | 
| 16336 | 205 | |
| 4022 
0770a19c48d3
added ignored_consts, thms_containing, add_store_axioms(_i),
 wenzelm parents: 
4013diff
changeset | 206 | |
| 
0770a19c48d3
added ignored_consts, thms_containing, add_store_axioms(_i),
 wenzelm parents: 
4013diff
changeset | 207 | |
| 26488 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 208 | (** store theorems **) | 
| 3987 | 209 | |
| 26666 | 210 | (* hide names *) | 
| 12695 | 211 | |
| 26666 | 212 | fun hide_fact fully name = | 
| 213 | map_theorems (fn (theorems, all_facts) => (theorems, Facts.hide fully name all_facts)); | |
| 12695 | 214 | |
| 215 | ||
| 21580 | 216 | (* fact specifications *) | 
| 217 | ||
| 218 | fun map_facts f = map (apsnd (map (apfst (map f)))); | |
| 219 | fun burrow_fact f = split_list #>> burrow f #> op ~~; | |
| 220 | fun burrow_facts f = split_list ##> burrow (burrow_fact f) #> op ~~; | |
| 221 | ||
| 222 | ||
| 4853 | 223 | (* naming *) | 
| 224 | ||
| 18801 | 225 | fun name_multi name [x] = [(name, x)] | 
| 26457 | 226 | | name_multi "" xs = map (pair "") xs | 
| 227 | | name_multi name xs = map_index (fn (i, x) => (name ^ "_" ^ string_of_int (i + 1), x)) xs; | |
| 12235 
5fa04fc9b254
Further restructuring of theorem naming functions.
 berghofe parents: 
12138diff
changeset | 228 | |
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 229 | fun name_thm pre official name thm = thm | 
| 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 230 | |> (if Thm.get_name thm <> "" andalso pre orelse not official then I else Thm.put_name name) | 
| 26050 | 231 | |> (if has_name_hint thm andalso pre orelse name = "" then I else put_name_hint name) | 
| 232 | |> Thm.map_tags (Position.default_properties (Position.thread_data ())); | |
| 12872 
0855c3ab2047
Theorems are only "pre-named" if the do not already have names.
 berghofe parents: 
12711diff
changeset | 233 | |
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 234 | fun name_thms pre official name xs = | 
| 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 235 | map (uncurry (name_thm pre official)) (name_multi name xs); | 
| 12235 
5fa04fc9b254
Further restructuring of theorem naming functions.
 berghofe parents: 
12138diff
changeset | 236 | |
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 237 | fun name_thmss official name fact = | 
| 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 238 | burrow_fact (name_thms true official name) fact; | 
| 4853 | 239 | |
| 240 | ||
| 11998 | 241 | (* enter_thms *) | 
| 4853 | 242 | |
| 18418 
bf448d999b7e
re-arranged tuples (theory * 'a) to ('a * theory) in Pure
 haftmann parents: 
18377diff
changeset | 243 | fun enter_thms _ _ app_att ("", thms) thy = app_att (thy, thms) |> swap
 | 
| 26488 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 244 | | enter_thms pre_name post_name app_att (bname, thms) thy = | 
| 7470 
9f67ca1e03dc
eliminated default_name (thms no longer stored for name "");
 wenzelm parents: 
7405diff
changeset | 245 | let | 
| 26488 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 246 | val naming = Sign.naming_of thy; | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 247 | val name = NameSpace.full naming bname; | 
| 16441 | 248 | val (thy', thms') = apsnd (post_name name) (app_att (thy, pre_name name thms)); | 
| 26488 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 249 | val thms'' = map (Thm.transfer thy') thms'; | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 250 | val thy'' = thy' |> map_theorems (fn ((space, theorems), all_facts) => | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 251 | let | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 252 | val space' = NameSpace.declare naming name space; | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 253 | val theorems' = Symtab.update (name, thms'') theorems; | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 254 | val all_facts' = Facts.add_global naming (name, thms'') all_facts; | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 255 | in ((space', theorems'), all_facts') end); | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 256 | in (thms'', thy'') end; | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 257 | |
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 258 | |
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 259 | (* store_thm(s) *) | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 260 | |
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 261 | val store_thms = enter_thms (name_thms true true) (name_thms false true) I; | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 262 | fun store_thm (name, th) = store_thms (name, [th]) #>> the_single; | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 263 | |
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 264 | fun store_thm_open (name, th) = | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 265 | enter_thms (name_thms true false) (name_thms false false) I (name, [th]) #>> the_single; | 
| 3987 | 266 | |
| 16023 
66561f6814bd
added string_of_thmref, selections, fact_index_of, valid_thms;
 wenzelm parents: 
15975diff
changeset | 267 | |
| 6091 | 268 | (* add_thms(s) *) | 
| 4853 | 269 | |
| 16441 | 270 | fun add_thms_atts pre_name ((bname, thms), atts) = | 
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 271 | enter_thms pre_name (name_thms false true) | 
| 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 272 | (foldl_map (Thm.theory_attributes atts)) (bname, thms); | 
| 4853 | 273 | |
| 18377 | 274 | fun gen_add_thmss pre_name = | 
| 275 | fold_map (add_thms_atts pre_name); | |
| 5907 | 276 | |
| 12235 
5fa04fc9b254
Further restructuring of theorem naming functions.
 berghofe parents: 
12138diff
changeset | 277 | fun gen_add_thms pre_name args = | 
| 18377 | 278 | apfst (map hd) o gen_add_thmss pre_name (map (apfst (apsnd single)) args); | 
| 12235 
5fa04fc9b254
Further restructuring of theorem naming functions.
 berghofe parents: 
12138diff
changeset | 279 | |
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 280 | val add_thmss = gen_add_thmss (name_thms true true); | 
| 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 281 | val add_thms = gen_add_thms (name_thms true true); | 
| 5907 | 282 | |
| 283 | ||
| 26488 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 284 | (* add_thms_dynamic *) | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 285 | |
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 286 | fun add_thms_dynamic (bname, f) thy = | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 287 | let | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 288 | val name = Sign.full_name thy bname; | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 289 | val thy' = thy |> map_theorems (fn (theorems, all_facts) => | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 290 | (theorems, Facts.add_dynamic (Sign.naming_of thy) (name, f) all_facts)); | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 291 | in thy' end; | 
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 292 | |
| 
b497e3187ec7
eliminated destructive/critical theorem database;
 wenzelm parents: 
26471diff
changeset | 293 | |
| 14564 | 294 | (* note_thmss(_i) *) | 
| 5907 | 295 | |
| 9192 | 296 | local | 
| 12711 | 297 | |
| 25981 | 298 | fun gen_note_thmss get tag = fold_map (fn ((bname, more_atts), ths_atts) => fn thy => | 
| 12711 | 299 | let | 
| 18728 | 300 | fun app (x, (ths, atts)) = foldl_map (Thm.theory_attributes atts) (x, ths); | 
| 18418 
bf448d999b7e
re-arranged tuples (theory * 'a) to ('a * theory) in Pure
 haftmann parents: 
18377diff
changeset | 301 | val (thms, thy') = thy |> enter_thms | 
| 21646 
c07b5b0e8492
thm/prf: separate official name vs. additional tags;
 wenzelm parents: 
21606diff
changeset | 302 | (name_thmss true) (name_thms false true) (apsnd flat o foldl_map app) | 
| 25981 | 303 | (bname, map (fn (ths, atts) => (get thy ths, surround tag (atts @ more_atts))) ths_atts); | 
| 18801 | 304 | in ((bname, thms), thy') end); | 
| 12711 | 305 | |
| 9192 | 306 | in | 
| 12711 | 307 | |
| 26683 | 308 | fun note_thmss k = gen_note_thmss (fn thy => get_fact (Context.Theory thy) thy) (kind k); | 
| 25981 | 309 | fun note_thmss_i k = gen_note_thmss (K I) (kind k); | 
| 310 | fun note_thmss_grouped k g = gen_note_thmss (K I) (kind k #> group g); | |
| 12711 | 311 | |
| 21438 | 312 | end; | 
| 313 | ||
| 25598 | 314 | fun note kind (name, thm) = | 
| 315 | note_thmss_i kind [((name, []), [([thm], [])])] | |
| 316 | #>> (fn [(_, [thm])] => thm); | |
| 317 | ||
| 18801 | 318 | fun note_thmss_qualified k path facts thy = | 
| 319 | thy | |
| 22796 | 320 | |> Sign.add_path path | 
| 321 | |> Sign.no_base_names | |
| 18801 | 322 | |> note_thmss_i k facts | 
| 22796 | 323 | ||> Sign.restore_naming thy; | 
| 18801 | 324 | |
| 5280 | 325 | |
| 4022 
0770a19c48d3
added ignored_consts, thms_containing, add_store_axioms(_i),
 wenzelm parents: 
4013diff
changeset | 326 | (* store axioms as theorems *) | 
| 
0770a19c48d3
added ignored_consts, thms_containing, add_store_axioms(_i),
 wenzelm parents: 
4013diff
changeset | 327 | |
| 4853 | 328 | local | 
| 17418 | 329 | fun get_ax thy (name, _) = Thm.get_axiom_i thy (Sign.full_name thy name); | 
| 26655 | 330 | fun get_axs thy named_axs = map (Thm.forall_elim_vars 0 o get_ax thy) named_axs; | 
| 26553 | 331 | fun add_axm add = fold_map (fn ((name, ax), atts) => fn thy => | 
| 4853 | 332 | let | 
| 11998 | 333 | val named_ax = [(name, ax)]; | 
| 7753 | 334 | val thy' = add named_ax thy; | 
| 335 | val thm = hd (get_axs thy' named_ax); | |
| 26553 | 336 | in apfst hd (gen_add_thms (K I) [((name, thm), atts)] thy') end); | 
| 4853 | 337 | in | 
| 26553 | 338 | val add_axioms = add_axm Theory.add_axioms; | 
| 339 | val add_axioms_i = add_axm Theory.add_axioms_i; | |
| 340 | val add_defs = add_axm o Theory.add_defs false; | |
| 341 | val add_defs_i = add_axm o Theory.add_defs_i false; | |
| 342 | val add_defs_unchecked = add_axm o Theory.add_defs true; | |
| 343 | val add_defs_unchecked_i = add_axm o Theory.add_defs_i true; | |
| 4853 | 344 | end; | 
| 4022 
0770a19c48d3
added ignored_consts, thms_containing, add_store_axioms(_i),
 wenzelm parents: 
4013diff
changeset | 345 | |
| 
0770a19c48d3
added ignored_consts, thms_containing, add_store_axioms(_i),
 wenzelm parents: 
4013diff
changeset | 346 | |
| 3987 | 347 | |
| 26430 | 348 | (*** Pure theory syntax and logical content ***) | 
| 3987 | 349 | |
| 24243 | 350 | val typ = SimpleSyntax.read_typ; | 
| 351 | val term = SimpleSyntax.read_term; | |
| 352 | val prop = SimpleSyntax.read_prop; | |
| 353 | ||
| 26959 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 354 | |
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 355 | (* application syntax variants *) | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 356 | |
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 357 | val appl_syntax = | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 358 |  [("_appl", typ "('b => 'a) => args => logic", Mixfix ("(1_/(1'(_')))", [1000, 0], 1000)),
 | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 359 |   ("_appl", typ "('b => 'a) => args => aprop", Mixfix ("(1_/(1'(_')))", [1000, 0], 1000))];
 | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 360 | |
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 361 | val applC_syntax = | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 362 |  [("",       typ "'a => cargs",                  Delimfix "_"),
 | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 363 |   ("_cargs", typ "'a => cargs => cargs",         Mixfix ("_/ _", [1000, 1000], 1000)),
 | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 364 |   ("_applC", typ "('b => 'a) => cargs => logic", Mixfix ("(1_/ _)", [1000, 1000], 999)),
 | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 365 |   ("_applC", typ "('b => 'a) => cargs => aprop", Mixfix ("(1_/ _)", [1000, 1000], 999))];
 | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 366 | |
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 367 | structure OldApplSyntax = TheoryDataFun | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 368 | ( | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 369 | type T = bool; | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 370 | val empty = false; | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 371 | val copy = I; | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 372 | val extend = I; | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 373 | fun merge _ (b1, b2) : T = | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 374 | if b1 = b2 then b1 | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 375 | else error "Cannot merge theories with different application syntax"; | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 376 | ); | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 377 | |
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 378 | val old_appl_syntax = OldApplSyntax.get; | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 379 | |
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 380 | val old_appl_syntax_setup = | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 381 | OldApplSyntax.put true #> | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 382 | Sign.del_modesyntax_i Syntax.mode_default applC_syntax #> | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 383 | Sign.add_syntax_i appl_syntax; | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 384 | |
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 385 | |
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 386 | (* main content *) | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 387 | |
| 26463 | 388 | val _ = Context.>> (Context.map_theory | 
| 26959 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 389 | (OldApplSyntax.init #> | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 390 | Sign.add_types | 
| 4922 
03b81b6e1baa
added thms_closure: theory -> xstring -> tthm list option;
 wenzelm parents: 
4853diff
changeset | 391 |    [("fun", 2, NoSyn),
 | 
| 
03b81b6e1baa
added thms_closure: theory -> xstring -> tthm list option;
 wenzelm parents: 
4853diff
changeset | 392 |     ("prop", 0, NoSyn),
 | 
| 
03b81b6e1baa
added thms_closure: theory -> xstring -> tthm list option;
 wenzelm parents: 
4853diff
changeset | 393 |     ("itself", 1, NoSyn),
 | 
| 
03b81b6e1baa
added thms_closure: theory -> xstring -> tthm list option;
 wenzelm parents: 
4853diff
changeset | 394 |     ("dummy", 0, NoSyn)]
 | 
| 26430 | 395 | #> Sign.add_nonterminals Syntax.basic_nonterms | 
| 396 | #> Sign.add_syntax_i | |
| 26436 | 397 |    [("_lambda",     typ "pttrns => 'a => logic",       Mixfix ("(3%_./ _)", [0, 3], 3)),
 | 
| 398 |     ("_abs",        typ "'a",                          NoSyn),
 | |
| 399 |     ("",            typ "'a => args",                  Delimfix "_"),
 | |
| 400 |     ("_args",       typ "'a => args => args",          Delimfix "_,/ _"),
 | |
| 401 |     ("",            typ "id => idt",                   Delimfix "_"),
 | |
| 402 |     ("_idtdummy",   typ "idt",                         Delimfix "'_"),
 | |
| 403 |     ("_idtyp",      typ "id => type => idt",           Mixfix ("_::_", [], 0)),
 | |
| 404 |     ("_idtypdummy", typ "type => idt",                 Mixfix ("'_()::_", [], 0)),
 | |
| 405 |     ("",            typ "idt => idt",                  Delimfix "'(_')"),
 | |
| 406 |     ("",            typ "idt => idts",                 Delimfix "_"),
 | |
| 407 |     ("_idts",       typ "idt => idts => idts",         Mixfix ("_/ _", [1, 0], 0)),
 | |
| 408 |     ("",            typ "idt => pttrn",                Delimfix "_"),
 | |
| 409 |     ("",            typ "pttrn => pttrns",             Delimfix "_"),
 | |
| 410 |     ("_pttrns",     typ "pttrn => pttrns => pttrns",   Mixfix ("_/ _", [1, 0], 0)),
 | |
| 411 |     ("",            typ "id => aprop",                 Delimfix "_"),
 | |
| 412 |     ("",            typ "longid => aprop",             Delimfix "_"),
 | |
| 413 |     ("",            typ "var => aprop",                Delimfix "_"),
 | |
| 414 |     ("_DDDOT",      typ "aprop",                       Delimfix "..."),
 | |
| 415 |     ("_aprop",      typ "aprop => prop",               Delimfix "PROP _"),
 | |
| 416 |     ("_asm",        typ "prop => asms",                Delimfix "_"),
 | |
| 417 |     ("_asms",       typ "prop => asms => asms",        Delimfix "_;/ _"),
 | |
| 418 |     ("_bigimpl",    typ "asms => prop => prop",        Mixfix ("((3[| _ |])/ ==> _)", [0, 1], 1)),
 | |
| 419 |     ("_ofclass",    typ "type => logic => prop",       Delimfix "(1OFCLASS/(1'(_,/ _')))"),
 | |
| 420 |     ("_mk_ofclass", typ "dummy",                       NoSyn),
 | |
| 421 |     ("_TYPE",       typ "type => logic",               Delimfix "(1TYPE/(1'(_')))"),
 | |
| 422 |     ("",            typ "id => logic",                 Delimfix "_"),
 | |
| 423 |     ("",            typ "longid => logic",             Delimfix "_"),
 | |
| 424 |     ("",            typ "var => logic",                Delimfix "_"),
 | |
| 425 |     ("_DDDOT",      typ "logic",                       Delimfix "..."),
 | |
| 426 |     ("_constify",   typ "num => num_const",            Delimfix "_"),
 | |
| 427 |     ("_indexnum",   typ "num_const => index",          Delimfix "\\<^sub>_"),
 | |
| 428 |     ("_index",      typ "logic => index",              Delimfix "(00\\<^bsub>_\\<^esub>)"),
 | |
| 429 |     ("_indexdefault", typ "index",                     Delimfix ""),
 | |
| 430 |     ("_indexvar",   typ "index",                       Delimfix "'\\<index>"),
 | |
| 431 |     ("_struct",     typ "index => logic",              Mixfix ("\\<struct>_", [1000], 1000)),
 | |
| 432 |     ("==>",         typ "prop => prop => prop",        Delimfix "op ==>"),
 | |
| 26959 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 433 | (Term.dummy_patternN, typ "aprop", Delimfix "'_")] | 
| 
f8f2df3e4d83
theory Pure  provides regular application syntax by default;
 wenzelm parents: 
26693diff
changeset | 434 | #> Sign.add_syntax_i applC_syntax | 
| 26430 | 435 | #> Sign.add_modesyntax_i (Symbol.xsymbolsN, true) | 
| 24243 | 436 |    [("fun",      typ "type => type => type",   Mixfix ("(_/ \\<Rightarrow> _)", [1, 0], 0)),
 | 
| 437 |     ("_bracket", typ "types => type => type",  Mixfix ("([_]/ \\<Rightarrow> _)", [0, 0], 0)),
 | |
| 438 |     ("_ofsort",  typ "tid => sort => type",    Mixfix ("_\\<Colon>_", [1000, 0], 1000)),
 | |
| 439 |     ("_constrain", typ "'a => type => 'a",     Mixfix ("_\\<Colon>_", [4, 0], 3)),
 | |
| 440 |     ("_idtyp",    typ "id => type => idt",     Mixfix ("_\\<Colon>_", [], 0)),
 | |
| 441 |     ("_idtypdummy", typ "type => idt",         Mixfix ("'_()\\<Colon>_", [], 0)),
 | |
| 442 |     ("_type_constraint_", typ "'a",            NoSyn),
 | |
| 443 |     ("_lambda",  typ "pttrns => 'a => logic",  Mixfix ("(3\\<lambda>_./ _)", [0, 3], 3)),
 | |
| 444 |     ("==",       typ "'a => 'a => prop",       InfixrName ("\\<equiv>", 2)),
 | |
| 445 |     ("all_binder", typ "idts => prop => prop", Mixfix ("(3\\<And>_./ _)", [0, 0], 0)),
 | |
| 446 |     ("==>",      typ "prop => prop => prop",   InfixrName ("\\<Longrightarrow>", 1)),
 | |
| 447 |     ("_DDDOT",   typ "aprop",                  Delimfix "\\<dots>"),
 | |
| 448 |     ("_bigimpl", typ "asms => prop => prop",   Mixfix ("((1\\<lbrakk>_\\<rbrakk>)/ \\<Longrightarrow> _)", [0, 1], 1)),
 | |
| 449 |     ("_DDDOT",   typ "logic",                  Delimfix "\\<dots>")]
 | |
| 26430 | 450 |   #> Sign.add_modesyntax_i ("", false)
 | 
| 24243 | 451 |    [("prop", typ "prop => prop", Mixfix ("_", [0], 0)),
 | 
| 26430 | 452 |     ("Pure.term", typ "'a => prop", Delimfix "TERM _"),
 | 
| 453 |     ("Pure.conjunction", typ "prop => prop => prop", InfixrName ("&&", 2))]
 | |
| 454 |   #> Sign.add_modesyntax_i ("HTML", false)
 | |
| 24243 | 455 |    [("_lambda", typ "pttrns => 'a => logic", Mixfix ("(3\\<lambda>_./ _)", [0, 3], 3))]
 | 
| 26430 | 456 | #> Sign.add_consts_i | 
| 24243 | 457 |    [("==", typ "'a => 'a => prop", InfixrName ("==", 2)),
 | 
| 458 |     ("==>", typ "prop => prop => prop", Mixfix ("(_/ ==> _)", [2, 1], 1)),
 | |
| 459 |     ("all", typ "('a => prop) => prop", Binder ("!!", 0, 0)),
 | |
| 460 |     ("prop", typ "prop => prop", NoSyn),
 | |
| 461 |     ("TYPE", typ "'a itself", NoSyn),
 | |
| 462 | (Term.dummy_patternN, typ "'a", Delimfix "'_")] | |
| 26430 | 463 |   #> Theory.add_deps "==" ("==", typ "'a => 'a => prop") []
 | 
| 464 |   #> Theory.add_deps "==>" ("==>", typ "prop => prop => prop") []
 | |
| 465 |   #> Theory.add_deps "all" ("all", typ "('a => prop) => prop") []
 | |
| 466 |   #> Theory.add_deps "TYPE" ("TYPE", typ "'a itself") []
 | |
| 467 | #> Theory.add_deps Term.dummy_patternN (Term.dummy_patternN, typ "'a") [] | |
| 468 | #> Sign.add_trfuns Syntax.pure_trfuns | |
| 469 | #> Sign.add_trfunsT Syntax.pure_trfunsT | |
| 470 | #> Sign.local_path | |
| 471 | #> Sign.add_consts_i | |
| 24243 | 472 |    [("term", typ "'a => prop", NoSyn),
 | 
| 473 |     ("conjunction", typ "prop => prop => prop", NoSyn)]
 | |
| 26430 | 474 | #> (add_defs_i false o map Thm.no_attributes) | 
| 24243 | 475 |    [("prop_def", prop "(CONST prop :: prop => prop) (A::prop) == A::prop"),
 | 
| 26430 | 476 |     ("term_def", prop "(CONST Pure.term :: 'a => prop) (x::'a) == (!!A::prop. A ==> A)"),
 | 
| 477 |     ("conjunction_def", prop "(A && B) == (!!C::prop. (A ==> B ==> C) ==> C)")] #> snd
 | |
| 26666 | 478 | #> Sign.hide_const false "Pure.conjunction" | 
| 479 | #> Sign.hide_const false "Pure.term" | |
| 26430 | 480 |   #> add_thmss [(("nothing", []), [])] #> snd
 | 
| 26463 | 481 | #> Theory.add_axioms_i Proofterm.equality_axms)); | 
| 3987 | 482 | |
| 483 | end; | |
| 484 |