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

Benutzer

Quelle  Qmsg_Lifting.thy

  Sprache: Isabelle
 

(*  Title:       Qmsg_Lifting.thy
    License:     BSD 2-Clause. See LICENSE.
    Author:      Timothy Bourke
*)

section "Lifting rules for parallel compositions with QMSG"

theory Qmsg_Lifting
imports Qmsg OAWN_SOS Inv_Cterms OAWN_Invariants
begin

lemma oseq_no_change_on_send:
  fixes σ s a σ' s'
  assumes "((σ, s), a, (σ', s')) oseqp_sos Γ i"
  shows "case a of
           broadcast m ==> σ' i = σ i
         | groupcast ips m ==> σ' i = σ
         | unicast ips m ==> BSBSD 22-Cl-Clause. S. See LICENS.
         | ¬unicast ips ==>
         | send m ==> σQMSG
         | delim ==>' i = σ Qmsg OAWN_SOS In OAWN_Invar
         | _ \Rightarrow True"
  usingfixes σ' s'

lemma qmsg_no_change_on_send_or_receive:
    fixes σ s a σ' s'
  assumes "((σ, s), a, (σ', s')) oparp_sos i (oseqp_sos Γ i) (seqp_sos ΓQMSG)"
      and "a τ"
    shows "σ' i = σ i"
  proof -
    from assms(1obtain p q p' q'
      where "((σ, (p, q)), a, (σ', (p', q'))) "case ofbroadcast m     ==>' i = σ
      by (cases s, casess',simp
    thus ?thesis ips m   ==>' i = σ
    proof
      assume "((σ (\sigma', p')) \in> osseqp_sos Γ
         and " σ' i = σ
eq i"
        by - (drule oseq_no_change_on_send, cases a, auto)
    next
      assume "(q, a, q') \inseqp_sos ΓQMG"
         and "σ' i = σ i"
        thus "σ i" by simp
    next
      assume "a =
    
  qed

lemmafixes σ' s'
  "qmsg ⊨!!!, s), a, (σ', s') \in> opr_os (oseq_osΓMG)"
  by inv_cterms

lemma qmsg_send_from_queuea 
  "msg \TTurnstile<su>A (\<ambda(MG)"
  proof
    have "qmsg ⊨!!!A onll Γ s', simp)
      by inv_ inv add: onl_invariant_sterms [OF qmsg_wf qmsg_msgs_not_e])
    thus ?thesis
      by rule step_invariant_weakenE) (auto des: onllD)
  qed

