116 (** static part **) |
119 (** static part **) |
117 parameters: (string * sort) list * (Binding.T * typ option * mixfix) list, |
120 parameters: (string * sort) list * (Binding.T * typ option * mixfix) list, |
118 (* type and term parameters *) |
121 (* type and term parameters *) |
119 spec: term option * term list, |
122 spec: term option * term list, |
120 (* assumptions (as a single predicate expression) and defines *) |
123 (* assumptions (as a single predicate expression) and defines *) |
|
124 intros: thm option * thm option, |
|
125 axioms: thm list, |
121 (** dynamic part **) |
126 (** dynamic part **) |
122 decls: (declaration * stamp) list * (declaration * stamp) list, |
127 decls: (declaration * stamp) list * (declaration * stamp) list, |
123 (* type and term syntax declarations *) |
128 (* type and term syntax declarations *) |
124 notes: ((string * (Attrib.binding * (thm list * Attrib.src list) list) list) * stamp) list, |
129 notes: ((string * (Attrib.binding * (thm list * Attrib.src list) list) list) * stamp) list, |
125 (* theorem declarations *) |
130 (* theorem declarations *) |
126 dependencies: ((string * Morphism.morphism) * stamp) list |
131 dependencies: ((string * Morphism.morphism) * stamp) list |
127 (* locale dependencies (sublocale relation) *) |
132 (* locale dependencies (sublocale relation) *) |
128 }; |
133 }; |
129 |
134 |
130 fun mk_locale ((parameters, spec), ((decls, notes), dependencies)) = |
135 fun mk_locale ((parameters, spec, intros, axioms), ((decls, notes), dependencies)) = |
131 Loc {parameters = parameters, spec = spec, decls = decls, |
136 Loc {parameters = parameters, intros = intros, axioms = axioms, spec = spec, |
132 notes = notes, dependencies = dependencies}; |
137 decls = decls, notes = notes, dependencies = dependencies}; |
133 fun map_locale f (Loc {parameters, spec, decls, notes, dependencies}) = |
138 fun map_locale f (Loc {parameters, spec, intros, axioms, decls, notes, dependencies}) = |
134 mk_locale (f ((parameters, spec), ((decls, notes), dependencies))); |
139 mk_locale (f ((parameters, spec, intros, axioms), ((decls, notes), dependencies))); |
135 fun merge_locale (Loc {parameters, spec, decls = (decls1, decls2), notes, dependencies}, |
140 fun merge_locale (Loc {parameters, spec, intros, axioms, decls = (decls1, decls2), |
136 Loc {decls = (decls1', decls2'), notes = notes', dependencies = dependencies', ...}) = |
141 notes, dependencies}, Loc {decls = (decls1', decls2'), notes = notes', |
137 mk_locale ((parameters, spec), |
142 dependencies = dependencies', ...}) = mk_locale |
138 (((merge (eq_snd op =) (decls1, decls1'), merge (eq_snd op =) (decls2, decls2')), |
143 ((parameters, spec, intros, axioms), |
139 merge (eq_snd op =) (notes, notes')), |
144 (((merge (eq_snd op =) (decls1, decls1'), merge (eq_snd op =) (decls2, decls2')), |
140 merge (eq_snd op =) (dependencies, dependencies'))); |
145 merge (eq_snd op =) (notes, notes')), |
|
146 merge (eq_snd op =) (dependencies, dependencies'))); |
141 |
147 |
142 structure LocalesData = TheoryDataFun |
148 structure LocalesData = TheoryDataFun |
143 ( |
149 ( |
144 type T = locale NameSpace.table; |
150 type T = locale NameSpace.table; |
145 val empty = NameSpace.empty_table; |
151 val empty = NameSpace.empty_table; |
157 |
163 |
158 fun the_locale thy name = case get_locale thy name |
164 fun the_locale thy name = case get_locale thy name |
159 of SOME (Loc loc) => loc |
165 of SOME (Loc loc) => loc |
160 | NONE => error ("Unknown locale " ^ quote name); |
166 | NONE => error ("Unknown locale " ^ quote name); |
161 |
167 |
162 fun register_locale bname parameters spec decls notes dependencies thy = |
168 fun register_locale bname parameters spec intros axioms decls notes dependencies thy = |
163 thy |> LocalesData.map (NameSpace.bind (Sign.naming_of thy) (Binding.name bname, |
169 thy |> LocalesData.map (NameSpace.bind (Sign.naming_of thy) (Binding.name bname, |
164 mk_locale ((parameters, spec), ((decls, notes), dependencies))) #> snd); |
170 mk_locale ((parameters, spec, intros, axioms), ((decls, notes), dependencies))) #> snd); |
165 |
171 |
166 fun change_locale name = |
172 fun change_locale name = |
167 LocalesData.map o apsnd o Symtab.map_entry name o map_locale o apsnd; |
173 LocalesData.map o apsnd o Symtab.map_entry name o map_locale o apsnd; |
168 |
174 |
169 fun print_locales thy = |
175 fun print_locales thy = |