locale maps = fixes empty :: "'m" and up :: "'a ==> 'b list ==> 'm ==> 'm" and map_of :: "'m ==> 'a ==> 'b list" and M :: "'m ==> bool" assumes map_empty: "map_of empty = (λa. [])" and map_up: "map_of (up a b m) = (map_of m)(a := b)" and M_empty: "M empty" and M_up: "M m ==> M (up a b m)" begin
definition"set_of m = (UN x. set(map_of m x))"
end
locale set_mod_maps = maps empty up map_of M + quasi_order qle for empty :: "'m" and up :: "'a ==> 'b list ==> 'm ==> 'm" and map_of :: "'m ==> 'a ==> 'b list" and M :: "'m ==> bool" and qle :: "'b ==> 'b ==> bool" (infix‹⪯›60)
+ fixes subsumed :: "'b ==> 'b ==> bool" and I :: "'b ==> bool" and key :: "'b ==> 'a" assumes equiv_iff_qle: "I x ==> I y ==> subsumed x y = (x ⪯ y)" and"key=key" begin
definition"insert_mod x m = (let k = key x; ys = map_of m k in if (∃y ∈ set ys. subsumed x y) then m else up k (x#ys) m)"
end
sublocale
set_mod_maps <
set_by_maps?: set_modulo qle empty insert_mod set_of I M proof (standard, goal_cases) case1show ?caseby(simp add:set_of_def map_empty) next case2thus ?case by (auto simp: Let_def insert_mod_def set_of_def map_up equiv_iff_qle
split:if_split_asm) next case3show ?caseby(simp add: M_empty) next case4thus ?case by(simp add: insert_mod_def Let_def M_up) qed
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.