states: L = {(sv, ˆ nrcvd) with sv ∈ {v0, v1, sent, accepted} and ˆ rcvd ∈ {I0, I1, It+1, In−t}} An abstract global state is (ˆ k, ˆ nsnt), where ˆ nsnt ∈ {I0, I1, It+1, In−t} and ˆ k : L → {I0, I1, It+1, In−t} Consider an abstract trace: ˆ nsnt1 = I0 ˆ k1 ( ) = In−t , if = (v1, I0 ) I0, otherwise ˆ nsnt2 = I1 ˆ k2 ( ) = In−t , if = (v1, I0 ) I1, if = (sent, I0 ) I0, otherwise ˆ nsnt3 = It+1 ˆ k3 ( ) = In−t , if = (v1, I0 ) It+1, if = (sent, I0 ) I0, otherwise Encode the last state in SMT as a conjunction T of the constraints: resilience condition n > 3t ∧ t ≥ f ∧ f ≥ 0 zero counters (i = 4 ∧ i = 8) → 0 ≤ k3[i] < 1 non-zero counters n − t ≤ k3[4] ∧ t + 1 ≤ k3[8] < n − t system size n − f = k3[0] + k3[1] + · · · + k3[15] UNSAT Igor Konnov (www.forsyte.at) Checking Fault-Tolerant Distributed Algos TMPA’14, Nov. 2014 28 / 1