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
Equations
- Lean.Meta.Grind.Arith.Cutsat.Search.instBEqKind.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
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
Equations
Instances For
Returns true if approximations are allowed.
Equations
- Lean.Meta.Grind.Arith.Cutsat.isApprox = do let __do_lift ← read pure (__do_lift == Lean.Meta.Grind.Arith.Cutsat.Search.Kind.rat)
Instances For
Increments the search steps counter, and returns true if the cumulative number of
steps reached the liaSteps configuration threshold.
Equations
- One or more equations did not get rendered due to their size.
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.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.