src/Provers/simplifier.ML
changeset 5001 9de7fda0a6df
parent 4855 62bc389d6168
child 5024 d42ce3452dea
equal deleted inserted replaced
5000:9271b89c7e2c 5001:9de7fda0a6df
   252 
   252 
   253 
   253 
   254 
   254 
   255 (** simpset data **)
   255 (** simpset data **)
   256 
   256 
   257 val simpsetK = "Provers/simpset";
   257 val simpsetN = "Provers/simpset";
       
   258 val simpsetK = Object.kind simpsetN;
   258 
   259 
   259 
   260 
   260 (* global simpset ref *)
   261 (* global simpset ref *)
   261 
   262 
   262 exception SimpsetGlobal of simpset ref;
   263 exception SimpsetGlobal of simpset ref;
   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];