Locations are labelled with invariants and edges are labelled with guards. Both guards and invariants are expressions, thus the abstract syntax is given by Expression defined in the section on expressions. However, the type checker restricts the set of possible expressions allowed in guards and invariants.
A guard must be a conjunction of simple conditions on clocks and differences between clocks, and boolean expressions not involving clocks. The bound must be given by an integer expression.
Invariants further disallow lower bounds on clocks. It is important to understand that invariants influence the behaviour of the system -- they are distinctly different from specifying safety properties in the Requirements Specification Language. States which violate the invariants are undefined; by definition, such states do not exist. This has a profound effect on the interpretation of urgent channels and broadcast cannels. Please see the section on synchronisations for a detailed discussion of this topic.