Overview
Quantifiers allow expressing properties over infinite domains. Z3 supports:- Universal quantification (∀): “for all”
- Existential quantification (∃): “there exists”
- Lambda expressions: anonymous functions
Basic Quantifiers
Multiple Variables
Quantifier Example
Fromexamples/c++/example.cpp:368:
Quantifier Instantiation
Z3 handles quantifiers through instantiation: replacing bound variables with concrete terms.Instantiation Strategies
E-matching
Pattern-based instantiation using triggers
MBQI
Model-Based Quantifier Instantiation
QSAT
Quantified SAT encoding
QE
Quantifier Elimination (when applicable)
Patterns (Triggers)
Patterns guide when quantifiers should be instantiated:Why Patterns Matter
Multi-Patterns
No Patterns
Explicitly exclude terms from triggering:Quantifier Weights
Control instantiation priority:Quantifier IDs and Skolem IDs
Fromsrc/api/api_quant.cpp:27:
Lambda Expressions
Fromsrc/api/api_quant.cpp:144:
Lambda with Arrays
Existential Quantifiers
Eliminating Existentials
Existential quantifiers can often be eliminated by Skolemization or quantifier elimination tactics.
Quantifier Alternation
Model-Based Quantifier Instantiation (MBQI)
Quantifier Elimination
Fromexamples/c++/example.cpp:784:
Quantified Bit-Vectors
Quantified Arrays
Nested Quantifiers with Functions
Quantifier Debugging
Common Patterns
Axiomatizing Functions
Universal Constraints
Quantifier-Free Fragments
Performance Tips
Provide good patterns
Provide good patterns
Choose patterns that:
- Cover all relevant terms
- Avoid overly general triggers
- Balance between too few and too many instantiations
Use appropriate weights
Use appropriate weights
Higher weights for less important quantifiers:
Enable MBQI for finite domains
Enable MBQI for finite domains
MBQI works well when the domain is effectively finite:
Consider quantifier elimination
Consider quantifier elimination
For linear arithmetic, quantifier elimination is often complete:
Limit instantiations
Limit instantiations
Prevent runaway instantiation:
Known Limitations
Related Topics
Expressions
Building quantified formulas
Solvers
Solving quantified formulas
Tactics
Quantifier elimination tactics
References
- Quantifier API:
src/api/api_quant.cpp - Quantifier theory:
src/smt/smt_quantifier.cpp - Examples:
examples/c++/example.cpp:368-392 - Pattern matching:
parsers/util/pattern_validation.h
