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) __ __ [__]
}

Note

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]

}