text‹
A demonic refinement algebra *DRA)~cite‹"vonwright04refinement"› is a Kleene algebra without right annihilation plus
an operation for possibly infinite iteration. › class dra = kleene_algebra_zerol + fixes strong_iteration :: "'a ==> 'a" (‹_\∞› [101] 100) assumes iteration_unfoldl [simp] : "1 + x ⋅ x\<infinity> = x\<infinity>" and coinduction: "y ≤ z + x ⋅ y ⟶ y ≤ x\<infinity> ⋅ z" and isolation [simp]: "x\<star> + x\<infinity> ⋅ 0 = x\<infinity>" begin
text‹$\top$ is an abort statement, defined as an infinite skip. It is the maximal element of any DRA.›
text‹Next, we prove some simulation laws for data refinement.›
lemma iteration_sim: "z ⋅ y ≤ x ⋅ z ==> z ⋅ y\<infinity> ≤ x\<infinity> ⋅ z" proof - assume assms: "z ⋅ y ≤ x ⋅ z" have"z ⋅ y\<infinity> = z + z ⋅ y ⋅ y\<infinity>" by simp alsohave"... ≤ z + x ⋅ z ⋅ y\<infinity>" by (metis assms add.commute add_iso mult_isor) finallyshow"z ⋅ y\<infinity> ≤ x\<infinity> ⋅ z" by (simp add: local.coinduction mult_assoc) qed
text‹Nitpick gives a counterexample to the dual simulation law.›
lemma"y ⋅ z ≤ z ⋅ x ==> y\<infinity> ⋅ z ≤ z ⋅ x\<infinity>" (*nitpick [expect=genuine]*) oops
text‹Now we prove separation laws for reasoning about distributed systems in the context of action systems.›
lemma iteration_sep: "y ⋅ x ≤ x ⋅ y ==> (x + y)\<infinity> = x\<infinity> ⋅ y\<infinity>" proof - assume"y ⋅ x ≤ x ⋅ y" hence"y\<star> ⋅ x ≤ x⋅(x + y)\<star>" by (metis star_sim1 add.commute mult_isol order_trans star_subdist) hence"y\<star> ⋅ x ⋅ (x + y)\<infinity> + y\<infinity> ≤ x ⋅ (x + y)\<infinity> + y\<infinity>" by (metis mult_isor mult.assoc iteration_star2 join.sup.mono eq_refl) thus ?thesis by (metis iteration_denest2 add.commute coinduction add.commute less_eq_def iteration_subdenest) qed
lemma iteration_sim2: "y ⋅ x ≤ x ⋅ y ==> y\<infinity> ⋅ x\<infinity> ≤ x\<infinity> ⋅ y\<infinity>" by (metis add.commute iteration_sep iteration_subdenest)
lemma iteration_sep2: "y ⋅ x ≤ x ⋅ y\<star> ==> (x + y)\<infinity> = x\<infinity> ⋅ y\<infinity>" proof - assume"y ⋅ x ≤ x ⋅ y\<star>" hence"y\<star> ⋅ (y\<star> ⋅ x)\<infinity> ⋅ y\<infinity> ≤ x\<infinity> ⋅ y\<star> ⋅y\<infinity>" by (metis mult.assoc mult_isor iteration_sim star_denest_var_2 star_sim1 star_slide_var star_trans_eq tc_eq) moreoverhave"x\<infinity> ⋅ y\<star> ⋅ y\<infinity> ≤ x\<infinity> ⋅ y\<infinity>" by (metis eq_refl mult.assoc iteration_star2) moreoverhave"(y\<star> ⋅ x)\<infinity> ⋅ y\<infinity> ≤ y\<star> ⋅ (y\<star> ⋅ x)\<infinity> ⋅ y\<infinity>" by (metis mult_isor mult_onel star_ref) ultimatelyshow ?thesis by (metis order.antisym iteration_denest3 iteration_subdenest order_trans) qed
lemma iteration_sep3: "y ⋅ x ≤ x ⋅ (x + y) ==> (x + y)\<infinity> = x\<infinity> ⋅ y\<infinity>" proof - assume"y ⋅ x ≤ x ⋅ (x + y)" hence"y\<star> ⋅ x ≤ x ⋅ (x + y)\<star>" by (metis star_sim1) hence"y\<star> ⋅ x ⋅ (x + y)\<infinity> + y\<infinity> ≤ x ⋅ (x + y)\<star> ⋅ (x + y)\<infinity> + y\<infinity>" by (metis add_iso mult_isor) hence"(x + y)\<infinity> ≤ x\<infinity> ⋅ y\<infinity>" by (metis mult.assoc iteration_denest2 iteration_star2 add.commute coinduction) thus ?thesis by (metis add.commute less_eq_def iteration_subdenest) qed
lemma iteration_sep4: "y ⋅ 0 = 0 ==> z ⋅ x = 0 ==> y ⋅ x ≤ (x + z) ⋅ y\<star> ==> (x + y + z)\<infinity> = x\<infinity> ⋅ (y + z)\<infinity>" proof - assume assms: "y ⋅ 0 = 0""z ⋅ x = 0""y ⋅ x ≤ (x + z) ⋅ y\<star>" have"y ⋅ y\<star> ⋅ z ≤ y\<star> ⋅ z ⋅ y\<star>" by (metis mult_isor star_1l mult_oner order_trans star_plus_one subdistl) have"y\<star> ⋅ z ⋅ x ≤ x ⋅ y\<star> ⋅ z" by (metis join.bot_least assms(1) assms(2) independence1 mult.assoc) have"y ⋅ (x + y\<star> ⋅ z) ≤ (x + z) ⋅ y\<star> + y ⋅ y\<star> ⋅ z" by (metis assms(3) distrib_left mult.assoc add_iso) alsohave"... ≤ (x + y\<star> ⋅ z) ⋅ y\<star> + y ⋅ y\<star> ⋅ z" by (metis star_ref join.sup.mono eq_refl mult_1_left mult_isor) alsohave"... ≤ (x + y\<star> ⋅ z) ⋅ y\<star> + y\<star> ⋅ z ⋅ y\<star>"using‹y ⋅ y\⋆⋅ z ≤ y\⋆⋅ z ⋅ y\⋆› by (metis add.commute add_iso) finallyhave"y ⋅ (x + y\<star> ⋅ z) ≤ (x + y\<star> ⋅ z) ⋅ y\<star>" by (metis add.commute add_idem' add.left_commute distrib_right) moreoverhave"(x + y + z)\<infinity> ≤ (x + y + y\<star> ⋅ z)\<infinity>" by (metis star_ref join.sup.mono eq_refl mult_1_left mult_isor iteration_iso) moreoverhave"... = (x + y\<star> ⋅ z)\<infinity> ⋅ y\<infinity>" by (metis add_commute calculation(1) iteration_sep2 local.add_left_comm) moreoverhave"... = x\<infinity> ⋅ (y\<star> ⋅ z)\<infinity> ⋅ y\<infinity>"using‹y\⋆⋅ z ⋅ x ≤ x ⋅ y\⋆⋅ z› by (metis iteration_sep mult.assoc) ultimatelyhave"(x + y + z)\<infinity> ≤ x\<infinity> ⋅ (y + z)\<infinity>" by (metis add.commute mult.assoc iteration_denest3) thus ?thesis by (metis add.commute add.left_commute less_eq_def iteration_subdenest) qed
text‹Finally, we prove some blocking laws.›
text‹Nitpick refutes the next lemma.›
lemma"x ⋅ y = 0 ==> x\<infinity> ⋅ y = y" (*nitpick*) oops
lemma iteration_idep: "x ⋅ y = 0 ==> x ⋅ y\<infinity> = x" by (metis add_zeror annil iteration_unfoldl_distl)
text‹Nitpick refutes the next lemma.›
lemma"y ⋅ w ≤ x ⋅ y + z ==> y ⋅ w\<infinity> ≤ x\<infinity> ⋅ z" (*nitpick [expect=genuine]*) oops
text‹At the end of this file, we consider a data refinement example from von Wright~cite‹"Wright02"›.›
lemma data_refinement: assumes"s' ≤ s ⋅ z"and"z ⋅ e' ≤ e"and"z ⋅ a' ≤ a ⋅ z"and"z ⋅ b ≤ z"and"b\<infinity> = b\<star>" shows"s' ⋅ (a' + b)\<infinity> ⋅ e' ≤ s ⋅ a\<infinity> ⋅ e" proof - have"z ⋅ b\<star> ≤ z" by (metis assms(4) star_inductr_var) have"(z ⋅ a') ⋅ b\<star> ≤ (a ⋅ z) ⋅ b\<star>" by (metis assms(3) mult.assoc mult_isor) hence"z ⋅ (a' ⋅ b\<star>)\<infinity> ≤ a\<infinity> ⋅ z"using‹z ⋅ b\⋆≤ z› by (metis mult.assoc mult_isol order_trans iteration_sim mult.assoc) have"s' ⋅ (a' + b)\<infinity> ⋅ e' ≤ s' ⋅ b\<star> ⋅ (a' ⋅ b\<star>)\<infinity> ⋅ e'" by (metis add.commute assms(5) eq_refl iteration_denest mult.assoc) alsohave"... ≤ s ⋅ z ⋅ b\<star> ⋅ (a' ⋅ b\<star>)\<infinity> ⋅ e'" by (metis assms(1) mult_isor) alsohave"... ≤ s ⋅ z ⋅ (a' ⋅ b\<star>)\<infinity> ⋅ e'"using‹z ⋅ b\⋆≤ z› by (metis mult.assoc mult_isol mult_isor) alsohave"... ≤ s ⋅ a\<infinity> ⋅ z ⋅ e'"using‹z ⋅ (a' ⋅ b\⋆)\∞≤ a\∞⋅ z› by (metis mult.assoc mult_isol mult_isor) finallyshow ?thesis by (metis assms(2) mult.assoc mult_isol mult.assoc mult_isol order_trans) qed
end
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-10)
¤
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.