A server, controller, or communication protocol may be designed to run indefinitely. Correctness then concerns what can happen throughout its behavior: whether a fault is avoided, whether requests receive responses, or whether one participant can be postponed forever.
Temporal logic gives such requirements a formal language. Model checking asks algorithmically whether a specified transition system satisfies a formula.
This use of “model” is related to logical satisfaction but has a different emphasis from the classification of theories in the model-theory note.
From tense logic to program behavior
Arthur Prior's work supplied an important logical background for reasoning about time. Amir Pnueli's 1977 paper brought temporal logic directly into the analysis of programs and concurrent behavior.
Sources and credit for Amir Pnueli
David Monniaux. Via Wikimedia Commons. Image source · CC BY-SA 1.0 · Biographical dates
Instead of describing only an initial and final state, a temporal formula can describe a sequence of states.
In linear temporal logic, LTL, means that holds globally along a behavior, and means that it holds eventually. Other operators express the next step or one condition holding until another occurs.
The intended time structure and treatment of finite or infinite behaviors must be specified. For the examples here, behaviors are infinite sequences of states, with terminal situations given self-loops if necessary.
Safety and liveness
A safety property says, informally, that a forbidden event never occurs. A violation can be demonstrated by a finite bad prefix under the standard trace-based account.
A liveness property says that progress of an appropriate kind remains possible in the sense formalized by the property. Its failure may require examining an infinite behavior.
For example,
expresses a simple safety condition, while
requires every request to be followed eventually by a grant.
The formula's interpretation depends on what counts as a request and a grant in the model. If requests can overlap or refer to different clients, a single Boolean flag may omit information needed for the intended requirement.
A small transition system
Consider three states: Idle, Pending, and Granted.
A request moves Idle to Pending. From Pending, the system can either wait in Pending or serve the request and move to Granted. Granted can return to Idle.
Label Pending with request and Granted with grant. In this simplified single-request model, the response formula fails.
A violating behavior is
The request remains unserved forever.
Every finite prefix of this behavior can still be extended by a grant. A finite prefix alone therefore does not establish the liveness failure.
For finite-state systems, an infinite violating behavior can often be represented compactly by a finite path followed by a repeating cycle, called a lasso. The representation is finite even though the behavior it denotes is infinite.
What fairness adds
Suppose the serve action remains enabled throughout Pending. A weak fairness assumption requiring a continuously enabled serve action eventually to occur excludes the infinite waiting behavior.
The response property may then hold over the fair behaviors of this model.
Fairness is an assumption about scheduling or the environment. It is not a correction that the checker is entitled to add because the unqualified property failed.
If the real implementation can indefinitely starve the request, proving the property under a fairness assumption that the implementation does not meet would leave the original problem unresolved.
This example illustrates a recurring verification issue: strengthening assumptions can make a theorem true while weakening its application to the actual system.
Branching time
LTL describes properties of a path; ordinary LTL model checking requires the property to hold on all relevant initial paths.
Computation tree logic, CTL, explicitly combines path quantifiers with temporal operators. At Pending,
says that some path eventually reaches a grant. It holds in the example.
By contrast,
says that every path eventually reaches one. It fails without a suitable fairness restriction.
The difference is between the availability of a successful continuation and the guarantee that all permitted continuations succeed.
CTL and LTL have different expressive structures. Neither should be described simply as the other with a faster implementation. CTL* provides a broader language containing both in the relevant sense.
The following lab checks both claims exactly on the finite graph. Its paths and cycles supply concrete evidence for the distinction between possibility and inevitability.
Interactive lab · Finite-state verification
Possible eventually, or inevitable eventually?
Edit the transition graph. Compare one path reaching Granted with every path eventually reaching Granted.
grant holds exactly at Granted. Infinite paths · no fairness assumption.
| From / to | Idle | Pending | Granted |
|---|---|---|---|
| Idle | |||
| Pending | |||
| Granted |
Inspect the fixed-point calculation
Begin with the grant states. For EF, add a state with at least one successor already in the set. For AF, add a state only when all its successors are already in the set. Repeat until neither set changes.
Try a variation
Remove Pending → Pending. Why does AF grant become true? Then remove Pending → Granted as well. The dead-end convention adds a self-loop at Pending, so granting is no longer guaranteed.
Scope and notation
Exact EF and AF model checking over this finite system. Paths are infinite; dead ends acquire a stuttering self-loop, shown dashed. No fairness assumption is imposed. EF includes the present state; AF does too. Least fixed points establish the result for all paths, not only a bounded sample. A counterexample lasso gives a finite prefix followed by a cycle repeated forever.
The emergence of model checking
Edmund Clarke and E. Allen Emerson developed temporal model-checking methods around 1981. Jean-Pierre Queille and Joseph Sifakis independently developed related methods in the CESAR setting, with work reported in 1981–1982.
Sources and credit for Edmund M. Clarke
Dennis Hamilton. Via Wikimedia Commons. Image source · CC BY 2.0 · Biographical dates
Sources and credit for E. Allen Emerson
Copyright E. Allen Emerson (the subject). Via Wikimedia Commons. Image source · CC BY-SA 4.0 · Biographical dates
Sources and credit for Joseph Sifakis
Joseph Sifakis. Via Wikimedia Commons. Image source · CC BY-SA 4.0 · Biographical dates
The historical account by Clarke distinguishes the contributions and early algorithms.
For a finite transition graph, many temporal properties can be evaluated through graph traversal and fixed-point computation. A checker can enumerate reachable states and calculate which satisfy subformulas.
The resulting procedure can provide a concrete diagnostic when a property fails. Its form depends on the logic: a finite error path, an infinite lasso, or a more branching explanation may be appropriate.
Automata and infinite behaviors
Büchi's work on automata over infinite words supplied a mathematical foundation for reasoning about nonterminating sequences.
The automata-theoretic approach to verification, developed prominently by Moshe Vardi and Pierre Wolper, translates a temporal specification into an automaton describing violating behaviors.
One then combines it with the system model and checks whether an accepting behavior exists.
The method links logic to a computational object with explicit states and acceptance conditions. It also explains why infinite behavior can be analyzed by finite algorithms when the relevant structures are finite.
Tools such as Gerard Holzmann's SPIN developed practical approaches to checking concurrent protocols, including techniques for controlling the number of interleavings that must be explored.
Sources and credit for Moshe Vardi
David Monniaux. Via Wikimedia Commons. Image source · CC BY-SA 3.0 · Biographical dates
Sources and credit for Gerard J. Holzmann
Dennis Hamilton. Via Wikimedia Commons. Image source · CC BY 2.0 · Biographical dates
State explosion and symbolic methods
If several components each have many local states, the combined system can have a product-sized state space. Adding a few components may multiply the number of global states dramatically.
Randal Bryant's work on reduced ordered binary decision diagrams in the 1980s supplied a powerful representation for Boolean functions. Symbolic model checking, associated with work by McMillan, Burch, Clarke, and collaborators, represented sets of states and transitions without explicitly listing every member.
Sources and credit for Randal Bryant
Dennis Hamilton. Via Wikimedia Commons. Image source · CC BY 2.0 · Biographical dates
A compact representation can make an otherwise enormous calculation practical. Its size still depends strongly on the problem and choices such as variable ordering.
Bounded model checking, developed through work including Biere, Cimatti, Clarke, and Zhu, encodes a bounded search for violating behavior into SAT.
Finding no counterexample up to a chosen bound is not generally an unbounded proof. Additional completeness thresholds, induction arguments, or other reasoning are needed to justify a stronger conclusion.
Abstract interpretation
Patrick Cousot and Radhia Cousot's 1977 abstract-interpretation framework gave a systematic account of sound approximation in program analysis.
Sources and credit for Patrick Cousot
Rama. Via Wikimedia Commons. Image source · CC BY-SA 2.0 fr · Biographical dates
Sources and credit for Radhia Cousot
Cousotp. Via Wikimedia Commons. Image source · CC BY-SA 3.0 · Biographical dates
An analysis can replace sets of concrete numerical values with intervals, signs, or another abstract domain. Abstract operations are designed to include the possible concrete outcomes.
For safety reasoning, an overapproximation is useful: if the larger abstract behavior set excludes an error, the concrete behavior set excludes it too.
An apparent abstract error may be spurious. Suppose a program always maintains , but an interval domain records only that both variables lie between zero and ten. The abstraction admits states such as and may fail to establish their equality.
The uncertainty comes from lost relational information, not necessarily from a program defect.
Abstract interpretation has its own theory of domains, fixed points, and convergence techniques. It is not simply another name for temporal model checking.
Refinement after a spurious counterexample
Counterexample-guided abstraction refinement, developed in influential work by Clarke, Grumberg, Jha, Lu, and Veith around 2000, uses an apparent failure to improve an abstraction.
If the counterexample corresponds to a concrete execution, it exposes a real violation of the model's specification. If it is impossible concretely, the abstraction can be refined to rule out that source of imprecision.
Refinement may reveal which predicates or relationships the analysis needs to retain. It does not guarantee an efficient terminating solution for every infinite-state verification problem.
Together, these methods make formal reasoning practical by choosing representations that preserve the property under investigation.
Back to mathematical proof
Deductive verification and model checking organize evidence differently, but both depend on faithful specifications, suitable semantics, and explicit assumptions.
The same concerns arise when the object being formalized is an ordinary mathematical theorem rather than a program. The next note examines the transition from isolated checked proofs to shared mathematical libraries.
Sources and further reading
- Amir Pnueli, “The Temporal Logic of Programs” (1977).
- Edmund M. Clarke and E. Allen Emerson, “Design and Synthesis of Synchronization Skeletons Using Branching Time Temporal Logic” (1981).
- Jean-Pierre Queille and Joseph Sifakis, “Specification and Verification of Concurrent Systems in CESAR” (1982).
- Moshe Y. Vardi and Pierre Wolper, “An Automata-Theoretic Approach to Automatic Program Verification” (1986).
- Randal E. Bryant, “Graph-Based Algorithms for Boolean Function Manipulation” (1986).
- Patrick Cousot and Radhia Cousot, “Abstract Interpretation: A Unified Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints” (1977).
- Armin Biere, Alessandro Cimatti, Edmund Clarke, and Yunshan Zhu, “Symbolic Model Checking without BDDs” (1999).
- Edmund Clarke, Orna Grumberg, Somesh Jha, Yuan Lu, and Helmut Veith, “Counterexample-Guided Abstraction Refinement” (2000).
- Edmund M. Clarke, “The Birth of Model Checking” (2008).