text\<open>The basic set interface with \<open>inorder\<close>-based specification:\<close>
locale Set_by_Ordered = fixes empty :: "'t" fixes insert :: "'a::linorder \ 't \ 't" fixes delete :: "'a \ 't \ 't" fixes isin :: "'t \ 'a \ bool" fixes inorder :: "'t \ 'a list" fixes inv :: "'t \ bool" assumes inorder_empty: "inorder empty = []" assumes isin: "inv t \ sorted(inorder t) \
isin t x = (x \<in> set (inorder t))" assumes inorder_insert: "inv t \ sorted(inorder t) \
inorder(insert x t) = ins_list x (inorder t)" assumes inorder_delete: "inv t \ sorted(inorder t) \
inorder(delete x t) = del_list x (inorder t)" assumes inorder_inv_empty: "inv empty" assumes inorder_inv_insert: "inv t \ sorted(inorder t) \ inv(insert x t)" assumes inorder_inv_delete: "inv t \ sorted(inorder t) \ inv(delete x t)"
begin
text\<open>It implements the traditional specification:\<close>
definition set :: "'t \ 'a set" where "set = List.set o inorder"
definition invar :: "'t \ bool" where "invar t = (inv t \ sorted (inorder t))"
sublocale Set
empty insert delete isin set invar proof(standard, goal_cases) case 1 show ?caseby (auto simp: inorder_empty set_def) next case 2 thus ?caseby(simp add: isin invar_def set_def) next case 3 thus ?caseby(simp add: inorder_insert set_ins_list set_def invar_def) next case (4 s x) thus ?case by (auto simp: inorder_delete set_del_list invar_def set_def) next case 5 thus ?caseby(simp add: inorder_empty inorder_inv_empty invar_def) next case 6 thus ?caseby(simp add: inorder_insert inorder_inv_insert sorted_ins_list invar_def) next case 7 thus ?caseby (auto simp: inorder_delete inorder_inv_delete sorted_del_list invar_def) qed
end
text\<open>Set2 = Set with binary operations:\<close>
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 ist noch experimentell.