My encoding of liveness properties of distributed systems in Verdi primarily uses three sources of previous work:
- The treatment of fairness in actor systems by Agha et al. [1].
- Coq's mechanisms for coinductive predicates and corecursive functions, originally by Eduardo Gimenez [2].
- Verification of self-stabilizing population protocols in Coq by Deng and Monin [3].
Agha et al. define an operational semantics of actor systems, where the reduction rules are parameterized on certain variables (e.g., the name of the actor involved). They then define executions of actor systems as infinite sequences of system configurations, with each transition labeled with the name of the reduction rule applied, along with the arguments used as parameters. This allows them to consider only fair executions starting from some initial configuration.
A label is said to be enabled at some point in an execution if it is possible to make valid transition using the label to some new configuration. Intuitively, in the work