Definition
An iterative verification process that alternates between model checking of an abstracted system and refinement steps driven by counterexamples until either the property is proved on the concrete system or a genuine counterexample is found.
Principle
Principle
Use counterexamples produced at the abstract level to distinguish spurious behaviors from real errors and refine the abstraction only as needed, thereby trading abstraction-induced false alarms for targeted increases in precision.
Demonstration
Demonstration
Verify a safety property of a software component by model checking a predicate abstraction; if the checker returns a counterexample, simulate it on the concrete program. If simulation shows the trace is spurious, add predicates that separate the spurious path and repeat model checking until the property holds or a real failing trace is produced.
Misapplication
Misapplication
Treating every counterexample as real without checking for spuriousness and therefore accepting false negatives, or repeatedly adding predicates that remove spurious traces but cause state-space explosion and loss of scalability.
Consequence
Consequence
When applied with sound abstraction and adequate refinement heuristics, the method often produces either a proof of correctness in a compact abstract model or a concrete counterexample; in practice it can dramatically improve scalability of verification over direct concrete-state methods.
Reversal
Reversal
A pure abstraction approach that never refines based on counterexamples (one-shot abstraction) or exhaustive concrete-state search without abstraction—both extremes either produce persistent spurious alarms or fail to scale.
Boundary
Boundary
Applies where an abstract model and a refinement strategy can be defined; does not guarantee termination for all systems (e.g., some infinite-state systems or poorly chosen refinement schemes), and effectiveness depends on the expressiveness of available predicates or refinement primitives.
Semantic Tension
Semantic Tension
Between precision and scalability: stronger abstractions increase scalability but generate more spurious counterexamples; aggressive refinement reduces spuriousness but risks combinatorial blow-up.
Synthesis
Synthesis
CEGAR is a closed-loop verification process: abstract, check, analyze counterexample, refine the abstraction to eliminate spurious behavior, and repeat until either proof or real counterexample is obtained, balancing soundness, precision, and resource limits while acknowledging possible nontermination in pathological cases.