Documentation

Lean.Meta.Tactic.Grind.Arith.Cutsat.EqCnstr

Given an equation c₁ containing the monomial a*x, and a disequality constraint c₂ containing the monomial b*x, eliminate x by applying substitution.

Instances For

    Selects the variable in the given linear polynomial whose coefficient has the smallest absolute value.

    Instances For
      @[export lean_cutsat_propagate_nonlinear]
      Instances For

        Similar to updateOccs, but does not assume first variable is ps "owner". Recall that when eliminating equalities we do not necessarily eliminate the maximal variable, but the one with unit coefficient. Remark: we keep occurrences for equations in elimEqs because we want to maintain them in solved form. Consider the following scenario: 1- Asserted a + 2*b + 1 = 0, and eliminated a 2- Asserted b + 1 = 0, and eliminated b.

        At step 2, we want to substitute b at a + 2*b + 1 to ensure cutsat knows a is forced to be equal to a constant value. This is relevant for linearizing nonlinear terms.

        Remark: x is the variable that was eliminated using p.

        Instances For
          @[export lean_grind_cutsat_assert_eq]
          Instances For

            Internalizes an integer (and Nat) expression. Here are the different cases that are handled.

            • a + b when parent? is not +, , or
            • k * a when k is a numeral and parent? is not +, *, ,
            • numerals when parent? is not +, *, , . Recall that we must internalize numerals to make sure we can propagate equalities back to the congruence closure module. Example: we have f 5, f x, x - y = 3, y = 2.
            Instances For