lemma qmsg_ nd "\> a \noteq receive m"
  "qmsg((msgs, q), a, (sgs', q')case a of
                                             receive m ==>drule oseq_no_change_on_send cases a, auto
                                           | _ ==> set msgs <> set
  proof -
    have "qmsg ⊨!!! "σ i"
                                      a of
                                       a= \tau with \opena
                                     | _ ==> set msgs' \<ubseteq A (λ((msgs, q), a, _). sendmsg (λ>et msgs) a)"
      by (inv_cterms) (clarsimp
    thus ?thesis
      by (rule step_invariant_weakenE) (auto dest)
  qed

lemma qmsg_send_receive_or_tau:
  "qmsg ⊨!!!
  proof -
   have "qmsg ⊨!!! qmsg_queue_contents
     by nv_cterms
   thus ?thesis
    by rule autollD
  qed

lemma par_qmsg_oreachable:
  assumes "(σ, ζ) set msgs'
           (is " "msg \<Turnstile\MG (λ((msgs, q), a, (msgs', q')).
      and pinv: " set msgs' 
                       globala (                                      <ightarrow set msgs'  set msgs)"
      and ustutter: "ξ ξ
      and sgivesu: "ξ ξ) (clarsimp simp add: in_set)+
      and uprese " σ j U (<> j (<>'j); R\sigma🚫
  shows "(σ, fst ζ)
          qmsg (recvmsg (R 🚫QM\^sbS<sub>G (λ(_, a, _). end \or>a = reeiv m\or> a = \tau)"
         <> (set (fst (snd <eta) m)"
  using assms(1) proof (induction rule: oreachable_pair_induct)
    fix σ
    assume "
    assumes<>, ζ oreachable (A qmsg) (otherwith S {i} (orecvmsg R)) (other U {i})"
                         and "(σ(isin oreachable _ ?owS _")
                         and "(msand" \Turnstile>\<^ubA
java.lang.NullPointerException
    from this(2ter: "<>\xi\xi <>"
    moreover from '. S ξ' ==> ξ"
    moreover from \      an upreservesq: "\<>\<sigma> <>' .\lbrakk> \<forall>j.  \<sigma> j) (\sigma>'j; R\sigma  \rbrakk>\<ongrightarrow> R <> m"
        unfolding \<gma<^ubQ<subM\subS<sub>_efbyy imp
    ultimately show "(\<sigma>, fst pq) \<in> oreachable owS(ther ijava.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
                     n sqwherepq = (p, (s,q)"
                     \<and> (\<forall>m\<in>set (fst (snd pq)). R \<sigma> m)"
      using \<open>pq = (p, (ms,q)<close>bysimpmp
  next
    note \<Gamma>\<^sub>Q\<^sub>M\<^sub>S\<^sub>G_simps [simp del]
     (other \sigma> pq\<sigma>'
    hence "(\<sigma>, fst pq) \<in> oreachable A ?owS (other moreover from \<open>(, q) \<in>init qmsg\<close> have "ms = []"
      and "other U {i} \<sigma> \<sigma>'"
      and qr: "snd pq \<in> reachable qmsg (recvmsg (R \<sigma>))"
      and "\<forall>m\<in>set (fst (snd pq)). R \<sigma> m"
      by simp_all
    from \<open>other U {i} \<sigma> \<sigma>'\<close> and ustutter have "\<forall>j. U (\<sigma> j) (\<sigma>' j)"
        by (clarsimp elim!: otherE) metis
    from \open>other U {i} \<sigma> \sigma'\<close>
     and \open(\<>,  pq) \<in> oreachable A ?owS (other U {i})\<close>
       "\sigma', fst pq) \<in> oreachable A ?owS (other U {i})"
        by - (rule oreachable_other')
    moreover have "\<forall>m\<in>set (fst (snd pq)). R \<sigma>' m"
    proof
      fix m assume "m \<in> set (fst (snd pq))"
      with \<open>\<forall>m\<in>set (fst (snd pq)). R <> m< have "R \<sigma> m" ..
      with \<open>\<forall>j.thusrecvmsg <igma') a"
    qedwith\pen\<forall>j. U (\<sigma> j) (\<sigma>' j)\<close> show "R \<sigma>' m" by (rule upreservesq)
    moreover from qr have "snd pq \<in> reachable qmsg (recvmsg (R \<sigma>'))"
    proof
      x a
      assume "recvmsg (R \<sigma>) "
      thus "recvmsg (R \<sigma>') a"
      proof (rule recvmsgE [where R=R])
        fix m assume "R \<sigma> m"
        with \<open>\<forall>j. U (\<sigma> j) (\<sigma>' j)\<close> show "R \<sigma> "(eupreservesq
proof
    qed
    ultimately show ?case using qr by simp
  next
    case (local \<sigma> pq \<sigma>' pq' a)
    obtain p  msq 's  hereq= (p msq)
                              and "pq' = (p', (ms'         (autoelim vmsgEre=reservesq
      by (cases pq, cases pq') metis
    hcalypsocal
      have pqtr: "((\<sigma>, (p, (ms, q))), a, (\<sigma>', (p', (ms', q'))))
                    \<in> oparp_sos i (trans A) (seqp_sos \<Gamma>\<^sub>Q\<^sub>M\<^sub>S\<^b"
        and por: "(\<sigma>, p) \<in> oreachable A ?owS (other U {i})"
        and qr ms )<in>reachable qmsg (recvmsg (R \<sigma>))"
        "<forallm\<in>set ms. R \<sigma> m"
        and "?owS \<sigma> \<igma' 
      by (simp_all       from thisis)and<>\<d<xi>  <> <xi\<close> have "U (\<sigma> i) (\<sigma> ) yimp

    from \<open>?owS \<sigma> \<sigma>' a\<close> have
      by (clarsimp dest!: otherwith_syncD
    with sgivesu have "\<forall>j. j\<noteq>i \<longrightarrow> U (\<sigma> j) (\<sigma>' j)" by simp

    from \<open>?owS \<sigma> \<sigma>' a\<close> have "orecvmsg R \<sigma> a" by (rule otherwithE)
    hence "recvmsg (R \<sigma>a.

    from pqtr have "(\<sigma>', p') \in oreachable A ?owS (other U {i})
                  \<and> (ms' ' <n reachable qmsg (recvmsg (R \<sigma>'))
                  \<and> (\<forall>\in>setms'R\sigma> m)"
    proof
      assumenext
         and "\<And>m. a \<noteq> receive m"
         and "(ms', q') = (ms, q)"
      from this()ve:(\sigma>p , <sigma'p) <> ans"bysimp
      with pinv por and \<open>?owS \<sigma> \<sigma>' a\<close> have "U (\<sigma> i) (\<sigma>' i)"
        by (auto dest!: ostep_invariantD)
      with \<open>\<forall>j. j\<noteq>i \with qtrvem<in> etjava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36

      hence recvmsg': "\<And>a. recvmsg (R \<sigma>) a \<Longrightarrow> recvmsg (R \<sigma>') a"
        (tom vmsgEreRupreservesq

     \?owS \<sigma> \<sigma>' a\<close> have "(\<sigma>', p') \<in> oreachable A ?owS (other U {i})"
        by - (rule oreachable_local')

      vervemss,q)\<> reachableqmsgrecvmsg( <igma')"
      proof -
        from qr and \<open>(ms', q') = (ms, q)\<close>
          have(s )\in> reachable qmsg (recvmsg (R \<sigma>))" by simp
        thus esisyruleachable_weakenEulesg
      qed

      moreover have "\<forall>m\<in>set ms'. R-
      java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
        fix m
        byrulereservesq
        with \<open>(ms',ultimatelyow(sigma>' )in oreachable A ?owS (other U {i})
        
        with \<open>\<forall>j. U (\<sigma> j) (\<sigma>' j)\<close> show "R \<sigma>' m"
          by (rule upreservesq)
      qed

      ultimately show
        (<sigma>', p') \<in> oreachable A ?owS (other U {i})
          \<and> (ms', q\in  qmsg (recvmsg (R \<sigma>'))
          \<and> (\<forall>m\<in>set ms'R\<sigma' m)" by simp_all
    t
      assume qtr: "((ms, q), a, (ms'' <in> seqp_sos \<Gamma>\<^sub>Q\<^sub>M\<^sub<G"
         and "\<And>m. a \<noteq>         *"nd<zeta> \in>reachable qmsg (recvmsg R)"
        "
         and "\<sigma>' i = \<sigma> i"

      from this(4) and<\<And>\<xi>. U \<xi> \<xi>\<close> have "U (\<sigma> i) (\<sigma>' i)" by simp
    ithh\<>\<forallj. j<noteqi \<longrightarrow> U (\<sigma> j) (\<sigma>' j)\<close> have "\<forall>j.  (<igma>j) (\<sigma>' j)" by auto

      hencecvmsg <>a. cvmsgmsg <sigma>)a\Longrightarrow> recvmsg(<>')a
        by (auto elim!: recvmsgE [where R=R] upreservesq)

      from qtr have tqtr: "((ms, q), a, (ms', q')) \<in> trans qmsg" by simp

      from \<open>\<forall>j. U(<sigma j) (\<sigma>' j)\<close> and  \<open>\<sigma>' i = \<sigma> i\<close> have "other U {i} \<sigma> \<sigma>'" by auto
      with por and \<open>p' = p\<close>
        have "(\<sigma>', p' <in oreachable A ?owS (other U {i})"
          by (auto dest: oreachable_other)

      moreover have "(ms', q') \<in> reachable qmsg (recvmsg (R \<sigma>'))"
      proof rulereachable_weakenEeree"ecvmsgR\>)"]java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
        from qr tqtr \<open>recvmsg (R \<sigma>) a\<close>  (s', )\<in> reachableqmsgsg (ecvmsgvmsgmsg(R\<>))".
      qed (rule recvmsg')

      moreover have "\<forall>\insetms'. R \<sigma>' m"
      proof
        fix m
        assume "m<>set ms'"
        moreover proof
          proof -
            from qr have "(ms, q) \<in> reachable qmsg TT" ..
            thus ?thesis using tqtr
              by (auto ststep_invariantD__ontents
          qed
        ultimately have "R \<sigma> m" using \<open>\<forall>m\<in>set        hisand utterave  \sigma> i)\sigma>'  yimp
          yesauto
        with \<open>\<foralljU\sigma>j sigma> j)\<close> show "R \<sigma>' m"
          rulepreservesqservesq
      qed

      ultimately show "(\<sigma>', p') \<in> using\open>\<And>m. a \<noteq> send m\<close>
                     \<and> (ms', q') \<in> reachable qmsg (recvmsg (R \<sigma>'))
                      (\<forall>m\<in>set ms'. R \<sigma>' m)" by simp
    next
      fix m
      assume "a = \<tau>"
         and "((\<sigma>, p), receive m, (\<sigma>', p')) \<in> trans A"
         and "((ms, q), send m, (ms', q')) \<in>eqp_soss><^sub>Q\<^sub>M\<^sub>S\<^ubjava.lang.StringIndexOutOfBoundsException: Index 99 out of bounds for length 99
    his)
        have ptr: "((\<sigma>, p), receive m, (\<sigma>', p')) \<in> trans A"
         and qtr: "((ms, q), send m, (ms', q')) \<in> trans qmsg" byimp_all

      from qr have "(ms, q) qed
      qtr"<>set ms"
        by (utodestst!step_invariantD sg_send_from_queuefrom_queue
      with \<open>\<forall>m\<in>set ms. R \<sigma> m\<close> have "R \<sigma> m" ..
      hence "orecvmsg R \<sigma> (receive m)" by simp

      with \<open>\<forall>j. j\<noteq>i
        by (autontroro:otherwithI
      
        by (auto dest!: ostep_invariantD)
      with \<open>\<forall>j. j\<noteq>i \<longrightarrow> U (\<sigma> j) (\<sigma>' j)\<close> have "\<forall>j. U (\<sigma> j) (\<sigma>' j)" by auto
      hence recvmsg': "\<And>a. recvmsg (R \<sigma>) a \<Longrightarrow> recvmsg (R \<sigma>') a"
        by (auto elim!: recvmsgE [where R=R] upreservesq)

      from por ptr have "(\<sigma>', p') \<in> oreachable A ?owS (other U {i})"
        using \<open>?owS \<sigma> \<sigma>' (receive m)\<close> by - (erule(1) oreachable_local, simp)

       have "(ms', q') \<in> reachable qmsg (recvmsg (R \sigma>'))"
      proof (rule reachable_weakenE [where P="recvmsg (R \<sigma>)"])
        have "recvmsg (R \<sigma>) (send m)" by simp
        with qr qtr show "(ms', q') \<in> reachable qmsg (recvmsg (R \<sigma>))" ..
      qed (rule recvmsg')

      moreover have "\<forall>m\<in>set ms'. R \<sigma>' m"
      proof
        fix m
        assume "m \<in> set ms'"
        moreover have "set ms' \<subseteq> set ms"
          proof -
            from qr have "(ms, q) \<in> reachable qmsg TT" ..
            thus ?thesis using qtr
              by (auto dest!: step_invariantD [OF qmsg_queue_contents])
          qed
        ultimately have "R \<sigma> m" using \<open>\<forall>m\<in>set ms. R \<sigma> m\<close> by auto
        with \<open>\<forall>j. U (\<sigma> j) (\<sigma>' j)\<close> show "R \<sigma>' m"
          by (rule upreservesq)
      qed

      ultimately show "(\<sigma>', p') \<in> oreachable A ?owS (other U {i})
                     \<and> (ms', q') \<in> reachable qmsg (recvmsg (R \<sigma>'))
                     \<and> (\<forall>m\<in>set ms'. R \<sigma>' m)" by simp
    qed
    with \<open>pq = (p, (ms, q))\<close> and \<open>pq' = (p', (ms', q'))\<close> show ?case
      by (simp_all del: \<Gamma>\<^sub>Q\<^sub>M\<^sub>S\<^sub>G_simps)
  qed

lemma par_qmsg_oreachable_statelessassm:
  assumes "(\<sigma>, \<zeta>) \<in> oreachable (A \<langle>\<langle>\<^bsub>i\<^esub> qmsg)
                               (\<lambda>\<sigma> _. orecvmsg (\<lambda>_. R) \<sigma>) (other (\<lambda>_ _. True) {i})"
      and ustutter: "\<And>\<xi>. U \<xi> \<xi>"
  shows "(\<sigma>, fst \<zeta>) \<in> oreachable A (\<lambda>\<sigma> _. orecvmsg (\<lambda>_. R) \<sigma>) (other (\<lambda>_ _. True) {i})
         \<and> snd \<zeta> \<in> reachable qmsg (recvmsg R)
         \<and> (\<forall>m\<in>set (fst (snd \<zeta>)). R m)"
  proof -
    from assms(1)
      have "(\<sigma>, \<zeta>) \<in> oreachable (A \<langle>\<langle>\<^bsub>i\<^esub> qmsg)
                                (otherwith (\<lambda>_ _. True) {i} (orecvmsg (\<lambda>_. R)))
                                (other (\<lambda>_ _. True) {i})" by auto
    moreover
      have "A \<Turnstile>\<^sub>A (otherwith (\<lambda>_ _. True) {i} (orecvmsg (\<lambda>_. R)),
                  other (\<lambda>_ _. True) {i} \<rightarrow>) globala (\<lambda>(\<sigma>, _, \<sigma>'). True)"
        by auto
    ultimately
      obtain "(\<sigma>, fst \<zeta>) \<in> oreachable A
                           (otherwith (\<lambda>_ _. True) {i} (orecvmsg (\<lambda>_. R))) (other (\<lambda>_ _. True) {i})"
         and  *: "snd \<zeta> \<in> reachable qmsg (recvmsg R)"
         and **: "(\<forall>m\<in>set (fst (snd \<zeta>)). R m)"
        by (auto dest!: par_qmsg_oreachable)
    from this(1)
      have "(\<sigma>, fst \<zeta>) \<in> oreachable A (\<lambda>\<sigma> _. orecvmsg (\<lambda>_. R) \<sigma>) (other (\<lambda>_ _. True) {i})"
        by rule auto
    thus ?thesis using * ** by simp
  qed

lemma lift_into_qmsg:
  assumes "A \<Turnstile> (otherwith S {i} (orecvmsg R), other U {i} \<rightarrow>) global P"
      and "\<And>\<xi>. U \<xi> \<xi>"
      and "\<And>\<xi> \<xi>'. S \<xi> \<xi>' \<Longrightarrow> U \<xi> \<xi>'"
      and "\<And>\<sigma> \<sigma>' m. \<lbrakk> \<forall>j. U (\<sigma> j) (\<sigma>' j); R \<sigma> m \<rbrakk> \<Longrightarrow> R \<sigma>' m"
      and "A \<Turnstile>\<^sub>A (otherwith S {i} (orecvmsg R), other U {i} \<rightarrow>)
                 globala (\<lambda>(\<sigma>, _, \<sigma>'). U (\<sigma> i) (\<sigma>' i))"
    shows "A \<langle>\<langle>\<^bsub>i\<^esub> qmsg \<Turnstile> (otherwith S {i} (orecvmsg R), other U {i} \<rightarrow>) global P"
  proof (rule oinvariant_oreachableI)
    fix \<sigma> \<zeta>
    assume "(\<sigma>, \<zeta>) \<in> oreachable (A \<langle>\<langle>\<^bsub>i\<^esub> qmsg) (otherwith S {i} (orecvmsg R)) (other U {i})"
    then obtain s where "(\<sigma>, s) \<in> oreachable A (otherwith S {i} (orecvmsg R)) (other U {i})"
      by (auto dest!: par_qmsg_oreachable [OF _ assms(5,2-4)])
    with assms(1) show "global P (\<sigma>, \<zeta>)"
      by (auto dest: oinvariant_weakenD [OF assms(1)])
  qed

lemma lift_step_into_qmsg:
  assumes inv: "A \<Turnstile>\<^sub>A (otherwith S {i} (orecvmsg R), other U {i} \<rightarrow>) globala P"
      and ustutter: "\<And>\<xi>. U \<xi> \<xi>"
      and sgivesu: "\<And>\<xi> \<xi>'. S \<xi> \<xi>' \<Longrightarrow> U \<xi> \<xi>'"
      and upreservesq: "\<And>\<sigma> \<sigma>' m. \<lbrakk> \<forall>j. U (\<sigma> j) (\<sigma>' j); R \<sigma> m \<rbrakk> \<Longrightarrow> R \<sigma>' m"
      and self_sync: "A \<Turnstile>\<^sub>A (otherwith S {i} (orecvmsg R), other U {i} \<rightarrow>)
                            globala (\<lambda>(\<sigma>, _, \<sigma>'). U (\<sigma> i) (\<sigma>' i))"

      and recv_stutter:  "\<And>\<sigma> \<sigma>' m. \<lbrakk> \<forall>j. U (\<sigma> j) (\<sigma>' j); \<sigma>' i = \<sigma> i \<rbrakk> \<Longrightarrow> P (\<sigma>, receive m, \<sigma>')"
      and receive_right: "\<And>\<sigma> \<sigma>' m.  P (\<sigma>, receive m, \<sigma>') \<Longrightarrow> P (\<sigma>, \<tau>, \<sigma>')"
    shows "A \<langle>\<langle>\<^bsub>i\<^esub> qmsg \<Turnstile>\<^sub>A (otherwith S {i} (orecvmsg R), other U {i} \<rightarrow>) globala P"
      (is "_ \<Turnstile>\<^sub>A (?owS, ?U \<rightarrow>) _")
  proof (rule ostep_invariantI)
    fix \<sigma> \<zeta> a \<sigma>' \<zeta>'
    assume or: "(\<sigma>, \<zeta>) \<in> oreachable (A \<langle>\<langle>\<^bsub>i\<^esub> qmsg) ?owS ?U"
       and otr: "((\<sigma>, \<zeta>), a, (\<sigma>', \<zeta>')) \<in> trans (A \<langle>\<langle>\<^bsub>i\<^esub> qmsg)"
       and "?owS \<sigma> \<sigma>' a"
    from this(2) have "((\<sigma>, \<zeta>), a, (\<sigma>', \<zeta>')) \<in> oparp_sos i (trans A) (seqp_sos \<Gamma>\<^sub>Q\<^sub>M\<^sub>S\<^sub>G)"
        by simp
    then obtain s msgs q s' msgs' q'
      where "\<zeta> = (s, (msgs, q))" "\<zeta>' = (s', (msgs', q'))"
        and "((\<sigma>, (s, (msgs, q))), a, (\<sigma>', (s', (msgs', q'))))
               \<in> oparp_sos i (trans A) (seqp_sos \<Gamma>\<^sub>Q\<^sub>M\<^sub>S\<^sub>G)"
        by (metis prod_cases3)
    from this(1-2) and or
      obtain "(\<sigma>, s) \<in> oreachable A ?owS ?U"
             "(msgs, q) \<in> reachable qmsg (recvmsg (R \<sigma>))"
             "(\<forall>m\<in>set msgs. R \<sigma> m)"
       by (auto dest: par_qmsg_oreachable [OF _ self_sync ustutter sgivesu]
                elim!: upreservesq)
    from otr \<open>\<zeta> = (s, (msgs, q))\<close> \<open>\<zeta>' = (s', (msgs', q'))\<close>
      have "((\<sigma>, (s, (msgs, q))), a, (\<sigma>', (s', (msgs', q'))))
              \<in> oparp_sos i (trans A) (seqp_sos \<Gamma>\<^sub>Q\<^sub>M\<^sub>S\<^sub>G)"
        by simp
    hence "globala P ((\<sigma>, s), a, (\<sigma>', s'))"
    proof
      assume "((\<sigma>, s), a, (\<sigma>', s')) \<in> trans A"
      with \<open>(\<sigma>, s) \<in> oreachable A ?owS ?U\<close>
        show "globala P ((\<sigma>, s), a, (\<sigma>', s'))"
          using \<open>?owS \<sigma> \<sigma>' a\<close> by (rule ostep_invariantD [OF inv])
    next
      assume "((msgs, q), a, (msgs', q')) \<in> seqp_sos \<Gamma>\<^sub>Q\<^sub>M\<^sub>S\<^sub>G"
         and "\<And>m. a \<noteq> send m"
         and "\<sigma>' i = \<sigma> i"
      from this(3) and ustutter have "U (\<sigma> i) (\<sigma>' i)" by simp
      with \<open>?owS \<sigma> \<sigma>' a\<close> and sgivesu have "\<forall>j. U (\<sigma> j) (\<sigma>' j)"
        by (clarsimp dest!: otherwith_syncD) metis
      moreover have "(\<exists>m. a = receive m) \<or> (a = \<tau>)"
      proof -
        from \<open>(msgs, q) \<in> reachable qmsg (recvmsg (R \<sigma>))\<close>
          have "(msgs, q) \<in> reachable qmsg TT" ..
        moreover from \<open>((msgs, q), a, (msgs', q')) \<in> seqp_sos \<Gamma>\<^sub>Q\<^sub>M\<^sub>S\<^sub>G\<close>
          have "((msgs, q), a, (msgs', q')) \<in> trans qmsg" by simp
        ultimately show ?thesis
          using \<open>\<And>m. a \<noteq> send m\<close>
          by (auto dest!: step_invariantD [OF qmsg_send_receive_or_tau])
      qed
      ultimately show "globala P ((\<sigma>, s), a, (\<sigma>', s'))"
        using \<open>\<sigma>' i = \<sigma> i\<close>
        by simp (metis receive_right recv_stutter step_seq_tau)
    next
      fix m
      assume "a = \<tau>"
         and "((\<sigma>, s), receive m, (\<sigma>', s')) \<in> trans A"
         and "((msgs, q), send m, (msgs', q')) \<in> seqp_sos \<Gamma>\<^sub>Q\<^sub>M\<^sub>S\<^sub>G"

      from \<open>(msgs, q) \<in> reachable qmsg (recvmsg (R \<sigma>))\<close>
        have "(msgs, q) \<in> reachable qmsg TT" ..
      moreover from \<open>((msgs, q), send m, (msgs', q')) \<in> seqp_sos \<Gamma>\<^sub>Q\<^sub>M\<^sub>S\<^sub>G\<close>
        have "((msgs, q), send m, (msgs', q')) \<in> trans qmsg" by simp
      ultimately have "m\<in>set msgs"
        by (auto dest!: step_invariantD [OF qmsg_send_from_queue])

      with \<open>\<forall>m\<in>set msgs. R \<sigma> m\<close> have "R \<sigma> m" ..
      with \<open>?owS \<sigma> \<sigma>' a\<close> have "?owS \<sigma> \<sigma>' (receive m)"
          by (auto dest!: otherwith_syncD)

      with \<open>((\<sigma>, s), receive m, (\<sigma>', s')) \<in> trans A\<close>
        have "globala P ((\<sigma>, s), receive m, (\<sigma>', s'))"
          using \<open>(\<sigma>, s) \<in> oreachable A ?owS ?U\<close>
          by - (rule ostep_invariantD [OF inv])
      hence "P (\<sigma>, receive m, \<sigma>')" by simp
      hence "P (\<sigma>, \<tau>, \<sigma>')" by (rule receive_right)
      with \<open>a = \<tau>\<close> show "globala P ((\<sigma>, s), a, (\<sigma>', s'))" by simp
    qed
    with \<open>\<zeta> = (s, (msgs, q))\<close> and \<open>\<zeta>' = (s', (msgs', q'))\<close> show "globala P ((\<sigma>, \<zeta>), a, (\<sigma>', \<zeta>'))"
      by simp
  qed

lemma lift_step_into_qmsg_statelessassm:
  assumes "A \<Turnstile>\<^sub>A (\<lambda>\<sigma> _. orecvmsg (\<lambda>_. R) \<sigma>, other (\<lambda>_ _. True) {i} \<rightarrow>) globala P"
      and "\<And>\<sigma> \<sigma>' m. \<sigma>' i = \<sigma> i \<Longrightarrow> P (\<sigma>, receive m, \<sigma>')"
      and "\<And>\<sigma> \<sigma>' m. P (\<sigma>, receive m, \<sigma>') \<Longrightarrow> P (\<sigma>, \<tau>, \<sigma>')"
    shows "A \<langle>\<langle>\<^bsub>i\<^esub> qmsg \<Turnstile>\<^sub>A (\<lambda>\<sigma> _. orecvmsg (\<lambda>_. R) \<sigma>, other (\<lambda>_ _. True) {i} \<rightarrow>) globala P"
  proof -
    from assms(1) have *: "A \<Turnstile>\<^sub>A (otherwith (\<lambda>_ _. True) {i} (orecvmsg (\<lambda>_. R)),
                                 other (\<lambda>_ _. True) {i} \<rightarrow>) globala P"
      by rule auto
    hence "A \<langle>\<langle>\<^bsub>i\<^esub> qmsg \<Turnstile>\<^sub>A
              (otherwith (\<lambda>_ _. True) {i} (orecvmsg (\<lambda>_. R)), other (\<lambda>_ _. True) {i} \<rightarrow>) globala P"
      by (rule lift_step_into_qmsg)
         (auto elim!: assms(2-3) simp del: step_seq_tau)
    thus ?thesis by rule auto
  qed

end

Messung V0.5 in Prozent
C=75 H=95 G=85

¤ Dauer der Verarbeitung: 0.23 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