interface I1 { in void e(); behaviour { on e: {} } } interface I2 { out void f(); behaviour { on inevitable: f; } } component A { provides I1 p; requires I1 r1; requires I2 r2; behaviour { on p.e(): r1.e(); on r2.f(): r1.e(); } } interface I3 { in void e(); out void f(); behaviour { bool pending = false; [!pending] { on e: pending = true; } [otherwise] { on e: illegal; on inevitable: {pending = false; f;} } } } component Blocked { provides I1 p; requires I3 r; behaviour { blocking on p.e(): {r.e();} on r.f(): p.reply(); } } component BlockedSystem1 { provides I1 p; requires I2 r2; requires I3 r3; system { A a; Blocked b; p <=> a.p; a.r1 <=> b.p; a.r2 <=> r2; b.r <=> r3; } }