Class InterpolatingProverWithAssumptionsWrapper<T>
- java.lang.Object
-
- org.sosy_lab.java_smt.basicimpl.withAssumptionsWrapper.BasicProverWithAssumptionsWrapper<T,InterpolatingProverEnvironment<T>>
-
- org.sosy_lab.java_smt.basicimpl.withAssumptionsWrapper.InterpolatingProverWithAssumptionsWrapper<T>
-
- All Implemented Interfaces:
AutoCloseable
,BasicProverEnvironment<T>
,InterpolatingProverEnvironment<T>
public class InterpolatingProverWithAssumptionsWrapper<T> extends BasicProverWithAssumptionsWrapper<T,InterpolatingProverEnvironment<T>> implements InterpolatingProverEnvironment<T>
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.sosy_lab.java_smt.api.BasicProverEnvironment
BasicProverEnvironment.AllSatCallback<R>
-
-
Field Summary
-
Fields inherited from class org.sosy_lab.java_smt.basicimpl.withAssumptionsWrapper.BasicProverWithAssumptionsWrapper
delegate, solverAssumptionsAsFormula
-
Fields inherited from interface org.sosy_lab.java_smt.api.BasicProverEnvironment
NO_MODEL_HELP
-
-
Constructor Summary
Constructors Constructor Description InterpolatingProverWithAssumptionsWrapper(InterpolatingProverEnvironment<T> pDelegate, FormulaManager pFmgr)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
clearAssumptions()
BooleanFormula
getInterpolant(Collection<T> pFormulasOfA)
Get an interpolant for two groups of formulas.List<BooleanFormula>
getSeqInterpolants(List<? extends Collection<T>> pPartitionedFormulas)
This method returns interpolants of an 'inductive sequence'.List<BooleanFormula>
getTreeInterpolants(List<? extends Collection<T>> pPartitionedFormulas, int[] pStartOfSubTree)
Compute a sequence of interpolants.protected void
registerPushedFormula(T pPushResult)
overridden in sub-class.-
Methods inherited from class org.sosy_lab.java_smt.basicimpl.withAssumptionsWrapper.BasicProverWithAssumptionsWrapper
addConstraint, allSat, close, getModel, getModelAssignments, getStatistics, getUnsatCore, isUnsat, isUnsatWithAssumptions, pop, push, size, toString, unsatCoreOverAssumptions
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.sosy_lab.java_smt.api.BasicProverEnvironment
addConstraint, allSat, close, getEvaluator, getModel, getModelAssignments, getStatistics, getUnsatCore, isUnsat, isUnsatWithAssumptions, pop, push, push, registerUserPropagator, size, unsatCoreOverAssumptions
-
Methods inherited from interface org.sosy_lab.java_smt.api.InterpolatingProverEnvironment
getSeqInterpolants0, getTreeInterpolants0
-
-
-
-
Constructor Detail
-
InterpolatingProverWithAssumptionsWrapper
public InterpolatingProverWithAssumptionsWrapper(InterpolatingProverEnvironment<T> pDelegate, FormulaManager pFmgr)
-
-
Method Detail
-
getInterpolant
public BooleanFormula getInterpolant(Collection<T> pFormulasOfA) throws SolverException, InterruptedException
Description copied from interface:InterpolatingProverEnvironment
Get an interpolant for two groups of formulas. This should be called only immediately after anBasicProverEnvironment.isUnsat()
call that returnedtrue
.There is no direct guarantee that the interpolants returned are part of an inductive sequence', however this seems to work for most solvers as long as the same proof is used, i.e. all interpolants are computed after the same SAT-check. If a solver does not use the same internal proof for several interpolation queries (such as CVC5), then the returned interpolants might not satisfy the sequence-criteria. We suggest the proper method
InterpolatingProverEnvironment.getSeqInterpolants(java.util.List<? extends java.util.Collection<T>>)
for that case.- Specified by:
getInterpolant
in interfaceInterpolatingProverEnvironment<T>
- Parameters:
pFormulasOfA
- A collection of values returned byBasicProverEnvironment.push(BooleanFormula)
. All the corresponding formulas from group A, the remaining formulas form group B.- Returns:
- An interpolant for A and B
- Throws:
SolverException
- if interpolant cannot be computed, for example because interpolation procedure is incompleteInterruptedException
-
getSeqInterpolants
public List<BooleanFormula> getSeqInterpolants(List<? extends Collection<T>> pPartitionedFormulas) throws SolverException, InterruptedException
Description copied from interface:InterpolatingProverEnvironment
This method returns interpolants of an 'inductive sequence'. This property must be supported by the interpolation-strategy of the underlying SMT-solver! Depending on the underlying SMT-solver this method might be faster than N direct calls to getInterpolant().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.
- Specified by:
getSeqInterpolants
in interfaceInterpolatingProverEnvironment<T>
- Returns:
- a 'inductive sequence' of interpolants, such that the implication
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. - Throws:
SolverException
- if interpolant cannot be computed, for example because interpolation procedure is incompleteInterruptedException
-
getTreeInterpolants
public List<BooleanFormula> getTreeInterpolants(List<? extends Collection<T>> pPartitionedFormulas, int[] pStartOfSubTree) throws SolverException, InterruptedException
Description copied from interface:InterpolatingProverEnvironment
Compute a sequence of interpolants. The nesting array describes the start of the subtree for tree interpolants. For inductive sequences of interpolants use a nesting array completely filled with 0.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.
- Specified by:
getTreeInterpolants
in interfaceInterpolatingProverEnvironment<T>
- Parameters:
pPartitionedFormulas
- of formulaspStartOfSubTree
- The start of the subtree containing the formula at this index as root.- Returns:
- Tree interpolants respecting the nesting relation.
- Throws:
SolverException
- if interpolant cannot be computed, for example because interpolation procedure is incompleteInterruptedException
-
registerPushedFormula
protected void registerPushedFormula(T pPushResult)
Description copied from class:BasicProverWithAssumptionsWrapper
overridden in sub-class.- Overrides:
registerPushedFormula
in classBasicProverWithAssumptionsWrapper<T,InterpolatingProverEnvironment<T>>
-
clearAssumptions
protected void clearAssumptions()
- Overrides:
clearAssumptions
in classBasicProverWithAssumptionsWrapper<T,InterpolatingProverEnvironment<T>>
-
-