@startuml !pragma teoz true database DL actor P1 actor P2 P1 -> DL : READ() DL --> P1 : P P1 -> P1 : r_{max} = max\{r : (\_, prove(r)) \in P\} loop \textbf{foreach } r \in \{r_{max} + 1, \dots\} ' P1 ->(05) P2 : RBcast(prop, S, r, 1) P1 -> DL : PROVE(r) P1 -> DL : APPEND(r) P1 -> DL : READ() DL --> P1 : P alt (1, \text{prove(}r\text{)}) \in P note over P1 : break end end P2 -> P2 : ABdeliver() P2 -> DL : READ() DL --> P2 : P note over P2 line(C4) process P2 check locally if \forall j : (j, prove(r)) \not\in P which is false since P1 correctly PROVE(r) and APPEND(r) \text{P1 is next include in } W_r end note P2 -> DL : APPEND(r) P2 -> DL : READ() DL --> P2 : P note over P2 line(C9) process P2 check locally if \forall j \in W_r : prop[r][j] = \bot which can't be false since P1 didn't execute RBcast(prop, S, r, 1) P2 will never progress and deliver any futur messages end note hide footbox @enduml