Equations
Equations
Equations
Equations
Equations
- Lean.Grind.CommRing.instReprExpr = { reprPrec := Lean.Grind.CommRing.reprExpr✝ }
Equations
Equations
- Lean.Grind.CommRing.Var.denote ctx v = Lean.RArray.get ctx v
Equations
- Lean.Grind.CommRing.denoteInt k = bif decide (k < 0) then -OfNat.ofNat k.natAbs else OfNat.ofNat k.natAbs
Equations
- Lean.Grind.CommRing.Expr.denote ctx (a.add b) = Lean.Grind.CommRing.Expr.denote ctx a + Lean.Grind.CommRing.Expr.denote ctx b
- Lean.Grind.CommRing.Expr.denote ctx (a.sub b) = Lean.Grind.CommRing.Expr.denote ctx a - Lean.Grind.CommRing.Expr.denote ctx b
- Lean.Grind.CommRing.Expr.denote ctx (a.mul b) = Lean.Grind.CommRing.Expr.denote ctx a * Lean.Grind.CommRing.Expr.denote ctx b
- Lean.Grind.CommRing.Expr.denote ctx a.neg = -Lean.Grind.CommRing.Expr.denote ctx a
- Lean.Grind.CommRing.Expr.denote ctx (Lean.Grind.CommRing.Expr.num k) = Lean.Grind.CommRing.denoteInt k
- Lean.Grind.CommRing.Expr.denote ctx (Lean.Grind.CommRing.Expr.var v) = Lean.Grind.CommRing.Var.denote ctx v
- Lean.Grind.CommRing.Expr.denote ctx (a.pow k) = Lean.Grind.CommRing.Expr.denote ctx a ^ k
Equations
Equations
Equations
Equations
- Lean.Grind.CommRing.Power.denote ctx { x := x_1, k := 0 } = 1
- Lean.Grind.CommRing.Power.denote ctx { x := x_1, k := 1 } = Lean.Grind.CommRing.Var.denote ctx x_1
- Lean.Grind.CommRing.Power.denote ctx { x := x_1, k := k } = Lean.Grind.CommRing.Var.denote ctx x_1 ^ k
Equations
Equations
- Lean.Grind.CommRing.instReprMon = { reprPrec := Lean.Grind.CommRing.reprMon✝ }
Equations
Equations
Equations
Equations
- Lean.Grind.CommRing.Mon.denote'.go ctx Lean.Grind.CommRing.Mon.unit acc = acc
- Lean.Grind.CommRing.Mon.denote'.go ctx (Lean.Grind.CommRing.Mon.mult p m_1) acc = Lean.Grind.CommRing.Mon.denote'.go ctx m_1 (acc * Lean.Grind.CommRing.Power.denote ctx p)
Equations
- Lean.Grind.CommRing.Mon.ofVar x = Lean.Grind.CommRing.Mon.mult { x := x, k := 1 } Lean.Grind.CommRing.Mon.unit
Equations
- Lean.Grind.CommRing.Mon.unit.concat m₂ = m₂
- (Lean.Grind.CommRing.Mon.mult p m).concat m₂ = Lean.Grind.CommRing.Mon.mult p (m.concat m₂)
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.Mon.mulPow pw Lean.Grind.CommRing.Mon.unit = Lean.Grind.CommRing.Mon.mult pw Lean.Grind.CommRing.Mon.unit
Equations
Equations
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.Mon.mul.go 0 m₁ m₂ = m₁.concat m₂
- Lean.Grind.CommRing.Mon.mul.go fuel_2.succ m₁ Lean.Grind.CommRing.Mon.unit = m₁
- Lean.Grind.CommRing.Mon.mul.go fuel_2.succ Lean.Grind.CommRing.Mon.unit m₂ = m₂
Equations
Equations
- x.revlex y = bif Nat.blt x y then Ordering.gt else bif Nat.blt y x then Ordering.lt else Ordering.eq
Equations
- Lean.Grind.CommRing.powerRevlex k₁ k₂ = bif k₁.blt k₂ then Ordering.gt else bif k₂.blt k₁ then Ordering.lt else Ordering.eq
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.Mon.unit.revlexWF Lean.Grind.CommRing.Mon.unit = Ordering.eq
- Lean.Grind.CommRing.Mon.unit.revlexWF (Lean.Grind.CommRing.Mon.mult p m) = Ordering.gt
- (Lean.Grind.CommRing.Mon.mult p m).revlexWF Lean.Grind.CommRing.Mon.unit = Ordering.lt
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.Mon.revlexFuel 0 m₁ m₂ = m₁.revlexWF m₂
- Lean.Grind.CommRing.Mon.revlexFuel fuel_2.succ Lean.Grind.CommRing.Mon.unit Lean.Grind.CommRing.Mon.unit = Ordering.eq
- Lean.Grind.CommRing.Mon.revlexFuel fuel_2.succ Lean.Grind.CommRing.Mon.unit (Lean.Grind.CommRing.Mon.mult p m) = Ordering.gt
- Lean.Grind.CommRing.Mon.revlexFuel fuel_2.succ (Lean.Grind.CommRing.Mon.mult p m) Lean.Grind.CommRing.Mon.unit = Ordering.lt
Equations
Equations
Equations
- Lean.Grind.CommRing.instReprPoly = { reprPrec := Lean.Grind.CommRing.reprPoly✝ }
Equations
Equations
Equations
- Lean.Grind.CommRing.Poly.denote ctx (Lean.Grind.CommRing.Poly.num k) = ↑k
- Lean.Grind.CommRing.Poly.denote ctx (Lean.Grind.CommRing.Poly.add k m p_2) = k * Lean.Grind.CommRing.Mon.denote ctx m + Lean.Grind.CommRing.Poly.denote ctx p_2
Equations
Equations
- Lean.Grind.CommRing.Poly.denote'.denoteTerm ctx k m = bif k == 1 then Lean.Grind.CommRing.Mon.denote' ctx m else k * Lean.Grind.CommRing.Mon.denote' ctx m
Equations
- Lean.Grind.CommRing.Poly.denote'.go ctx (Lean.Grind.CommRing.Poly.num 0) acc = acc
- Lean.Grind.CommRing.Poly.denote'.go ctx (Lean.Grind.CommRing.Poly.num k) acc = acc + ↑k
- Lean.Grind.CommRing.Poly.denote'.go ctx (Lean.Grind.CommRing.Poly.add k m p_2) acc = Lean.Grind.CommRing.Poly.denote'.go ctx p_2 (acc + Lean.Grind.CommRing.Poly.denote'.denoteTerm ctx k m)
Equations
Equations
- (Lean.Grind.CommRing.Poly.num k).isSorted = true
- (Lean.Grind.CommRing.Poly.add k v (Lean.Grind.CommRing.Poly.num k_1)).isSorted = true
- (Lean.Grind.CommRing.Poly.add k m₁ (Lean.Grind.CommRing.Poly.add k_1 m₂ p)).isSorted = (m₁.grevlex m₂ == Ordering.gt && (Lean.Grind.CommRing.Poly.add k_1 m₂ p).isSorted)
Equations
- p.addConst k = bif k == 0 then p else Lean.Grind.CommRing.Poly.addConst.go k p
Equations
Equations
- Lean.Grind.CommRing.Poly.insert k m p = bif k == 0 then p else bif m == Lean.Grind.CommRing.Mon.unit then p.addConst k else Lean.Grind.CommRing.Poly.insert.go k m p
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.Poly.insert.go k m (Lean.Grind.CommRing.Poly.num k_1) = Lean.Grind.CommRing.Poly.add k m (Lean.Grind.CommRing.Poly.num k_1)
Equations
- (Lean.Grind.CommRing.Poly.num k).concat p₂ = p₂.addConst k
- (Lean.Grind.CommRing.Poly.add k m p_1).concat p₂ = Lean.Grind.CommRing.Poly.add k m (p_1.concat p₂)
Equations
- Lean.Grind.CommRing.Poly.mulConst k p = bif k == 0 then Lean.Grind.CommRing.Poly.num 0 else bif k == 1 then p else Lean.Grind.CommRing.Poly.mulConst.go k p
Equations
- Lean.Grind.CommRing.Poly.mulConst.go k (Lean.Grind.CommRing.Poly.num k_1) = Lean.Grind.CommRing.Poly.num (k * k_1)
- Lean.Grind.CommRing.Poly.mulConst.go k (Lean.Grind.CommRing.Poly.add k_1 m p_1) = Lean.Grind.CommRing.Poly.add (k * k_1) m (Lean.Grind.CommRing.Poly.mulConst.go k p_1)
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.Poly.mulMon.go k m (Lean.Grind.CommRing.Poly.add k_1 m_1 p_1) = Lean.Grind.CommRing.Poly.add (k * k_1) (m.mul m_1) (Lean.Grind.CommRing.Poly.mulMon.go k m p_1)
Equations
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.Poly.combine.go 0 p₁ p₂ = p₁.concat p₂
- Lean.Grind.CommRing.Poly.combine.go fuel_2.succ (Lean.Grind.CommRing.Poly.num k₁) (Lean.Grind.CommRing.Poly.num k₂) = Lean.Grind.CommRing.Poly.num (k₁ + k₂)
- Lean.Grind.CommRing.Poly.combine.go fuel_2.succ (Lean.Grind.CommRing.Poly.num k₁) (Lean.Grind.CommRing.Poly.add k₂ m₂ p₂_2) = (Lean.Grind.CommRing.Poly.add k₂ m₂ p₂_2).addConst k₁
- Lean.Grind.CommRing.Poly.combine.go fuel_2.succ (Lean.Grind.CommRing.Poly.add k₁ m₁ p₁_2) (Lean.Grind.CommRing.Poly.num k₂) = (Lean.Grind.CommRing.Poly.add k₁ m₁ p₁_2).addConst k₂
Equations
- p₁.mul p₂ = Lean.Grind.CommRing.Poly.mul.go p₂ p₁ (Lean.Grind.CommRing.Poly.num 0)
Equations
- Lean.Grind.CommRing.Poly.mul.go p₂ (Lean.Grind.CommRing.Poly.num k) acc = acc.combine (Lean.Grind.CommRing.Poly.mulConst k p₂)
- Lean.Grind.CommRing.Poly.mul.go p₂ (Lean.Grind.CommRing.Poly.add k m p_1) acc = Lean.Grind.CommRing.Poly.mul.go p₂ p_1 (acc.combine (Lean.Grind.CommRing.Poly.mulMon k m p₂))
Equations
- One or more equations did not get rendered due to their size.
- (Lean.Grind.CommRing.Expr.num n).toPoly = Lean.Grind.CommRing.Poly.num n
- (Lean.Grind.CommRing.Expr.var x_1).toPoly = Lean.Grind.CommRing.Poly.ofVar x_1
- (a.add b).toPoly = a.toPoly.combine b.toPoly
- (a.mul b).toPoly = a.toPoly.mul b.toPoly
- a.neg.toPoly = Lean.Grind.CommRing.Poly.mulConst (-1) a.toPoly
- (a.sub b).toPoly = a.toPoly.combine (Lean.Grind.CommRing.Poly.mulConst (-1) b.toPoly)
- ((Lean.Grind.CommRing.Expr.num n).pow k).toPoly = bif k == 0 then Lean.Grind.CommRing.Poly.num 1 else Lean.Grind.CommRing.Poly.num (n ^ k)
- (a.pow k).toPoly = bif k == 0 then Lean.Grind.CommRing.Poly.num 1 else a.toPoly.pow k
Equations
- (Lean.Grind.CommRing.Poly.num a).normEq0 c = if (a % ↑c == 0) = true then Lean.Grind.CommRing.Poly.num 0 else Lean.Grind.CommRing.Poly.num a
- (Lean.Grind.CommRing.Poly.add a a_1 a_2).normEq0 c = if (a % ↑c == 0) = true then a_2.normEq0 c else Lean.Grind.CommRing.Poly.add a a_1 (a_2.normEq0 c)
Definitions for the IsCharP
case
We considered using a single set of definitions parameterized by Option c
or simply set c = 0
since
n % 0 = n
in Lean, but decided against it to avoid unnecessary kernel‑reduction overhead.
Once we can specialize definitions before they reach the kernel,
we can merge the two versions. Until then, the IsCharP
definitions will carry the C
suffix.
We use them whenever we can infer the characteristic using type class instance synthesis.
Equations
- (Lean.Grind.CommRing.Poly.num k_1).addConstC k c = Lean.Grind.CommRing.Poly.num ((k_1 + k) % ↑c)
- (Lean.Grind.CommRing.Poly.add k_1 m p_2).addConstC k c = Lean.Grind.CommRing.Poly.add k_1 m (p_2.addConstC k c)
Equations
- Lean.Grind.CommRing.Poly.insertC k m p c = bif k % ↑c == 0 then p else Lean.Grind.CommRing.Poly.insertC.go m c (k % ↑c) p
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.Poly.insertC.go m c k (Lean.Grind.CommRing.Poly.num k_1) = Lean.Grind.CommRing.Poly.add k m (Lean.Grind.CommRing.Poly.num k_1)
Equations
- Lean.Grind.CommRing.Poly.mulConstC k p c = bif k % ↑c == 0 then Lean.Grind.CommRing.Poly.num 0 else bif k % ↑c == 1 then p else Lean.Grind.CommRing.Poly.mulConstC.go k c p
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.Poly.mulConstC.go k c (Lean.Grind.CommRing.Poly.num k_1) = Lean.Grind.CommRing.Poly.num (k * k_1 % ↑c)
Equations
- p₁.combineC p₂ c = Lean.Grind.CommRing.Poly.combineC.go c Lean.Grind.CommRing.hugeFuel p₁ p₂
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.Poly.combineC.go c 0 p₁ p₂ = p₁.concat p₂
- Lean.Grind.CommRing.Poly.combineC.go c fuel_2.succ (Lean.Grind.CommRing.Poly.num k₁) (Lean.Grind.CommRing.Poly.num k₂) = Lean.Grind.CommRing.Poly.num ((k₁ + k₂) % ↑c)
- Lean.Grind.CommRing.Poly.combineC.go c fuel_2.succ (Lean.Grind.CommRing.Poly.num k₁) (Lean.Grind.CommRing.Poly.add k₂ m₂ p₂_2) = (Lean.Grind.CommRing.Poly.add k₂ m₂ p₂_2).addConstC k₁ c
- Lean.Grind.CommRing.Poly.combineC.go c fuel_2.succ (Lean.Grind.CommRing.Poly.add k₁ m₁ p₁_2) (Lean.Grind.CommRing.Poly.num k₂) = (Lean.Grind.CommRing.Poly.add k₁ m₁ p₁_2).addConstC k₂ c
Equations
- p₁.mulC p₂ c = Lean.Grind.CommRing.Poly.mulC.go p₂ c p₁ (Lean.Grind.CommRing.Poly.num 0)
Equations
- Lean.Grind.CommRing.Poly.mulC.go p₂ c (Lean.Grind.CommRing.Poly.num k) acc = acc.combineC (Lean.Grind.CommRing.Poly.mulConstC k p₂ c) c
- Lean.Grind.CommRing.Poly.mulC.go p₂ c (Lean.Grind.CommRing.Poly.add k m p_1) acc = Lean.Grind.CommRing.Poly.mulC.go p₂ c p_1 (acc.combineC (Lean.Grind.CommRing.Poly.mulMonC k m p₂ c) c)
Equations
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.Expr.toPolyC.go c (Lean.Grind.CommRing.Expr.num n) = Lean.Grind.CommRing.Poly.num (n % ↑c)
- Lean.Grind.CommRing.Expr.toPolyC.go c (Lean.Grind.CommRing.Expr.var x_1) = Lean.Grind.CommRing.Poly.ofVar x_1
- Lean.Grind.CommRing.Expr.toPolyC.go c (a.add b) = (Lean.Grind.CommRing.Expr.toPolyC.go c a).combineC (Lean.Grind.CommRing.Expr.toPolyC.go c b) c
- Lean.Grind.CommRing.Expr.toPolyC.go c (a.mul b) = (Lean.Grind.CommRing.Expr.toPolyC.go c a).mulC (Lean.Grind.CommRing.Expr.toPolyC.go c b) c
- Lean.Grind.CommRing.Expr.toPolyC.go c a.neg = Lean.Grind.CommRing.Poly.mulConstC (-1) (Lean.Grind.CommRing.Expr.toPolyC.go c a) c
- Lean.Grind.CommRing.Expr.toPolyC.go c (a.sub b) = (Lean.Grind.CommRing.Expr.toPolyC.go c a).combineC (Lean.Grind.CommRing.Poly.mulConstC (-1) (Lean.Grind.CommRing.Expr.toPolyC.go c b) c) c
- Lean.Grind.CommRing.Expr.toPolyC.go c ((Lean.Grind.CommRing.Expr.num n).pow k) = bif k == 0 then Lean.Grind.CommRing.Poly.num 1 else Lean.Grind.CommRing.Poly.num (n ^ k % ↑c)
- Lean.Grind.CommRing.Expr.toPolyC.go c (a.pow k) = bif k == 0 then Lean.Grind.CommRing.Poly.num 1 else (Lean.Grind.CommRing.Expr.toPolyC.go c a).powC k c
A Nullstellensatz certificate.
lhs₁ = rh₁ → ... → lhsₙ = rhₙ → q₁*(lhs₁ - rhs₁) + ... + qₙ*(lhsₙ - rhsₙ) = 0
Instances For
q₁*(lhs₁ - rhs₁) + ... + qₙ*(lhsₙ - rhsₙ)
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.NullCert.denote ctx Lean.Grind.CommRing.NullCert.empty = 0
lhs₁ = rh₁ → ... → lhsₙ = rhₙ → p
Equations
- One or more equations did not get rendered due to their size.
- Lean.Grind.CommRing.NullCert.eqsImplies ctx Lean.Grind.CommRing.NullCert.empty p = p
A polynomial representing
q₁*(lhs₁ - rhs₁) + ... + qₙ*(lhsₙ - rhsₙ)
Equations
- Lean.Grind.CommRing.NullCert.empty.toPoly = Lean.Grind.CommRing.Poly.num 0
- (Lean.Grind.CommRing.NullCert.add q lhs rhs nc_1).toPoly = (q.mul (lhs.sub rhs).toPoly).combine nc_1.toPoly
Equations
- Lean.Grind.CommRing.NullCert.empty.toPolyC c = Lean.Grind.CommRing.Poly.num 0
- (Lean.Grind.CommRing.NullCert.add q lhs rhs nc_1).toPolyC c = (q.mulC ((lhs.sub rhs).toPolyC c) c).combineC (nc_1.toPolyC c) c
Theorems for justifying the procedure for commutative rings in grind
.
Equations
- nc.eq_unsat_cert k = (decide (k ≠ 0) && nc.toPoly == Lean.Grind.CommRing.Poly.num k)
Theorems for justifying the procedure for commutative rings with a characteristic in grind
.
Equations
- nc.eq_unsat_certC k c = (k % ↑c != 0 && nc.toPolyC c == Lean.Grind.CommRing.Poly.num k)
Theorems for stepwise proof-term construction
Equations
- Lean.Grind.CommRing.Stepwise.core_cert lhs rhs p = ((lhs.sub rhs).toPoly == p)
Equations
- Lean.Grind.CommRing.Stepwise.superpose_cert k₁ m₁ p₁ k₂ m₂ p₂ p = ((Lean.Grind.CommRing.Poly.mulMon k₁ m₁ p₁).combine (Lean.Grind.CommRing.Poly.mulMon k₂ m₂ p₂) == p)
Equations
- Lean.Grind.CommRing.Stepwise.simp_cert k₁ p₁ k₂ m₂ p₂ p = ((Lean.Grind.CommRing.Poly.mulConst k₁ p₁).combine (Lean.Grind.CommRing.Poly.mulMon k₂ m₂ p₂) == p)
Equations
- Lean.Grind.CommRing.Stepwise.mul_cert p₁ k p = (Lean.Grind.CommRing.Poly.mulConst k p₁ == p)
Equations
- Lean.Grind.CommRing.Stepwise.div_cert p₁ k p = (k != 0 && Lean.Grind.CommRing.Poly.mulConst k p == p₁)
Equations
- ⋯ = ⋯
Equations
Equations
- ⋯ = ⋯
Equations
- Lean.Grind.CommRing.Stepwise.d_step1_cert p₁ k₂ m₂ p₂ p = (p == p₁.combine (Lean.Grind.CommRing.Poly.mulMon k₂ m₂ p₂))
Equations
- Lean.Grind.CommRing.Stepwise.d_stepk_cert k₁ p₁ k₂ m₂ p₂ p = (p == (Lean.Grind.CommRing.Poly.mulConst k₁ p₁).combine (Lean.Grind.CommRing.Poly.mulMon k₂ m₂ p₂))
Equations
- Lean.Grind.CommRing.Stepwise.imp_1eq_cert lhs rhs p₁ p₂ = ((lhs.sub rhs).toPoly == p₁ && p₂ == Lean.Grind.CommRing.Poly.num 0)
Equations
- Lean.Grind.CommRing.Stepwise.superpose_certC k₁ m₁ p₁ k₂ m₂ p₂ p c = ((Lean.Grind.CommRing.Poly.mulMonC k₁ m₁ p₁ c).combineC (Lean.Grind.CommRing.Poly.mulMonC k₂ m₂ p₂ c) c == p)
Equations
- Lean.Grind.CommRing.Stepwise.mul_certC p₁ k p c = (Lean.Grind.CommRing.Poly.mulConstC k p₁ c == p)
Equations
- Lean.Grind.CommRing.Stepwise.div_certC p₁ k p c = (k != 0 && Lean.Grind.CommRing.Poly.mulConstC k p c == p₁)
Equations
- ⋯ = ⋯
Equations
- Lean.Grind.CommRing.Stepwise.simp_certC k₁ p₁ k₂ m₂ p₂ p c = ((Lean.Grind.CommRing.Poly.mulConstC k₁ p₁ c).combineC (Lean.Grind.CommRing.Poly.mulMonC k₂ m₂ p₂ c) c == p)
Equations
- Lean.Grind.CommRing.Stepwise.unsat_eq_certC p k c = (k % ↑c != 0 && p == Lean.Grind.CommRing.Poly.num k)
Equations
- Lean.Grind.CommRing.Stepwise.d_step1_certC p₁ k₂ m₂ p₂ p c = (p == p₁.combineC (Lean.Grind.CommRing.Poly.mulMonC k₂ m₂ p₂ c) c)
Equations
- Lean.Grind.CommRing.Stepwise.d_stepk_certC k₁ p₁ k₂ m₂ p₂ p c = (p == (Lean.Grind.CommRing.Poly.mulConstC k₁ p₁ c).combineC (Lean.Grind.CommRing.Poly.mulMonC k₂ m₂ p₂ c) c)
Equations
- Lean.Grind.CommRing.Stepwise.imp_1eq_certC lhs rhs p₁ p₂ c = ((lhs.sub rhs).toPolyC c == p₁ && p₂ == Lean.Grind.CommRing.Poly.num 0)
IntModule interface
Equations
Equations
Equations
normEq0 helper theorems
Equations
- Lean.Grind.CommRing.eq_normEq0_cert c p₁ p₂ p = (p₁ == Lean.Grind.CommRing.Poly.num ↑c && p == p₂.normEq0 c)
Equations
- Lean.Grind.CommRing.eq_gcd_cert a b (Lean.Grind.CommRing.Poly.add k v p_2) p₂ p = false
- Lean.Grind.CommRing.eq_gcd_cert a b (Lean.Grind.CommRing.Poly.num g) (Lean.Grind.CommRing.Poly.add k v p_3) p = false
- Lean.Grind.CommRing.eq_gcd_cert a b (Lean.Grind.CommRing.Poly.num g) (Lean.Grind.CommRing.Poly.num g_1) (Lean.Grind.CommRing.Poly.add k v p_4) = false
- Lean.Grind.CommRing.eq_gcd_cert a b (Lean.Grind.CommRing.Poly.num g) (Lean.Grind.CommRing.Poly.num g_1) (Lean.Grind.CommRing.Poly.num g_2) = (g_2 == a * g + b * g_1)
Equations
- Lean.Grind.CommRing.d_normEq0_cert c p₁ p₂ p = (p₂ == Lean.Grind.CommRing.Poly.num ↑c && p == p₁.normEq0 c)
Equations
- Lean.Grind.CommRing.norm_int_cert e p = (e.toPoly == p)