text‹The basic set interface with ‹inorder›-based specification:›
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 ∈ 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‹It implements the traditional specification:›
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
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.