import Mathlib.Algebra.Ring.Basic import Mathlib.Algebra.Group.Defs /-! # Free modules We construct the free module over a ring `R` generated by a set `X`. It is assumed that both `R` and `X` have decidable equality. This is to obtain decidable equality for the elements of the module, which we do (`FreeModule.decEq`). We choose our definition to allow both such computations and to prove results. The definition is as a quotient of *Formal Sums* (`FormalSum`), which are simply lists of pairs `(a,x)` where `a` is a coefficient in `R` and `x` is a term in `X`. We associate to such a formal sum a coordinate function `X → R` (`FormalSum.coords`). We see that having the same coordinate functions gives an equivalence relation on the formal sums. The free module (`FreeModule`) is then defined as the corresponding quotient of such formal sums. We also give an alternative description via moves, which is more convenient for universal properties. -/ variable {R :R: Type ?u.74981Type _} [RingType _: Type (?u.17+1)R] [DecidableEqR: Type ?u.2R] variable {R: Type ?u.2X :X: Type ?u.7987Type _} [DecidableEqType _: Type (?u.2237+1)X] section FormalSumCoords /-! ## Formal sums -/ /-- A *formal sum* represents an `R`-linear combination of finitely many elements of `X`. This is implemented as a list `R × X`, which associates to each element `X` of the list a coefficient from `R`. -/ abbrev FormalSum (X: Type ?u.32RR: Type ?u.71X :X: Type ?u.74Type _) [RingType _: Type (?u.71+1)R] := List (R: Type ?u.71R ×R: Type ?u.71X) /-! ## Coordinate functions and Supports * We define coordinate functions X → R for formal sums. * We define (weak) support, relate non-zero coordinates. * We prove decidable equality on a list (easy fact). -/ /-! ### Coordinate functions The definition of coordinate functions is in two steps. We first define the coordinate for a pair `(a,x)`, and then define the coordinate function for a formal sum by summing over such terms. -/ /-- Coordinates for a formal sum with one term. -/ defX: Type ?u.74monomCoeff (monomCoeff: (R : Type ?u.130) → (X : Type ?u.133) → [inst : Ring R] → [inst : DecidableEq X] → X → R × X → RRR: Type ?u.130X :X: Type ?u.133Type _) [RingType _: Type (?u.133+1)R] [DecidableEqR: Type ?u.130X](X: Type ?u.133x₀ :x₀: XX) (X: Type ?u.133nx :nx: R × XR ×R: Type ?u.130X) :X: Type ?u.133R := match (R: Type ?u.130nx.2 ==nx: R × Xx₀) with |x₀: Xtrue =>true: Boolnx.1 |nx: R × Xfalse =>false: Bool0 /-- Homomorphism property for coordinates for a formal sum with one term. -/ theorem0: ?m.219monom_coords_hom (monom_coords_hom: ∀ {R : Type u_1} [inst : Ring R] {X : Type u_2} [inst_1 : DecidableEq X] (x₀ x : X) (a b : R), monomCoeff R X x₀ (a + b, x) = monomCoeff R X x₀ (a, x) + monomCoeff R X x₀ (b, x)x₀x₀: Xx :x: XX) (X: Type ?u.642aa: Rb :b: RR) :R: Type ?u.627monomCoeffmonomCoeff: (R : Type ?u.664) → (X : Type ?u.663) → [inst : Ring R] → [inst : DecidableEq X] → X → R × X → RRR: Type ?u.627XX: Type ?u.642x₀ (x₀: Xa +a: Rb,b: Rx) =x: XmonomCoeffmonomCoeff: (R : Type ?u.803) → (X : Type ?u.802) → [inst : Ring R] → [inst : DecidableEq X] → X → R × X → RRR: Type ?u.627XX: Type ?u.642x₀ (x₀: Xa,a: Rx) +x: XmonomCoeffmonomCoeff: (R : Type ?u.841) → (X : Type ?u.840) → [inst : Ring R] → [inst : DecidableEq X] → X → R × X → RRR: Type ?u.627XX: Type ?u.642x₀ (x₀: Xb,b: Rx) :=x: XmonomCoeff R X x₀ (a + b, x) = monomCoeff R X x₀ (a, x) + monomCoeff R X x₀ (b, x)monomCoeff R X x₀ (a + b, x) = monomCoeff R X x₀ (a, x) + monomCoeff R X x₀ (b, x)monomCoeff R X x₀ (a + b, x) = monomCoeff R X x₀ (a, x) + monomCoeff R X x₀ (b, x)(match (a + b, x).snd == x₀ with | true => (a + b, x).fst | false => 0) = monomCoeff R X x₀ (a, x) + monomCoeff R X x₀ (b, x)(match (a + b, x).snd == x₀ with | true => (a + b, x).fst | false => 0) = monomCoeff R X x₀ (a, x) + monomCoeff R X x₀ (b, x)monomCoeff R X x₀ (a + b, x) = monomCoeff R X x₀ (a, x) + monomCoeff R X x₀ (b, x)
false
true
false
true/-- Associativity of scalar multiplication coordinates for a formal sum with one term. -/ theoremGoals accomplished! 🐙monom_coords_mul (monom_coords_mul: ∀ {x : X} (x₀ : X) (a b : R), monomCoeff R X x₀ (a * b, x) = a * monomCoeff R X x₀ (b, x)x₀ :x₀: XX) (X: Type ?u.1476aa: Rb :b: RR) :R: Type ?u.1461monomCoeffmonomCoeff: (R : Type ?u.1590) → (X : Type ?u.1589) → [inst : Ring R] → [inst : DecidableEq X] → X → R × X → RRR: Type ?u.1461XX: Type ?u.1476x₀ (x₀: Xa *a: Rb,b: Rx) =x: ?m.1579a *a: RmonomCoeffmonomCoeff: (R : Type ?u.1698) → (X : Type ?u.1697) → [inst : Ring R] → [inst : DecidableEq X] → X → R × X → RRR: Type ?u.1461XX: Type ?u.1476x₀ (x₀: Xb,b: Rx) :=x: ?m.1579monomCoeff R X x₀ (a * b, x) = a * monomCoeff R X x₀ (b, x)monomCoeff R X x₀ (a * b, x) = a * monomCoeff R X x₀ (b, x)monomCoeff R X x₀ (a * b, x) = a * monomCoeff R X x₀ (b, x)
false
true
false
true/-- Coordinates for a formal sum with one term with scalar `0`. -/ theoremGoals accomplished! 🐙monom_coords_at_zero (monom_coords_at_zero: ∀ (x₀ x : X), monomCoeff R X x₀ (0, x) = 0x₀x₀: Xx :x: XX) :X: Type ?u.2237monomCoeffmonomCoeff: (R : Type ?u.2255) → (X : Type ?u.2254) → [inst : Ring R] → [inst : DecidableEq X] → X → R × X → RRR: Type ?u.2222XX: Type ?u.2237x₀ (x₀: X0,0: ?m.2265x) =x: X0 :=0: ?m.2368monomCoeff R X x₀ (0, x) = 0monomCoeff R X x₀ (0, x) = 0monomCoeff R X x₀ (0, x) = 0
false
true
false
true/-- The coordinates for a formal sum. -/ defGoals accomplished! 🐙FormalSum.coords : FormalSumFormalSum.coords: FormalSum R X → X → RRR: Type ?u.2644X →X: Type ?u.2659X →X: Type ?u.2659R | [], _ =>R: Type ?u.26440 |0: ?m.2708h :: t,h: R × Xx₀ =>x₀: XmonomCoeffmonomCoeff: (R : Type ?u.2802) → (X : Type ?u.2801) → [inst : Ring R] → [inst : DecidableEq X] → X → R × X → RRR: Type ?u.2644XX: Type ?u.2659x₀x₀: Xh +h: R × Xcoords tcoords: FormalSum R X → X → Rx₀ /-! ### Support of a formal sum We next define the support of a formal sum and prove the property that coordinates vanish outside the support. -/ /-- Support for a formal sum in a weak sense (coordinates may vanish on this). -/ def FormalSum.support (x₀: Xs : FormalSums: FormalSum R XRR: Type ?u.3669X) : ListX: Type ?u.3684X :=X: Type ?u.3684s.map <| fun (_,s: FormalSum R Xx) =>x: Xx open FormalSum /-- Support contains elements `x : X` where the coordinate is not `0`. -/ theoremx: Xnonzero_coord_in_support (s : FormalSums: FormalSum R XRR: Type ?u.3898X) : ∀X: Type ?u.3913x :x: XX,X: Type ?u.39130 ≠0: ?m.3941s.s: FormalSum R Xcoordscoords: {R : Type ?u.3952} → [inst : Ring R] → {X : Type ?u.3951} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx →x: Xx ∈x: Xs.support := matchs: FormalSum R Xs with | [] => funs: FormalSum R Xxx: ?m.4135hyp =>hyp: ?m.4138R: Type u_1
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_2
inst✝: DecidableEq X
s: FormalSum R X
x: X
hyp: 0 ≠ coords [] xR: Type u_1
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_2
inst✝: DecidableEq X
s: FormalSum R X
x: X
hyp: 0 ≠ coords [] xR: Type u_1
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_2
inst✝: DecidableEq X
s: FormalSum R X
x: X
hyp: 0 ≠ coords [] xGoals accomplished! 🐙R: Type u_1
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_2
inst✝: DecidableEq X
s: FormalSum R X
x: X
hyp: 0 ≠ coords [] xR: Type u_1
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_2
inst✝: DecidableEq X
s: FormalSum R X
x: X
hyp: 0 ≠ coords [] x|Goals accomplished! 🐙h :: t =>h: R × XGoals accomplished! 🐙Goals accomplished! 🐙R: Type u_1
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_2
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
x: X
a₀: R
x₀: X
hyp: 0 ≠ coords t x
d: support ((a₀, x₀) :: t) = x₀ :: support t
p: (x₀ == x) = false
step:= nonzero_coord_in_support t x hyp: x ∈ support t
eqn: ¬x₀ = x
contra: x = x₀
contra':= Eq.symm contra: x₀ = xGoals accomplished! 🐙Goals accomplished! 🐙/-! ### Equality of coordinates on a list We define equality of coordinates on a list and prove that it is decidable and implied by equality of formal sums. -/ /-- The condition of being equal on all elements is a given list -/ def equalOnList (Goals accomplished! 🐙l : Listl: List XX) (X: Type ?u.7987ff: X → Rg :g: X → RX →X: Type ?u.7987R) :R: Type ?u.7972Prop := matchProp: Typel with | [] =>l: List Xtrue |true: Boolh ::h: Xt => (t: List Xff: X → Rh =h: Xgg: X → Rh) ∧ (equalOnListh: Xtt: List Xff: X → Rg) /-- Equal functions are equal on arbitrary supports. -/ theoremg: X → RequalOnList_of_equal (equalOnList_of_equal: ∀ (l : List X) (f g : X → R), f = g → equalOnList l f gl : Listl: List XX) (X: Type ?u.8352ff: X → Rg :g: X → RX →X: Type ?u.8352R) :R: Type ?u.8337f =f: X → Rg → equalOnListg: X → Rll: List Xff: X → Rg :=g: X → Rf = g → equalOnList l f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
hyp: f = gequalOnList l f gf = g → equalOnList l f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
hyp: f = gequalOnList l f g
nilequalOnList [] f g
nilequalOnList [] f g
nilGoals accomplished! 🐙R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
hyp: f = gequalOnList l f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
consequalOnList (h :: t) f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
consequalOnList (h :: t) f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
consf h = g h ∧ equalOnList t f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
consf h = g h ∧ equalOnList t f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
consequalOnList (h :: t) f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
cons.leftf h = g hR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
cons.rightequalOnList t f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
consequalOnList (h :: t) f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
cons.leftf h = g hR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
cons.rightequalOnList t f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
cons.leftg h = g hR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
cons.rightequalOnList t f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
cons.rightequalOnList t f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: f = g
h: X
t: List X
step: equalOnList t f g
consequalOnList (h :: t) f g/-- Functions equal on support `l` are equal on each `x ∈ l`. -/ theoremGoals accomplished! 🐙eq_mem_of_equalOnList (eq_mem_of_equalOnList: ∀ (l : List X) (f g : X → R) (x : X), x ∈ l → equalOnList l f g → f x = g xl : Listl: List XX) (X: Type ?u.8875ff: X → Rg :g: X → RX →X: Type ?u.8875R) (R: Type ?u.8860x :x: XX)(X: Type ?u.8875mhyp :mhyp: x ∈ lx ∈x: Xl) : equalOnListl: List Xll: List Xff: X → Rg →g: X → Rff: X → Rx =x: Xgg: X → Rx := matchx: Xl with | [] =>l: List XR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x: X
mhyp: x ∈ []equalOnList [] f g → f x = g x|Goals accomplished! 🐙h ::h: Xt =>t: List XR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
mhyp: x ∈ h :: tequalOnList (h :: t) f g → f x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
mhyp: x ∈ h :: t
hyp: equalOnList (h :: t) f gf x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
mhyp: x ∈ h :: tequalOnList (h :: t) f g → f x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
mhyp: x ∈ h :: t
hyp: f h = g h ∧ equalOnList t f gf x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
mhyp: x ∈ h :: tequalOnList (h :: t) f g → f x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x: X
t: List X
hyp: f x = g x ∧ equalOnList t f g
headf x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
hyp: f h = g h ∧ equalOnList t f g
a✝: List.Mem x t
tailf x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
mhyp: x ∈ h :: tequalOnList (h :: t) f g → f x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
hyp: f h = g h ∧ equalOnList t f g
a✝: List.Mem x t
tailf x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
mhyp: x ∈ h :: tequalOnList (h :: t) f g → f x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
hyp: f h = g h ∧ equalOnList t f g
a✝: List.Mem x t
tailf x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
hyp: f h = g h ∧ equalOnList t f g
a✝: List.Mem x tx ∈ tGoals accomplished! 🐙R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
mhyp: x ∈ h :: tequalOnList (h :: t) f g → f x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
hyp: f h = g h ∧ equalOnList t f g
a✝: List.Mem x t
inTail: x ∈ t
step: f x = g x
tailf x = g xR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
x, h: X
t: List X
mhyp: x ∈ h :: tequalOnList (h :: t) f g → f x = g x/-- Decidability of equality on list. -/ @[instance] defGoals accomplished! 🐙decidableEqualOnList (decidableEqualOnList: {R : Type u_1} → [inst : DecidableEq R] → {X : Type u_2} → (l : List X) → (f g : X → R) → Decidable (equalOnList l f g)l : Listl: List XX) (X: Type ?u.9739ff: X → Rg :g: X → RX →X: Type ?u.9739R) : Decidable (equalOnListR: Type ?u.9724ll: List Xff: X → Rg) := matchg: X → Rl with | [] => Decidable.isTrue (l: List XR: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → RequalOnList [] f g) |Goals accomplished! 🐙h ::h: Xt =>t: List XR: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List XDecidable (equalOnList (h :: t) f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List XDecidable (f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List XDecidable (equalOnList (h :: t) f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
x✝: Decidable (equalOnList t f g)Decidable (f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: equalOnList t f g
isTrueDecidable (f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: equalOnList t f g
isTrueDecidable (f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: equalOnList t f g
c: ¬f h = g hDecidable (f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: equalOnList t f g
c: ¬f h = g h
h¬(f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: equalOnList t f g
c: ¬f h = g hDecidable (f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: equalOnList t f g
c: ¬f h = g h
contra: f h = g h ∧ equalOnList t f g
hR: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: equalOnList t f g
c: ¬f h = g hDecidable (f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: equalOnList t f g
c: ¬f h = g h
contra: f h = g h ∧ equalOnList t f g
contra': f h = g h
hR: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: equalOnList t f g
c: ¬f h = g hDecidable (f h = g h ∧ equalOnList t f g)Goals accomplished! 🐙Goals accomplished! 🐙R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
x✝: Decidable (equalOnList t f g)Decidable (f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: ¬equalOnList t f g
isFalseDecidable (f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: ¬equalOnList t f g
isFalse.h¬(f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: ¬equalOnList t f g
isFalseDecidable (f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: ¬equalOnList t f g
contra: f h = g h ∧ equalOnList t f g
isFalse.hR: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: ¬equalOnList t f g
isFalseDecidable (f h = g h ∧ equalOnList t f g)R: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: ¬equalOnList t f g
contra: f h = g h ∧ equalOnList t f g
contra': equalOnList t f g
isFalse.hR: Type ?u.9724
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.9739
inst✝: DecidableEq X
l: List X
f, g: X → R
h: X
t: List X
hs: ¬equalOnList t f g
isFalseDecidable (f h = g h ∧ equalOnList t f g)end FormalSumCoords /-! ## Quotient Free Module * We define relation by having equal coordinates * We show this is an equivalence relation and define the quotient -/ section QuotientFreeModule /-- Relation by equal coordinates. -/ defGoals accomplished! 🐙eqlCoords (RR: TypeX :X: TypeType) [RingType: Type 1R] [DecidableEqR: TypeX](X: Types₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: TypeX) :X: TypeProp :=Prop: Types₁.s₁: FormalSum R Xcoords =coords: {R : Type ?u.10968} → [inst : Ring R] → {X : Type ?u.10967} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rs₂.s₂: FormalSum R Xcoords namespace eqlCoords /-- Relation by equal coordinates is reflexive. -/ theorem refl (coords: {R : Type ?u.11014} → [inst : Ring R] → {X : Type ?u.11013} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rs : FormalSums: FormalSum R XRR: Type ?u.11058X) : eqlCoordsX: Type ?u.11073RR: Type ?u.11058XX: Type ?u.11073ss: FormalSum R Xs :=s: FormalSum R XeqlCoords R X s s/-- Relation by equal coordinates is symmetric. -/ theoremGoals accomplished! 🐙symm {s₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: Type ?u.11162X} : eqlCoordsX: Type ?u.11177RR: Type ?u.11162XX: Type ?u.11177s₁s₁: FormalSum R Xs₂ → eqlCoordss₂: FormalSum R XRR: Type ?u.11162XX: Type ?u.11177s₂s₂: FormalSum R Xs₁ :=s₁: FormalSum R XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
hyp: eqlCoords R X s₁ s₂eqlCoords R X s₂ s₁R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
hyp: eqlCoords R X s₁ s₂
h∀ (x : X), FormalSum.coords s₂ x = FormalSum.coords s₁ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
hyp: eqlCoords R X s₁ s₂
x: X
hFormalSum.coords s₂ x = FormalSum.coords s₁ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
hyp: eqlCoords R X s₁ s₂
x: X
h.hFormalSum.coords s₁ x = FormalSum.coords s₂ x/-- Relation by equal coordinates is transitive. -/ theoremGoals accomplished! 🐙trans {s₁s₁: FormalSum R Xs₂s₂: FormalSum R Xs₃ : FormalSums₃: FormalSum R XRR: Type ?u.11337X} : eqlCoordsX: Type ?u.11352RR: Type ?u.11337XX: Type ?u.11352s₁s₁: FormalSum R Xs₂ → eqlCoordss₂: FormalSum R XRR: Type ?u.11337XX: Type ?u.11352s₂s₂: FormalSum R Xs₃ → eqlCoordss₃: FormalSum R XRR: Type ?u.11337XX: Type ?u.11352s₁s₁: FormalSum R Xs₃ :=s₃: FormalSum R XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂, s₃: FormalSum R X
hyp₁: eqlCoords R X s₁ s₂
hyp₂: eqlCoords R X s₂ s₃eqlCoords R X s₁ s₃R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂, s₃: FormalSum R X
hyp₁: eqlCoords R X s₁ s₂
hyp₂: eqlCoords R X s₂ s₃
h∀ (x : X), FormalSum.coords s₁ x = FormalSum.coords s₃ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂, s₃: FormalSum R X
hyp₁: eqlCoords R X s₁ s₂
hyp₂: eqlCoords R X s₂ s₃
x: X
hFormalSum.coords s₁ x = FormalSum.coords s₃ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂, s₃: FormalSum R X
hyp₁: eqlCoords R X s₁ s₂
hyp₂: eqlCoords R X s₂ s₃
x: X
l₁: FormalSum.coords s₁ x = FormalSum.coords s₂ x
hFormalSum.coords s₁ x = FormalSum.coords s₃ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂, s₃: FormalSum R X
hyp₁: eqlCoords R X s₁ s₂
hyp₂: eqlCoords R X s₂ s₃
x: X
l₁: FormalSum.coords s₁ x = FormalSum.coords s₂ x
l₂: FormalSum.coords s₂ x = FormalSum.coords s₃ x
hFormalSum.coords s₁ x = FormalSum.coords s₃ x/-- Relation by equal coordinates is an equivalence relation. -/ theoremGoals accomplished! 🐙is_equivalence : Equivalence (eqlCoordsis_equivalence: Equivalence (eqlCoords R X)RR: Type ?u.11555X) := { refl := refl, symm := symm, trans := trans } end eqlCoords /-- Setoid based on equal coordinates. -/ instanceX: Type ?u.11570formalSumSetoid (formalSumSetoid: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → Setoid (FormalSum R X)RR: TypeX :X: TypeType) [RingType: Type 1R] [DecidableEqR: TypeX] : Setoid (FormalSumX: TypeRR: TypeX) := ⟨eqlCoordsX: TypeRR: TypeX,X: TypeeqlCoords.is_equivalence⟩ /-- Quotient free module. -/ abbreveqlCoords.is_equivalence: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X], Equivalence (eqlCoords R X)FreeModule (FreeModule: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → ?m.12113 R XRR: TypeX :X: TypeType) [RingType: Type 1R] [DecidableEqR: TypeX] := Quotient (X: TypeformalSumSetoidformalSumSetoid: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → Setoid (FormalSum R X)RR: TypeX) notationX: TypeR"["R: ?m.14433G"]" =>G: ?m.14424FreeModuleFreeModule: (R X : Type) → [inst : Ring R] → [inst : DecidableEq X] → TypeRR: ?m.15230G end QuotientFreeModule section DecidableEqQuotFreeModule /-! ## Decidable equality on quotient free modules We show that the free module `F[X]` has decidable equality. This has two steps: * show decidable equality for images of formal sums. * lift to quotient (by relating to formal sums). We also show that the coordinate functions are defined on the quotient. -/ namespace FreeModule /-- Decidable equality for quotient elements in the free module -/ @[instance] defG: ?m.12378decideEqualQuotient (decideEqualQuotient: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → (s₁ s₂ : FormalSum R X) → Decidable (Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂)s₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: Type ?u.20851X) : Decidable (@Eq (X: Type ?u.20866R[R: Type ?u.20851X]) ⟦X: Type ?u.20866s₁⟧ ⟦s₁: FormalSum R Xs₂⟧) := ifs₂: FormalSum R Xch₁ : equalOnListch₁: ?m.21212s₁.supports₁: FormalSum R Xs₁.s₁: FormalSum R Xcoordscoords: {R : Type ?u.20982} → [inst : Ring R] → {X : Type ?u.20981} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rs₂.s₂: FormalSum R Xcoords then ifcoords: {R : Type ?u.21003} → [inst : Ring R] → {X : Type ?u.21002} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rch₂ : equalOnListch₂: ?m.21191s₂.supports₂: FormalSum R Xs₁.s₁: FormalSum R Xcoordscoords: {R : Type ?u.21101} → [inst : Ring R] → {X : Type ?u.21100} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rs₂.s₂: FormalSum R Xcoords then Decidable.isTrue (coords: {R : Type ?u.21122} → [inst : Ring R] → {X : Type ?u.21121} → [inst_1 : DecidableEq X] → FormalSum R X → X → RR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
as₁ ≈ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
a.h∀ (x : X), FormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
a.hFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
a.hFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: 0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: 0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: 0 = FormalSum.coords s₂ x0 = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: 0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: 0 = FormalSum.coords s₂ xFormalSum.coords s₂ x = FormalSum.coords s₂ xGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
a.hFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ xx ∈ FormalSum.support s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ x
a0 ≠ FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ xx ∈ FormalSum.support s₂Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ x
lem: x ∈ FormalSum.support s₂
lem':= eq_mem_of_equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) x lem ch₂: FormalSum.coords s₁ x = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
a.hFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ xx ∈ FormalSum.support s₁R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ x
a0 ≠ FormalSum.coords s₁ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ xx ∈ FormalSum.support s₁Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ x
lem: x ∈ FormalSum.support s₁
lem':= eq_mem_of_equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) x lem ch₁: FormalSum.coords s₁ x = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ xFormalSum.coords s₁ x = FormalSum.coords s₂ x) else Decidable.isFalse (Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: ¬equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)¬Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: ¬equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
contra: Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: ¬equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)¬Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: ¬equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
contra: Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂
lem:= equalOnList_of_equal (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) (Quotient.exact contra): equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂: ¬equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)¬Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂) else Decidable.isFalse (Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: ¬equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)¬Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: ¬equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
contra: Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: ¬equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)¬Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: ¬equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
contra: Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂
lem:= equalOnList_of_equal (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) (Quotient.exact contra): equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
ch₁: ¬equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)¬Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂) /-! ### Lift to quotient -/ /-- Boolean equality on support. -/ def beqOnSupport (Goals accomplished! 🐙l : Listl: List XX) (X: Type ?u.22467ff: X → Rg :g: X → RX →X: Type ?u.22467R) :R: Type ?u.22452Bool :=Bool: Typel.all <| funl: List Xx => decide (x: ?m.22501ff: X → Rx =x: ?m.22501gg: X → Rx) /-- Equality on support from boolean equality. -/ theoremx: ?m.22501eql_on_support_of_true {eql_on_support_of_true: ∀ {l : List X} {f g : X → R}, beqOnSupport l f g = true → equalOnList l f gl : Listl: List XX} {X: Type ?u.22635ff: X → Rg :g: X → RX →X: Type ?u.22635R} :R: Type ?u.22620beqOnSupportbeqOnSupport: {R : Type ?u.22661} → [inst : DecidableEq R] → {X : Type ?u.22660} → List X → (X → R) → (X → R) → Boolll: List Xff: X → Rg =g: X → Rtrue → equalOnListtrue: Boolll: List Xff: X → Rg :=g: X → RbeqOnSupport l f g = true → equalOnList l f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
hyp: beqOnSupport l f g = trueequalOnList l f gbeqOnSupport l f g = true → equalOnList l f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
hyp: beqOnSupport l f g = trueequalOnList l f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
hyp: beqOnSupport [] f g = true
nilequalOnList [] f gGoals accomplished! 🐙R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
l: List X
f, g: X → R
hyp: beqOnSupport l f g = trueequalOnList l f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
h: X
t: List X
step: beqOnSupport t f g = true → equalOnList t f g
hyp: beqOnSupport (h :: t) f g = true
consequalOnList (h :: t) f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
h: X
t: List X
step: beqOnSupport t f g = true → equalOnList t f g
hyp: beqOnSupport (h :: t) f g = true
consf h = g h ∧ equalOnList t f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
h: X
t: List X
step: beqOnSupport t f g = true → equalOnList t f g
hyp: beqOnSupport (h :: t) f g = true
consequalOnList (h :: t) f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
h: X
t: List X
step: beqOnSupport t f g = true → equalOnList t f g
hyp: f h = g h ∧ List.foldr (fun a r => decide (f a = g a) && r) true t = true
consf h = g h ∧ equalOnList t f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
h: X
t: List X
step: beqOnSupport t f g = true → equalOnList t f g
hyp: beqOnSupport (h :: t) f g = true
consequalOnList (h :: t) f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
h: X
t: List X
step: beqOnSupport t f g = true → equalOnList t f g
hyp: f h = g h ∧ List.foldr (fun a r => decide (f a = g a) && r) true t = true
p₂:= step hyp.right: equalOnList t f g
consf h = g h ∧ equalOnList t f gR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
f, g: X → R
h: X
t: List X
step: beqOnSupport t f g = true → equalOnList t f g
hyp: beqOnSupport (h :: t) f g = true
consequalOnList (h :: t) f g/-- Boolean equality on support gives equal quotients. -/ theoremGoals accomplished! 🐙eqlquot_of_beq_support (eqlquot_of_beq_support: ∀ (s₁ s₂ : FormalSum R X), beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true → beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true → Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂s₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: Type ?u.23622X) (X: Type ?u.23637c₁ :c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = truebeqOnSupportbeqOnSupport: {R : Type ?u.23666} → [inst : DecidableEq R] → {X : Type ?u.23665} → List X → (X → R) → (X → R) → Bools₁.supports₁: FormalSum R Xs₁.s₁: FormalSum R Xcoordscoords: {R : Type ?u.23753} → [inst : Ring R] → {X : Type ?u.23752} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rs₂.s₂: FormalSum R Xcoords) (coords: {R : Type ?u.23849} → [inst : Ring R] → {X : Type ?u.23848} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rc₂ :c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = truebeqOnSupportbeqOnSupport: {R : Type ?u.23916} → [inst : DecidableEq R] → {X : Type ?u.23915} → List X → (X → R) → (X → R) → Bools₂.supports₂: FormalSum R Xs₁.s₁: FormalSum R Xcoordscoords: {R : Type ?u.23998} → [inst : Ring R] → {X : Type ?u.23997} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rs₂.s₂: FormalSum R Xcoords) : @Eq (coords: {R : Type ?u.24079} → [inst : Ring R] → {X : Type ?u.24078} → [inst_1 : DecidableEq X] → FormalSum R X → X → RR[R: Type ?u.23622X]) ⟦X: Type ?u.23637s₁⟧ ⟦s₁: FormalSum R Xs₂⟧ :=s₂: FormalSum R XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = trueQuotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = trueQuotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = trueQuotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
as₁ ≈ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = trueQuotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
a.h∀ (x : X), FormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = trueQuotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
a.hFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = trueQuotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
a.hFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: 0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: 0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: 0 = FormalSum.coords s₂ x0 = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: 0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: 0 = FormalSum.coords s₂ xFormalSum.coords s₂ x = FormalSum.coords s₂ xGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
a.hFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ xx ∈ FormalSum.support s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ x
a0 ≠ FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ xx ∈ FormalSum.support s₂Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ x
lem: x ∈ FormalSum.support s₂
lem':= eq_mem_of_equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) x lem ch₂: FormalSum.coords s₁ x = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: 0 = FormalSum.coords s₁ x
h₂: ¬0 = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
a.hFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ xx ∈ FormalSum.support s₁R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ x
a0 ≠ FormalSum.coords s₁ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ xx ∈ FormalSum.support s₁Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ x
lem: x ∈ FormalSum.support s₁
lem':= eq_mem_of_equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) x lem ch₁: FormalSum.coords s₁ x = FormalSum.coords s₂ xFormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
c₁: beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
c₂: beqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = true
ch₁:= eql_on_support_of_true c₁: equalOnList (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂)
ch₂:= eql_on_support_of_true c₂: equalOnList (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂)
x: X
h₁: ¬0 = FormalSum.coords s₁ xFormalSum.coords s₁ x = FormalSum.coords s₂ x/-- Boolean equality for the quotient via lifting -/ def beq_quot : (x₁ x₂ :Goals accomplished! 🐙R[R: Type ?u.25078X]) →X: Type ?u.25093Bool :=Bool: Type∀ (a₁ b₁ a₂ b₂ : FormalSum R X), a₁ ≈ a₂ → b₁ ≈ b₂ → decide (Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁) = decide (Quotient.mk (formalSumSetoid R X) a₂ = Quotient.mk (formalSumSetoid R X) b₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂decide (Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁) = decide (Quotient.mk (formalSumSetoid R X) a₂ = Quotient.mk (formalSumSetoid R X) b₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂decide (Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁) = decide (Quotient.mk (formalSumSetoid R X) a₂ = Quotient.mk (formalSumSetoid R X) b₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂decide (Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁) = decide (Quotient.mk (formalSumSetoid R X) a₂ = Quotient.mk (formalSumSetoid R X) b₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂
pQuotient.mk (formalSumSetoid R X) a₂ = Quotient.mk (formalSumSetoid R X) b₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂Decidable ?m.25473R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂decide (Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁) = decide (Quotient.mk (formalSumSetoid R X) a₂ = Quotient.mk (formalSumSetoid R X) b₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂decide (Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂decide (Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂decide (Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁) = decide (Quotient.mk (formalSumSetoid R X) a₂ = Quotient.mk (formalSumSetoid R X) b₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂
pQuotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂Decidable ?m.25473R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂
pQuotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂Decidable ?m.25473R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂decide (Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁) = decide (Quotient.mk (formalSumSetoid R X) a₂ = Quotient.mk (formalSumSetoid R X) b₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂
pQuotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂Decidable ?m.25473R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂
pQuotient.mk (formalSumSetoid R X) a₂ = Quotient.mk (formalSumSetoid R X) b₁R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂Decidable ?m.25473R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂
pQuotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) b₁R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂Decidable ?m.25473R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂
pQuotient.mk (formalSumSetoid R X) a₂ = Quotient.mk (formalSumSetoid R X) b₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂Decidable ?m.25473/-- Boolean equality for the quotient is equality. -/ lemmaR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂
pQuotient.mk (formalSumSetoid R X) a₂ = Quotient.mk (formalSumSetoid R X) b₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a₁, b₁, a₂, b₂: FormalSum R X
eqv₁: a₁ ≈ a₂
eqv₂: b₁ ≈ b₂
eq₁:= Quot.sound eqv₁: Quotient.mk (formalSumSetoid R X) a₁ = Quotient.mk (formalSumSetoid R X) a₂
eq₂:= Quot.sound eqv₂: Quotient.mk (formalSumSetoid R X) b₁ = Quotient.mk (formalSumSetoid R X) b₂Decidable ?m.25473eq_of_beq_true : ∀ x₁ x₂ :R[R: Type ?u.25781X], x₁.X: Type ?u.25796beq_quot x₂ =beq_quot: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → R[X] → R[X] → Booltrue → x₁ = x₂ :=true: Bool∀ (a b : FormalSum R X), beq_quot (Quotient.mk (formalSumSetoid R X) a) (Quotient.mk (formalSumSetoid R X) b) = true → Quotient.mk (formalSumSetoid R X) a = Quotient.mk (formalSumSetoid R X) bR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
eqv: beq_quot (Quotient.mk (formalSumSetoid R X) s₁) (Quotient.mk (formalSumSetoid R X) s₂) = trueQuotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
eqv: beq_quot (Quotient.mk (formalSumSetoid R X) s₁) (Quotient.mk (formalSumSetoid R X) s₂) = true
eql:= of_decide_eq_true eqv: Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂/-- Boolean inequality for the quotient is inequality. -/ lemmaGoals accomplished! 🐙neq_of_beq_false : ∀ x₁ x₂ :R[R: Type ?u.26442X], x₁.X: Type ?u.26457beq_quot x₂ =beq_quot: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → R[X] → R[X] → Boolfalse → Not (x₁ = x₂) :=false: Bool∀ (a b : FormalSum R X), beq_quot (Quotient.mk (formalSumSetoid R X) a) (Quotient.mk (formalSumSetoid R X) b) = false → ¬Quotient.mk (formalSumSetoid R X) a = Quotient.mk (formalSumSetoid R X) bR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
neqv: beq_quot (Quotient.mk (formalSumSetoid R X) s₁) (Quotient.mk (formalSumSetoid R X) s₂) = false¬Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
neqv: beq_quot (Quotient.mk (formalSumSetoid R X) s₁) (Quotient.mk (formalSumSetoid R X) s₂) = false
neql:= of_decide_eq_false neqv: ¬Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂¬Quotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂/-- Decidable equality for the free module. -/ @[instance] defGoals accomplished! 🐙decEq (x₁ x₂ :decEq: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → (x₁ x₂ : R[X]) → Decidable (x₁ = x₂)R[R: Type ?u.27114X]) : Decidable (x₁ = x₂) :=X: Type ?u.27129Goals accomplished! 🐙/-! ### Induced coordinates on the quotient. -/ /-- Coordinates are well defined on the quotient. -/ theoremGoals accomplished! 🐙equal_coords_of_approx (equal_coords_of_approx: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] (s₁ s₂ : FormalSum R X), s₁ ≈ s₂ → FormalSum.coords s₁ = FormalSum.coords s₂s₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: Type ?u.27740X):X: Type ?u.27755s₁ ≈s₁: FormalSum R Xs₂ →s₂: FormalSum R Xs₁.s₁: FormalSum R Xcoords =coords: {R : Type ?u.27850} → [inst : Ring R] → {X : Type ?u.27849} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rs₂.s₂: FormalSum R Xcoords :=coords: {R : Type ?u.27900} → [inst : Ring R] → {X : Type ?u.27899} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rs₁ ≈ s₂ → FormalSum.coords s₁ = FormalSum.coords s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
hyp: s₁ ≈ s₂s₁ ≈ s₂ → FormalSum.coords s₁ = FormalSum.coords s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
hyp: s₁ ≈ s₂
h∀ (x : X), FormalSum.coords s₁ x = FormalSum.coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
hyp: s₁ ≈ s₂
h∀ (x : X), FormalSum.coords s₁ x = FormalSum.coords s₂ xs₁ ≈ s₂ → FormalSum.coords s₁ = FormalSum.coords s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
hyp: s₁ ≈ s₂
x₀: X
hFormalSum.coords s₁ x₀ = FormalSum.coords s₂ x₀s₁ ≈ s₂ → FormalSum.coords s₁ = FormalSum.coords s₂/-- coordinates for the quotient -/ def coordinates (Goals accomplished! 🐙x₀ :x₀: XX) :X: Type ?u.28025R[R: Type ?u.28010X] →X: Type ?u.28025R :=R: Type ?u.28010∀ (a b : FormalSum R X), a ≈ b → FormalSum.coords a x₀ = FormalSum.coords b x₀a ≈ b → FormalSum.coords a x₀ = FormalSum.coords b x₀R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
a, b: FormalSum R X
hyp: a ≈ bFormalSum.coords a x₀ = FormalSum.coords b x₀R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
a, b: FormalSum R X
hyp: a ≈ b
l:= equal_coords_of_approx a b hyp: FormalSum.coords a = FormalSum.coords bFormalSum.coords a x₀ = FormalSum.coords b x₀end FreeModule end DecidableEqQuotFreeModule /-! ## Module structure We define the module structure on the quotient of the free module by the equivalence relation. * We define scalar multiplication and addition on formal sums. * We show that we have induced operations on the quotient. * We show that the induced operations give a module structure on the quotient. -/ section ModuleStruture open FormalSum namespace FormalSum /-! ### Scalar multiplication: on formal sums and on the quotient. -/ /-- Scalar multiplication on formal sums. -/ def scmul :Goals accomplished! 🐙R → FormalSumR: Type ?u.28436RR: Type ?u.28436X → FormalSumX: Type ?u.28451RR: Type ?u.28436X | _, [] =>X: Type ?u.28451[] |[]: List ?m.28508r, (r: Rh :: t) => let (h: R × Xa₀,a₀: Rx₀) :=x₀: Xh (h: R × Xr *r: Ra₀,a₀: Rx₀) :: (scmulx₀: Xr t) /-- Coordinates after scalar multiplication. -/ theorem scmul_coords (r: Rr :r: RR) (R: Type ?u.29241s : FormalSums: FormalSum R XRR: Type ?u.29241X) (X: Type ?u.29256x₀ :x₀: XX) : (X: Type ?u.29256r *r: Rs.s: FormalSum R Xcoordscoords: {R : Type ?u.29286} → [inst : Ring R] → {X : Type ?u.29285} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx₀) = (x₀: Xs.scmuls: FormalSum R Xr).r: Rcoordscoords: {R : Type ?u.29354} → [inst : Ring R] → {X : Type ?u.29353} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx₀ :=x₀: X
nilGoals accomplished! 🐙/-- Scalar multiplication on the Free Module. -/ def FreeModule.scmul :Goals accomplished! 🐙R →R: Type ?u.31052R[R: Type ?u.31052X] →X: Type ?u.31067R[R: Type ?u.31052X] :=X: Type ?u.31067R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R Xs₁ ≈ s₂ → FormalSum.scmul r s₁ ≈ FormalSum.scmul r s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R X
hypeq: s₁ ≈ s₂FormalSum.scmul r s₁ ≈ FormalSum.scmul r s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R X
hypeq: s₁ ≈ s₂
h∀ (x : X), coords (FormalSum.scmul r s₁) x = coords (FormalSum.scmul r s₂) xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R X
hypeq: s₁ ≈ s₂
x₀: X
hcoords (FormalSum.scmul r s₁) x₀ = coords (FormalSum.scmul r s₂) x₀R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R X
hypeq: s₁ ≈ s₂
x₀: X
l₁: r * coords s₁ x₀ = coords (FormalSum.scmul r s₁) x₀
hcoords (FormalSum.scmul r s₁) x₀ = coords (FormalSum.scmul r s₂) x₀R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R X
hypeq: s₁ ≈ s₂
x₀: X
l₁: r * coords s₁ x₀ = coords (FormalSum.scmul r s₁) x₀
l₂: r * coords s₂ x₀ = coords (FormalSum.scmul r s₂) x₀
hcoords (FormalSum.scmul r s₁) x₀ = coords (FormalSum.scmul r s₂) x₀R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R X
hypeq: s₁ ≈ s₂
x₀: X
l₁: r * coords s₁ x₀ = coords (FormalSum.scmul r s₁) x₀
l₂: r * coords s₂ x₀ = coords (FormalSum.scmul r s₂) x₀
hcoords (FormalSum.scmul r s₁) x₀ = coords (FormalSum.scmul r s₂) x₀R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R X
hypeq: s₁ ≈ s₂
x₀: X
l₁: r * coords s₁ x₀ = coords (FormalSum.scmul r s₁) x₀
l₂: r * coords s₂ x₀ = coords (FormalSum.scmul r s₂) x₀
hr * coords s₁ x₀ = coords (FormalSum.scmul r s₂) x₀R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R X
hypeq: s₁ ≈ s₂
x₀: X
l₁: r * coords s₁ x₀ = coords (FormalSum.scmul r s₁) x₀
l₂: r * coords s₂ x₀ = coords (FormalSum.scmul r s₂) x₀
hcoords (FormalSum.scmul r s₁) x₀ = coords (FormalSum.scmul r s₂) x₀R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R X
hypeq: s₁ ≈ s₂
x₀: X
l₁: r * coords s₁ x₀ = coords (FormalSum.scmul r s₁) x₀
l₂: r * coords s₂ x₀ = coords (FormalSum.scmul r s₂) x₀
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R X
hypeq: s₁ ≈ s₂
x₀: X
l₁: r * coords s₁ x₀ = coords (FormalSum.scmul r s₁) x₀
l₂: r * coords s₂ x₀ = coords (FormalSum.scmul r s₂) x₀
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R X
hypeq: s₁ ≈ s₂
x₀: X
l₁: r * coords s₁ x₀ = coords (FormalSum.scmul r s₁) x₀
l₂: r * coords s₂ x₀ = coords (FormalSum.scmul r s₂) x₀
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
r: R
f:= fun s => Quotient.mk (formalSumSetoid R X) (FormalSum.scmul r s): FormalSum R X → R[X]
s₁, s₂: FormalSum R X
hypeq: s₁ ≈ s₂
x₀: X
l₁: r * coords s₁ x₀ = coords (FormalSum.scmul r s₁) x₀
l₂: r * coords s₂ x₀ = coords (FormalSum.scmul r s₂) x₀
h/-! ### Addition: on formal sums and on the quotient. -/ /-- Coordinates add when appending. -/ theoremGoals accomplished! 🐙append_coords (s₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: Type ?u.32344X) (X: Type ?u.32359x₀ :x₀: XX) : (X: Type ?u.32359s₁.s₁: FormalSum R Xcoordscoords: {R : Type ?u.32394} → [inst : Ring R] → {X : Type ?u.32393} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx₀) + (x₀: Xs₂.s₂: FormalSum R Xcoordscoords: {R : Type ?u.32450} → [inst : Ring R] → {X : Type ?u.32449} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx₀) = (x₀: Xs₁ ++s₁: FormalSum R Xs₂).s₂: FormalSum R Xcoordscoords: {R : Type ?u.32537} → [inst : Ring R] → {X : Type ?u.32536} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx₀ :=x₀: XGoals accomplished! 🐙/-- Coordinates well-defined up to equivalence. -/ theoremGoals accomplished! 🐙append_equiv (s₁s₁: FormalSum R Xs₂s₂: FormalSum R Xt₁t₁: FormalSum R Xt₂ : FormalSumt₂: FormalSum R XRR: Type ?u.33507X) :(X: Type ?u.33522s₁ ≈s₁: FormalSum R Xs₂) → (s₂: FormalSum R Xt₁ ≈t₁: FormalSum R Xt₂) →t₂: FormalSum R Xs₁ ++s₁: FormalSum R Xt₁ ≈t₁: FormalSum R Xs₂ ++s₂: FormalSum R Xt₂ :=t₂: FormalSum R XGoals accomplished! 🐙Goals accomplished! 🐙end FormalSum /-- Addition of elements in the free module. -/ def FreeModule.add :Goals accomplished! 🐙R[R: Type ?u.34280X] →X: Type ?u.34295R[R: Type ?u.34280X] →X: Type ?u.34295R[R: Type ?u.34280X] :=X: Type ?u.34295R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂
x₀: X
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂
x₀: X
l₁: coords a₁ x₀ + coords b₁ x₀ = coords (a₁ ++ b₁) x₀
l₂: coords a₂ x₀ + coords b₂ x₀ = coords (a₂ ++ b₂) x₀
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂
x₀: X
l₁: coords a₁ x₀ + coords b₁ x₀ = coords (a₁ ++ b₁) x₀
l₂: coords a₂ x₀ + coords b₂ x₀ = coords (a₂ ++ b₂) x₀
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂
x₀: X
l₁: coords a₁ x₀ + coords b₁ x₀ = coords (a₁ ++ b₁) x₀
l₂: coords a₂ x₀ + coords b₂ x₀ = coords (a₂ ++ b₂) x₀
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂
x₀: X
l₁: coords a₁ x₀ + coords b₁ x₀ = coords (a₁ ++ b₁) x₀
l₂: coords a₂ x₀ + coords b₂ x₀ = coords (a₂ ++ b₂) x₀
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂
x₀: X
l₁: coords a₁ x₀ + coords b₁ x₀ = coords (a₁ ++ b₁) x₀
l₂: coords a₂ x₀ + coords b₂ x₀ = coords (a₂ ++ b₂) x₀
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂
x₀: X
l₁: coords a₁ x₀ + coords b₁ x₀ = coords (a₁ ++ b₁) x₀
l₂: coords a₂ x₀ + coords b₂ x₀ = coords (a₂ ++ b₂) x₀
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂
x₀: X
l₁: coords a₁ x₀ + coords b₁ x₀ = coords (a₁ ++ b₁) x₀
l₂: coords a₂ x₀ + coords b₂ x₀ = coords (a₂ ++ b₂) x₀
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂
x₀: X
l₁: coords a₁ x₀ + coords b₁ x₀ = coords (a₁ ++ b₁) x₀
l₂: coords a₂ x₀ + coords b₂ x₀ = coords (a₂ ++ b₂) x₀
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂
x₀: X
l₁: coords a₁ x₀ + coords b₁ x₀ = coords (a₁ ++ b₁) x₀
l₂: coords a₂ x₀ + coords b₂ x₀ = coords (a₂ ++ b₂) x₀
hR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
f:= fun s₁ s₂ => Quotient.mk (formalSumSetoid R X) (s₁ ++ s₂): FormalSum R X → FormalSum R X → R[X]
a₁, b₁, a₂, b₂: FormalSum R X
eq₁: a₁ ≈ a₂
eq₂: b₁ ≈ b₂
x₀: X
l₁: coords a₁ x₀ + coords b₁ x₀ = coords (a₁ ++ b₁) x₀
l₂: coords a₂ x₀ + coords b₂ x₀ = coords (a₂ ++ b₂) x₀
hinstance : Add (Goals accomplished! 🐙R[R: Type ?u.36075X]) := ⟨FreeModule.add⟩X: Type ?u.36090instance : HSMulR (R: Type ?u.36314R[R: Type ?u.36314X]) (X: Type ?u.36329R[R: Type ?u.36314X]) := ⟨FreeModule.scmul⟩ namespace FormalSum /-! ### Properties of operations on formal sums. -/ /-- Associativity for scalar multiplication for formal sums. -/ theorem action (X: Type ?u.36329aa: Rb :b: RR) (R: Type ?u.36592s : FormalSums: FormalSum R XRR: Type ?u.36592X) : (X: Type ?u.36607s.scmuls: FormalSum R Xb).b: Rscmula =a: Rs.scmul (s: FormalSum R Xa *a: Rb) :=b: R
nilGoals accomplished! 🐙/-- Distributivity for the module operations. -/ theorem act_sum (Goals accomplished! 🐙aa: Rb :b: RR) (R: Type ?u.37203s : FormalSums: FormalSum R XRR: Type ?u.37203X) : (X: Type ?u.37218s.scmuls: FormalSum R Xa) ++ (a: Rs.scmuls: FormalSum R Xb) ≈b: Rs.scmul (s: FormalSum R Xa +a: Rb) :=b: R
nil[] ≈ []end FormalSum namespace FreeModule /-! ### Module properties for the free module. -/ /-- Associativity for scalar and ring products. -/ theorem module_action (Goals accomplished! 🐙aa: Rb :b: RR) (x :R: Type ?u.41995R[R: Type ?u.41995X]) :X: Type ?u.42010a • (a: Rb • x) = (b: Ra *a: Rb) • x :=b: R
a∀ (a_1 : FormalSum R X), a • b • Quotient.mk (formalSumSetoid R X) a_1 = (a * b) • Quotient.mk (formalSumSetoid R X) a_1
aa • b • Quotient.mk (formalSumSetoid R X) s = (a * b) • Quotient.mk (formalSumSetoid R X) s/-- Commutativity of addition. -/ theorem addn_comm (x₁ x₂ :Goals accomplished! 🐙R[R: Type ?u.42614X]) : x₁ + x₂ = x₂ + x₁ :=X: Type ?u.42629
h∀ (a b : FormalSum R X), Quotient.mk (formalSumSetoid R X) a + Quotient.mk (formalSumSetoid R X) b = Quotient.mk (formalSumSetoid R X) b + Quotient.mk (formalSumSetoid R X) aR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₁, x₂: R[X]
s₁, s₂: FormalSum R X
hQuotient.mk (formalSumSetoid R X) s₁ + Quotient.mk (formalSumSetoid R X) s₂ = Quotient.mk (formalSumSetoid R X) s₂ + Quotient.mk (formalSumSetoid R X) s₁theoremGoals accomplished! 🐙add_assoc_aux (add_assoc_aux: ∀ (s₁ : FormalSum R X) (x₂ x₃ : R[X]), Quotient.mk (formalSumSetoid R X) s₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (x₂ + x₃)s₁ : FormalSums₁: FormalSum R XRR: Type ?u.43548X) (x₂ x₃ :X: Type ?u.43563R[R: Type ?u.43548X]) : (⟦X: Type ?u.43563s₁⟧ + x₂) + x₃ = ⟦s₁: FormalSum R Xs₁⟧ + (x₂ + x₃) :=s₁: FormalSum R XQuotient.mk (formalSumSetoid R X) s₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (x₂ + x₃)
h∀ (a b : FormalSum R X), Quotient.mk (formalSumSetoid R X) s₁ + Quotient.mk (formalSumSetoid R X) a + Quotient.mk (formalSumSetoid R X) b = Quotient.mk (formalSumSetoid R X) s₁ + (Quotient.mk (formalSumSetoid R X) a + Quotient.mk (formalSumSetoid R X) b)Quotient.mk (formalSumSetoid R X) s₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (x₂ + x₃)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁: FormalSum R X
x₂✝, x₃✝: R[X]
x₂, x₃: FormalSum R X
hQuotient.mk (formalSumSetoid R X) s₁ + Quotient.mk (formalSumSetoid R X) x₂ + Quotient.mk (formalSumSetoid R X) x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (Quotient.mk (formalSumSetoid R X) x₂ + Quotient.mk (formalSumSetoid R X) x₃)Quotient.mk (formalSumSetoid R X) s₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (x₂ + x₃)Quotient.mk (formalSumSetoid R X) s₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (x₂ + x₃)Quotient.mk (formalSumSetoid R X) s₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (x₂ + x₃)Quotient.mk (formalSumSetoid R X) s₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (x₂ + x₃)Quotient.mk (formalSumSetoid R X) s₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (x₂ + x₃)Quotient.mk (formalSumSetoid R X) s₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (x₂ + x₃)Quotient.mk (formalSumSetoid R X) s₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (x₂ + x₃)Quotient.mk (formalSumSetoid R X) s₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (x₂ + x₃)/-- Associativity of addition. -/ theorem addn_assoc (x₁ x₂ x₃ :Goals accomplished! 🐙R[R: Type ?u.45428X]) : (x₁ + x₂) + x₃ = x₁ + (x₂ + x₃) :=X: Type ?u.45443
a∀ (a : FormalSum R X), Quotient.mk (formalSumSetoid R X) a + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) a + (x₂ + x₃)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₁✝, x₂, x₃: R[X]
x₁: FormalSum R X
aQuotient.mk (formalSumSetoid R X) x₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) x₁ + (x₂ + x₃)/-- The zero element of the free module. -/ def zero :Goals accomplished! 🐙R[R: Type ?u.46057X] := ⟦X: Type ?u.46072[]⟧ /-- adding zero-/ theorem[]: List ?m.46148addn_zero (x:R[R: Type ?u.46241X]) : x + zero = x :=X: Type ?u.46256
a∀ (a : FormalSum R X), Quotient.mk (formalSumSetoid R X) a + zero = Quotient.mk (formalSumSetoid R X) a
aQuotient.mk (formalSumSetoid R X) x + zero = Quotient.mk (formalSumSetoid R X) x
a.a/-- adding zero-/ theorem zero_addn (x:Goals accomplished! 🐙R[R: Type ?u.47663X]) : zero + x = x :=X: Type ?u.47678
a∀ (a : FormalSum R X), zero + Quotient.mk (formalSumSetoid R X) a = Quotient.mk (formalSumSetoid R X) a
azero + Quotient.mk (formalSumSetoid R X) x = Quotient.mk (formalSumSetoid R X) x
a.a/-- Distributivity for addition of module elements. -/ theorem elem_distrib (Goals accomplished! 🐙a :a: RR) (x₁ x₂ :R: Type ?u.49081R[R: Type ?u.49081X]) :X: Type ?u.49096a • (x₁ + x₂) =a: Ra • x₁ +a: Ra • x₂ :=a: R
h∀ (a_1 b : FormalSum R X), a • (Quotient.mk (formalSumSetoid R X) a_1 + Quotient.mk (formalSumSetoid R X) b) = a • Quotient.mk (formalSumSetoid R X) a_1 + a • Quotient.mk (formalSumSetoid R X) bR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
a: R
x₁, x₂: R[X]
s₁, s₂: FormalSum R X
ha • (Quotient.mk (formalSumSetoid R X) s₁ + Quotient.mk (formalSumSetoid R X) s₂) = a • Quotient.mk (formalSumSetoid R X) s₁ + a • Quotient.mk (formalSumSetoid R X) s₂/-- Distributivity with respect to scalars. -/ theorem coeffs_distrib (Goals accomplished! 🐙aa: Rb:b: RR)(x:R: Type ?u.50828R[R: Type ?u.50828X]) :X: Type ?u.50843a • x +a: Rb • x = (b: Ra +a: Rb) • x:=b: R
a∀ (a_1 : FormalSum R X), a • Quotient.mk (formalSumSetoid R X) a_1 + b • Quotient.mk (formalSumSetoid R X) a_1 = (a + b) • Quotient.mk (formalSumSetoid R X) a_1
aa • Quotient.mk (formalSumSetoid R X) s + b • Quotient.mk (formalSumSetoid R X) s = (a + b) • Quotient.mk (formalSumSetoid R X) s/-- Multiplication by `1 : R`. -/ theorem unit_coeffs (x:Goals accomplished! 🐙R[R: Type ?u.51602X]) : (X: Type ?u.516171 :1: ?m.51698R) • x = x:=R: Type ?u.51602
a∀ (a : FormalSum R X), 1 • Quotient.mk (formalSumSetoid R X) a = Quotient.mk (formalSumSetoid R X) a
a1 • Quotient.mk (formalSumSetoid R X) s = Quotient.mk (formalSumSetoid R X) s
a.a/-- Multiplication by `0 : R`. -/ theoremGoals accomplished! 🐙zero_coeffs (x:zero_coeffs: ∀ (x : R[X]), 0 • x = Quotient.mk (formalSumSetoid R X) []R[R: Type ?u.52262X]) : (X: Type ?u.522770 :0: ?m.52358R) • x = ⟦R: Type ?u.52262[] ⟧:=[]: List ?m.524660 • x = Quotient.mk (formalSumSetoid R X) []
a∀ (a : FormalSum R X), 0 • Quotient.mk (formalSumSetoid R X) a = Quotient.mk (formalSumSetoid R X) []0 • x = Quotient.mk (formalSumSetoid R X) []
a0 • Quotient.mk (formalSumSetoid R X) s = Quotient.mk (formalSumSetoid R X) []0 • x = Quotient.mk (formalSumSetoid R X) []
a.a0 • x = Quotient.mk (formalSumSetoid R X) []0 • x = Quotient.mk (formalSumSetoid R X) []0 • x = Quotient.mk (formalSumSetoid R X) []0 • x = Quotient.mk (formalSumSetoid R X) []0 • x = Quotient.mk (formalSumSetoid R X) []/-- The module is an additive commutative group, mainly proved as a check -/Goals accomplished! 🐙instance : AddCommGroup (instance: {R : Type} → [inst : Ring R] → {X : Type} → [inst_1 : DecidableEq X] → AddCommGroup (R[X])R[R: Type ?u.53140X]) := { zero := ⟦X: Type ?u.53155[]⟧ add := FreeModule.add add_assoc := FreeModule.addn_assoc add_zero := FreeModule.addn_zero zero_add := FreeModule.zero_addn neg := fun[]: List ?m.53403x => (-x: ?m.535491 :1: ?m.53562R) •R: Type ?u.53140x sub_eq_add_neg :=x: ?m.53549add_left_neg :=Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: R[X]
l: -1 • x + x = Quotient.mk (formalSumSetoid R X) []R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: R[X]
l: -1 • x + x = Quotient.mk (formalSumSetoid R X) []R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: R[X]
l: -1 • x + x = Quotient.mk (formalSumSetoid R X) []add_comm := FreeModule.addn_comm } end FreeModule end ModuleStruture /-! ## Equivalent definition of the relation via moves For conceptual results such as the universal property (needed for the group ring structure) it is useful to define the relation on the free module in terms of moves. We do this, and show that this is the same as the relation defined by equality of coordinates. * We define elementary moves on formal sums * We show coordinates equal if and only if related by elementary moves * Hence can define map on Free Module when invariant under elementary moves -/ section ElementaryMoves open FormalSum /-- Elementary moves for formal sums. -/ inductiveGoals accomplished! 🐙ElementaryMove (ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R X → FormalSum R X → PropRR: TypeX :X: TypeType) [RingType: Type 1R] [DecidableEqR: TypeR][DecidableEqR: TypeX] : FormalSumX: TypeRR: TypeX → FormalSumX: TypeRR: TypeX →X: TypeProp where |Prop: TypezeroCoeff (zeroCoeff: ∀ {R X : Type} [inst : Ring R] [inst_1 : DecidableEq R] [inst_2 : DecidableEq X] (tail : FormalSum R X) (x : X) (a : R), a = 0 → ElementaryMove R X ((a, x) :: tail) tailtail : FormalSumtail: FormalSum R XRR: TypeX) (X: Typex :x: XX) (X: Typea :a: RR) (R: Typeh :h: a = 0a =a: R0) :0: ?m.56267ElementaryMoveElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R X → FormalSum R X → PropRR: TypeX ((X: Typea,a: Rx) ::x: Xtail)tail: FormalSum R Xtail |tail: FormalSum R XaddCoeffs (addCoeffs: ∀ {R X : Type} [inst : Ring R] [inst_1 : DecidableEq R] [inst_2 : DecidableEq X] (a b : R) (x : X) (tail : FormalSum R X), ElementaryMove R X ((a, x) :: (b, x) :: tail) ((a + b, x) :: tail)aa: Rb :b: RR) (R: Typex :x: XX) (X: Typetail : FormalSumtail: FormalSum R XRR: TypeX) :X: TypeElementaryMoveElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R X → FormalSum R X → PropRR: TypeX ((X: Typea,a: Rx) :: (x: Xb,b: Rx) ::x: Xtail) ((tail: FormalSum R Xa +a: Rb,b: Rx) ::x: Xtail) |tail: FormalSum R Xcons (cons: ∀ {R X : Type} [inst : Ring R] [inst_1 : DecidableEq R] [inst_2 : DecidableEq X] (a : R) (x : X) (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → ElementaryMove R X ((a, x) :: s₁) ((a, x) :: s₂)a :a: RR) (R: Typex :x: XX) (X: Types₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: TypeX) :X: TypeElementaryMoveElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R X → FormalSum R X → PropRR: TypeXX: Types₁s₁: FormalSum R Xs₂ →s₂: FormalSum R XElementaryMoveElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R X → FormalSum R X → PropRR: TypeX ((X: Typea,a: Rx) ::x: Xs₁) ((s₁: FormalSum R Xa,a: Rx) ::x: Xs₂) |s₂: FormalSum R Xswap (swap: ∀ {R X : Type} [inst : Ring R] [inst_1 : DecidableEq R] [inst_2 : DecidableEq X] (a₁ a₂ : R) (x₁ x₂ : X) (tail : FormalSum R X), ElementaryMove R X ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)a₁a₁: Ra₂ :a₂: RR) (R: Typex₁x₁: Xx₂ :x₂: XX) (X: Typetail : FormalSumtail: FormalSum R XRR: TypeX) :X: TypeElementaryMoveElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R X → FormalSum R X → PropRR: TypeX ((X: Typea₁,a₁: Rx₁) :: (x₁: Xa₂,a₂: Rx₂) ::x₂: Xtail) ((tail: FormalSum R Xa₂,a₂: Rx₂) :: (x₂: Xa₁,a₁: Rx₁) ::x₁: Xtail) deftail: FormalSum R XFreeModuleAux (FreeModuleAux: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → ?m.57283 R XRR: TypeX :X: TypeType) [RingType: Type 1R] [DecidableEqR: TypeR][DecidableEqR: TypeX] := Quot (X: TypeElementaryMoveElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R X → FormalSum R X → PropRR: TypeX) namespace FormalSum /-- Image in the quotient (i.e., actual, not formal, sum). -/ defX: Typesum (sum: FormalSum R X → FreeModuleAux R Xs : FormalSums: FormalSum R XRR: Type ?u.57411X) :X: Type ?u.57426FreeModuleAuxFreeModuleAux: (R X : Type) → [inst : Ring R] → [inst : DecidableEq R] → [inst : DecidableEq X] → TypeRR: Type ?u.57411X := Quot.mk (X: Type ?u.57426ElementaryMoveElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R X → FormalSum R X → PropRR: Type ?u.57411X)X: Type ?u.57426s /-- Equivalence by having the same image. -/ def equiv (s: FormalSum R Xs₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: Type ?u.57699X) :X: Type ?u.57714Prop :=Prop: Types₁.s₁: FormalSum R Xsum =sum: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → FormalSum R X → FreeModuleAux R Xs₂.s₂: FormalSum R Xsum infix:65 " ≃ " =>sum: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → FormalSum R X → FreeModuleAux R XFormalSum.equiv /-! ### Invariance of coordinates under elementary moves -/ /-- Coordinates are invariant under moves. -/ theoremFormalSum.equiv: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → FormalSum R X → FormalSum R X → Propcoords_move_invariant (coords_move_invariant: ∀ (x₀ : X) (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → coords s₁ x₀ = coords s₂ x₀x₀ :x₀: XX) (X: Type ?u.66342s₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: Type ?u.66327X) (X: Type ?u.66342h :h: ElementaryMove R X s₁ s₂ElementaryMoveElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R X → FormalSum R X → PropRR: Type ?u.66327XX: Type ?u.66342s₁s₁: FormalSum R Xs₂) :s₂: FormalSum R Xcoordscoords: {R : Type ?u.66461} → [inst : Ring R] → {X : Type ?u.66460} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rs₁s₁: FormalSum R Xx₀ =x₀: Xcoordscoords: {R : Type ?u.66474} → [inst : Ring R] → {X : Type ?u.66473} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rs₂s₂: FormalSum R Xx₀ :=x₀: XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
s₁, s₂: FormalSum R X
h: ElementaryMove R X s₁ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
s₁, s₂: FormalSum R X
h: ElementaryMove R X s₁ s₂Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
s₁, s₂: FormalSum R X
h: ElementaryMove R X s₁ s₂Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
s₁, s₂: FormalSum R X
h: ElementaryMove R X s₁ s₂Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
s₁, s₂: FormalSum R X
h: ElementaryMove R X s₁ s₂end FormalSum /-- Coordinates on the quotients. -/ defGoals accomplished! 🐙FreeModuleAux.coeff (FreeModuleAux.coeff: X → FreeModuleAux R X → Rx₀ :x₀: XX) :X: Type ?u.68743FreeModuleAuxFreeModuleAux: (R X : Type) → [inst : Ring R] → [inst : DecidableEq R] → [inst : DecidableEq X] → TypeRR: Type ?u.68728X →X: Type ?u.68743R := Quot.lift (funR: Type ?u.68728s =>s: ?m.68857s.s: ?m.68857coordscoords: {R : Type ?u.68860} → [inst : Ring R] → {X : Type ?u.68859} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx₀) (x₀: Xcoords_move_invariantcoords_move_invariant: ∀ {R : Type} [inst : Ring R] [inst_1 : DecidableEq R] {X : Type} [inst_2 : DecidableEq X] (x₀ : X) (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → coords s₁ x₀ = coords s₂ x₀x₀) namespace FormalSum /-- Commutative diagram for coordinates. -/ theoremx₀: Xcoeff_factors (coeff_factors: ∀ {R : Type} [inst : Ring R] [inst_1 : DecidableEq R] {X : Type} [inst_2 : DecidableEq X] (x : X) (s : FormalSum R X), FreeModuleAux.coeff x (sum s) = coords s xx :x: XX) (X: Type ?u.69194s : FormalSums: FormalSum R XRR: Type ?u.69179X) :X: Type ?u.69194FreeModuleAux.coeffFreeModuleAux.coeff: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → X → FreeModuleAux R X → Rx (x: Xsumsum: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → FormalSum R X → FreeModuleAux R Xs) =s: FormalSum R Xs.s: FormalSum R Xcoordscoords: {R : Type ?u.69404} → [inst : Ring R] → {X : Type ?u.69403} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx :=x: XFreeModuleAux.coeff x (sum s) = coords s xFreeModuleAux.coeff x (sum s) = coords s x
c∀ (a b : FormalSum R X), ElementaryMove R X a b → coords a x = coords b xFreeModuleAux.coeff x (sum s) = coords s x/-- Coordinates well-defined under the equivalence generated by moves. -/ theorem coords_well_defined (Goals accomplished! 🐙x :x: XX) (X: Type ?u.70025s₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: Type ?u.70010X) :X: Type ?u.70025s₁ ≃s₁: FormalSum R Xs₂ →s₂: FormalSum R Xs₁.s₁: FormalSum R Xcoordscoords: {R : Type ?u.71183} → [inst : Ring R] → {X : Type ?u.71182} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx =x: Xs₂.s₂: FormalSum R Xcoordscoords: {R : Type ?u.71201} → [inst : Ring R] → {X : Type ?u.71200} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx :=x: XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: X
s₁, s₂: FormalSum R X
hyp: s₁ ≃ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: X
s₁, s₂: FormalSum R X
hyp: s₁ ≃ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: X
s₁, s₂: FormalSum R X
hyp: s₁ ≃ s₂FreeModuleAux.coeff x (sum s₂) = coords s₂ xGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: X
s₁, s₂: FormalSum R X
hyp: s₁ ≃ s₂
l: FreeModuleAux.coeff x (sum s₂) = coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: X
s₁, s₂: FormalSum R X
hyp: s₁ ≃ s₂
l: FreeModuleAux.coeff x (sum s₂) = coords s₂ xcoords s₁ x = FreeModuleAux.coeff x (sum s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: X
s₁, s₂: FormalSum R X
hyp: s₁ ≃ s₂
l: FreeModuleAux.coeff x (sum s₂) = coords s₂ xcoords s₁ x = FreeModuleAux.coeff x (sum s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: X
s₁, s₂: FormalSum R X
hyp: s₁ ≃ s₂
l: FreeModuleAux.coeff x (sum s₂) = coords s₂ xcoords s₁ x = FreeModuleAux.coeff x (sum s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: X
s₁, s₂: FormalSum R X
hyp: s₁ ≃ s₂
l: FreeModuleAux.coeff x (sum s₂) = coords s₂ xFreeModuleAux.coeff x (sum s₁) = FreeModuleAux.coeff x (sum s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: X
s₁, s₂: FormalSum R X
hyp: s₁ ≃ s₂
l: FreeModuleAux.coeff x (sum s₂) = coords s₂ xFreeModuleAux.coeff x (sum s₁) = FreeModuleAux.coeff x (sum s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: X
s₁, s₂: FormalSum R X
hyp: s₁ ≃ s₂
l: FreeModuleAux.coeff x (sum s₂) = coords s₂ xFreeModuleAux.coeff x (sum s₁) = FreeModuleAux.coeff x (sum s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: X
s₁, s₂: FormalSum R X
hyp: s₁ ≃ s₂
l: FreeModuleAux.coeff x (sum s₂) = coords s₂ xFreeModuleAux.coeff x (sum s₂) = FreeModuleAux.coeff x (sum s₂)/-! ### Equal coordinates implies related by elementary moves. -/ /-- Cons respects equivalence. -/ theoremGoals accomplished! 🐙cons_equiv_of_equiv (s₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: Type ?u.71918X) (X: Type ?u.71933a :a: RR) (R: Type ?u.71918x :x: XX) :X: Type ?u.71933s₁ ≃s₁: FormalSum R Xs₂ → (s₂: FormalSum R Xa,a: Rx) ::x: Xs₁ ≃ (s₁: FormalSum R Xa,a: Rx) ::x: Xs₂ :=s₂: FormalSum R XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁✝, s₂✝: FormalSum R X
a: R
x: X
h: s₁✝ ≃ s₂✝
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
s₁, s₂: FormalSum R X
hyp: ElementaryMove R X s₁ s₂f s₁ = f s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁✝, s₂✝: FormalSum R X
a: R
x: X
h: s₁✝ ≃ s₂✝
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
s₁, s₂: FormalSum R X
hyp: ElementaryMove R X s₁ s₂
aElementaryMove R X ((a, x) :: s₁) ((a, x) :: s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁✝, s₂✝: FormalSum R X
a: R
x: X
h: s₁✝ ≃ s₂✝
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
s₁, s₂: FormalSum R X
hyp: ElementaryMove R X s₁ s₂
a.aElementaryMove R X s₁ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R X
factorizes:= Quot.liftBeta f wit: ∀ (s : FormalSum R X), g (sum s) = sum ((a, x) :: s)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R X
factorizes:= Quot.liftBeta f wit: ∀ (s : FormalSum R X), g (sum s) = sum ((a, x) :: s)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R X
factorizes:= Quot.liftBeta f wit: ∀ (s : FormalSum R X), g (sum s) = sum ((a, x) :: s)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R X
factorizes:= Quot.liftBeta f wit: ∀ (s : FormalSum R X), g (sum s) = sum ((a, x) :: s)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R X
factorizes:= Quot.liftBeta f wit: ∀ (s : FormalSum R X), g (sum s) = sum ((a, x) :: s)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R X
factorizes:= Quot.liftBeta f wit: ∀ (s : FormalSum R X), g (sum s) = sum ((a, x) :: s)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R X
factorizes:= Quot.liftBeta f wit: ∀ (s : FormalSum R X), g (sum s) = sum ((a, x) :: s)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R X
factorizes:= Quot.liftBeta f wit: ∀ (s : FormalSum R X), g (sum s) = sum ((a, x) :: s)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R X
factorizes:= Quot.liftBeta f wit: ∀ (s : FormalSum R X), g (sum s) = sum ((a, x) :: s)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R X
factorizes:= Quot.liftBeta f wit: ∀ (s : FormalSum R X), g (sum s) = sum ((a, x) :: s)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R X
factorizes:= Quot.liftBeta f wit: ∀ (s : FormalSum R X), g (sum s) = sum ((a, x) :: s)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
a: R
x: X
h: s₁ ≃ s₂
f:= fun s => sum ((a, x) :: s): FormalSum R X → FreeModuleAux R X
wit:= fun s₁ s₂ hyp => Quot.sound (ElementaryMove.cons a x s₁ s₂ hyp): ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
g:= Quot.lift f wit: (Quot fun a b => ElementaryMove R X a b) → FreeModuleAux R X
factorizes:= Quot.liftBeta f wit: ∀ (s : FormalSum R X), g (sum s) = sum ((a, x) :: s)/-- If a coordinate `x` for a formal sum `s` is non-zero, `s` is related by moves to a formal sum with first term `x` with coefficient its coordinates, and the rest shorter than `s`. -/ theoremGoals accomplished! 🐙nonzero_coeff_has_complement (nonzero_coeff_has_complement: ∀ (x₀ : X) (s : FormalSum R X), 0 ≠ coords s x₀ → ∃ ys, (coords s x₀, x₀) :: ys ≃ s ∧ List.length ys < List.length sx₀ :x₀: XX)(X: Type ?u.74996s : FormalSums: FormalSum R XRR: Type ?u.74981X) :X: Type ?u.749960 ≠0: ?m.75023s.s: FormalSum R Xcoordscoords: {R : Type ?u.75034} → [inst : Ring R] → {X : Type ?u.75033} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx₀ → (∃x₀: Xys : FormalSumys: FormalSum R XRR: Type ?u.74981X, (((X: Type ?u.74996s.s: FormalSum R Xcoordscoords: {R : Type ?u.75114} → [inst : Ring R] → {X : Type ?u.75113} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx₀,x₀: Xx₀) ::x₀: Xys) ≃ys: FormalSum R Xs) ∧ (List.lengths: FormalSum R Xys <ys: FormalSum R Xs.length)) :=s: FormalSum R X0 ≠ coords s x₀ → ∃ ys, (coords s x₀, x₀) :: ys ≃ s ∧ List.length ys < List.length s0 ≠ coords s x₀ → ∃ ys, (coords s x₀, x₀) :: ys ≃ s ∧ List.length ys < List.length s
nil0 ≠ coords [] x₀ → ∃ ys, (coords [] x₀, x₀) :: ys ≃ [] ∧ List.length ys < List.length []
nil∃ ys, (coords [] x₀, x₀) :: ys ≃ [] ∧ List.length ys < List.length []
nil0 ≠ coords [] x₀ → ∃ ys, (coords [] x₀, x₀) :: ys ≃ [] ∧ List.length ys < List.length []Goals accomplished! 🐙0 ≠ coords s x₀ → ∃ ys, (coords s x₀, x₀) :: ys ≃ s ∧ List.length ys < List.length sR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
consR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
consR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
consR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
cons∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
consR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
x✝: Bool
c: (x == x₀) = x✝
cons∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
cons.true∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
cons.true∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
cons.true∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
cons.true∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: Ra + k = monomCoeff R X x₀ (a, x) + coords tail x₀Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
cons.true∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x) :: tail) x₀
c'': x = x₀
cons.true∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
cons.true∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x) :: tail) x₀
c'': x = x₀
cons.true∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x) :: tail) x₀
c'': x = x₀
cons.true∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x) :: tail) x₀
c'': x = x₀
cons.true∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
cons.true∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x) :: tail) x₀
c'': x = x₀
cons.true∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
cons.true∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
cons.true∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
cons.true∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
cons.true∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
cons.true∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = kList.length tail < List.length ((a, x) :: tail)Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k
lIneq: List.length tail < List.length ((a, x) :: tail)∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + 0 = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k
lIneq: List.length tail < List.length ((a, x) :: tail)∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k
lIneq: List.length tail < List.length ((a, x) :: tail)∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k
lIneq: List.length tail < List.length ((a, x) :: tail)∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k
lIneq: List.length tail < List.length ((a, x) :: tail)∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k
lIneq: List.length tail < List.length ((a, x) :: tail)∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k
lIneq: List.length tail < List.length ((a, x) :: tail)∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k
lIneq: List.length tail < List.length ((a, x) :: tail)∃ ys, (a, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k
lIneq: List.length tail < List.length ((a, x) :: tail)∃ ys, (a, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': 0 = k∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
cons.true∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tailR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
aElementaryMove R X ((a, x₀) :: (k, x₀) :: ys) ((a + k, x₀) :: ys)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tailGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
eqn₁: (a, x₀) :: (k, x₀) :: ys ≃ (a + k, x₀) :: ys∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
eqn₁: (a, x₀) :: (k, x₀) :: ys ≃ (a + k, x₀) :: ysR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
eqn₁: (a, x₀) :: (k, x₀) :: ys ≃ (a + k, x₀) :: ys
aR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
eqn₁: (a, x₀) :: (k, x₀) :: ys ≃ (a + k, x₀) :: ysGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
eqn₁: (a, x₀) :: (k, x₀) :: ys ≃ (a + k, x₀) :: ys
eqn₂: (a, x₀) :: (k, x₀) :: ys ≃ (a, x₀) :: tail
eqn: (a + k, x₀) :: ys ≃ (a, x₀) :: tail∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
eqn₁: (a, x₀) :: (k, x₀) :: ys ≃ (a + k, x₀) :: ys
eqn₂: (a, x₀) :: (k, x₀) :: ys ≃ (a, x₀) :: tail
eqn: (a + k, x₀) :: ys ≃ (a, x₀) :: tail∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
eqn₁: (a, x₀) :: (k, x₀) :: ys ≃ (a + k, x₀) :: ys
eqn₂: (a, x₀) :: (k, x₀) :: ys ≃ (a, x₀) :: tail
eqn: (a + k, x₀) :: ys ≃ (a, x₀) :: tail∃ ys, (a + k, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
eqn₁: (a, x₀) :: (k, x₀) :: ys ≃ (a + k, x₀) :: ys
eqn₂: (a, x₀) :: (k, x₀) :: ys ≃ (a, x₀) :: tail
eqn: (a + k, x₀) :: ys ≃ (a, x₀) :: tail∃ ys, (a + k, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
eqn₁: (a, x₀) :: (k, x₀) :: ys ≃ (a + k, x₀) :: ys
eqn₂: (a, x₀) :: (k, x₀) :: ys ≃ (a, x₀) :: tail
eqn: (a + k, x₀) :: ys ≃ (a, x₀) :: tail∃ ys, (a + k, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
eqn₁: (a, x₀) :: (k, x₀) :: ys ≃ (a + k, x₀) :: ys
eqn₂: (a, x₀) :: (k, x₀) :: ys ≃ (a, x₀) :: tail
eqn: (a + k, x₀) :: ys ≃ (a, x₀) :: tailList.length ys < List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
eqn₁: (a, x₀) :: (k, x₀) :: ys ≃ (a + k, x₀) :: ys
eqn₂: (a, x₀) :: (k, x₀) :: ys ≃ (a, x₀) :: tail
eqn: (a + k, x₀) :: ys ≃ (a, x₀) :: tailList.length tail ≤ List.length ((a, x₀) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k
ys: FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys ≃ tail
lIneqStep: List.length ys < List.length tail
eqn₁: (a, x₀) :: (k, x₀) :: ys ≃ (a + k, x₀) :: ys
eqn₂: (a, x₀) :: (k, x₀) :: ys ≃ (a, x₀) :: tail
eqn: (a + k, x₀) :: ys ≃ (a, x₀) :: tailList.length ys < List.length ((a, x₀) :: tail)Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = true
k:= coords tail x₀: R
lem: a + k = coords ((a, x₀) :: tail) x₀
c'': x = x₀
c': ¬0 = k∃ ys, (coords ((a, x₀) :: tail) x₀, x₀) :: ys ≃ (a, x₀) :: tail ∧ List.length ys < List.length ((a, x₀) :: tail)Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
x✝: Bool
c: (x == x₀) = x✝
cons∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
k:= coords tail x₀: R
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
k:= coords tail x₀: R
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
k:= coords tail x₀: R
lem: k = coords ((a, x) :: tail) x₀
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
cons.false∃ ys, (k, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
cons.false∃ ys, (k, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
cons.false∃ ys, (k, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
cons.false∃ ys, (k, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)Nat.succ (List.length ys') < Nat.succ (List.length tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
aList.length ys' < List.length tailR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)List.length ys < List.length ((a, x) :: tail)Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
lIneq: List.length ys < List.length ((a, x) :: tail)
cons.false∃ ys, (k, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
lIneq: List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
lIneq: List.length ys < List.length ((a, x) :: tail)
aElementaryMove R X ((k, x₀) :: ys) ((a, x) :: (k, x₀) :: ys')R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
lIneq: List.length ys < List.length ((a, x) :: tail)Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
lIneq: List.length ys < List.length ((a, x) :: tail)
eqn₁: (k, x₀) :: ys ≃ (a, x) :: (k, x₀) :: ys'
cons.false∃ ys, (k, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
lIneq: List.length ys < List.length ((a, x) :: tail)
eqn₁: (k, x₀) :: ys ≃ (a, x) :: (k, x₀) :: ys'R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
lIneq: List.length ys < List.length ((a, x) :: tail)
eqn₁: (k, x₀) :: ys ≃ (a, x) :: (k, x₀) :: ys'
aR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
lIneq: List.length ys < List.length ((a, x) :: tail)
eqn₁: (k, x₀) :: ys ≃ (a, x) :: (k, x₀) :: ys'Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
lIneq: List.length ys < List.length ((a, x) :: tail)
eqn₁: (k, x₀) :: ys ≃ (a, x) :: (k, x₀) :: ys'
eqn₂: (a, x) :: (k, x₀) :: ys' ≃ (a, x) :: tail
cons.false∃ ys, (k, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
c: (x == x₀) = false
k:= coords tail x₀: R
pos: 0 ≠ k
lem: k = coords ((a, x) :: tail) x₀
ys': FormalSum R X
eqnStep: (coords tail x₀, x₀) :: ys' ≃ tail
lIneqStep: List.length ys' < List.length tail
ys:= (a, x) :: ys': List (R × X)
lIneq: List.length ys < List.length ((a, x) :: tail)
eqn₁: (k, x₀) :: ys ≃ (a, x) :: (k, x₀) :: ys'
eqn₂: (a, x) :: (k, x₀) :: ys' ≃ (a, x) :: tailGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x₀: X
head: R × X
tail: List (R × X)
hyp: 0 ≠ coords tail x₀ → ∃ ys, (coords tail x₀, x₀) :: ys ≃ tail ∧ List.length ys < List.length tail
a: R
x: X
pos: 0 ≠ coords ((a, x) :: tail) x₀
c: (x == x₀) = false
cons.false∃ ys, (coords ((a, x) :: tail) x₀, x₀) :: ys ≃ (a, x) :: tail ∧ List.length ys < List.length ((a, x) :: tail)/-- If all coordinates are zero, then moves relate to the empty sum. -/ theorem equiv_e_of_zero_coeffs (Goals accomplished! 🐙s : FormalSums: FormalSum R XRR: Type ?u.86698X) (hyp : ∀X: Type ?u.86713x :x: XX,X: Type ?u.86713s.s: FormalSum R Xcoordscoords: {R : Type ?u.86739} → [inst : Ring R] → {X : Type ?u.86738} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx =x: X0) :0: ?m.86795s ≃s: FormalSum R X[] := -- let canc : IsAddLeftCancel R := -- ⟨fun a b c h => by -- rw [← neg_add_cancel_left a b, h, neg_add_cancel_left]⟩ match[]: List ?m.86950mt :mt: s = []s with | [] => rfl |s: FormalSum R Xh :: t =>h: R × XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: monomCoeff R X x₀ (a₀, x₀) + coords t x₀ = 0monomCoeff R X x₀ (a₀, x₀) = a₀Goals accomplished! 🐙Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
x: X
c: ¬x₀ = x
hx:= hyp x: coords ((a₀, x₀) :: t) x = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
x: X
c: ¬x₀ = x
hx:= hyp x: (match x₀ == x with | true => a₀ | false => 0) + coords t x = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
x: X
c: ¬x₀ = x
hx:= hyp x: (match x₀ == x with | true => a₀ | false => 0) + coords t x = 0
lf: (x₀ == x) = falseR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
x: X
c: ¬x₀ = x
hx:= hyp x: (match x₀ == x with | true => a₀ | false => 0) + coords t x = 0
lf: (x₀ == x) = falseR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
x: X
c: ¬x₀ = x
hx: (match false with | true => a₀ | false => 0) + coords t x = 0
lf: (x₀ == x) = falseR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
x: X
c: ¬x₀ = x
hx: (match false with | true => a₀ | false => 0) + coords t x = 0
lf: (x₀ == x) = falseR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
x: X
c: ¬x₀ = x
hx: (match false with | true => a₀ | false => 0) + coords t x = 0
lf: (x₀ == x) = falseR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
x: X
c: ¬x₀ = x
lf: (x₀ == x) = false
hx: coords t x = 0Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0List.length t < List.length (h :: t)Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)t ≃ []R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)
hypR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)t ≃ []Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)
step:= equiv_e_of_zero_coeffs t tail_coeffs: t ≃ []R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)
step:= equiv_e_of_zero_coeffs t tail_coeffs: t ≃ []R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)
step:= equiv_e_of_zero_coeffs t tail_coeffs: t ≃ []R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)
step:= equiv_e_of_zero_coeffs t tail_coeffs: t ≃ []R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)
step:= equiv_e_of_zero_coeffs t tail_coeffs: t ≃ []R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)
step:= equiv_e_of_zero_coeffs t tail_coeffs: t ≃ []
aElementaryMove R X ((0, x₀) :: t) tR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)
step:= equiv_e_of_zero_coeffs t tail_coeffs: t ≃ []R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)
step:= equiv_e_of_zero_coeffs t tail_coeffs: t ≃ []
a.h0 = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: a₀ = 0
tail_coeffs: ∀ (x : X), coords t x = 0
x✝: List.length t < List.length (h :: t)
step:= equiv_e_of_zero_coeffs t tail_coeffs: t ≃ []Goals accomplished! 🐙Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
contra': 0 = coords t x₀
contra:= Eq.symm contra': coords t x₀ = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
contra': 0 = coords t x₀
contra:= Eq.symm contra': coords t x₀ = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + 0 = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
contra': 0 = coords t x₀
contra:= Eq.symm contra': coords t x₀ = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
contra': 0 = coords t x₀
contra:= Eq.symm contra': coords t x₀ = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
contra': 0 = coords t x₀
contra:= Eq.symm contra': coords t x₀ = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
contra': 0 = coords t x₀
contra:= Eq.symm contra': coords t x₀ = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
contra': 0 = coords t x₀
contra:= Eq.symm contra': coords t x₀ = 0Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length tR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length tR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length tR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length tR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length tR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: x₀ = x
ceq:= coords_well_defined x₀ ((coords t x₀, x₀) :: ys) t eqnStep: coords ((coords t x₀, x₀) :: ys) x₀ = coords t x₀R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: x₀ = x
ceq: coords ys x₀ = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: x₀ = xGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
hx:= hyp x: coords ((a₀, x₀) :: t) x = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
hx:= hyp x: (match x₀ == x with | true => a₀ | false => 0) + coords t x = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
hx:= hyp x: (match x₀ == x with | true => a₀ | false => 0) + coords t x = 0
lf: (x₀ == x) = falseR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
hx:= hyp x: (match x₀ == x with | true => a₀ | false => 0) + coords t x = 0
lf: (x₀ == x) = falseR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
hx: (match false with | true => a₀ | false => 0) + coords t x = 0
lf: (x₀ == x) = falseR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
hx: (match false with | true => a₀ | false => 0) + coords t x = 0
lf: (x₀ == x) = falseR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
hx: (match false with | true => a₀ | false => 0) + coords t x = 0
lf: (x₀ == x) = falseR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
lf: (x₀ == x) = false
hx: coords t x = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
lf: (x₀ == x) = false
hx: coords t x = 0
ceq:= coords_well_defined x ((coords t x₀, x₀) :: ys) t eqnStep: coords ((coords t x₀, x₀) :: ys) x = coords t xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
lf: (x₀ == x) = false
hx: coords t x = 0
ceq: coords ys x = coords t xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
lf: (x₀ == x) = false
hx: coords t x = 0
ceq: coords ys x = coords t xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
lf: (x₀ == x) = false
hx: coords t x = 0
ceq: coords ys x = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
lf: (x₀ == x) = false
hx: coords t x = 0
ceq: coords ys x = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = x
lf: (x₀ == x) = false
hx: coords t x = 0
ceq: coords ys x = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
x: X
c: ¬x₀ = xGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0List.length ys < List.length (h :: t)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0List.length ys < Nat.succ (List.length t)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0List.length ys < List.length (h :: t)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0List.length t ≤ Nat.succ (List.length t)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0List.length ys < List.length (h :: t)Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)ys ≃ []R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
hypR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)ys ≃ []Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]
eqn₃:= cons_equiv_of_equiv t [(coords t x₀, x₀)] a₀ x₀ eqn₂: (a₀, x₀) :: t ≃ [(a₀, x₀), (coords t x₀, x₀)]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]
eqn₃:= cons_equiv_of_equiv t [(coords t x₀, x₀)] a₀ x₀ eqn₂: (a₀, x₀) :: t ≃ [(a₀, x₀), (coords t x₀, x₀)]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]
eqn₃:= cons_equiv_of_equiv t [(coords t x₀, x₀)] a₀ x₀ eqn₂: (a₀, x₀) :: t ≃ [(a₀, x₀), (coords t x₀, x₀)]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]
eqn₃:= cons_equiv_of_equiv t [(coords t x₀, x₀)] a₀ x₀ eqn₂: (a₀, x₀) :: t ≃ [(a₀, x₀), (coords t x₀, x₀)]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]
eqn₃:= cons_equiv_of_equiv t [(coords t x₀, x₀)] a₀ x₀ eqn₂: (a₀, x₀) :: t ≃ [(a₀, x₀), (coords t x₀, x₀)]
aElementaryMove R X [(a₀, x₀), (coords t x₀, x₀)] [(a₀ + coords t x₀, x₀)]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]
eqn₃:= cons_equiv_of_equiv t [(coords t x₀, x₀)] a₀ x₀ eqn₂: (a₀, x₀) :: t ≃ [(a₀, x₀), (coords t x₀, x₀)]Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]
eqn₃:= cons_equiv_of_equiv t [(coords t x₀, x₀)] a₀ x₀ eqn₂: (a₀, x₀) :: t ≃ [(a₀, x₀), (coords t x₀, x₀)]
eqn₄: sum [(a₀, x₀), (coords t x₀, x₀)] = sum [(a₀ + coords t x₀, x₀)]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]
eqn₃:= cons_equiv_of_equiv t [(coords t x₀, x₀)] a₀ x₀ eqn₂: (a₀, x₀) :: t ≃ [(a₀, x₀), (coords t x₀, x₀)]
eqn₄: sum [(a₀, x₀), (coords t x₀, x₀)] = sum [(a₀ + coords t x₀, x₀)]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]
eqn₃:= cons_equiv_of_equiv t [(coords t x₀, x₀)] a₀ x₀ eqn₂: (a₀, x₀) :: t ≃ [(a₀, x₀), (coords t x₀, x₀)]
eqn₄: sum [(a₀, x₀), (coords t x₀, x₀)] = sum [(a₀ + coords t x₀, x₀)]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]
eqn₃:= cons_equiv_of_equiv t [(coords t x₀, x₀)] a₀ x₀ eqn₂: (a₀, x₀) :: t ≃ [(a₀, x₀), (coords t x₀, x₀)]
eqn₄: sum [(a₀, x₀), (coords t x₀, x₀)] = sum [(a₀ + coords t x₀, x₀)]R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]
eqn₃:= cons_equiv_of_equiv t [(coords t x₀, x₀)] a₀ x₀ eqn₂: (a₀, x₀) :: t ≃ [(a₀, x₀), (coords t x₀, x₀)]
eqn₄: sum [(a₀, x₀), (coords t x₀, x₀)] = sum [(a₀ + coords t x₀, x₀)]
aElementaryMove R X [(0, x₀)] []R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = 0
mt: s = (a₀, x₀) :: t
hyp₀: a₀ + coords t x₀ = 0
c₀: monomCoeff R X x₀ (a₀, x₀) = a₀
hz: ¬a₀ = 0
non_zero: 0 ≠ coords t x₀
ys: FormalSum R X
eqnStep: (coords t x₀, x₀) :: ys ≃ t
lIneqStep: List.length ys < List.length t
tail_coeffs: ∀ (x : X), coords ys x = 0
x✝: List.length ys < List.length (h :: t)
step:= equiv_e_of_zero_coeffs ys tail_coeffs: ys ≃ []
eqn₁:= cons_equiv_of_equiv ys [] (coords t x₀) x₀ step: (coords t x₀, x₀) :: ys ≃ [(coords t x₀, x₀)]
eqn₂:= Eq.trans (Eq.symm eqnStep) eqn₁: t ≃ [(coords t x₀, x₀)]
eqn₃:= cons_equiv_of_equiv t [(coords t x₀, x₀)] a₀ x₀ eqn₂: (a₀, x₀) :: t ≃ [(a₀, x₀), (coords t x₀, x₀)]
eqn₄: sum [(a₀, x₀), (coords t x₀, x₀)] = sum [(a₀ + coords t x₀, x₀)]
a.h0 = 0termination_by _ R X s h =>Goals accomplished! 🐙s.length decreasing_bys: FormalSum R✝ R/-- If coordinates are equal, the sums are related by moves. -/ theoremGoals accomplished! 🐙equiv_of_equal_coeffs (equiv_of_equal_coeffs: ∀ {R : Type} [inst : Ring R] [inst_1 : DecidableEq R] {X : Type} [inst_2 : DecidableEq X] (s₁ s₂ : FormalSum R X), (∀ (x : X), coords s₁ x = coords s₂ x) → s₁ ≃ s₂s₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: Type ?u.104002X) (hyp : ∀X: Type ?u.104017x :x: XX,X: Type ?u.104017s₁.s₁: FormalSum R Xcoordscoords: {R : Type ?u.104050} → [inst : Ring R] → {X : Type ?u.104049} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx =x: Xs₂.s₂: FormalSum R Xcoordscoords: {R : Type ?u.104106} → [inst : Ring R] → {X : Type ?u.104105} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx) :x: Xs₁ ≃s₁: FormalSum R Xs₂ := matchs₂: FormalSum R Xs₁ with | [] => have coeffs : ∀s₁: FormalSum R Xx :x: XX,X: Type ?u.104017s₂.s₂: FormalSum R Xcoordscoords: {R : Type ?u.105342} → [inst : Ring R] → {X : Type ?u.105341} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rx =x: X0 :=0: ?m.105360letGoals accomplished! 🐙zl :=zl: ?m.105437equiv_e_of_zero_coeffsequiv_e_of_zero_coeffs: ∀ {R : Type} [inst : Ring R] [inst_1 : DecidableEq R] {X : Type} [inst_2 : DecidableEq X] (s : FormalSum R X), (∀ (x : X), coords s x = 0) → s ≃ []s₂ coeffs Eq.symms₂: FormalSum R Xzl |zl: ?m.105437h :: t => let (h: R × Xa₀,a₀: Rx₀) :=x₀: Xhh: R × XGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: 0 = a₀
eq₁: (a₀, x₀) :: t ≃ tList.length t < List.length (h :: t)Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: 0 = a₀
eq₁: (a₀, x₀) :: t ≃ t
x✝: List.length t < List.length (h :: t)
x: X
ceq:= coords_well_defined x ((a₀, x₀) :: t) t eq₁: coords ((a₀, x₀) :: t) x = coords t xGoals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs:= fun x => coords_well_defined x ((coords s₂ x₀, x₀) :: ys) s₂ eqn: ∀ (x : X), coords ((coords s₂ x₀, x₀) :: ys) x = coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs:= fun x => coords_well_defined x ((coords s₂ x₀, x₀) :: ys) s₂ eqn: ∀ (x : X), coords ((coords s₂ x₀, x₀) :: ys) x = coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x
cfs':= fun x => Eq.trans (hyp x) (Eq.symm (cfs x)): ∀ (x : X), coords ((a₀, x₀) :: t) x = coords ((a₀, x₀) :: ys) xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x
cfs': ∀ (x : X), coords t x = coords ys xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x
cfs': ∀ (x : X), coords t x = coords ys xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x
cfs': ∀ (x : X), coords t x = coords ys xList.length t < List.length (h :: t)Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x
cfs': ∀ (x : X), coords t x = coords ys x
x✝: List.length t < List.length (h :: t)
step:= equiv_of_equal_coeffs t ys cfs': t ≃ ysR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x
cfs': ∀ (x : X), coords t x = coords ys x
x✝: List.length t < List.length (h :: t)
step:= equiv_of_equal_coeffs t ys cfs': t ≃ ys
_step':= cons_equiv_of_equiv t ys a₀ x₀ step: (a₀, x₀) :: t ≃ (a₀, x₀) :: ysR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (coords s₂ x₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x
cfs': ∀ (x : X), coords t x = coords ys x
x✝: List.length t < List.length (h :: t)
step:= equiv_of_equal_coeffs t ys cfs': t ≃ ys
_step':= cons_equiv_of_equiv t ys a₀ x₀ step: (a₀, x₀) :: t ≃ (a₀, x₀) :: ysR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (a₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x
cfs': ∀ (x : X), coords t x = coords ys x
x✝: List.length t < List.length (h :: t)
step:= equiv_of_equal_coeffs t ys cfs': t ≃ ys
_step':= cons_equiv_of_equiv t ys a₀ x₀ step: (a₀, x₀) :: t ≃ (a₀, x₀) :: ysR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (a₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x
cfs': ∀ (x : X), coords t x = coords ys x
x✝: List.length t < List.length (h :: t)
step:= equiv_of_equal_coeffs t ys cfs': t ≃ ys
_step':= cons_equiv_of_equiv t ys a₀ x₀ step: (a₀, x₀) :: t ≃ (a₀, x₀) :: ysR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: 0 = a₁
cf₂: coords s₂ x₀ = a₀
ys: FormalSum R X
eqn: (a₀, x₀) :: ys ≃ s₂
right✝: List.length ys < List.length s₂
cfs: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x
cfs': ∀ (x : X), coords t x = coords ys x
x✝: List.length t < List.length (h :: t)
step:= equiv_of_equal_coeffs t ys cfs': t ≃ ys
_step':= cons_equiv_of_equiv t ys a₀ x₀ step: (a₀, x₀) :: t ≃ (a₀, x₀) :: ysGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length tR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
aElementaryMove R X ((a₀, x₀) :: (a₁, x₀) :: ys) s₃R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
lem:= ElementaryMove.addCoeffs a₀ a₁ x₀ ys: ElementaryMove R X ((a₀, x₀) :: (a₁, x₀) :: ys) ((a₀ + a₁, x₀) :: ys)
aElementaryMove R X ((a₀, x₀) :: (a₁, x₀) :: ys) s₃R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
aR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: tR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: ts₃ ≃ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: ts₃ ≃ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: tList.length ys + 1 < List.length t + 1R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
aList.length ys < List.length tR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: tList.length ys + 1 < List.length t + 1Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: ts₃ ≃ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
hypR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: ts₃ ≃ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
hypR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: ts₃ ≃ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
hypR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
hypR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
hypR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: ts₃ ≃ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
hypmonomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: ts₃ ≃ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
d:= coords_well_defined x ((coords t x₀, x₀) :: ys) t eqn: coords ((coords t x₀, x₀) :: ys) x = coords t x
hypmonomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: ts₃ ≃ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
d:= coords_well_defined x ((coords t x₀, x₀) :: ys) t eqn: coords ((coords t x₀, x₀) :: ys) x = coords t x
hypmonomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
d: monomCoeff R X x (coords t x₀, x₀) + coords ys x = coords t x
hypmonomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
d: monomCoeff R X x (coords t x₀, x₀) + coords ys x = coords t x
hypmonomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
d: monomCoeff R X x (coords t x₀, x₀) + coords ys x = coords t x
hypmonomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: ts₃ ≃ s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
d: monomCoeff R X x (coords t x₀, x₀) + coords ys x = coords t x
hypmonomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t xR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
d: monomCoeff R X x (coords t x₀, x₀) + coords ys x = coords t x
hypmonomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + (monomCoeff R X x (coords t x₀, x₀) + coords ys x)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: t
x✝: List.length ys + 1 < List.length t + 1
x: X
d: monomCoeff R X x (coords t x₀, x₀) + coords ys x = coords t x
hypmonomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + (monomCoeff R X x (coords t x₀, x₀) + coords ys x)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
s₁, s₂: FormalSum R X
h: R × X
t: List (R × X)
a₀: R
x₀: X
hyp: ∀ (x : X), coords ((a₀, x₀) :: t) x = coords s₂ x
p: ¬0 = a₀
a₁:= coords t x₀: R
p₁: ¬0 = a₁
ys: FormalSum R X
eqn: (coords t x₀, x₀) :: ys ≃ t
ineqn: List.length ys < List.length t
s₃:= (a₀ + a₁, x₀) :: ys: List (R × X)
eq₁: (a₀, x₀) :: (a₁, x₀) :: ys ≃ s₃
eq₂: (a₀, x₀) :: (a₁, x₀) :: ys ≃ (a₀, x₀) :: ts₃ ≃ s₂Goals accomplished! 🐙termination_by _ R X s _ _ =>Goals accomplished! 🐙s.length decreasing_bys: FormalSum R✝ R/-! ## Functions invariant under moves pass to the quotient. -/ /-- Lifting functions to the move induced quotient. -/ theoremGoals accomplished! 🐙func_eql_of_move_equiv {func_eql_of_move_equiv: ∀ {R : Type} [inst : Ring R] [inst_1 : DecidableEq R] {X : Type} [inst_2 : DecidableEq X] {β : Sort u} (f : FormalSum R X → β), (∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂) → ∀ (s₁ s₂ : FormalSum R X), s₁ ≈ s₂ → f s₁ = f s₂β :β: Sort uSortSort u: Type uu} (Sort u: Type uf : FormalSumf: FormalSum R X → βRR: Type ?u.117759X →X: Type ?u.117774β) : (∀β: Sort us₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: Type ?u.117759X,X: Type ?u.117774ElementaryMoveElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R X → FormalSum R X → PropRR: Type ?u.117759XX: Type ?u.117774s₁s₁: FormalSum R Xs₂ →s₂: FormalSum R Xff: FormalSum R X → βs₁ =s₁: FormalSum R Xff: FormalSum R X → βs₂) → (∀s₂: FormalSum R Xs₁s₁: FormalSum R Xs₂ : FormalSums₂: FormalSum R XRR: Type ?u.117759X,X: Type ?u.117774s₁ ≈s₁: FormalSum R Xs₂ →s₂: FormalSum R Xff: FormalSum R X → βs₁ =s₁: FormalSum R Xff: FormalSum R X → βs₂) :=s₂: FormalSum R XR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → βR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → βR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → βR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
cR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
rR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → βGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
fct:= Quot.liftBeta (fun a => f a) hyp: ∀ (s : FormalSum R X), f s = fbar (sum s)
s₁, s₂: FormalSum R X
sim: s₁ ≈ s₂f s₁ = f s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
fct:= Quot.liftBeta (fun a => f a) hyp: ∀ (s : FormalSum R X), f s = fbar (sum s)
s₁, s₂: FormalSum R X
sim: s₁ ≈ s₂
ec: eqlCoords R X s₁ s₂f s₁ = f s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
fct:= Quot.liftBeta (fun a => f a) hyp: ∀ (s : FormalSum R X), f s = fbar (sum s)
s₁, s₂: FormalSum R X
sim: s₁ ≈ s₂
ec: eqlCoords R X s₁ s₂f s₁ = f s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
fct:= Quot.liftBeta (fun a => f a) hyp: ∀ (s : FormalSum R X), f s = fbar (sum s)
s₁, s₂: FormalSum R X
sim: s₁ ≈ s₂
ec: coords s₁ = coords s₂f s₁ = f s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
fct:= Quot.liftBeta (fun a => f a) hyp: ∀ (s : FormalSum R X), f s = fbar (sum s)
s₁, s₂: FormalSum R X
sim: s₁ ≈ s₂
ec: coords s₁ = coords s₂f s₁ = f s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
fct:= Quot.liftBeta (fun a => f a) hyp: ∀ (s : FormalSum R X), f s = fbar (sum s)
s₁, s₂: FormalSum R X
sim: s₁ ≈ s₂
ec: coords s₁ = coords s₂f s₁ = f s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
fct:= Quot.liftBeta (fun a => f a) hyp: ∀ (s : FormalSum R X), f s = fbar (sum s)
s₁, s₂: FormalSum R X
sim: s₁ ≈ s₂
ec: coords s₁ = coords s₂f s₁ = f s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
fct:= Quot.liftBeta (fun a => f a) hyp: ∀ (s : FormalSum R X), f s = fbar (sum s)
s₁, s₂: FormalSum R X
sim: s₁ ≈ s₂
ec: coords s₁ = coords s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
fct:= Quot.liftBeta (fun a => f a) hyp: ∀ (s : FormalSum R X), f s = fbar (sum s)
s₁, s₂: FormalSum R X
sim: s₁ ≈ s₂
ec: coords s₁ = coords s₂
hypR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
fct:= Quot.liftBeta (fun a => f a) hyp: ∀ (s : FormalSum R X), f s = fbar (sum s)
s₁, s₂: FormalSum R X
sim: s₁ ≈ s₂
ec: coords s₁ = coords s₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
fct:= Quot.liftBeta (fun a => f a) hyp: ∀ (s : FormalSum R X), f s = fbar (sum s)
s₁, s₂: FormalSum R X
sim: s₁ ≈ s₂
ec: coords s₁ = coords s₂
x: X
hypR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
β: Sort u
f: FormalSum R X → β
hyp: ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂ → f s₁ = f s₂
fbar:= Quot.lift f hyp: FreeModuleAux R X → β
fct:= Quot.liftBeta (fun a => f a) hyp: ∀ (s : FormalSum R X), f s = fbar (sum s)
s₁, s₂: FormalSum R X
sim: s₁ ≈ s₂
ec: coords s₁ = coords s₂Goals accomplished! 🐙end FormalSum end ElementaryMoves section NormRepr /-! ## Basic `Repr` An instance of `Repr` on Free Modules, mainly for debugging (fairly crude). This is implemented by constructing a norm ball containing all the non-zero coordinates, and then making a list of non-zero coordinates -/ theorem fst_le_max (Goals accomplished! 🐙aa: ℕb :b: ℕNat):Nat: Typea ≤ maxa: ℕaa: ℕb :=b: ℕR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ ba ≤ Nat.instMaxNat.1 a bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ ba ≤ maxOfLe.1 a bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ ba ≤ bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bGoals accomplished! 🐙R: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ ba ≤ Nat.instMaxNat.1 a bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ ba ≤ maxOfLe.1 a bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bR: Type ?u.118700
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.118715
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ btheorem snd_le_max (Goals accomplished! 🐙aa: ℕb :b: ℕNat):Nat: Typeb ≤ maxb: ℕaa: ℕb :=b: ℕR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bb ≤ Nat.instMaxNat.1 a bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bb ≤ maxOfLe.1 a bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bGoals accomplished! 🐙R: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bb ≤ Nat.instMaxNat.1 a bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bb ≤ maxOfLe.1 a bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bb ≤ aR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ b
hb < aR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ b
c':= Nat.gt_of_not_le c: a > b
hb < aR: Type ?u.119792
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.119807
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ btheorem eq_fst_or_snd_of_max (Goals accomplished! 🐙aa: ℕb :b: ℕNat) : (maxNat: Typeaa: ℕb =b: ℕa) ∨ (maxa: ℕaa: ℕb =b: ℕb) :=b: ℕR: Type ?u.120908
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.120923
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bNat.instMaxNat.1 a b = a ∨ Nat.instMaxNat.1 a b = bR: Type ?u.120908
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.120923
inst✝: DecidableEq X
a, b: ℕ
c: a ≤ bGoals accomplished! 🐙R: Type ?u.120908
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type ?u.120923
inst✝: DecidableEq X
a, b: ℕ
c: ¬a ≤ bNat.instMaxNat.1 a b = a ∨ Nat.instMaxNat.1 a b = bdefGoals accomplished! 🐙maxNormSuccOnSupp (norm:norm: X → ℕX →X: Type ?u.122056Nat)(Nat: Typecrds :crds: X → RX →X: Type ?u.122056R)(R: Type ?u.122041s: Lists: List XX) :X: Type ?u.122056Nat := matchNat: Types with | [] =>s: List X0 |0: ?m.122094head ::head: Xtail => iftail: List Xcrdscrds: X → Rhead ≠head: X0 then max (0: ?m.122127normnorm: X → ℕhead +head: X1) (maxNormSuccOnSupp1: ?m.122234normnorm: X → ℕcrdscrds: X → Rtail) else maxNormSuccOnSupptail: List Xnormnorm: X → ℕcrdscrds: X → Rtail theoremtail: List Xmax_in_support (max_in_support: ∀ (norm : X → ℕ) (crds : X → R) (s : List X), maxNormSuccOnSupp norm crds s > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds s = norm x + 1norm:norm: X → ℕX →X: Type ?u.122795Nat)(Nat: Typecrds :crds: X → RX →X: Type ?u.122795R)(R: Type ?u.122780s: Lists: List XX) : maxNormSuccOnSuppX: Type ?u.122795normnorm: X → ℕcrdscrds: X → Rs >s: List X0 → ∃0: ?m.122881x :x: XX,X: Type ?u.122795crdscrds: X → Rx ≠x: X0 ∧ maxNormSuccOnSupp0: ?m.122917normnorm: X → ℕcrdscrds: X → Rs =s: List Xnormnorm: X → ℕx +x: X1 :=1: ?m.123031R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List XmaxNormSuccOnSupp norm crds s > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds s = norm x + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
h: maxNormSuccOnSupp norm crds s > 0∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds s = norm x + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List XmaxNormSuccOnSupp norm crds s > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds s = norm x + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
h: maxNormSuccOnSupp norm crds s > 0∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds s = norm x + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
h: maxNormSuccOnSupp norm crds [] > 0
nil∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds [] = norm x + 1Goals accomplished! 🐙R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
h: maxNormSuccOnSupp norm crds s > 0∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds s = norm x + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
consR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
consR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
c: crds head = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
c: crds head = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
c: crds head = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: crds head = 0
h: maxNormSuccOnSupp norm crds tail > 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
c: crds head = 0Goals accomplished! 🐙R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
consR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
c: ¬crds head = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
c: ¬crds head = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
c: ¬crds head = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
c: ¬crds head = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tailR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
c: ¬crds head = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
h✝: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1
inlR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
h✝: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
inrR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
c: ¬crds head = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tailR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tailR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tailR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tailR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tailR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tailR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: maxNormSuccOnSupp norm crds tail > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tailR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: maxNormSuccOnSupp norm crds tail > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tailR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: maxNormSuccOnSupp norm crds tail > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tailR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tailGoals accomplished! 🐙R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
h: maxNormSuccOnSupp norm crds (head :: tail) > 0
c: ¬crds head = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: norm head + 1 > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: norm head + 1 > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: norm head + 1 > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
head: X
tail: List X
ih: maxNormSuccOnSupp norm crds tail > 0 → ∃ x, crds x ≠ 0 ∧ maxNormSuccOnSupp norm crds tail = norm x + 1
c: ¬crds head = 0
h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0
sl:= eq_fst_or_snd_of_max (norm head + 1) (maxNormSuccOnSupp norm crds tail): max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1 ∨ max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = maxNormSuccOnSupp norm crds tail
p: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm head + 1theoremGoals accomplished! 🐙supp_below_max(norm:norm: X → ℕX →X: Type ?u.127570Nat)(Nat: Typecrds :crds: X → RX →X: Type ?u.127570R)(R: Type ?u.127555s: Lists: List XX) : (X: Type ?u.127570x:x: XX) →X: Type ?u.127570x ∈x: Xs →s: List Xcrdscrds: X → Rx ≠x: X0 →0: ?m.127627normnorm: X → ℕx +x: X1 ≤ maxNormSuccOnSupp1: ?m.127696normnorm: X → ℕcrdscrds: X → Rs :=s: List XR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X∀ (x : X), x ∈ s → crds x ≠ 0 → norm x + 1 ≤ maxNormSuccOnSupp norm crds sR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
x: X
h₁: x ∈ s
h₂: crds x ≠ 0norm x + 1 ≤ maxNormSuccOnSupp norm crds sR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X∀ (x : X), x ∈ s → crds x ≠ 0 → norm x + 1 ≤ maxNormSuccOnSupp norm crds sR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
as✝: List X
headnorm x + 1 ≤ maxNormSuccOnSupp norm crds (x :: as✝)R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
b✝: X
as✝: List X
a✝: List.Mem x as✝
tailnorm x + 1 ≤ maxNormSuccOnSupp norm crds (b✝ :: as✝)R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X∀ (x : X), x ∈ s → crds x ≠ 0 → norm x + 1 ≤ maxNormSuccOnSupp norm crds sR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
as: List Xnorm x + 1 ≤ maxNormSuccOnSupp norm crds (x :: as)R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
as: List Xnorm x + 1 ≤ maxNormSuccOnSupp norm crds (x :: as)R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
as: List Xnorm x + 1 ≤ if crds x ≠ 0 then max (norm x + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds asR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
as: List Xnorm x + 1 ≤ if crds x ≠ 0 then max (norm x + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds asR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
as: List Xnorm x + 1 ≤ maxNormSuccOnSupp norm crds (x :: as)R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
as: List Xnorm x + 1 ≤ max (norm x + 1) (maxNormSuccOnSupp norm crds as)R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
as: List Xnorm x + 1 ≤ maxNormSuccOnSupp norm crds (x :: as)Goals accomplished! 🐙R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X∀ (x : X), x ∈ s → crds x ≠ 0 → norm x + 1 ≤ maxNormSuccOnSupp norm crds sR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x asnorm x + 1 ≤ maxNormSuccOnSupp norm crds (a :: as)R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x asnorm x + 1 ≤ maxNormSuccOnSupp norm crds (a :: as)R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x asnorm x + 1 ≤ if crds a ≠ 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds asR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x asnorm x + 1 ≤ if crds a ≠ 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds asR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x asnorm x + 1 ≤ maxNormSuccOnSupp norm crds (a :: as)R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x as
l:= supp_below_max norm crds as x th h₂: norm x + 1 ≤ maxNormSuccOnSupp norm crds asnorm x + 1 ≤ if crds a ≠ 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds asR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x asnorm x + 1 ≤ maxNormSuccOnSupp norm crds (a :: as)R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x as
l:= supp_below_max norm crds as x th h₂: norm x + 1 ≤ maxNormSuccOnSupp norm crds asnorm x + 1 ≤ if crds a ≠ 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds asR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x as
l:= supp_below_max norm crds as x th h₂: norm x + 1 ≤ maxNormSuccOnSupp norm crds as
c: crds a ≠ 0norm x + 1 ≤ if crds a ≠ 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds asR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x as
l:= supp_below_max norm crds as x th h₂: norm x + 1 ≤ maxNormSuccOnSupp norm crds as
c: crds a ≠ 0norm x + 1 ≤ max (norm a + 1) (maxNormSuccOnSupp norm crds as)R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x as
l:= supp_below_max norm crds as x th h₂: norm x + 1 ≤ maxNormSuccOnSupp norm crds as
c: crds a ≠ 0norm x + 1 ≤ if crds a ≠ 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds asR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x as
l:= supp_below_max norm crds as x th h₂: norm x + 1 ≤ maxNormSuccOnSupp norm crds as
c: crds a ≠ 0maxNormSuccOnSupp norm crds as ≤ max (norm a + 1) (maxNormSuccOnSupp norm crds as)R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x as
l:= supp_below_max norm crds as x th h₂: norm x + 1 ≤ maxNormSuccOnSupp norm crds as
c: crds a ≠ 0norm x + 1 ≤ if crds a ≠ 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds asGoals accomplished! 🐙R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x as
l:= supp_below_max norm crds as x th h₂: norm x + 1 ≤ maxNormSuccOnSupp norm crds asnorm x + 1 ≤ if crds a ≠ 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds asR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x as
l:= supp_below_max norm crds as x th h₂: norm x + 1 ≤ maxNormSuccOnSupp norm crds as
c: ¬crds a ≠ 0norm x + 1 ≤ if crds a ≠ 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds asR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x as
l:= supp_below_max norm crds as x th h₂: norm x + 1 ≤ maxNormSuccOnSupp norm crds as
c: ¬crds a ≠ 0norm x + 1 ≤ maxNormSuccOnSupp norm crds asR: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
x: X
h₂: crds x ≠ 0
a: X
as: List X
th: List.Mem x as
l:= supp_below_max norm crds as x th h₂: norm x + 1 ≤ maxNormSuccOnSupp norm crds as
c: ¬crds a ≠ 0norm x + 1 ≤ if crds a ≠ 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds astheoremGoals accomplished! 🐙supp_zero_of_max_zero(norm:norm: X → ℕX →X: Type ?u.129879Nat)(Nat: Typecrds :crds: X → RX →X: Type ?u.129879R)(R: Type ?u.129864s: Lists: List XX) : maxNormSuccOnSuppX: Type ?u.129879normnorm: X → ℕcrdscrds: X → Rs =s: List X0 → (0: ?m.129965x:x: XX) →X: Type ?u.129879x ∈x: Xs →s: List Xcrdscrds: X → Rx =x: X0 := fun0: ?m.130021hyphyp: ?m.130101xx: ?m.130104hm => ifhm: ?m.130107c:c: ?m.130204crdscrds: X → Rx =x: ?m.1301040 then0: ?m.130111c elsec: ?m.130204R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
hyp: maxNormSuccOnSupp norm crds s = 0
x: X
hm: x ∈ s
c: ¬crds x = 0crds x = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
hyp: maxNormSuccOnSupp norm crds s = 0
x: X
hm: x ∈ s
c: ¬crds x = 0crds x = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
hyp: maxNormSuccOnSupp norm crds s = 0
x: X
hm: x ∈ s
c: ¬crds x = 0crds x = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
hyp: maxNormSuccOnSupp norm crds s = 0
x: X
hm: x ∈ s
c: ¬crds x = 0
l:= supp_below_max norm crds s x hm c: norm x + 1 ≤ maxNormSuccOnSupp norm crds scrds x = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
hyp: maxNormSuccOnSupp norm crds s = 0
x: X
hm: x ∈ s
c: ¬crds x = 0crds x = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
hyp: maxNormSuccOnSupp norm crds s = 0
x: X
hm: x ∈ s
c: ¬crds x = 0
l:= supp_below_max norm crds s x hm c: norm x + 1 ≤ maxNormSuccOnSupp norm crds scrds x = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
hyp: maxNormSuccOnSupp norm crds s = 0
x: X
hm: x ∈ s
c: ¬crds x = 0
l: norm x + 1 ≤ 0crds x = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
hyp: maxNormSuccOnSupp norm crds s = 0
x: X
hm: x ∈ s
c: ¬crds x = 0
l: norm x + 1 ≤ 0crds x = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
hyp: maxNormSuccOnSupp norm crds s = 0
x: X
hm: x ∈ s
c: ¬crds x = 0
l: norm x + 1 ≤ 0crds x = 0R: Type u_2
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type u_1
inst✝: DecidableEq X
norm: X → ℕ
crds: X → R
s: List X
hyp: maxNormSuccOnSupp norm crds s = 0
x: X
hm: x ∈ s
c: ¬crds x = 0crds x = 0defGoals accomplished! 🐙FormalSum.normSucc (FormalSum.normSucc: {R : Type u_1} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type u_2} → [inst_2 : DecidableEq X] → (X → ℕ) → FormalSum R X → ℕnorm :norm: X → ℕX →X: Type ?u.130569Nat)(Nat: Types: FormalSums: FormalSum R XRR: Type ?u.130554X) :X: Type ?u.130569Nat := maxNormSuccOnSuppNat: Typenormnorm: X → ℕs.s: FormalSum R Xcoords (coords: {R : Type ?u.130645} → [inst : Ring R] → {X : Type ?u.130644} → [inst_1 : DecidableEq X] → FormalSum R X → X → Rs.support) open FormalSum theorems: FormalSum R Xnormsucc_le(norm :norm: X → ℕX →X: Type ?u.130903Nat)(Nat: Types₁s₁: FormalSum R Xs₂: FormalSums₂: FormalSum R XRR: Type ?u.130888X)(X: Type ?u.130903eql :eql: s₁ ≈ s₂s₁ ≈s₁: FormalSum R Xs₂):s₂: FormalSum R Xs₁.s₁: FormalSum R XnormSuccnormSucc: {R : Type ?u.131002} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type ?u.131001} → [inst_2 : DecidableEq X] → (X → ℕ) → FormalSum R X → ℕnorm ≤norm: X → ℕs₂.s₂: FormalSum R XnormSuccnormSucc: {R : Type ?u.131096} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type ?u.131095} → [inst_2 : DecidableEq X] → (X → ℕ) → FormalSum R X → ℕnorm := ifnorm: X → ℕc:c: ?m.131216s₁.s₁: FormalSum R XnormSuccnormSucc: {R : Type ?u.131140} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type ?u.131139} → [inst_2 : DecidableEq X] → (X → ℕ) → FormalSum R X → ℕnorm =norm: X → ℕ0 then0: ?m.131169elseGoals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬normSucc norm s₁ = 0maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
h✝: maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
inlmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
h✝: maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
inrmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
h✝: maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
inrmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr':= p.left: coords s₁ x₀ ≠ 0maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr':= p.left: coords s₁ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr':= p.left: coords s₁ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀
hyp: 0 = coords s₂ x₀R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀
hyp: 0 = coords s₂ x₀
l':= Eq.symm hyp: coords s₂ x₀ = 0R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀Goals accomplished! 🐙R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀
nonzr:= fun hyp => let l' := Eq.symm hyp; absurd l' nonzr': 0 ≠ coords s₂ x₀
in_supp:= nonzero_coord_in_support s₂ x₀ nonzr: x₀ ∈ support s₂maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀
nonzr:= fun hyp => let l' := Eq.symm hyp; absurd l' nonzr': 0 ≠ coords s₂ x₀
in_supp:= nonzero_coord_in_support s₂ x₀ nonzr: x₀ ∈ support s₂maxNormSuccOnSupp norm (coords s₁) (support s₁) ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀
nonzr:= fun hyp => let l' := Eq.symm hyp; absurd l' nonzr': 0 ≠ coords s₂ x₀
in_supp:= nonzero_coord_in_support s₂ x₀ nonzr: x₀ ∈ support s₂norm x₀ + 1 ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀
nonzr:= fun hyp => let l' := Eq.symm hyp; absurd l' nonzr': 0 ≠ coords s₂ x₀
in_supp:= nonzero_coord_in_support s₂ x₀ nonzr: x₀ ∈ support s₂norm x₀ + 1 ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
c: ¬maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0
c':= Or.casesOn (motive := fun t => Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)) = t → maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1 ▸ absurd h c) (fun h h_1 => Eq.symm h_1 ▸ h) (Eq.refl (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁)))): maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
l✝:= max_in_support norm (coords s₁) (support s₁) c': ∃ x, coords s₁ x ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x + 1
x₀: X
p: coords s₁ x₀ ≠ 0 ∧ maxNormSuccOnSupp norm (coords s₁) (support s₁) = norm x₀ + 1
nonzr': coords s₂ x₀ ≠ 0
l:= congrFun eql x₀: coords s₁ x₀ = coords s₂ x₀
nonzr:= fun hyp => let l' := Eq.symm hyp; absurd l' nonzr': 0 ≠ coords s₂ x₀
in_supp:= nonzero_coord_in_support s₂ x₀ nonzr: x₀ ∈ support s₂norm x₀ + 1 ≤ maxNormSuccOnSupp norm (coords s₂) (support s₂)theoremGoals accomplished! 🐙norm_succ_eq(norm :norm: X → ℕX →X: Type ?u.133553Nat)(Nat: Types₁s₁: FormalSum R Xs₂: FormalSums₂: FormalSum R XRR: Type ?u.133538X)(X: Type ?u.133553eql :eql: s₁ ≈ s₂s₁ ≈s₁: FormalSum R Xs₂):s₂: FormalSum R Xs₁.s₁: FormalSum R XnormSuccnormSucc: {R : Type ?u.133652} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type ?u.133651} → [inst_2 : DecidableEq X] → (X → ℕ) → FormalSum R X → ℕnorm =norm: X → ℕs₂.s₂: FormalSum R XnormSuccnormSucc: {R : Type ?u.133746} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type ?u.133745} → [inst_2 : DecidableEq X] → (X → ℕ) → FormalSum R X → ℕnorm :=norm: X → ℕR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
h₁R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
h₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
h₁R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
h₂R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
h₂.eqls₂ ≈ s₁R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
h₂.eqls₂ ≈ s₁R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
norm: X → ℕ
s₁, s₂: FormalSum R X
eql: s₁ ≈ s₂
h₂.eql.aeqlCoords R X s₁ s₂class NormCube (Goals accomplished! 🐙α :α: TypeType) where norm :Type: Type 1α →α: TypeNat cube :Nat: TypeNat → ListNat: Typeα def normCube (α: Typeα :α: TypeType) [Type: Type 1nc : NormCubenc: NormCube αα](α: Typek:k: ℕNat) :=Nat: Typenc.cubenc: NormCube αk instance natCube : NormCubek: ℕNat := ⟨Nat: Typeid, funid: {α : Sort ?u.134123} → α → αn => (List.rangen: ?m.134129n).reverse⟩ instance finCube {n: ?m.134129k:k: ℕNat} : NormCube (Fin (Nat.succNat: Typek)) := let i :k: ℕNat → Fin (Nat.succNat: Typek) := funk: ℕn => ⟨n: ?m.134210n % (Nat.succn: ?m.134210k),k: ℕ
a⟩ ⟨funGoals accomplished! 🐙j =>j: ?m.134261j.val, funj: ?m.134261n => (List.range (min (n: ?m.134267k +k: ℕ1)1: ?m.134279n)).reverse.map i⟩ instance intCube : NormCuben: ?m.134267ℤ where norm := Int.natAbs cube :ℤ: TypeNat → ListNat: Typeℤ := funℤ: Typen => (List.range (n: ?m.134683n)).reverse.map (Int.ofNat) ++ (List.range (n: ?m.134683n -n: ?m.1346831)).map (Int.negSucc) instance prodCube {1: ?m.134706αα: Typeβ :β: TypeType} [Type: Type 1na: NormCubena: NormCube αα] [α: Typenb :NormCubenb: NormCube ββ] : NormCube (β: Typeα ×α: Typeβ) where norm : (β: Typeα ×α: Typeβ) →β: TypeNat := fun ⟨Nat: Typea,a: αb⟩ => max (b: βna.normna: NormCube αa) (a: αnb.normnb: NormCube βb) cube :b: βNat → List (Nat: Typeα ×α: Typeβ) := funβ: Typen => (n: ?m.135100na.cubena: NormCube αn).bind (funn: ?m.135100a => (a: ?m.135114nb.cubenb: NormCube βn).map (funn: ?m.135100b => (b: ?m.135126a,a: ?m.135114b))) defb: ?m.135126FreeModule.normBound (x:FreeModule.normBound: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → R[X] → [nx : NormCube X] → ℕR[R: Type ?u.135516X])[X: Type ?u.135531nx : NormCubenx: NormCube XX] :X: Type ?u.135531Nat :=Nat: TypeR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: R[X]
nx: NormCube X
f:= fun s => normSucc NormCube.norm s: FormalSum R X → ℕ
aR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: R[X]
nx: NormCube X
f:= fun s => normSucc NormCube.norm s: FormalSum R X → ℕ
aQuotient ?m.135772R: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: R[X]
nx: NormCube X
f:= fun s => normSucc NormCube.norm s: FormalSum R X → ℕR: Type
inst✝²: Ring R
inst✝¹: DecidableEq R
X: Type
inst✝: DecidableEq X
x: R[X]
nx: NormCube X
f:= fun s => normSucc NormCube.norm s: FormalSum R X → ℕ
aQuotient (formalSumSetoid R X)-- this should be viewable directly if `R` and `X` are, as in our case def FreeModule.coeffList (x:Goals accomplished! 🐙R[R: Type ?u.136041X])[X: Type ?u.136056nx : NormCubenx: NormCube XX] : List (X: Type ?u.136056R ×R: Type ?u.136041X) := (X: Type ?u.136056nx.cube (x.nx: NormCube XnormBound)).filterMap funnormBound: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → R[X] → [nx : NormCube X] → ℕx₀ => letx₀: ?m.136244a := x.coordinatesa: ?m.136247x₀ ifx₀: ?m.136244a =a: ?m.1362470 then none else some (0: ?m.136302a,a: ?m.136247x₀) -- basic repr instance basicRepr [NormCubex₀: ?m.136244X][ReprX: Type ?u.136620X][ReprX: Type ?u.136620R]: Repr (R: Type ?u.136605R[R: Type ?u.136605X]) := ⟨funX: Type ?u.136620xx: ?m.136707_ => reprStr (_: ?m.136710x.x: ?m.136707coeffList)⟩ end NormReprcoeffList: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → R[X] → [nx : NormCube X] → List (R × X)