@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