interface ihello { in void hello(); out void world(); behaviour { bool idle = true; [idle] on hello: idle=!idle; [!idle]{ on hello: illegal; on inevitable: {idle=!idle; world;} } } } component hello_multiple_provides_requires { provides ihello i1; provides ihello i2; requires ihello i3; behaviour { bool i1_idle = true; bool i2_idle = true; [i1_idle && i2_idle] on i1.hello(): {i1_idle = !i1_idle; i3.hello();} [i1_idle && i2_idle] on i2.hello(): {i2_idle = !i2_idle; i3.hello();} [i1_idle && !i2_idle] on i1.hello(): {i1_idle = !i1_idle;} [!i1_idle && i2_idle] on i2.hello(): {i2_idle = !i2_idle;} [!i1_idle] on i1.hello(): illegal; [!i2_idle] on i2.hello(): illegal; [!i1_idle && i2_idle] on i3.world(): {i1_idle = !i1_idle; i1.world();} [i1_idle && !i2_idle] on i3.world(): {i2_idle = !i2_idle; i2.world();} [!i1_idle && !i2_idle] on i3.world(): {i1_idle = !i1_idle; i1.world(); i3.hello();} [i1_idle && i2_idle] on i3.world(): illegal; } }