Instances For
- p : Poly
- h : EqCnstrProof
- sugar : Nat
- id : Nat
Instances For
- core (a b : Expr) (ra rb : RingExpr) : EqCnstrProof
- superpose (k₁ : Int) (m₁ : Mon) (c₁ : EqCnstr) (k₂ : Int) (m₂ : Mon) (c₂ : EqCnstr) : EqCnstrProof
- simp (k₁ : Int) (c₁ : EqCnstr) (k₂ : Int) (m₂ : Mon) (c₂ : EqCnstr) : EqCnstrProof
- mul (k : Int) (e : EqCnstr) : EqCnstrProof
- div (k : Int) (e : EqCnstr) : EqCnstrProof
Instances For
Equations
Instances For
A polynomial equipped with a chain of rewrite steps that justifies its equality to the original input.
From an input polynomial p
, we use equations (i.e., EqCnstr
) as rewriting rules.
For example, consider the following sequence of rewrites for the input polynomial x^2 + x*y
using the equations x - 1 = 0
(c₁
) and y - 2 = 0
(c₂
).
2*x^2 + x*y | s₁ := .input (2*x^2 + x*y)
= - 2*x*(x - 1)
(2*x + x*y) | s₂ := .step (2*x + x*y) 1 s₁ (-2) x c₁
= - 2*1*(x - 1)
(x*y + 2) | s₃ := .step (x*y + 2) 1 s₂ (-2) 1 c₁
= - 1*y*(x - 1)
(y + 2) | s₄ := .step (y+2) 1 s₃ (-1) y c₁
= - 1*1*(y - 2)
4 | s₅ := .step 4 1 s₄ 1 1 c₂
From the chain above, we build the certificate
(-2*x - y - 2)*(x-1) + (-1)*(y-2)
for
4 = (2*x^2 + x*y)
because x-1 = 0
and y-2=0
- input (p : Poly) : PolyDerivation
- step
(p : Poly)
(k₁ : Int)
(d : PolyDerivation)
(k₂ : Int)
(m₂ : Mon)
(c : EqCnstr)
: PolyDerivation
p = k₁*d.getPoly + k₂*m₂*c.p
The coefficient
k₁
is used because the leading monomial inc
may not be monic. Thus, if we follow the chain back to the input polynomial, we have thatp = C * input_p
for aC
that is equal to the product of allk₁
s in the chain. We have thatC ≠ 1
only if the ring does not implementNoNatZeroDivisors
. Here is a small example where we simplifyx+y
using the equations2*x - 1 = 0
(c₁
),3*y - 1 = 0
(c₂
), and6*z + 5 = 0
(c₃
)x + y + z | s₁ := .input (x + y + z) *2 = - 1*1*(2*x - 1) 2*y + 2*z + 1 | s₂ := .step (2*y + 2*z + 1) 2 s₁ (-1) 1 c₁ *3 = - 2*1*(3*y - 1) 6*z + 5 | s₃ := .step (6*z + 5) 3 s₂ (-2) 1 c₂ = - 1*1*(6*z + 5) 0 | s₄ := .step (0) 1 s₃ (-1) 1 c₃
For this chain, we build the certificate
(-3)*(2*x - 1) + (-2)*(3*y - 1) + (-1)*(6*z + 5)
for
0 = 6*(x + y + z)
Recall that if the ring implement
NoNatZeroDivisors
, then the following property holds:∀ (k : Int) (a : α), k ≠ 0 → (intCast k) * a = 0 → a = 0
grind can deduce that
x+y+z = 0
Instances For
Equations
- (Lean.Meta.Grind.Arith.CommRing.PolyDerivation.input p).p = p
- (Lean.Meta.Grind.Arith.CommRing.PolyDerivation.step p k₁ d k₂ m₂ c).p = p
Instances For
State for each CommRing
processed by this module.
- id : Nat
- type : Expr
- u : Level
Cached
getDecLevel type
- commRingInst : Expr
CommRing
instance fortype
IsCharP
instance fortype
if available.NoNatZeroDivisors
instance fortype
if available.- addFn : Expr
- mulFn : Expr
- subFn : Expr
- negFn : Expr
- powFn : Expr
- intCastFn : Expr
- natCastFn : Expr
Mapping from variables to their denotations. Remark each variable can be in only one ring.
Mapping from
Expr
to a variable representing it.Mapping from Lean expressions to their representations as
RingExpr
- nextId : Nat
Next unique id for
EqCnstr
s. - steps : Nat
Number of "steps": simplification and superposition.
- queue : Queue
Equations to process.
Mapping from variables
x
to equations such that the smallest variable in the leading monomial isx
.- diseqs : PArray DiseqCnstr
Disequalities.
- recheck : Bool
If
recheck
istrue
, then new equalities have been added to the basis since we checked disequalities and implied equalities.
Instances For
Equations
- One or more equations did not get rendered due to their size.