Conjunction
A step which is a conjunction of other steps is matched when all the steps of the conjunction are matched (in any order).
Conjunctions are written with the infix symbol &&
(or the
constructor And
).
For instance, the following step will be matched when a proposal of level 1 is sent and a proposal of level 2 is sent (irrespective of their round, sender, destination, etc.).
#![allow(unused)] fn main() { propose __ (level 1) __ __ [__] && propose __ (level 2) __ __ [__] }
Elementary steps accept many destinations, which is simply syntactic sugar for the corresponding conjunction.
For instance,
#![allow(unused)] fn main() { propose b r l __ [b1; b2; b3] }
is syntactic sugar for
#![allow(unused)] fn main() { propose b r l __ [b1] && propose b r l __ [b2] && propose b r l __ [b3] }