Documentation

Init.Grind.Ring.OfSemiring

Helper definitions and theorems for converting Semiring expressions into Ring ones. We use them to implement grind

@[reducible, inline]
Equations
Instances For
    Instances For
      @[reducible, inline]
      Equations
      Instances For
        def Lean.Grind.Ring.OfSemiring.Var.denote {α : Type u_1} (ctx : Context α) (v : Var) :
        α
        Equations
        Instances For
          theorem Lean.Grind.Ring.OfSemiring.of_eq {α : Type u_1} [Semiring α] (ctx : Context α) (lhs rhs : Expr) :
          Expr.denote ctx lhs = Expr.denote ctx rhsExpr.denoteAsRing ctx lhs = Expr.denoteAsRing ctx rhs
          theorem Lean.Grind.Ring.OfSemiring.of_diseq {α : Type u_1} [Semiring α] [AddRightCancel α] (ctx : Context α) (lhs rhs : Expr) :
          Instances For
            def Lean.Grind.CommRing.denoteSInt {α : Type u_1} [Semiring α] (k : Int) :
            α
            Equations
            Instances For
              theorem Lean.Grind.CommRing.Poly.denoteS_ofMon {α : Type u_1} [CommSemiring α] (ctx : Context α) (m : Mon) :
              denoteS ctx (ofMon m) = Mon.denote ctx m
              theorem Lean.Grind.CommRing.Poly.denoteS_ofVar {α : Type u_1} [CommSemiring α] (ctx : Context α) (x : Var) :
              denoteS ctx (ofVar x) = Var.denote ctx x
              theorem Lean.Grind.CommRing.Poly.denoteS_addConst {α : Type u_1} [CommSemiring α] (ctx : Context α) (p : Poly) (k : Int) :
              k 0p.NonnegCoeffsdenoteS ctx (p.addConst k) = denoteS ctx p + k.toNat
              theorem Lean.Grind.CommRing.Poly.denoteS_insert {α : Type u_1} [CommSemiring α] (ctx : Context α) (k : Int) (m : Mon) (p : Poly) :
              k 0p.NonnegCoeffsdenoteS ctx (insert k m p) = k.toNat * Mon.denote ctx m + denoteS ctx p
              theorem Lean.Grind.CommRing.Poly.denoteS_concat {α : Type u_1} [CommSemiring α] (ctx : Context α) (p₁ p₂ : Poly) :
              p₁.NonnegCoeffsp₂.NonnegCoeffsdenoteS ctx (p₁.concat p₂) = denoteS ctx p₁ + denoteS ctx p₂
              theorem Lean.Grind.CommRing.Poly.denoteS_mulConst {α : Type u_1} [CommSemiring α] (ctx : Context α) (k : Int) (p : Poly) :
              k 0p.NonnegCoeffsdenoteS ctx (mulConst k p) = k.toNat * denoteS ctx p
              theorem Lean.Grind.CommRing.Poly.denoteS_mulMon {α : Type u_1} [CommSemiring α] (ctx : Context α) (k : Int) (m : Mon) (p : Poly) :
              k 0p.NonnegCoeffsdenoteS ctx (mulMon k m p) = k.toNat * Mon.denote ctx m * denoteS ctx p
              theorem Lean.Grind.CommRing.Poly.denoteS_combine {α : Type u_1} [CommSemiring α] (ctx : Context α) (p₁ p₂ : Poly) :
              p₁.NonnegCoeffsp₂.NonnegCoeffsdenoteS ctx (p₁.combine p₂) = denoteS ctx p₁ + denoteS ctx p₂
              theorem Lean.Grind.CommRing.Poly.mul_go_NonnegCoeffs (p₁ p₂ acc : Poly) :
              p₁.NonnegCoeffsp₂.NonnegCoeffsacc.NonnegCoeffs(mul.go p₂ p₁ acc).NonnegCoeffs
              theorem Lean.Grind.CommRing.Poly.denoteS_mul_go {α : Type u_1} [CommSemiring α] (ctx : Context α) (p₁ p₂ acc : Poly) :
              p₁.NonnegCoeffsp₂.NonnegCoeffsacc.NonnegCoeffsdenoteS ctx (mul.go p₂ p₁ acc) = denoteS ctx acc + denoteS ctx p₁ * denoteS ctx p₂
              theorem Lean.Grind.CommRing.Poly.denoteS_mul {α : Type u_1} [CommSemiring α] (ctx : Context α) (p₁ p₂ : Poly) :
              p₁.NonnegCoeffsp₂.NonnegCoeffsdenoteS ctx (p₁.mul p₂) = denoteS ctx p₁ * denoteS ctx p₂
              theorem Lean.Grind.CommRing.Poly.denoteS_pow {α : Type u_1} [CommSemiring α] (ctx : Context α) (p : Poly) (k : Nat) :
              p.NonnegCoeffsdenoteS ctx (p.pow k) = denoteS ctx p ^ k
              theorem Lean.Grind.Ring.OfSemiring.eq_normS {α : Type u_1} [CommSemiring α] (ctx : Context α) (lhs rhs : Expr) :
              eq_normS_cert lhs rhs = trueExpr.denote ctx lhs = Expr.denote ctx rhs