English

The nature of loops in programming

Programming Languages 2025-04-14 v1 Software Engineering

Abstract

In program semantics and verification, reasoning about loops is complicated by the need to produce two separate mathematical arguments: an invariant, for functional properties (ignoring termination); and a variant, for termination (ignoring functional properties). A single and simple definition is possible, removing this split. A loop is just the limit (a variant of the reflexive transitive closure) of a Noetherian (well-founded) relation. To prove the loop correct there is no need to devise an invariant and a variant; it suffices to identify the relation, yielding both partial correctness and termination. The present note develops the (small) theory and applies it to standard loop examples and proofs of their correctness.

Keywords

Cite

@article{arxiv.2504.08126,
  title  = {The nature of loops in programming},
  author = {Bertrand Meyer},
  journal= {arXiv preprint arXiv:2504.08126},
  year   = {2025}
}
R2 v1 2026-06-28T22:54:15.367Z