Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  Conway.thy

  Sprache: Isabelle
 

(* Title:      Conway Algebra
   Author:     Alasdair Armstrong, Victor B. F. Gomes, Georg Struth
   Maintainer: Georg Struth <g.struth at sheffield.ac.uk>
               Tjark Weber <tjark.weber at it.uu.se>
*)


section Conway Algebras

theory Conway
  imports Dioid
begin

text 
 We define a weak regular algebra which can serve as a common basis for Kleene algebra and demonic reginement algebra.
 It is closely related to an axiomatisation given by Conway~cite"conway71regular".
 


class dagger_op =
  fixes dagger :: "'a ==> 'a" (_\ [101100)

subsectionNear Conway Algebras

class near_conway_base = near_dioid_one + dagger_op +
  assumes dagger_denest: "(x + y)\<dagger> = (x\<dagger> y)\<dagger> x\<dagger>"
  and dagger_prod_unfold [simp]: "1 + x (y x)\<dagger> y = (x y)\<dagger>"

begin

lemma dagger_unfoldl_eq [simp]: "1 + x x\<dagger> = x\<dagger>"
  by (metis dagger_prod_unfold mult_1_left mult_1_right)

lemma dagger_unfoldl: "1 + x x\<dagger> x\<dagger>"
  by auto

lemma dagger_unfoldr_eq [simp]: "1 + x\<dagger> x = x\<dagger>"
  by (metis dagger_prod_unfold mult_1_right mult_1_left)

lemma dagger_unfoldr: "1 + x\<dagger> x x\<dagger>"
  by auto

lemma dagger_unfoldl_distr [simp]: "y + x x\<dagger> y = x\<dagger> y"
  by (metis distrib_right' mult_1_left dagger_unfoldl_eq)

lemma dagger_unfoldr_distr [simp]: "y + x\<dagger> x y = x\<dagger> y"
  by (metis dagger_unfoldr_eq distrib_right' mult_1_left mult.assoc)

lemma dagger_refl: "1 x\<dagger>"
  using dagger_unfoldl local.join.sup.bounded_iff by blast

lemma dagger_plus_one [simp]: "1 + x\<dagger> = x\<dagger>"
  by (simp add: dagger_refl local.join.sup_absorb2)

lemma star_1l: "x x\<dagger> x\<dagger>"
  using dagger_unfoldl local.join.sup.bounded_iff by blast

lemma star_1r: "x\<dagger> x x\<dagger>"
  using dagger_unfoldr local.join.sup.bounded_iff by blast

lemma dagger_ext: "x x\<dagger>"
  by (metis dagger_unfoldl_distr local.join.sup.boundedE star_1r)

lemma dagger_trans_eq [simp]: "x\<dagger> x\<dagger> = x\<dagger>"
  by (metis dagger_unfoldr_eq local.dagger_denest local.join.sup.idem mult_assoc)

lemma dagger_subdist:  "x\<dagger> (x + y)\<dagger>"
  by (metis dagger_unfoldr_distr local.dagger_denest local.order_prop)

lemma dagger_subdist_var:  "x\<dagger> + y\<dagger> (x + y)\<dagger>"
  using dagger_subdist local.join.sup_commute by fastforce

lemma dagger_iso [intro]: "x y ==> x\<dagger> y\<dagger>"
  by (metis less_eq_def dagger_subdist)

lemma star_square: "(x x)\<dagger> x\<dagger>"
  by (metis dagger_plus_one dagger_subdist dagger_trans_eq dagger_unfoldr_distr dagger_denest
    distrib_right' order.eq_iff join.sup_commute less_eq_def mult_onel mult_assoc)

lemma dagger_rtc1_eq [simp]: "1 + x + x\<dagger> x\<dagger> = x\<dagger>"
  by (simp add: local.dagger_ext local.dagger_refl local.join.sup_absorb2)

text Nitpick refutes the next lemmas.

lemma " y + y x\<dagger> x = y x\<dagger>"
(*nitpick [expect=genuine]*)
  oops

lemma "y x\<dagger> = y + y x x\<dagger>"
(*nitpick [expect=genuine]*)
  oops

lemma "(x + y)\<dagger> = x\<dagger> (y x\<dagger>)\<dagger>"
(*nitpick [expect=genuine]*)
  oops

lemma "(x\<dagger>)\<dagger> = x\<dagger>"
(*nitpick [expect=genuine]*)
oops

lemma "(1 + x)\<star> = x\<star>"
(*nitpick [expect = genuine]*)
oops

lemma "x\<dagger> x = x x\<dagger>"
(*nitpick [expect=genuine]*)
oops

end

subsectionPre-Conway Algebras

class pre_conway_base = near_conway_base + pre_dioid_one

begin

lemma dagger_subdist_var_3: "x\<dagger> y\<dagger> (x + y)\<dagger>"
  using local.dagger_subdist_var local.mult_isol_var by fastforce

lemma dagger_subdist_var_2: "x y (x + y)\<dagger>"
  by (meson dagger_subdist_var_3 local.dagger_ext local.mult_isol_var local.order.trans)

lemma dagger_sum_unfold [simp]: "x\<dagger> + x\<dagger> y (x + y)\<dagger> = (x + y)\<dagger>"
  by (metis local.dagger_denest local.dagger_unfoldl_distr mult_assoc)

end

subsection Conway Algebras

class conway_base = pre_conway_base + dioid_one

begin

lemma troeger: "(x + y)\<dagger> z = x\<dagger> (y (x + y)\<dagger> z + z)"
proof -
  have "(x + y)\<dagger> z = x\<dagger> z + x\<dagger> y (x + y)\<dagger> z"
    by (metis dagger_sum_unfold local.distrib_right')
  thus ?thesis
   by (metis add_commute local.distrib_left mult_assoc)
qed

lemma dagger_slide_var1: "x\<dagger> x x x\<dagger>"
  by (metis local.dagger_unfoldl_distr local.dagger_unfoldr_eq local.distrib_left order.eq_iff local.mult_1_right mult_assoc)

lemma dagger_slide_var1_eq: "x\<dagger> x = x x\<dagger>"
  by (metis local.dagger_unfoldl_distr local.dagger_unfoldr_eq local.distrib_left local.mult_1_right mult_assoc)

lemma dagger_slide_eq: "(x y)\<dagger> x = x (y x)\<dagger>"
proof -
  have "(x y)\<dagger> x = x + x (y x)\<dagger> y x"
    by (metis local.dagger_prod_unfold local.distrib_right' local.mult_onel)
  also have "... = x (1 + (y x)\<dagger> y x)"
    using local.distrib_left local.mult_1_right mult_assoc by presburger
  finally show ?thesis
    by (simp add: mult_assoc)
qed

end

subsection Conway Algebras with Zero

class near_conway_base_zerol = near_conway_base + near_dioid_one_zerol

begin

lemma dagger_annil [simp]: "1 + x 0 = (x 0)\<dagger>"
  by (metis annil dagger_unfoldl_eq mult.assoc)

lemma zero_dagger [simp]: "0\<dagger> = 1"
  by (metis add_0_right annil dagger_annil)

end

class pre_conway_base_zerol = near_conway_base_zerol + pre_dioid

class conway_base_zerol = pre_conway_base_zerol + dioid

subclass (in pre_conway_base_zerol) pre_conway_base ..

subclass (in conway_base_zerol) conway_base ..

context conway_base_zerol
begin

lemma "z x y z ==> z x\<dagger> y\<dagger> z"
(*nitpick [expect=genuine]*)
oops 

end

subsection Conway Algebras with Simulation

class near_conway = near_conway_base +
  assumes dagger_simr: "z x y z ==> z x\<dagger> y\<dagger> z"

begin

lemma dagger_slide_var: "x (y x)\<dagger> (x y)\<dagger> x"
  by (metis eq_refl dagger_simr mult.assoc)

text Nitpick refutes the next lemma.

lemma dagger_slide: "x (y x)\<dagger> = (x y)\<dagger> x"
(*nitpick [expect=genuine]*)
  oops

text 
 We say that $y$ preserves $x$ if $x \cdot y \cdot x = x \cdot y$ and $!x \cdot y \cdot !x = !x \cdot y$. This definition is taken
 from Solin~cite"Solin11". It is useful for program transformation.
 

  
lemma preservation1: "x y x y x ==> x y\<dagger> (x y + z)\<dagger> x"
proof -
  assume "x y x y x"
  hence "x y (x y + z) x"
    by (simp add: local.join.le_supI1)
  thus ?thesis
    by (simp add: local.dagger_simr)
qed

end

class near_conway_zerol = near_conway + near_dioid_one_zerol

class pre_conway = near_conway + pre_dioid_one

begin

subclass pre_conway_base ..

lemma dagger_slide: "x (y x)\<dagger> = (x y)\<dagger> x"
  by (metis add.commute dagger_prod_unfold join.sup_least mult_1_right mult.assoc subdistl dagger_slide_var dagger_unfoldl_distr order.antisym)

lemma dagger_denest2: "(x + y)\<dagger> = x\<dagger> (y x\<dagger>)\<dagger>"
  by (metis dagger_denest dagger_slide)

lemma preservation2: "y x y ==> (x y)\<dagger> x x y\<dagger>"
  by (metis dagger_slide local.dagger_iso local.mult_isol)

lemma preservation1_eq: "x y x y x ==> y x y ==> (x y)\<dagger> x = x y\<dagger>"
  by (simp add: local.dagger_simr order.eq_iff preservation2)

end

class pre_conway_zerol = near_conway_zerol + pre_dioid_one_zerol

begin

subclass pre_conway ..

end

class conway = pre_conway + dioid_one

class conway_zerol = pre_conway + dioid_one_zerol

begin

subclass conway_base ..

text Nitpick refutes the next lemmas.

lemma "1 = 1\<dagger>"
(*nitpick [expect=genuine]*)
oops

lemma "(x\<dagger>)\<dagger> = x\<dagger>"
(*nitpick [expect=genuine]*)
oops

lemma dagger_denest_var [simp]: "(x + y)\<dagger> = (x\<dagger> y\<dagger>)\<dagger>"
(* nitpick [expect=genuine]*)
oops

lemma star2 [simp]: "(1 + x)\<dagger> = x\<dagger>"
(*nitpick [expect=genuine]*)
oops

end

end

Messung V0.5 in Prozent
C=84 H=97 G=90

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-06-10) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge