David Watt uses Tennent's notion of sequencer to explain the similarity between multi-level breaks and return statements. Watt notes that a class of sequencers known as escape sequencers, defined as "sequencer that terminates execution of a textually enclosing command or procedure", encompasses both breaks from loops (including multi-level breaks) and return statements. As commonly implemented, however, return sequencers may also carry a (return) value, whereas the break sequencer as implemented in contemporary languages usually cannot. Loop variants and invariants Loop variants and loop invariants are used to express correctness of loops. In practical terms, a loop variant is an integer expression which has an initial non-negative value. The variant's value must decrease during each loop iteration but must never become negative during the correct execution of the loop. Loop variants are used to guarantee that loops will terminate. A loop invariant is an assertion which must be true before the first loop iteration and remain true after each iteration. This implies that when a loop terminates correctly, both the exit condition and the loop invariant are satisfied. Loop invariants are used to monitor specific properties of a loop during successive iterations. Some programming languages, such as Eiffel contain native support for loop variants and invariants. In other cases, support is an add-on, such as the Java Modeling Language's specification for loop statements in Java. Loop sublanguage Some Lisp dialects provide an extensive sublanguage for describing Loops. An early example can be found in Conversional Lisp of Interlisp. Common Lisp provides a Loop macro which implements such a sublanguage. Loop system cross-reference table while (true) does not count as an infinite loop for this purpose, because it is not a dedicated language structure. C's for (init; test; increment) loop is a general loop construct, not specifically a counting one, although it is often used for that. Deep breaks may be accomplished in APL, C, C++ and C# through the use of labels and gotos. Iteration over objects was added in PHP 5. A counting loop can be simulated by iterating over an incrementing list or generator, for instance, Python's range(). Deep breaks may be accomplished through the use of exception handling. There is no special construct, since the while function can be used for this. There is no special construct, but users can define general loop functions. The C++11 standard introduced the range-based for. In the STL, there is a std::for_each