T - The type of the objects which can be used to select formulas for interpolant creation.public interface InterpolatingProverEnvironment<T> extends BasicProverEnvironment<T>
BasicProverEnvironment.AllSatCallback<R>NO_MODEL_HELP| Modifier and Type | Method and Description |
|---|---|
static boolean |
checkTreeStructure(int numOfPartitions,
int[] startOfSubTree)
Checks for a valid subtree-structure.
|
BooleanFormula |
getInterpolant(Collection<T> formulasOfA)
Get an interpolant for two groups of formulas.
|
default List<BooleanFormula> |
getSeqInterpolants(List<? extends Collection<T>> partitionedFormulas)
This method returns interpolants of an 'inductive sequence'.
|
default List<BooleanFormula> |
getSeqInterpolants0(List<T> formulas) |
List<BooleanFormula> |
getTreeInterpolants(List<? extends Collection<T>> partitionedFormulas,
int[] startOfSubTree)
Compute a sequence of interpolants.
|
default List<BooleanFormula> |
getTreeInterpolants0(List<T> formulas,
int[] startOfSubTree) |
addConstraint, allSat, close, getModel, getModelAssignments, getUnsatCore, isUnsat, isUnsatWithAssumptions, pop, push, push, unsatCoreOverAssumptionsBooleanFormula getInterpolant(Collection<T> formulasOfA) throws SolverException, InterruptedException
BasicProverEnvironment.isUnsat() call that returned true.
There is no direct guarantee that the interpolants returned are part of an inductive sequence', however this seems to work for most (all?) solvers as long as the same proof is used, i.e. all interpolants are computed after the same SAT-check.
formulasOfA - A collection of values returned by BasicProverEnvironment.push(BooleanFormula). All the
corresponding formulas from group A, the remaining formulas form group B.SolverException - if interpolant cannot be computed, for example because interpolation
procedure is incompleteInterruptedExceptiondefault List<BooleanFormula> getSeqInterpolants(List<? extends Collection<T>> partitionedFormulas) throws SolverException, InterruptedException
The prover stack should contain the partitioned formulas, but any order is allowed. For an input of N partitions we return N-1 interpolants. Any asserted formula that is on the prover stack and not part of the partitioned list, will be used for background theory and its symbols can appear in any interpolant.
AND(I_i, P_i)
=> I_(i+1) is satisfied for all i, where P_i is the conjunction of all formulas in
partition i.SolverException - if interpolant cannot be computed, for example because interpolation
procedure is incompleteInterruptedExceptiondefault List<BooleanFormula> getSeqInterpolants0(List<T> formulas) throws SolverException, InterruptedException
SolverExceptionInterruptedExceptionList<BooleanFormula> getTreeInterpolants(List<? extends Collection<T>> partitionedFormulas, int[] startOfSubTree) throws SolverException, InterruptedException
Example:
A D | | B E | / C | F H | / G arrayIndex = [0,1,2,3,4,5,6,7] // only for demonstration, not needed partition = [A,B,D,E,C,F,H,G] // post-order of tree startOfSubTree = [0,0,2,2,0,0,6,0] // index of left-most leaf of the current element
The prover stack should contain the partitioned formulas. For an input of N partitions (nodes in the tree) we return N-1 interpolants (one interpolant for/below each node except the root). Any asserted formula that is on the prover stack and not part of the partitioned list, will be used for background theory and its symbols can appear in any interpolant.
partitionedFormulas - of formulasstartOfSubTree - The start of the subtree containing the formula at this index as root.SolverException - if interpolant cannot be computed, for example because interpolation
procedure is incompleteInterruptedExceptiondefault List<BooleanFormula> getTreeInterpolants0(List<T> formulas, int[] startOfSubTree) throws SolverException, InterruptedException
SolverExceptionInterruptedExceptionstatic boolean checkTreeStructure(int numOfPartitions,
int[] startOfSubTree)