structure Data = Generic_Data
( type T = simpset Name_Space.table; val empty: T = Name_Space.empty_table "named-simpset"; val merge : T * T -> T = Name_Space.join_tables (K merge_ss);
);
val content = Name_Space.get o Data.get
val get = content o Context.Proof;
val get_all = Data.get o Context.Proof
fun put name ctxt = put_simpset (get ctxt name) ctxt
funmap name f context =
(content context name; Data.map (Name_Space.map_table_entry name f) context);
fun map_ctxt name f context = map name (simpset_map (Context.proof_of context) f) context
(* maintain content *)
fun clear name = map_ctxt name clear_simpset;
fun add_simp name thm = map_ctxt name (Simplifier.add_simp thm) fun del_simp name thm = map_ctxt name (Simplifier.del_simp thm)
fun add_cong name thm = map_ctxt name (Simplifier.add_cong thm) fun del_cong name thm = map_ctxt name (Simplifier.del_cong thm)
fun add_split name thm = map_ctxt name (Splitter.add_split thm) fun del_split name thm = map_ctxt name (Splitter.del_split thm)
val add_attr = Thm.declaration_attribute o add_simp; val del_attr = Thm.declaration_attribute o del_simp;
val add_cong_attr = Thm.declaration_attribute o add_cong; val del_cong_attr = Thm.declaration_attribute o del_cong;
val add_split_attr = Thm.declaration_attribute o add_split; val del_split_attr = Thm.declaration_attribute o del_split;
(* check *)
fun check ctxt = letval context = Context.Proof ctxt in Name_Space.check context (Data.get context) #> #1end
(* declaration *)
fun new_entry binding init = let fun decl _ context = let val sstab = Data.get context val ss = the_default (Simplifier.clear_simpset (Context.proof_of context) |> simpset_of) init val (_,sstab) = Name_Space.define context true (binding,ss) sstab in Data.put sstab context end
in
Local_Theory.declaration {syntax=false, pervasive=true, pos = \<^here>} decl end
fun declare binding init lthy = let val lthy' = lthy |> new_entry binding init in (lthy') end;
fun declare_cmd binding init_src lthy = let val init = Option.map (get lthy o check lthy) init_src in
declare binding init lthy end
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.