public class HoudiniApp extends Object
It considers a program manipulating a set X of variables, defined by an initial condition I(X) (given as lemmas) and a transition relation T(X, X'). Both I and T are quantifier-free first-order formulas.
A lemma F is called inductive with respect to T if it implies itself over the primed variables after the transition: FORALL X, X' . IMPLIES( AND( F(X), T(X, X') ), F(X')) i.e. in other words, the formula AND( F(X), T(X, X'), NOT(F(X')) ) is unsatisfiable.
The Houdini algorithm finds and returns a maximal inductive subset L_I of a given set L of candidate lemmas. It repeatedly checks the conjunction of L for inductiveness and updates L to exclude the lemmas that give rise to counterexamples-to-induction.
| Constructor and Description |
|---|
HoudiniApp(SolverContext solverContext) |
| Modifier and Type | Method and Description |
|---|---|
List<BooleanFormula> |
houdini(List<BooleanFormula> lemmas,
BooleanFormula transition)
execute the Houdini algorithm to get the maximal inductive subset L_I for the given lemmas and
the transition.
|
static void |
main(String... args) |
public HoudiniApp(SolverContext solverContext)
public static void main(String... args) throws InvalidConfigurationException, SolverException, InterruptedException
public List<BooleanFormula> houdini(List<BooleanFormula> lemmas, BooleanFormula transition) throws SolverException, InterruptedException
SolverExceptionInterruptedException