# Divergence (computer science)

In computer science, a computation is said to **diverge** if it does not terminate or terminates in an exceptional state.[1]^{:377} Otherwise it is said to **converge**. In domains where computations are expected to be infinite, such as process calculi, a computation is said to diverge if it fails to be productive (i.e. to continue producing an action within a finite amount of time).

## Definitions

Various subfields of computer science use varying, but mathematically precise, definitions of what it means for a computation to converge or diverge.

### Rewriting

In abstract rewriting, an abstract rewriting system is called convergent if it is both confluent and terminating.[2]

The notation *t* ↓ *n* means that *t* reduces to normal form *n* in zero or more reductions, *t*↓ means *t* reduces to some normal form in zero or more reductions, and *t*↑ means *t* does not reduce to a normal form; the latter is impossible in a terminating rewriting system.

In the lambda calculus an expression is divergent if it has no normal form.[3]

### Denotational semantics

In denotational semantics an object function *f* : *A* → *B* can be modelled as a mathematical function where ⊥ (bottom) indicates that the object function or its argument diverges.

### Concurrency theory

In the calculus of communicating sequential processes, divergence is a drastic situation where a process performs an endless series of hidden actions. For example, consider the following process, defined by CSP notation:

The traces of this process are defined as:

Now, consider the following process, which conceals the *tick* event of the *Clock* process:

By definition, *P* is called a divergent process.

## See also

## Notes

- C.A.R. Hoare (Oct 1969). "An Axiomatic Basis for Computer Programming" (PDF).
*Communications of the ACM*.**12**(10): 576–583. - Baader & Nipkow 1998, p. 9.
- Pierce 2002, p. 65.

## References

- Baader, Franz; Nipkow, Tobias (1998).
*Term Rewriting and All That*. Cambridge University Press. - Pierce, Benjamin C. (2002).
*Types and Programming Languages*. MIT Press. - J. M. R. Martin and S. A. Jassim (1997). "How to Design Deadlock-Free Networks Using CSP and Verification Tools: A Tutorial Introduction" in
*Proceedings of the WoTUG-20*.