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.

Equations
    Instances For

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

      Equations
        Instances For
          @[export lean_cutsat_propagate_nonlinear]
          Equations
            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.

              Equations
                Instances For
                  @[export lean_grind_cutsat_assert_eq]
                  Equations
                    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.
                      Equations
                        Instances For