270 fun merge (SimpsetGlobal (ref ss1), SimpsetGlobal (ref ss2)) = |
271 fun merge (SimpsetGlobal (ref ss1), SimpsetGlobal (ref ss2)) = |
271 SimpsetGlobal (ref (merge_ss (ss1, ss2))); |
272 SimpsetGlobal (ref (merge_ss (ss1, ss2))); |
272 |
273 |
273 fun print _ (SimpsetGlobal (ref ss)) = print_ss ss; |
274 fun print _ (SimpsetGlobal (ref ss)) = print_ss ss; |
274 in |
275 in |
275 val setup_thy_data = Theory.init_data [(simpsetK, (empty, prep_ext, merge, print))]; |
276 val setup_thy_data = Theory.init_data simpsetK (empty, prep_ext, merge, print); |
276 end; |
277 end; |
277 |
278 |
278 |
279 |
279 (* access global simpset *) |
280 (* access global simpset *) |
280 |
281 |
281 fun print_simpset thy = Display.print_data thy simpsetK; |
282 val print_simpset = Theory.print_data simpsetK; |
282 |
283 |
283 fun simpset_ref_of_sg sg = |
284 val simpset_ref_of_sg = Sign.get_data simpsetK (fn SimpsetGlobal r => r); |
284 (case Sign.get_data sg simpsetK of |
|
285 SimpsetGlobal r => r |
|
286 | _ => type_error simpsetK); |
|
287 |
285 |
288 val simpset_ref_of = simpset_ref_of_sg o sign_of; |
286 val simpset_ref_of = simpset_ref_of_sg o sign_of; |
289 val simpset_of_sg = ! o simpset_ref_of_sg; |
287 val simpset_of_sg = ! o simpset_ref_of_sg; |
290 val simpset_of = simpset_of_sg o sign_of; |
288 val simpset_of = simpset_of_sg o sign_of; |
291 |
289 |
309 (* local simpset *) |
307 (* local simpset *) |
310 |
308 |
311 exception SimpsetLocal of simpset; |
309 exception SimpsetLocal of simpset; |
312 |
310 |
313 fun get_local_simpset (thy, data) = |
311 fun get_local_simpset (thy, data) = |
314 (case Symtab.lookup (data, simpsetK) of |
312 (case Symtab.lookup (data, simpsetN) of |
315 Some (SimpsetLocal ss) => ss |
313 Some (SimpsetLocal ss) => ss |
316 | None => simpset_of thy |
314 | None => simpset_of thy |
317 | _ => type_error simpsetK); |
315 | _ => Object.kind_error simpsetK); |
318 |
316 |
319 fun put_local_simpset ss (thy, data) = |
317 fun put_local_simpset ss (thy, data) = |
320 (thy, Symtab.update ((simpsetK, SimpsetLocal ss), data)); |
318 (thy, Symtab.update ((simpsetN, SimpsetLocal ss), data)); |
321 |
319 |
322 |
320 |
323 |
321 |
324 (** simplifier attributes **) |
322 (** simplifier attributes **) |
325 |
323 |
351 in (put_local_simpset ss lthy, tth) end; |
349 in (put_local_simpset ss lthy, tth) end; |
352 |
350 |
353 val simp_attr_global = simp_attr change_global_ss; |
351 val simp_attr_global = simp_attr change_global_ss; |
354 val simp_attr_local = simp_attr change_local_ss; |
352 val simp_attr_local = simp_attr change_local_ss; |
355 in |
353 in |
356 val setup_attrs = Attribute.add_attrs [(simpN, (simp_attr_global, simp_attr_local))]; |
354 val setup_attrs = Attribute.add_attributes |
|
355 [(simpN, simp_attr_global, simp_attr_local, "simplifier")]; |
357 |
356 |
358 val simp_add_global = simp_attr_global [simp_addN]; |
357 val simp_add_global = simp_attr_global [simp_addN]; |
359 val simp_del_global = simp_attr_global [simp_delN]; |
358 val simp_del_global = simp_attr_global [simp_delN]; |
360 val simp_add_local = simp_attr_local [simp_addN]; |
359 val simp_add_local = simp_attr_local [simp_addN]; |
361 val simp_del_local = simp_attr_local [simp_delN]; |
360 val simp_del_local = simp_attr_local [simp_delN]; |