Class AbstractUserPropagator
- java.lang.Object
-
- org.sosy_lab.java_smt.basicimpl.AbstractUserPropagator
-
- All Implemented Interfaces:
UserPropagator
- Direct Known Subclasses:
NQueensEnumeratingPropagator
public abstract class AbstractUserPropagator extends Object implements UserPropagator
-
-
Constructor Summary
Constructors Constructor Description AbstractUserPropagator()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected PropagatorBackend
getBackend()
void
initializeWithBackend(PropagatorBackend pBackend)
This method is invoked after the user propagator is registered viaBasicProverEnvironment.registerUserPropagator(UserPropagator)
.void
onDecision(BooleanFormula expr, boolean value)
This callback is invoked if the solver decides to branch on a registered expression.void
onFinalCheck()
This callback is invoked when the solver finds a complete satisfying assignment.void
onKnownValue(BooleanFormula expr, boolean value)
This callback is invoked if the solver gets to know the value of a registered expression (UserPropagator.registerExpression(org.sosy_lab.java_smt.api.BooleanFormula)
).void
onPop(int numPoppedLevels)
This callback is invoked when the solver backtracks.void
onPush()
This callback is invoked whenever the solver creates a new decision level.void
registerExpression(BooleanFormula theoryExpr)
Registers an expression to be observed by theUserPropagator
.
-
-
-
Method Detail
-
getBackend
protected PropagatorBackend getBackend()
-
onPush
public void onPush()
Description copied from interface:UserPropagator
This callback is invoked whenever the solver creates a new decision level. A user propagator should maintain backtracking points on each push to enable later backtracking.The onPush or onPop operation refers to internal state of the SMT/SAT solver while running a SAT check. This does not relate to Prover operations in the SMT-based API, such as
BasicProverEnvironment.push(org.sosy_lab.java_smt.api.BooleanFormula)
orBasicProverEnvironment.pop()
.- Specified by:
onPush
in interfaceUserPropagator
-
onPop
public void onPop(int numPoppedLevels)
Description copied from interface:UserPropagator
This callback is invoked when the solver backtracks. The solver can backtrack multiple levels simultaneously.The onPush or onPop operation refers to internal state of the SMT/SAT solver while running a SAT check. This does not relate to Prover operations in the SMT-based API, such as
BasicProverEnvironment.push(org.sosy_lab.java_smt.api.BooleanFormula)
orBasicProverEnvironment.pop()
.- Specified by:
onPop
in interfaceUserPropagator
- Parameters:
numPoppedLevels
- The number of levels to backtrack (~ number of pushes to backtrack).
-
onFinalCheck
public void onFinalCheck()
Description copied from interface:UserPropagator
This callback is invoked when the solver finds a complete satisfying assignment. The user can check the found model for consistency and potentially raise conflicts viaPropagatorBackend.propagateConflict(BooleanFormula[])
.Note: This callback is only invoked if the user propagator enabled it via
PropagatorBackend.notifyOnFinalCheck()
.- Specified by:
onFinalCheck
in interfaceUserPropagator
-
onKnownValue
public void onKnownValue(BooleanFormula expr, boolean value)
Description copied from interface:UserPropagator
This callback is invoked if the solver gets to know the value of a registered expression (UserPropagator.registerExpression(org.sosy_lab.java_smt.api.BooleanFormula)
). Within the callback, the user can raise conflicts viaPropagatorBackend.propagateConflict(org.sosy_lab.java_smt.api.BooleanFormula[])
, propagate consequences viaPropagatorBackend.propagateConsequence(org.sosy_lab.java_smt.api.BooleanFormula[], org.sosy_lab.java_smt.api.BooleanFormula)
, or influence the solvers decision heuristics viaPropagatorBackend.propagateNextDecision(org.sosy_lab.java_smt.api.BooleanFormula, java.util.Optional<java.lang.Boolean>)
.The reported value is only known on the current and later push levels, but will get invalidated when backtracking.
Note: This callback is only invoked if the user propagator enabled it via
PropagatorBackend.notifyOnKnownValue()
.- Specified by:
onKnownValue
in interfaceUserPropagator
- Parameters:
expr
- The expressions whose value is known.value
- The value of the expression.
-
onDecision
public void onDecision(BooleanFormula expr, boolean value)
Description copied from interface:UserPropagator
This callback is invoked if the solver decides to branch on a registered expression. (UserPropagator.registerExpression(org.sosy_lab.java_smt.api.BooleanFormula)
). Within the callback, the user can change the decision by callingPropagatorBackend.propagateNextDecision(org.sosy_lab.java_smt.api.BooleanFormula, java.util.Optional<java.lang.Boolean>)
.Note: This callback is only invoked if the user propagator enabled it via
PropagatorBackend.notifyOnDecision()
.- Specified by:
onDecision
in interfaceUserPropagator
- Parameters:
expr
- The expressions whose value gets decided (usually a literal).value
- The decision value.
-
initializeWithBackend
public void initializeWithBackend(PropagatorBackend pBackend)
Description copied from interface:UserPropagator
This method is invoked after the user propagator is registered viaBasicProverEnvironment.registerUserPropagator(UserPropagator)
. The user can enable notifications by accessing the providedPropagatorBackend
.Warning: During its lifetime, a user propagator shall only be registered once via
BasicProverEnvironment.registerUserPropagator(UserPropagator)
for otherwise unexpected errors can occur. Implementations are advised to throw exceptions if this method is called multiple times.- Specified by:
initializeWithBackend
in interfaceUserPropagator
-
registerExpression
public void registerExpression(BooleanFormula theoryExpr)
Description copied from interface:UserPropagator
Registers an expression to be observed by theUserPropagator
. Solver actions related to the expression are reported:- The callback
UserPropagator.onKnownValue(org.sosy_lab.java_smt.api.BooleanFormula, boolean)
gets invoked if the value of a registered expression becomes known (if notification was enabled viaPropagatorBackend.notifyOnKnownValue()
). - The callback
UserPropagator.onDecision(org.sosy_lab.java_smt.api.BooleanFormula, boolean)
gets invoked right before the solver decides on the value of a registered expression (if notification was enabled viaPropagatorBackend.notifyOnDecision()
).
- Specified by:
registerExpression
in interfaceUserPropagator
- Parameters:
theoryExpr
- The expression to observe.
- The callback
-
-