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
                def Lean.Grind.Ring.OfSemiring.Expr.denote {α : Type u_1} [Semiring α] (ctx : Context α) :
                Exprα
                Equations
                  Instances For
                    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
                              def Lean.Grind.CommRing.Poly.denoteS {α : Type u_1} [Semiring α] (ctx : Context α) (p : Poly) :
                              α
                              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
                                  Equations
                                    Instances For
                                      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