Mapping a functor's 2 types **simultaneous**ly e.g. Foo[A, B] -> Foo[C, D] is `bimap`.
https://blog.ploeh.dk/2018/12/24/bifunctors/#c8062c28a0ed471a8995bee180d14aa6
P = {p, q, ...}
σ ∈ S = K →(V × N), where K is the key; V the value; and N the version number.
σ(k) = (v, n) denotes a key k maps to a set of a value associated with a version number. And initially all keys of the participants map to the lowest element i.e. σ(k) = (⊥, ⊥).
・a(x).P - Wait for reading x on the channel a, then having received the value, behave as P.
・ā<x>.P - Wait to send the value along with the channel a then, after x is accepted by some processes, behavior like P