191 | ut (s $ t) ts = ut s (t::ts) |
191 | ut (s $ t) ts = ut s (t::ts) |
192 in ut t [] end; |
192 in ut t [] end; |
193 |
193 |
194 (* joining of registrations: prefix and attributes of left theory, |
194 (* joining of registrations: prefix and attributes of left theory, |
195 thms are equal, no attempt to subsumption testing *) |
195 thms are equal, no attempt to subsumption testing *) |
196 fun join (r1, r2) = Termtab.join (fn _ => fn (reg, _) => SOME reg) (r1, r2); |
196 fun join (r1, r2) = Termtab.join (fn _ => fn (reg, _) => reg) (r1, r2); |
197 |
197 |
198 fun dest regs = map (apfst untermify) (Termtab.dest regs); |
198 fun dest regs = map (apfst untermify) (Termtab.dest regs); |
199 |
199 |
200 (* registrations that subsume t *) |
200 (* registrations that subsume t *) |
201 fun subsumers thy t regs = |
201 fun subsumers thy t regs = |
265 val copy = I; |
265 val copy = I; |
266 val extend = I; |
266 val extend = I; |
267 |
267 |
268 fun join_locs _ ({predicate, import, elems, params, abbrevs, regs}: locale, |
268 fun join_locs _ ({predicate, import, elems, params, abbrevs, regs}: locale, |
269 {elems = elems', abbrevs = abbrevs', regs = regs', ...}: locale) = |
269 {elems = elems', abbrevs = abbrevs', regs = regs', ...}: locale) = |
270 SOME |
|
271 {predicate = predicate, |
270 {predicate = predicate, |
272 import = import, |
271 import = import, |
273 elems = gen_merge_lists (eq_snd (op =)) elems elems', |
272 elems = gen_merge_lists (eq_snd (op =)) elems elems', |
274 params = params, |
273 params = params, |
275 abbrevs = Library.merge (eq_snd (op =)) (abbrevs, abbrevs'), |
274 abbrevs = Library.merge (eq_snd (op =)) (abbrevs, abbrevs'), |
276 regs = merge_alists regs regs'}; |
275 regs = merge_alists regs regs'}; |
277 fun merge _ ((space1, locs1, regs1), (space2, locs2, regs2)) = |
276 fun merge _ ((space1, locs1, regs1), (space2, locs2, regs2)) = |
278 (NameSpace.merge (space1, space2), Symtab.join join_locs (locs1, locs2), |
277 (NameSpace.merge (space1, space2), Symtab.join join_locs (locs1, locs2), |
279 Symtab.join (K (SOME o Registrations.join)) (regs1, regs2)); |
278 Symtab.join (K Registrations.join) (regs1, regs2)); |
280 |
279 |
281 fun print _ (space, locs, _) = |
280 fun print _ (space, locs, _) = |
282 Pretty.strs ("locales:" :: map #1 (NameSpace.extern_table (space, locs))) |
281 Pretty.strs ("locales:" :: map #1 (NameSpace.extern_table (space, locs))) |
283 |> Pretty.writeln; |
282 |> Pretty.writeln; |
284 end); |
283 end); |