component_queue (l: List (requires_events)) =
(##l == 0) -> queue_empty . component_queue ()
+ (l != []) -> queue_not_empty . component_queue ()
#x:queue-proc-requires;

#x:external-proc

req_and_queue_parallel = component_queue([]) || async([])#x:requires-port-parallel-proc #x:external-port-parallel-proc;

req_and_queue_comm = comm({
#x:queue-comm-requires
 }, req_and_queue_parallel);

req_and_queue_allow = allow({
   #x:allow-tau
 , async_not_pending
 , async_pending
 , declarative_illegal
 , illegal
 , queue_empty
 , queue_not_empty
 , queue_full
 , tau_void
#x:queue-allow-requires
 }, req_and_queue_comm);

req_and_queue = rename({
   #x:queue-rename-requires
 , declarative_illegal -> illegal
 }, req_and_queue_allow);
