Documentation

Lean.Meta.Tactic.Grind.Arith.CommRing.RingM

  • ringId : Nat
  • checkCoeffDvd : Bool

    If checkCoeffDvd is true, then when using a polynomial k*m - p to simplify .. + k'*m*m_2 + ..., the substitution is performed IF

    • k divides k', OR
    • Ring implements NoNatZeroDivisors.

    We need this check when simplifying disequalities. In this case, if we perform the simplification anyway, we may end up with a proof that k * q = 0, but we cannot deduce q = 0 since the ring does not implement NoNatZeroDivisors See comment at PolyDerivation.

    We also need it when destructively simplifying equations, i.e., when replacing an equation with its simplified form (EqCnstr.simplify and EqCnstr.simplifyBasis): the rewrite multiplies the equation by k₁ = k/gcd k k', and the result is weaker than the original equation when k₁ ≠ ±1. See Note at EqCnstr.simplify.

Instances For
    @[reducible, inline]

    We don't want to keep carrying the RingId around.

    Instances For
      @[reducible, inline]
      abbrev Lean.Meta.Grind.Arith.CommRing.RingM.run {α : Type} (ringId : Nat) (x : RingM α) :
      Instances For
        @[reducible, inline]
        Instances For
          @[reducible, inline]
          Instances For

            Returns some c if the current ring has a nonzero characteristic c.

            Instances For

              Returns some (charInst, c) if the current ring has a nonzero characteristic c.

              Instances For

                Returns true if the current ring satisfies the property

                ∀ (k : Nat) (a : α), k ≠ 0 → OfNat.ofNat (α := α) k * a = 0 → a = 0
                
                Instances For

                  Returns true if the current ring has a IsCharP instance.

                  Instances For

                    Returns the pair (charInst, c). If the ring does not have a IsCharP instance, then throws internal error.

                    Instances For
                      Instances