src/Pure/Isar/locale.ML
changeset 19025 596fb1eb7856
parent 19018 88b4979193d8
child 19061 ffbbac0261c9
equal deleted inserted replaced
19024:80eb6640f3d5 19025:596fb1eb7856
   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);