definition IInit :: "Istate ==> bool" where "IInit s = (range (iinput s) ⊆ Inputs ∧ ioutput s = (λp. NotAnInput) ∧ ichosen s = NotAnInput ∧ iallInput s = range (iinput s))"
definition IChoose :: "Istate ==> Istate ==> Proc ==> bool" where "IChoose s s' p = (ioutput s p = NotAnInput ∧ (if (ichosen s = NotAnInput) then (∃ip ∈ iallInput s. ichosen s' = ip ∧ ioutput s' = (ioutput s) (p := ip)) else ( ioutput s' = (ioutput s) (p:= ichosen s) ∧ ichosen s' = ichosen s)) ∧ iinput s' = iinput s ∧ iallInput s'= iallInput s)"
definition IFail :: "Istate ==> Istate ==> Proc ==> bool" where "IFail s s' p = (ioutput s' = (ioutput s) (p:= NotAnInput) ∧ (∃ip ∈ Inputs. iinput s' = (iinput s)(p:= ip) ∧ iallInput s' = iallInput s ∪ {ip}) ∧ ichosen s' = ichosen s)"
definition INext :: "Istate ==> Istate ==> bool" where"INext s s' = (∃p. IChoose s s' p ∨ IFail s s' p)"
definition s2is :: "state ==> Istate" where "s2is s = (iinput = inpt s, ioutput = outpt s, ichosen=chosen s, iallInput = allInput s)"
theorem R2b: assumes inv: "HInv s" and inv': "HInv s'" and nxt: "HNext s s'" and srel: "is=s2is s ∧ is'=s2is s'" shows"(∃p. IFail is is' p ∨ IChoose is is' p) ∨ is = is'" proof(auto) assume chg_vars: "is≠is'" with srel have s_change: " inpt s ≠ inpt s' ∨ outpt s ≠ outpt s' ∨ chosen s ≠ chosen s' ∨ allInput s ≠ allInput s'" by(auto simp add: s2is_def) from inv have inv2c5: "∀p. inpt s p ∈ allInput s ∧ (chosen s = NotAnInput ⟶ outpt s p = NotAnInput)" by(auto simp add: HInv_def HInv2_def Inv2c_def Inv2c_inner_def) from nxt s_change inv2c5 have"inpt s' ≠ inpt s ∨ outpt s' ≠ outpt s" by(auto simp add: HNext_def Next_def HNextPart_def) with nxt have"∃p. Fail s s' p ∨ EndPhase2 s s' p" by(auto simp add: HNext_def Next_def
StartBallot_def Phase0Read_def Phase1or2Write_def
Phase1or2Read_def Phase1or2ReadThen_def Phase1or2ReadElse_def
EndPhase1or2_def EndPhase1_def EndPhase0_def) thenobtain p where fail_or_endphase2: "Fail s s' p ∨ EndPhase2 s s' p" by auto from inv have inv2c: "Inv2c_inner s p" by(auto simp add: HInv_def HInv2_def Inv2c_def) from fail_or_endphase2 have"IFail is is' p ∨ IChoose is is' p" proof assume fail: "Fail s s' p " hence phase': "phase s' p = 0" and outpt: "outpt s' = (outpt s) (p:= NotAnInput)" by(auto simp add: Fail_def) have"IFail is is' p" proof - from fail srel have"ioutput is' = (ioutput is) (p:= NotAnInput)" by(auto simp add: Fail_def s2is_def) moreover from nxt have all_nxt: "allInput s'= allInput s ∪ (range (inpt s'))" by(auto simp add: HNext_def HNextPart_def) from fail srel have"∃ip ∈ Inputs. iinput is' = (iinput is)(p:= ip)" by(auto simp add: Fail_def s2is_def) thenobtain ip where ip_Input: "ip∈Inputs"and"iinput is' = (iinput is)(p:= ip)" by auto with inv2c5 srel all_nxt have" iinput is' = (iinput is)(p:= ip) ∧ iallInput is' = iallInput is ∪ {ip}" by(auto simp add: s2is_def) moreover from outpt srel nxt inv2c have"ichosen is' = ichosen is" by(auto simp add: HNext_def HNextPart_def s2is_def Inv2c_inner_def) ultimately show ?thesis using ip_Input by(auto simp add: IFail_def) qed thus ?thesis by auto next assume endphase2: "EndPhase2 s s' p" from endphase2 have"phase s p =2" by(auto simp add: EndPhase2_def) with inv2c Ballot_nzero have bal_dblk_nzero: "bal(dblock s p)≠ 0" by(auto simp add: Inv2c_inner_def) moreover from inv have inv2a_dblock: "Inv2a_innermost s p (dblock s p)" by(auto simp add: HInv_def HInv2_def Inv2a_def Inv2a_inner_def blocksOf_def) ultimately have p22: "inp (dblock s p) ∈ allInput s" by(auto simp add: Inv2a_innermost_def) from inv have"allInput s ⊆ Inputs" by(auto simp add: HInv_def HInv1_def) with p22 NotAnInput endphase2 have outpt_nni: "outpt s' p ≠ NotAnInput" by(auto simp add: EndPhase2_def) show ?thesis proof(cases "chosen s = NotAnInput") case True with inv2c5 have p31: "∀q. outpt s q = NotAnInput" by auto with endphase2 have p32: "∀q ∈ UNIV -{p}. outpt s' q = NotAnInput" by(auto simp add: EndPhase2_def) hence some_eq: "(∧x. outpt s' x ≠ NotAnInput ==> x = p)" by auto from p32 True nxt some_equality[of "λp. outpt s' p ≠ NotAnInput", OF outpt_nni some_eq] have p33: "chosen s' = outpt s' p" by(auto simp add: HNext_def HNextPart_def) with endphase2 have"chosen s' = inp(dblock s p) ∧ outpt s' = (outpt s)(p:=inp(dblock s p))" by(auto simp add: EndPhase2_def) with True p22 have"if (chosen s = NotAnInput) then (∃ip ∈ allInput s. chosen s' = ip ∧ outpt s' = (outpt s) (p := ip)) else ( outpt s' = (outpt s) (p:= chosen s) ∧ chosen s' = chosen s)" by auto moreover from endphase2 inv2c5 nxt have"inpt s' = inpt s ∧ allInput s'= allInput s" by(auto simp add: EndPhase2_def HNext_def HNextPart_def) ultimately show ?thesis using srel p31 by(auto simp add: IChoose_def s2is_def) next case False with nxt have p31: "chosen s' = chosen s" by(auto simp add: HNext_def HNextPart_def) from inv' have inv6: "HInv6 s'" by(auto simp add: HInv_def) have p32: "outpt s' p = chosen s" proof- from endphase2 have"outpt s' p = inp(dblock s p)" by(auto simp add: EndPhase2_def) moreover from inv6 p31 have"outpt s' p ∈ {chosen s, NotAnInput}" by(auto simp add: HInv6_def) ultimately show ?thesis using outpt_nni by auto qed from srel False have"IChoose is is' p" proof(clarsimp simp add: IChoose_def s2is_def) from endphase2 inv2c have"outpt s p = NotAnInput" by(auto simp add: EndPhase2_def Inv2c_inner_def) moreover from endphase2 p31 p32 False have"outpt s' = (outpt s) (p:= chosen s) ∧ chosen s' = chosen s" by(auto simp add: EndPhase2_def) moreover from endphase2 nxt inv2c5 have"inpt s' = inpt s ∧ allInput s'= allInput s" by(auto simp add: EndPhase2_def HNext_def HNextPart_def) ultimately show" outpt s p = NotAnInput ∧ outpt s' = (outpt s)(p := chosen s) ∧ chosen s' = chosen s ∧ inpt s' = inpt s ∧ allInput s' = allInput s" by auto qed thus ?thesis by auto qed qed thus"∃p. IFail is is' p ∨ IChoose is is' p" by auto qed
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.1 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.