In principle, we only need to support two kinds of case split.
- Disequalities.
- Cooper-Left, but we have 4 different variants of this one.
- diseq (d : DiseqCnstr) : CaseKind
- cooper (s : CooperSplitPred) (hs : Array (FVarId × UnsatProof)) (decVars : FVarIdSet) : CaseKind
Instances For
State of the model search procedure.
Decision stack (aka case-split stack)
- precise : Bool
precise := falseif not all constraints were satisfied during the search. - decVars : FVarIdSet
Set of decision variables in
cases. - steps : Nat
Number of steps performed by the current search. Remark: we cannot use the
stepscounter in the cutsat state because it is rolled back when backtracking case splits.
Instances For
Instances For
Returns true if approximations are allowed.
Instances For
Sets precise to false to indicate that some constraint was not satisfied.
Instances For
Increments the search steps counter, and returns true if the cumulative number of
steps reached the liaSteps configuration threshold.
Instances For
Adds the number of steps performed by the current search to the cumulative counter
in the cutsat state. It must be invoked after resetDecisionStack because backtracking
rolls back the cutsat state.