Cycle Switching Rules

cycle1: [guard1,2] Po -enum< P1 >elim- P2

A guard for cyclei is a predicate of the form guardi,j defined on problem sets and evaluated whenever a problem set is generated. If the predicate is evaluated to be true then control is transferred to cyclej. If the predicate is evaluated to be false then Msis remains in the current cycle. If this is the last problem set then the machine halts.

For example guard1,2 may specify if the problem set (P1 or P2) is empty then control is transferred to cycle2. In other words if cycle1 produces no solutions then Msis should switch to cycle2 even though cycle2 is computationally more expensive. If P2 is non-empty then Msis halts.