Nikolaj Bjørner |
In collaboration with Arie Gurfinkel, Ken McMillan, Andrey Rybalchenko VTSA Summer School, 2014 nbjorner@microsoft.com |
Reduce Program Analysis to Constraint Solving
Program Semantics | | Hoare Logic [20, 24, 29, 37] | ||
| Existential Fixedpoint Logic [13] | |||
| Constrained Horn Clauses | |||
| Proof rules [26] | |||
Note: Specialized algorithms are used to solve Horn clauses.
Constrained Horn Clause:
Abbreviations:
UNSAT | SAT |
---|---|
Produce a | Produce an explicit model, or |
resolution proof | proof that there is no resolution proof |
Focus of CLP | Aim of our efforts |
What about procedure calls?
l0: if (unknown(x) > 0) goto :error
l0(x) <- true.
error <- l0(x), unknown(x) > 0.
unknown(x) := 0;
l0 := true;
error := false;
Proper semantics obtained by quantifying over all loose models.
which is equivalent to:
More generally, proper semantics is for:
When there is a canonical interpretation for background
theory (arithmetic without division), proper semantics coincides
with satisfiability modulo theories , e.g,:
Compare to constraint handling rules in logic programming.
Option 1: use BDDs to represent tables.
Option 2: build tables from ternary bit-vectors.
Option 3,4,..: Use hash tables, B-trees, bit-maps
Unfold
Fold
New Definition
Rewriting, such as rewriting equalites
[1,3, tautology]
[2,3]
[simplify 5, subsumed 3]
Goal:
Subsumption:
are state variables.
is a monome (a conjunction of literals).
is a clause (a disjunction of literals).
Convention: is a monome over variables
,
is a renaming of the same monome
to variables
.
repeat until ∞
Candidate If for some ,
, then add
to
.
Unfold If , then set
.
repeat until ∞
Unreachable For , if
, return Unreachable.
Reachable If , return Reachable.
repeat until ∞
repeat until ∞
Conflict Let : given a candidate model
and clause
, such that
Leaf If ,
and
is unsatisfiable,
then add
to
.
repeat until ∞
Decide Add to
if
,
.
Pssst: I am replacing by greek letters.
Conflict Let : given a candidate model
and clause
, such that
,
if
, then conjoin
to
,
for
.
Conflict Let : given a candidate
model
and a formula
, such
that
,
, then conjoin
to
,
for
.
Recall predicate transformer for McCarthy91:
Decide now spawns two children.
Decide
If and
there are consistent
such that
and
,
then add
,
to
.
We also have to take DAG unfolding into acount.
Base Mark if
or if there is a consistent
such that
and
.
Close Mark if all children are marked.
Reachable If is marked, return Reachable.
Decide and Conflict pushing a goal over
Reachable If is satisfiable, then return Reachable.
Decide For
for
, add
to
if:
- .
- .
-
- is disjoint from
for every
.
Decide For
for
, add
to
if:
- .
- .
-
- is disjoint from
for every
.
Close For for
, if
is satisfiable, but
is unsatsifiable,
then update
, where
.
f(y) {
int x, lock = 0; ![$\ell_1(x,y,0)$](data:image/png;base64,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)
do {
lock = 1; ![$\ell_3(x,x,1) \leftarrow \ell_1(x,y,l)$](data:image/png;base64,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)
y = x;
if (*) { ![$\ell_6(x,y,l) \leftarrow \ell_3(x,y,l)$](data:image/png;base64,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)
lock = 0;
y = y + 1; ![$\ell_6(x,y+1,0) \leftarrow \ell_3(x,y,l)$](data:image/png;base64,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)
}
}
while( x != y); ![$\ell_1(x,y,l) \leftarrow \ell_6(x,y,l) \land x \mathop{\neq} y$](data:image/png;base64,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)
if (lock != 1) ![$\ell_7(x,y,l) \leftarrow \ell_6(x,y,l) \land x = y$](data:image/png;base64,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)
error(); ![$\mathit{error} \leftarrow \ell_7(x,y,l) \land l \mathop{\neq} 1$](data:image/png;base64,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)
}
Maintain the following data-structures:
Initially:
Region Abstraction | Transition Abstraction |
---|---|
| |
| |
| |
| |
| |
| |
| |
The abstraction is unsatisfiable.
A core selects clauses corresponding to the literals:
.
We check if the symbolic execution of the path is feasible.
It is not:
Extract a condition on to cut the path.
The new abstraction is:
Region Abstraction | Transition Abstraction |
---|---|
| |
| |
| |
| |
| |
| |
| |
| |
The system remains unsatisfiable with core
Notice that the core is smaller, it uses the invariant associated with and does not symbolically execute
.
The transition is refined in a similar way.
Region Abstraction | Transition Abstraction |
---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
The state invariants are used by the symbolic simulator. They are added to the path condition during simulation.
The system remains unsatisfiable with core
Split :
Region Abstraction | Transition Abstraction |
---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
The transition to
is still feasible.
Simulation produces the core:
So we can conclude that .
The resulting abstraction is satisfiable.
Region Abstraction | Transition Abstraction |
---|---|
| |
| |
| |
| |
| |
| |
| |
| |
The abstraction that is reachable from is also a satisfying interpretation
for the original set of Horn clauses. That is, the following interpretation satisfies the
Horn clauses:
| |
| |
| |
| |
| |
| |
| |
| |
The abstractions corresponds to procedure summaries.
The following properties are used to prune search:
Symbolic execution re-uses must summaries to avoid exploring procedures. summaries are used to establish inductive properties.
|
|
|
must summary is used to fast forward for a feasible path to where a
summary gets inferred to rule out the query.
Horn formulation:
Initial region abstraction:
It checks:
The SMASH algorithm is about exploiting a particular symbolic execution to simplify weakest pre-conditions. Yogi uses weakest pre-conditions to refine the propositional abstraction.
Corral is a newer symbolic Software Model checking system by Akash Lal, Shaz Qadeer. It uses incremental inlining of procedure calls and relies on Houdini to establish inductiveness.