Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
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: Type ?u.74981
R
:
Type _: Type (?u.17+1)
Type _
} [
Ring: Type ?u.45431 → Type ?u.45431
Ring
R: Type ?u.2
R
] [
DecidableEq: Sort ?u.12220 → Sort (max1?u.12220)
DecidableEq
R: Type ?u.2
R
] variable {
X: Type ?u.7987
X
:
Type _: Type (?u.2237+1)
Type _
} [
DecidableEq: Sort ?u.645 → Sort (max1?u.645)
DecidableEq
X: Type ?u.32
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: (R : Type u_1) → Type u_2 → [inst : Ring R] → Type (maxu_2u_1)
FormalSum
(
R: Type ?u.71
R
X: Type ?u.74
X
:
Type _: Type (?u.71+1)
Type _
) [
Ring: Type ?u.77 → Type ?u.77
Ring
R: Type ?u.71
R
] :=
List: Type ?u.86 → Type ?u.86
List
(
R: Type ?u.71
R
×
X: Type ?u.74
X
) /-! ## 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. -/ def
monomCoeff: (R : Type ?u.130) → (X : Type ?u.133) → [inst : Ring R] → [inst : DecidableEq X] → XR × XR
monomCoeff
(
R: Type ?u.130
R
X: Type ?u.133
X
:
Type _: Type (?u.133+1)
Type _
) [
Ring: Type ?u.136 → Type ?u.136
Ring
R: Type ?u.130
R
] [
DecidableEq: Sort ?u.139 → Sort (max1?u.139)
DecidableEq
X: Type ?u.133
X
](
x₀: X
x₀
:
X: Type ?u.133
X
) (
nx: R × X
nx
:
R: Type ?u.130
R
×
X: Type ?u.133
X
) :
R: Type ?u.130
R
:= match (
nx: R × X
nx
.
2: {α : Type ?u.165} → {β : Type ?u.164} → α × ββ
2
==
x₀: X
x₀
) with |
true: Bool
true
=>
nx: R × X
nx
.
1: {α : Type ?u.211} → {β : Type ?u.210} → α × βα
1
|
false: Bool
false
=>
0: ?m.219
0
/-- Homomorphism property for coordinates for a formal sum with one term. -/ theorem
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)
monom_coords_hom
(
x₀: X
x₀
x: X
x
:
X: Type ?u.642
X
) (
a: R
a
b: R
b
:
R: Type ?u.627
R
) :
monomCoeff: (R : Type ?u.664) → (X : Type ?u.663) → [inst : Ring R] → [inst : DecidableEq X] → XR × XR
monomCoeff
R: Type ?u.627
R
X: Type ?u.642
X
x₀: X
x₀
(
a: R
a
+
b: R
b
,
x: X
x
) =
monomCoeff: (R : Type ?u.803) → (X : Type ?u.802) → [inst : Ring R] → [inst : DecidableEq X] → XR × XR
monomCoeff
R: Type ?u.627
R
X: Type ?u.642
X
x₀: X
x₀
(
a: R
a
,
x: X
x
) +
monomCoeff: (R : Type ?u.841) → (X : Type ?u.840) → [inst : Ring R] → [inst : DecidableEq X] → XR × XR
monomCoeff
R: Type ?u.627
R
X: Type ?u.642
X
x₀: X
x₀
(
b: R
b
,
x: X
x
) :=
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: 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)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: 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)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: 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)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X

a, b: R


(match (a + b, x).snd == x₀ with | true => (a + b, x).fst | false => 0) = (match (a, x).snd == x₀ with | true => (a, x).fst | false => 0) + monomCoeff R X x₀ (b, x)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X

a, b: R


(match (a + b, x).snd == x₀ with | true => (a + b, x).fst | false => 0) = (match (a, x).snd == x₀ with | true => (a, x).fst | false => 0) + match (b, x).snd == x₀ with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X

a, b: R


(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)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X

a, b: R


(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)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: 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)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X

a, b: R


false
(match false with | true => (a + b, x).fst | false => 0) = (match false with | true => (a, x).fst | false => 0) + match false with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X

a, b: R


true
(match true with | true => (a + b, x).fst | false => 0) = (match true with | true => (a, x).fst | false => 0) + match true with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X

a, b: R


(match (a + b, x).snd == x₀ with | true => (a + b, x).fst | false => 0) = (match (a, x).snd == x₀ with | true => (a, x).fst | false => 0) + match (b, x).snd == x₀ with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X

a, b: R


false
(match false with | true => (a + b, x).fst | false => 0) = (match false with | true => (a, x).fst | false => 0) + match false with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X

a, b: R


true
(match true with | true => (a + b, x).fst | false => 0) = (match true with | true => (a, x).fst | false => 0) + match true with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X

a, b: R


(match (a + b, x).snd == x₀ with | true => (a + b, x).fst | false => 0) = (match (a, x).snd == x₀ with | true => (a, x).fst | false => 0) + match (b, x).snd == x₀ with | true => (b, x).fst | false => 0

Goals accomplished! 🐙
/-- Associativity of scalar multiplication coordinates for a formal sum with one term. -/ theorem
monom_coords_mul: ∀ {x : X} (x₀ : X) (a b : R), monomCoeff R X x₀ (a * b, x) = a * monomCoeff R X x₀ (b, x)
monom_coords_mul
(
x₀: X
x₀
:
X: Type ?u.1476
X
) (
a: R
a
b: R
b
:
R: Type ?u.1461
R
) :
monomCoeff: (R : Type ?u.1590) → (X : Type ?u.1589) → [inst : Ring R] → [inst : DecidableEq X] → XR × XR
monomCoeff
R: Type ?u.1461
R
X: Type ?u.1476
X
x₀: X
x₀
(
a: R
a
*
b: R
b
,
x: ?m.1579
x
) =
a: R
a
*
monomCoeff: (R : Type ?u.1698) → (X : Type ?u.1697) → [inst : Ring R] → [inst : DecidableEq X] → XR × XR
monomCoeff
R: Type ?u.1461
R
X: Type ?u.1476
X
x₀: X
x₀
(
b: R
b
,
x: ?m.1579
x
) :=
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


monomCoeff R X x₀ (a * b, x) = a * monomCoeff R X x₀ (b, x)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


monomCoeff R X x₀ (a * b, x) = a * monomCoeff R X x₀ (b, x)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


(match (a * b, x).snd == x₀ with | true => (a * b, x).fst | false => 0) = a * monomCoeff R X x₀ (b, x)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


(match (a * b, x).snd == x₀ with | true => (a * b, x).fst | false => 0) = a * monomCoeff R X x₀ (b, x)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


(match (a * b, x).snd == x₀ with | true => (a * b, x).fst | false => 0) = a * monomCoeff R X x₀ (b, x)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


(match (a * b, x).snd == x₀ with | true => (a * b, x).fst | false => 0) = a * match (b, x).snd == x₀ with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


(match (a * b, x).snd == x₀ with | true => (a * b, x).fst | false => 0) = a * match (b, x).snd == x₀ with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


monomCoeff R X x₀ (a * b, x) = a * monomCoeff R X x₀ (b, x)
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


false
(match false with | true => (a * b, x).fst | false => 0) = a * match false with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


true
(match true with | true => (a * b, x).fst | false => 0) = a * match true with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


(match (a * b, x).snd == x₀ with | true => (a * b, x).fst | false => 0) = a * match (b, x).snd == x₀ with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


false
(match false with | true => (a * b, x).fst | false => 0) = a * match false with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


true
(match true with | true => (a * b, x).fst | false => 0) = a * match true with | true => (b, x).fst | false => 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x, x₀: X

a, b: R


(match (a * b, x).snd == x₀ with | true => (a * b, x).fst | false => 0) = a * match (b, x).snd == x₀ with | true => (b, x).fst | false => 0

Goals accomplished! 🐙
/-- Coordinates for a formal sum with one term with scalar `0`. -/ theorem
monom_coords_at_zero: ∀ (x₀ x : X), monomCoeff R X x₀ (0, x) = 0
monom_coords_at_zero
(
x₀: X
x₀
x: X
x
:
X: Type ?u.2237
X
) :
monomCoeff: (R : Type ?u.2255) → (X : Type ?u.2254) → [inst : Ring R] → [inst : DecidableEq X] → XR × XR
monomCoeff
R: Type ?u.2222
R
X: Type ?u.2237
X
x₀: X
x₀
(
0: ?m.2265
0
,
x: X
x
) =
0: ?m.2368
0
:=
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X


monomCoeff R X x₀ (0, x) = 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X


monomCoeff R X x₀ (0, x) = 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X


(match (0, x).snd == x₀ with | true => (0, x).fst | false => 0) = 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X


(match (0, x).snd == x₀ with | true => (0, x).fst | false => 0) = 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X


monomCoeff R X x₀ (0, x) = 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X


false
(match false with | true => (0, x).fst | false => 0) = 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X


true
(match true with | true => (0, x).fst | false => 0) = 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X


(match (0, x).snd == x₀ with | true => (0, x).fst | false => 0) = 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X


false
(match false with | true => (0, x).fst | false => 0) = 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X


true
(match true with | true => (0, x).fst | false => 0) = 0
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

x₀, x: X


(match (0, x).snd == x₀ with | true => (0, x).fst | false => 0) = 0

Goals accomplished! 🐙
/-- The coordinates for a formal sum. -/ def
FormalSum.coords: FormalSum R XXR
FormalSum.coords
:
FormalSum: (R : Type ?u.2673) → Type ?u.2672 → [inst : Ring R] → Type (max?u.2672?u.2673)
FormalSum
R: Type ?u.2644
R
X: Type ?u.2659
X
X: Type ?u.2659
X
R: Type ?u.2644
R
| [], _ =>
0: ?m.2708
0
|
h: R × X
h
::
t: List (R × X)
t
,
x₀: X
x₀
=>
monomCoeff: (R : Type ?u.2802) → (X : Type ?u.2801) → [inst : Ring R] → [inst : DecidableEq X] → XR × XR
monomCoeff
R: Type ?u.2644
R
X: Type ?u.2659
X
x₀: X
x₀
h: R × X
h
+
coords: FormalSum R XXR
coords
t: List (R × X)
t
x₀: X
x₀
/-! ### 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: {R : Type u_1} → [inst : Ring R] → {X : Type u_2} → FormalSum R XList X
FormalSum.support
(
s: FormalSum R X
s
:
FormalSum: (R : Type ?u.3697) → Type ?u.3696 → [inst : Ring R] → Type (max?u.3696?u.3697)
FormalSum
R: Type ?u.3669
R
X: Type ?u.3684
X
) :
List: Type ?u.3705 → Type ?u.3705
List
X: Type ?u.3684
X
:=
s: FormalSum R X
s
.
map: {α : Type ?u.3709} → {β : Type ?u.3708} → (αβ) → List αList β
map
<| fun (_,
x: X
x
) =>
x: X
x
open FormalSum /-- Support contains elements `x : X` where the coordinate is not `0`. -/ theorem
nonzero_coord_in_support: ∀ {R : Type u_1} [inst : Ring R] {X : Type u_2} [inst_1 : DecidableEq X] (s : FormalSum R X) (x : X), 0 coords s xx support s
nonzero_coord_in_support
(
s: FormalSum R X
s
:
FormalSum: (R : Type ?u.3926) → Type ?u.3925 → [inst : Ring R] → Type (max?u.3925?u.3926)
FormalSum
R: Type ?u.3898
R
X: Type ?u.3913
X
) : ∀
x: X
x
:
X: Type ?u.3913
X
,
0: ?m.3941
0
s: FormalSum R X
s
.
coords: {R : Type ?u.3952} → [inst : Ring R] → {X : Type ?u.3951} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x: X
x
x: X
x
s: FormalSum R X
s
.
support: {R : Type ?u.4024} → [inst : Ring R] → {X : Type ?u.4023} → FormalSum R XList X
support
:= match
s: FormalSum R X
s
with | [] => fun
x: ?m.4135
x
hyp: ?m.4138
hyp
=>
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 [] x


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 [] x


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 [] x


coords [] x = 0

Goals 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 [] x


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 [] x

d: coords [] x = 0


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 0

d: coords [] x = 0


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 0

d: coords [] x = 0


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 0

d: coords [] x = 0


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 [] x



Goals accomplished! 🐙
|
h: R × X
h
::
t: List (R × X)
t
=>
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), 0 coords (h :: t) xx support (h :: t)
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

hyp: 0 coords (h :: t) x


x support (h :: t)
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), 0 coords (h :: t) xx support (h :: t)
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 ((a₀, x₀) :: t) x


x support ((a₀, x₀) :: t)
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), 0 coords (h :: t) xx support (h :: t)
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 ((a₀, x₀) :: t) x


x support ((a₀, x₀) :: t)
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 ((a₀, x₀) :: t) x


support ((a₀, x₀) :: t) = x₀ :: support t

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), 0 coords (h :: t) xx support (h :: t)
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t


x support ((a₀, x₀) :: t)
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t


x x₀ :: support t
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), 0 coords (h :: t) xx support (h :: t)
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = true


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = true

eqn: x₀ = x


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = true


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = true

eqn: x₀ = x


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = true

eqn: x₀ = x


x x :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = true

eqn: x₀ = x


x x :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = true


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = true

eqn: x₀ = x


a
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = true


x x₀ :: support t

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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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 monomCoeff R X x (a₀, x₀) + coords t x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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 (match (a₀, x₀).snd == x with | true => (a₀, x₀).fst | false => 0) + coords t x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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 (match false with | true => (a₀, x₀).fst | false => 0) + coords t x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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


x x₀ :: support t
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


x x₀ :: support t
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


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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


x x₀ :: support t
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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


a
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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


a
(match x == x₀ with | true => true | false => List.elem x (support t)) = true
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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


a
(match x == x₀ with | true => true | false => List.elem x (support t)) = true
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


(x == x₀) = false
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


(x == x₀) = false
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


(x == x₀) = false
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


(x == x₀) = false
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


¬x = x₀
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₀


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


¬x = x₀
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₀ = x


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


¬x = x₀

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


(x == x₀) = false

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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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

p': (x == x₀) = false


a
(match x == x₀ with | true => true | false => List.elem x (support t)) = true
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

p': (x == x₀) = false


a
(match false with | true => true | false => List.elem x (support t)) = true
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

p': (x == x₀) = false


a
(match false with | true => true | false => List.elem x (support t)) = true
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t
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

p': (x == x₀) = false


a.h
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 ((a₀, x₀) :: t) x

d: support ((a₀, x₀) :: t) = x₀ :: support t

p: (x₀ == x) = false


x x₀ :: support t

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: List X(XR) → (XR) → Prop
equalOnList
(
l: List X
l
:
List: Type ?u.7999 → Type ?u.7999
List
X: Type ?u.7987
X
) (
f: XR
f
g: XR
g
:
X: Type ?u.7987
X
R: Type ?u.7972
R
) :
Prop: Type
Prop
:= match
l: List X
l
with | [] =>
true: Bool
true
|
h: X
h
::
t: List X
t
=> (
f: XR
f
h: X
h
=
g: XR
g
h: X
h
) ∧ (
equalOnList: List X(XR) → (XR) → Prop
equalOnList
t: List X
t
f: XR
f
g: XR
g
) /-- Equal functions are equal on arbitrary supports. -/ theorem
equalOnList_of_equal: ∀ (l : List X) (f g : XR), f = gequalOnList l f g
equalOnList_of_equal
(
l: List X
l
:
List: Type ?u.8364 → Type ?u.8364
List
X: Type ?u.8352
X
) (
f: XR
f
g: XR
g
:
X: Type ?u.8352
X
R: Type ?u.8337
R
) :
f: XR
f
=
g: XR
g
equalOnList: {R : Type ?u.8383} → {X : Type ?u.8382} → List X(XR) → (XR) → Prop
equalOnList
l: List X
l
f: XR
f
g: XR
g
:=
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR


f = gequalOnList l f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

hyp: f = g


R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR


f = gequalOnList l f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

hyp: f = g


R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g


nil
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g


nil
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g


nil

Goals accomplished! 🐙
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

hyp: f = g


R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons
equalOnList (h :: t) f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons
equalOnList (h :: t) f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons
f h = g h equalOnList t f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons
f h = g h equalOnList t f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons
equalOnList (h :: t) f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons.left
f h = g h
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons.right
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons
equalOnList (h :: t) f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons.left
f h = g h
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons.right
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons.left
g h = g h
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons.right
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons.right
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: f = g

h: X

t: List X

step: equalOnList t f g


cons
equalOnList (h :: t) f g

Goals accomplished! 🐙
/-- Functions equal on support `l` are equal on each `x ∈ l`. -/ theorem
eq_mem_of_equalOnList: ∀ (l : List X) (f g : XR) (x : X), x lequalOnList l f gf x = g x
eq_mem_of_equalOnList
(
l: List X
l
:
List: Type ?u.8887 → Type ?u.8887
List
X: Type ?u.8875
X
) (
f: XR
f
g: XR
g
:
X: Type ?u.8875
X
R: Type ?u.8860
R
) (
x: X
x
:
X: Type ?u.8875
X
)(
mhyp: x l
mhyp
:
x: X
x
l: List X
l
) :
equalOnList: {R : Type ?u.8929} → {X : Type ?u.8928} → List X(XR) → (XR) → Prop
equalOnList
l: List X
l
f: XR
f
g: XR
g
f: XR
f
x: X
x
=
g: XR
g
x: X
x
:= match
l: List X
l
with | [] =>
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x: X

mhyp: x []


equalOnList [] f gf x = g x

Goals accomplished! 🐙
|
h: X
h
::
t: List X
t
=>
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

mhyp: x h :: t


equalOnList (h :: t) f gf x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

mhyp: x h :: t

hyp: equalOnList (h :: t) f g


f x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

mhyp: x h :: t


equalOnList (h :: t) f gf x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

mhyp: x h :: t

hyp: f h = g h equalOnList t f g


f x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

mhyp: x h :: t


equalOnList (h :: t) f gf x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x: X

t: List X

hyp: f x = g x equalOnList t f g


head
f x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

hyp: f h = g h equalOnList t f g

a✝: List.Mem x t


tail
f x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

mhyp: x h :: t


equalOnList (h :: t) f gf x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

hyp: f h = g h equalOnList t f g

a✝: List.Mem x t


tail
f x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

mhyp: x h :: t


equalOnList (h :: t) f gf x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

hyp: f h = g h equalOnList t f g

a✝: List.Mem x t


tail
f x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

hyp: f h = g h equalOnList t f g

a✝: List.Mem x t


x t

Goals accomplished! 🐙
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

mhyp: x h :: t


equalOnList (h :: t) f gf x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

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


tail
f x = g x
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

x, h: X

t: List X

mhyp: x h :: t


equalOnList (h :: t) f gf x = g x

Goals accomplished! 🐙
/-- Decidability of equality on list. -/ @[instance] def
decidableEqualOnList: {R : Type u_1} → [inst : DecidableEq R] → {X : Type u_2} → (l : List X) → (f g : XR) → Decidable (equalOnList l f g)
decidableEqualOnList
(
l: List X
l
:
List: Type ?u.9751 → Type ?u.9751
List
X: Type ?u.9739
X
) (
f: XR
f
g: XR
g
:
X: Type ?u.9739
X
R: Type ?u.9724
R
) :
Decidable: PropType
Decidable
(
equalOnList: {R : Type ?u.9763} → {X : Type ?u.9762} → List X(XR) → (XR) → Prop
equalOnList
l: List X
l
f: XR
f
g: XR
g
) := match
l: List X
l
with | [] =>
Decidable.isTrue: {p : Prop} → pDecidable p
Decidable.isTrue
(
R: Type ?u.9724

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.9739

inst✝: DecidableEq X

l: List X

f, g: XR



Goals accomplished! 🐙
) |
h: X
h
::
t: List X
t
=>
R: Type ?u.9724

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.9739

inst✝: DecidableEq X

l: List X

f, g: XR

h: X

t: List X


R: Type ?u.9724

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.9739

inst✝: DecidableEq X

l: List X

f, g: XR

h: X

t: List X


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: XR

h: X

t: List X


R: Type ?u.9724

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.9739

inst✝: DecidableEq X

l: List X

f, g: XR

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: XR

h: X

t: List X

hs: equalOnList t f g


isTrue
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: XR

h: X

t: List X

hs: equalOnList t f g


isTrue
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: XR

h: X

t: List X

hs: equalOnList t f g

c: ¬f h = g h


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: XR

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: XR

h: X

t: List X

hs: equalOnList t f g

c: ¬f h = g h


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: XR

h: X

t: List X

hs: equalOnList t f g

c: ¬f h = g h

contra: f h = g h equalOnList t f g


h
R: Type ?u.9724

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.9739

inst✝: DecidableEq X

l: List X

f, g: XR

h: X

t: List X

hs: equalOnList t f g

c: ¬f h = g h


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: XR

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


h
R: Type ?u.9724

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.9739

inst✝: DecidableEq X

l: List X

f, g: XR

h: X

t: List X

hs: equalOnList t f g

c: ¬f h = g h


Decidable (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: XR

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: XR

h: X

t: List X

hs: ¬equalOnList t f g


isFalse
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: XR

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: XR

h: X

t: List X

hs: ¬equalOnList t f g


isFalse
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: XR

h: X

t: List X

hs: ¬equalOnList t f g

contra: f h = g h equalOnList t f g


isFalse.h
R: Type ?u.9724

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.9739

inst✝: DecidableEq X

l: List X

f, g: XR

h: X

t: List X

hs: ¬equalOnList t f g


isFalse
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: XR

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.h
R: Type ?u.9724

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.9739

inst✝: DecidableEq X

l: List X

f, g: XR

h: X

t: List X

hs: ¬equalOnList t f g


isFalse
Decidable (f h = g h equalOnList t f g)

Goals accomplished! 🐙
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. -/ def
eqlCoords: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → FormalSum R XFormalSum R XProp
eqlCoords
(
R: Type
R
X: Type
X
:
Type: Type 1
Type
) [
Ring: Type ?u.10931 → Type ?u.10931
Ring
R: Type
R
] [
DecidableEq: Sort ?u.10934 → Sort (max1?u.10934)
DecidableEq
X: Type
X
](
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.10953) → Type ?u.10952 → [inst : Ring R] → Type (max?u.10952?u.10953)
FormalSum
R: Type
R
X: Type
X
) :
Prop: Type
Prop
:=
s₁: FormalSum R X
s₁
.
coords: {R : Type ?u.10968} → [inst : Ring R] → {X : Type ?u.10967} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
=
s₂: FormalSum R X
s₂
.
coords: {R : Type ?u.11014} → [inst : Ring R] → {X : Type ?u.11013} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
namespace eqlCoords /-- Relation by equal coordinates is reflexive. -/ theorem
refl: ∀ (s : FormalSum R X), eqlCoords R X s s
refl
(
s: FormalSum R X
s
:
FormalSum: (R : Type ?u.11086) → Type ?u.11085 → [inst : Ring R] → Type (max?u.11085?u.11086)
FormalSum
R: Type ?u.11058
R
X: Type ?u.11073
X
) :
eqlCoords: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → FormalSum R XFormalSum R XProp
eqlCoords
R: Type ?u.11058
R
X: Type ?u.11073
X
s: FormalSum R X
s
s: FormalSum R X
s
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s: FormalSum R X


eqlCoords R X s s

Goals accomplished! 🐙
/-- Relation by equal coordinates is symmetric. -/ theorem
symm: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] {s₁ s₂ : FormalSum R X}, eqlCoords R X s₁ s₂eqlCoords R X s₂ s₁
symm
{
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.11199) → Type ?u.11198 → [inst : Ring R] → Type (max?u.11198?u.11199)
FormalSum
R: Type ?u.11162
R
X: Type ?u.11177
X
} :
eqlCoords: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → FormalSum R XFormalSum R XProp
eqlCoords
R: Type ?u.11162
R
X: Type ?u.11177
X
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
eqlCoords: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → FormalSum R XFormalSum R XProp
eqlCoords
R: Type ?u.11162
R
X: Type ?u.11177
X
s₂: FormalSum R X
s₂
s₁: FormalSum R X
s₁
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X


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₂


eqlCoords R X s₂ s₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X


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₁ x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X


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₂

x: X


h
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X


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₂

x: X


h.h
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X


eqlCoords R X s₁ s₂eqlCoords R X s₂ s₁

Goals accomplished! 🐙
/-- Relation by equal coordinates is transitive. -/ theorem
trans: ∀ {s₁ s₂ s₃ : FormalSum R X}, eqlCoords R X s₁ s₂eqlCoords R X s₂ s₃eqlCoords R X s₁ s₃
trans
{
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
s₃: FormalSum R X
s₃
:
FormalSum: (R : Type ?u.11374) → Type ?u.11373 → [inst : Ring R] → Type (max?u.11373?u.11374)
FormalSum
R: Type ?u.11337
R
X: Type ?u.11352
X
} :
eqlCoords: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → FormalSum R XFormalSum R XProp
eqlCoords
R: Type ?u.11337
R
X: Type ?u.11352
X
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
eqlCoords: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → FormalSum R XFormalSum R XProp
eqlCoords
R: Type ?u.11337
R
X: Type ?u.11352
X
s₂: FormalSum R X
s₂
s₃: FormalSum R X
s₃
eqlCoords: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → FormalSum R XFormalSum R XProp
eqlCoords
R: Type ?u.11337
R
X: Type ?u.11352
X
s₁: FormalSum R X
s₁
s₃: FormalSum R X
s₃
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, s₃: FormalSum R X


eqlCoords R X s₁ s₂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₃


eqlCoords R X s₁ s₃
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, s₃: FormalSum R X


eqlCoords R X s₁ s₂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₃ x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, s₃: FormalSum R X


eqlCoords R X s₁ s₂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₃

x: X


h
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, s₃: FormalSum R X


eqlCoords R X s₁ s₂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₃

x: X

l₁: FormalSum.coords s₁ x = FormalSum.coords s₂ x


h
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, s₃: FormalSum R X


eqlCoords R X s₁ s₂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₃

x: X

l₁: FormalSum.coords s₁ x = FormalSum.coords s₂ x

l₂: FormalSum.coords s₂ x = FormalSum.coords s₃ x


h
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, s₃: FormalSum R X


eqlCoords R X s₁ s₂eqlCoords R X s₂ s₃eqlCoords R X s₁ s₃

Goals accomplished! 🐙
/-- Relation by equal coordinates is an equivalence relation. -/ theorem
is_equivalence: Equivalence (eqlCoords R X)
is_equivalence
:
Equivalence: {α : Sort ?u.11582} → (ααProp) → Prop
Equivalence
(
eqlCoords: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → FormalSum R XFormalSum R XProp
eqlCoords
R: Type ?u.11555
R
X: Type ?u.11570
X
) := { refl :=
refl: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] (s : FormalSum R X), eqlCoords R X s s
refl
, symm :=
symm: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] {s₁ s₂ : FormalSum R X}, eqlCoords R X s₁ s₂eqlCoords R X s₂ s₁
symm
, trans :=
trans: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] {s₁ s₂ s₃ : FormalSum R X}, eqlCoords R X s₁ s₂eqlCoords R X s₂ s₃eqlCoords R X s₁ s₃
trans
} end eqlCoords /-- Setoid based on equal coordinates. -/ instance
formalSumSetoid: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → Setoid (FormalSum R X)
formalSumSetoid
(
R: Type
R
X: Type
X
:
Type: Type 1
Type
) [
Ring: Type ?u.11867 → Type ?u.11867
Ring
R: Type
R
] [
DecidableEq: Sort ?u.11870 → Sort (max1?u.11870)
DecidableEq
X: Type
X
] :
Setoid: Sort ?u.11879 → Sort (max1?u.11879)
Setoid
(
FormalSum: (R : Type ?u.11881) → Type ?u.11880 → [inst : Ring R] → Type (max?u.11880?u.11881)
FormalSum
R: Type
R
X: Type
X
) := ⟨
eqlCoords: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → FormalSum R XFormalSum R XProp
eqlCoords
R: Type
R
X: Type
X
,
eqlCoords.is_equivalence: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X], Equivalence (eqlCoords R X)
eqlCoords.is_equivalence
⟩ /-- Quotient free module. -/ abbrev
FreeModule: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → ?m.12113 R X
FreeModule
(
R: Type
R
X: Type
X
:
Type: Type 1
Type
) [
Ring: Type ?u.12100 → Type ?u.12100
Ring
R: Type
R
] [
DecidableEq: Sort ?u.12103 → Sort (max1?u.12103)
DecidableEq
X: Type
X
] :=
Quotient: {α : Sort ?u.12121} → Setoid αSort ?u.12121
Quotient
(
formalSumSetoid: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq X] → Setoid (FormalSum R X)
formalSumSetoid
R: Type
R
X: Type
X
) notation
R: ?m.14433
R
"["
G: ?m.14424
G
"]" =>
FreeModule: (R X : Type) → [inst : Ring R] → [inst : DecidableEq X] → Type
FreeModule
R: ?m.15230
R
G: ?m.12378
G
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] def
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₂)
decideEqualQuotient
(
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.20888) → Type ?u.20887 → [inst : Ring R] → Type (max?u.20887?u.20888)
FormalSum
R: Type ?u.20851
R
X: Type ?u.20866
X
) :
Decidable: PropType
Decidable
(@
Eq: {α : Sort ?u.20894} → ααProp
Eq
(
R: Type ?u.20851
R
[
X: Type ?u.20866
X
]) ⟦
s₁: FormalSum R X
s₁
⟧ ⟦
s₂: FormalSum R X
s₂
⟧) := if
ch₁: ?m.21212
ch₁
:
equalOnList: {R : Type ?u.20964} → {X : Type ?u.20963} → List X(XR) → (XR) → Prop
equalOnList
s₁: FormalSum R X
s₁
.
support: {R : Type ?u.20968} → [inst : Ring R] → {X : Type ?u.20967} → FormalSum R XList X
support
s₁: FormalSum R X
s₁
.
coords: {R : Type ?u.20982} → [inst : Ring R] → {X : Type ?u.20981} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
s₂: FormalSum R X
s₂
.
coords: {R : Type ?u.21003} → [inst : Ring R] → {X : Type ?u.21002} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
then if
ch₂: ?m.21191
ch₂
:
equalOnList: {R : Type ?u.21087} → {X : Type ?u.21086} → List X(XR) → (XR) → Prop
equalOnList
s₂: FormalSum R X
s₂
.
support: {R : Type ?u.21091} → [inst : Ring R] → {X : Type ?u.21090} → FormalSum R XList X
support
s₁: FormalSum R X
s₁
.
coords: {R : Type ?u.21101} → [inst : Ring R] → {X : Type ?u.21100} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
s₂: FormalSum R X
s₂
.
coords: {R : Type ?u.21122} → [inst : Ring R] → {X : Type ?u.21121} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
then
Decidable.isTrue: {p : Prop} → pDecidable p
Decidable.isTrue
(
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₂)


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
s₁ 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₂)


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₂ x
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₂)


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.h
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₂)


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.h
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


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


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


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


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



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


a.h
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


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


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


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


a
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



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₂ x


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

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₂ x


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



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


a.h
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


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


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


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


a
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



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


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

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₂ x


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



Goals accomplished! 🐙
) else
Decidable.isFalse: {p : Prop} → ¬pDecidable p
Decidable.isFalse
(
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₂)


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₂)


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₂)



Goals accomplished! 🐙
) else
Decidable.isFalse: {p : Prop} → ¬pDecidable p
Decidable.isFalse
(
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₂)


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₂)


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₂)



Goals accomplished! 🐙
) /-! ### Lift to quotient -/ /-- Boolean equality on support. -/ def
beqOnSupport: List X(XR) → (XR) → Bool
beqOnSupport
(
l: List X
l
:
List: Type ?u.22479 → Type ?u.22479
List
X: Type ?u.22467
X
) (
f: XR
f
g: XR
g
:
X: Type ?u.22467
X
R: Type ?u.22452
R
) :
Bool: Type
Bool
:=
l: List X
l
.
all: {α : Type ?u.22494} → List α(αBool) → Bool
all
<| fun
x: ?m.22501
x
=>
decide: (p : Prop) → [h : Decidable p] → Bool
decide
(
f: XR
f
x: ?m.22501
x
=
g: XR
g
x: ?m.22501
x
) /-- Equality on support from boolean equality. -/ theorem
eql_on_support_of_true: ∀ {l : List X} {f g : XR}, beqOnSupport l f g = trueequalOnList l f g
eql_on_support_of_true
{
l: List X
l
:
List: Type ?u.22647 → Type ?u.22647
List
X: Type ?u.22635
X
} {
f: XR
f
g: XR
g
:
X: Type ?u.22635
X
R: Type ?u.22620
R
} :
beqOnSupport: {R : Type ?u.22661} → [inst : DecidableEq R] → {X : Type ?u.22660} → List X(XR) → (XR) → Bool
beqOnSupport
l: List X
l
f: XR
f
g: XR
g
=
true: Bool
true
equalOnList: {R : Type ?u.22719} → {X : Type ?u.22718} → List X(XR) → (XR) → Prop
equalOnList
l: List X
l
f: XR
f
g: XR
g
:=
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR


beqOnSupport l f g = trueequalOnList l f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

hyp: beqOnSupport l f g = true


R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR


beqOnSupport l f g = trueequalOnList l f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

hyp: beqOnSupport l f g = true


R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

hyp: beqOnSupport [] f g = true


nil

Goals accomplished! 🐙
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

l: List X

f, g: XR

hyp: beqOnSupport l f g = true


R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

h: X

t: List X

step: beqOnSupport t f g = trueequalOnList t f g

hyp: beqOnSupport (h :: t) f g = true


cons
equalOnList (h :: t) f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

h: X

t: List X

step: beqOnSupport t f g = trueequalOnList t f g

hyp: beqOnSupport (h :: t) f g = true


cons
f h = g h equalOnList t f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

h: X

t: List X

step: beqOnSupport t f g = trueequalOnList t f g

hyp: beqOnSupport (h :: t) f g = true


cons
equalOnList (h :: t) f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

h: X

t: List X

step: beqOnSupport t f g = trueequalOnList t f g

hyp: f h = g h List.foldr (fun a r => decide (f a = g a) && r) true t = true


cons
f h = g h equalOnList t f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

h: X

t: List X

step: beqOnSupport t f g = trueequalOnList t f g

hyp: beqOnSupport (h :: t) f g = true


cons
equalOnList (h :: t) f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

h: X

t: List X

step: beqOnSupport t f g = trueequalOnList 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


cons
f h = g h equalOnList t f g
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

f, g: XR

h: X

t: List X

step: beqOnSupport t f g = trueequalOnList t f g

hyp: beqOnSupport (h :: t) f g = true


cons
equalOnList (h :: t) f g

Goals accomplished! 🐙
/-- Boolean equality on support gives equal quotients. -/ theorem
eqlquot_of_beq_support: ∀ (s₁ s₂ : FormalSum R X), beqOnSupport (FormalSum.support s₁) (FormalSum.coords s₁) (FormalSum.coords s₂) = truebeqOnSupport (FormalSum.support s₂) (FormalSum.coords s₁) (FormalSum.coords s₂) = trueQuotient.mk (formalSumSetoid R X) s₁ = Quotient.mk (formalSumSetoid R X) s₂
eqlquot_of_beq_support
(
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.23659) → Type ?u.23658 → [inst : Ring R] → Type (max?u.23658?u.23659)
FormalSum
R: Type ?u.23622
R
X: Type ?u.23637
X
) (c₁ :
beqOnSupport: {R : Type ?u.23666} → [inst : DecidableEq R] → {X : Type ?u.23665} → List X(XR) → (XR) → Bool
beqOnSupport
s₁: FormalSum R X
s₁
.
support: {R : Type ?u.23706} → [inst : Ring R] → {X : Type ?u.23705} → FormalSum R XList X
support
s₁: FormalSum R X
s₁
.
coords: {R : Type ?u.23753} → [inst : Ring R] → {X : Type ?u.23752} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
s₂: FormalSum R X
s₂
.
coords: {R : Type ?u.23849} → [inst : Ring R] → {X : Type ?u.23848} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
) (c₂ :
beqOnSupport: {R : Type ?u.23916} → [inst : DecidableEq R] → {X : Type ?u.23915} → List X(XR) → (XR) → Bool
beqOnSupport
s₂: FormalSum R X
s₂
.
support: {R : Type ?u.23955} → [inst : Ring R] → {X : Type ?u.23954} → FormalSum R XList X
support
s₁: FormalSum R X
s₁
.
coords: {R : Type ?u.23998} → [inst : Ring R] → {X : Type ?u.23997} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
s₂: FormalSum R X
s₂
.
coords: {R : Type ?u.24079} → [inst : Ring R] → {X : Type ?u.24078} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
) : @
Eq: {α : Sort ?u.24143} → ααProp
Eq
(
R: Type ?u.23622
R
[
X: Type ?u.23637
X
]) ⟦
s₁: FormalSum R X
s₁
⟧ ⟦
s₂: FormalSum R X
s₂
⟧ :=

Goals accomplished! 🐙

Goals accomplished! 🐙

Goals accomplished! 🐙

Goals accomplished! 🐙

Goals accomplished! 🐙
/-- Boolean equality for the quotient via lifting -/ def
beq_quot: R[X]R[X]Bool
beq_quot
: (
x₁: R[X]
x₁
x₂: R[X]
x₂
:
R: Type ?u.25078
R
[
X: Type ?u.25093
X
]) →
Bool: Type
Bool
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]R[X]Bool
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (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


R[X]R[X]Bool
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₂


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]R[X]Bool
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₂


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]R[X]Bool
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₂


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]R[X]Bool
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₂


p
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
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₂


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₂


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₂


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₂


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₂


p
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
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₂


p
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
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₂


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₂


p
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
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₂


p
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
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₂


p
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
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₂


p
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
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₂


p
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. -/ lemma
eq_of_beq_true: ∀ {R : Type} [inst : Ring R] [inst_1 : DecidableEq R] {X : Type} [inst_2 : DecidableEq X] (x₁ x₂ : R[X]), beq_quot x₁ x₂ = truex₁ = x₂
eq_of_beq_true
: ∀
x₁: R[X]
x₁
x₂: R[X]
x₂
:
R: Type ?u.25781
R
[
X: Type ?u.25796
X
],
x₁: R[X]
x₁
.
beq_quot: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → R[X]R[X]Bool
beq_quot
x₂: R[X]
x₂
=
true: Bool
true
x₁: R[X]
x₁
=
x₂: R[X]
x₂
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (x₁ x₂ : R[X]), beq_quot x₁ x₂ = truex₁ = x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (x₁ x₂ : R[X]), beq_quot x₁ x₂ = truex₁ = x₂
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


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (x₁ x₂ : R[X]), beq_quot x₁ x₂ = truex₁ = x₂
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₂


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (x₁ x₂ : R[X]), beq_quot x₁ x₂ = truex₁ = x₂

Goals accomplished! 🐙
/-- Boolean inequality for the quotient is inequality. -/ lemma
neq_of_beq_false: ∀ {R : Type} [inst : Ring R] [inst_1 : DecidableEq R] {X : Type} [inst_2 : DecidableEq X] (x₁ x₂ : R[X]), beq_quot x₁ x₂ = false¬x₁ = x₂
neq_of_beq_false
: ∀
x₁: R[X]
x₁
x₂: R[X]
x₂
:
R: Type ?u.26442
R
[
X: Type ?u.26457
X
],
x₁: R[X]
x₁
.
beq_quot: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → R[X]R[X]Bool
beq_quot
x₂: R[X]
x₂
=
false: Bool
false
Not: PropProp
Not
(
x₁: R[X]
x₁
=
x₂: R[X]
x₂
) :=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (x₁ x₂ : R[X]), beq_quot x₁ x₂ = false¬x₁ = x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (x₁ x₂ : R[X]), beq_quot x₁ x₂ = false¬x₁ = x₂
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


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (x₁ x₂ : R[X]), beq_quot x₁ x₂ = false¬x₁ = x₂
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₂


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (x₁ x₂ : R[X]), beq_quot x₁ x₂ = false¬x₁ = x₂

Goals accomplished! 🐙
/-- Decidable equality for the free module. -/ @[instance] def
decEq: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → (x₁ x₂ : R[X]) → Decidable (x₁ = x₂)
decEq
(
x₁: R[X]
x₁
x₂: R[X]
x₂
:
R: Type ?u.27114
R
[
X: Type ?u.27129
X
]) :
Decidable: PropType
Decidable
(
x₁: R[X]
x₁
=
x₂: R[X]
x₂
) :=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


Decidable (x₁ = x₂)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


Decidable (x₁ = x₂)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

p: beq_quot x₁ x₂ = true


Decidable (x₁ = x₂)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


Decidable (x₁ = x₂)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

p: beq_quot x₁ x₂ = true


h
x₁ = x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

p: beq_quot x₁ x₂ = true


Decidable (x₁ = x₂)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

p: beq_quot x₁ x₂ = true


h.a
beq_quot x₁ x₂ = true
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

p: beq_quot x₁ x₂ = true


Decidable (x₁ = x₂)

Goals accomplished! 🐙
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


Decidable (x₁ = x₂)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

p: beq_quot x₁ x₂ = false


Decidable (x₁ = x₂)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


Decidable (x₁ = x₂)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

p: beq_quot x₁ x₂ = false


h
¬x₁ = x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

p: beq_quot x₁ x₂ = false


Decidable (x₁ = x₂)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

p: beq_quot x₁ x₂ = false


h.a
beq_quot x₁ x₂ = false
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

p: beq_quot x₁ x₂ = false


Decidable (x₁ = x₂)

Goals accomplished! 🐙
/-! ### Induced coordinates on the quotient. -/ /-- Coordinates are well defined on the quotient. -/ theorem
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₂
equal_coords_of_approx
(
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.27768) → Type ?u.27767 → [inst : Ring R] → Type (max?u.27767?u.27768)
FormalSum
R: Type ?u.27740
R
X: Type ?u.27755
X
):
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
s₁: FormalSum R X
s₁
.
coords: {R : Type ?u.27850} → [inst : Ring R] → {X : Type ?u.27849} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
=
s₂: FormalSum R X
s₂
.
coords: {R : Type ?u.27900} → [inst : Ring R] → {X : Type ?u.27899} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X


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₂


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X


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₂ x
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₂ x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X


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₂

x₀: X


h
FormalSum.coords s₁ x₀ = FormalSum.coords s₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X


s₁ s₂FormalSum.coords s₁ = FormalSum.coords s₂

Goals accomplished! 🐙
/-- coordinates for the quotient -/ def
coordinates: XR[X]R
coordinates
(
x₀: X
x₀
:
X: Type ?u.28025
X
) :
R: Type ?u.28010
R
[
X: Type ?u.28025
X
] →
R: Type ?u.28010
R
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X


R[X]R
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X


∀ (a b : FormalSum R X), a bFormalSum.coords a x₀ = FormalSum.coords b x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X


R[X]R
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X

a, b: FormalSum R X


a bFormalSum.coords a x₀ = FormalSum.coords b x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X


R[X]R
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X

a, b: FormalSum R X

hyp: a b


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X


R[X]R
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 b


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X


R[X]R

Goals accomplished! 🐙
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: RFormalSum R XFormalSum R X
scmul
:
R: Type ?u.28436
R
FormalSum: (R : Type ?u.28467) → Type ?u.28466 → [inst : Ring R] → Type (max?u.28466?u.28467)
FormalSum
R: Type ?u.28436
R
X: Type ?u.28451
X
FormalSum: (R : Type ?u.28475) → Type ?u.28474 → [inst : Ring R] → Type (max?u.28474?u.28475)
FormalSum
R: Type ?u.28436
R
X: Type ?u.28451
X
| _, [] =>
[]: List ?m.28508
[]
|
r: R
r
, (
h: R × X
h
::
t: List (R × X)
t
) => let (
a₀: R
a₀
,
x₀: X
x₀
) :=
h: R × X
h
(
r: R
r
*
a₀: R
a₀
,
x₀: X
x₀
) :: (
scmul: RFormalSum R XFormalSum R X
scmul
r: R
r
t: List (R × X)
t
) /-- Coordinates after scalar multiplication. -/ theorem
scmul_coords: ∀ (r : R) (s : FormalSum R X) (x₀ : X), r * coords s x₀ = coords (scmul r s) x₀
scmul_coords
(
r: R
r
:
R: Type ?u.29241
R
) (
s: FormalSum R X
s
:
FormalSum: (R : Type ?u.29271) → Type ?u.29270 → [inst : Ring R] → Type (max?u.29270?u.29271)
FormalSum
R: Type ?u.29241
R
X: Type ?u.29256
X
) (
x₀: X
x₀
:
X: Type ?u.29256
X
) : (
r: R
r
*
s: FormalSum R X
s
.
coords: {R : Type ?u.29286} → [inst : Ring R] → {X : Type ?u.29285} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x₀: X
x₀
) = (
s: FormalSum R X
s
.
scmul: {R : Type ?u.29342} → [inst : Ring R] → {X : Type ?u.29341} → RFormalSum R XFormalSum R X
scmul
r: R
r
).
coords: {R : Type ?u.29354} → [inst : Ring R] → {X : Type ?u.29353} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x₀: X
x₀
:=
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

r: R

s: FormalSum R X

x₀: X


r * coords s x₀ = coords (scmul r s) x₀
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

r: R

s: FormalSum R X

x₀: X


r * coords s x₀ = coords (scmul r s) x₀
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

r: R

x₀: X


nil
r * coords [] x₀ = coords (scmul r []) x₀

Goals accomplished! 🐙
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

r: R

s: FormalSum R X

x₀: X


r * coords s x₀ = coords (scmul r s) x₀
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

r: R

x₀: X

h: R × X

t: List (R × X)

ih: r * coords t x₀ = coords (scmul r t) x₀


cons
r * coords (h :: t) x₀ = coords (scmul r (h :: t)) x₀

Goals accomplished! 🐙
/-- Scalar multiplication on the Free Module. -/ def
FreeModule.scmul: RR[X]R[X]
FreeModule.scmul
:
R: Type ?u.31052
R
R: Type ?u.31052
R
[
X: Type ?u.31067
X
] →
R: Type ?u.31052
R
[
X: Type ?u.31067
X
] :=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


RR[X]R[X]
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

r: R


R[X]R[X]
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


RR[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 XR[X]


R[X]R[X]
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


RR[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 XR[X]


∀ (a b : FormalSum R X), a bf a = f b
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


RR[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 XR[X]

s₁, s₂: FormalSum R X


s₁ s₂f s₁ = f s₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


RR[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 XR[X]

s₁, s₂: FormalSum R X


s₁ s₂FormalSum.scmul r s₁ FormalSum.scmul r s₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


RR[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 XR[X]

s₁, s₂: FormalSum R X

hypeq: s₁ s₂


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


RR[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 XR[X]

s₁, s₂: FormalSum R X

hypeq: s₁ s₂


h
∀ (x : X), coords (FormalSum.scmul r s₁) x = coords (FormalSum.scmul r s₂) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


RR[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 XR[X]

s₁, s₂: FormalSum R X

hypeq: s₁ s₂

x₀: X


h
coords (FormalSum.scmul r s₁) x₀ = coords (FormalSum.scmul r s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


RR[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 XR[X]

s₁, s₂: FormalSum R X

hypeq: s₁ s₂

x₀: X

l₁: r * coords s₁ x₀ = coords (FormalSum.scmul r s₁) x₀


h
coords (FormalSum.scmul r s₁) x₀ = coords (FormalSum.scmul r s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


RR[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 XR[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
coords (FormalSum.scmul r s₁) x₀ = coords (FormalSum.scmul r s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


RR[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 XR[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
coords (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 XR[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
r * 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 XR[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
coords (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 XR[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
r * coords s₁ x₀ = r * coords 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 XR[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
r * coords s₁ x₀ = r * coords s₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


RR[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 XR[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
r * coords s₁ x₀ = r * coords 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 XR[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
r * coords s₂ x₀ = r * coords s₂ x₀

Goals accomplished! 🐙
/-! ### Addition: on formal sums and on the quotient. -/ /-- Coordinates add when appending. -/ theorem
append_coords: ∀ {R : Type u_1} [inst : Ring R] {X : Type u_2} [inst_1 : DecidableEq X] (s₁ s₂ : FormalSum R X) (x₀ : X), coords s₁ x₀ + coords s₂ x₀ = coords (s₁ ++ s₂) x₀
append_coords
(
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.32372) → Type ?u.32371 → [inst : Ring R] → Type (max?u.32371?u.32372)
FormalSum
R: Type ?u.32344
R
X: Type ?u.32359
X
) (
x₀: X
x₀
:
X: Type ?u.32359
X
) : (
s₁: FormalSum R X
s₁
.
coords: {R : Type ?u.32394} → [inst : Ring R] → {X : Type ?u.32393} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x₀: X
x₀
) + (
s₂: FormalSum R X
s₂
.
coords: {R : Type ?u.32450} → [inst : Ring R] → {X : Type ?u.32449} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x₀: X
x₀
) = (
s₁: FormalSum R X
s₁
++
s₂: FormalSum R X
s₂
).
coords: {R : Type ?u.32537} → [inst : Ring R] → {X : Type ?u.32536} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x₀: X
x₀
:=
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

x₀: X


coords s₁ x₀ + coords s₂ x₀ = coords (s₁ ++ s₂) x₀
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

x₀: X


coords s₁ x₀ + coords s₂ x₀ = coords (s₁ ++ s₂) x₀
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

s₂: FormalSum R X

x₀: X


nil
coords [] x₀ + coords s₂ x₀ = coords ([] ++ s₂) x₀

Goals accomplished! 🐙
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

x₀: X


coords s₁ x₀ + coords s₂ x₀ = coords (s₁ ++ s₂) x₀
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

s₂: FormalSum R X

x₀: X

h: R × X

t: List (R × X)

ih: coords t x₀ + coords s₂ x₀ = coords (t ++ s₂) x₀


cons
coords (h :: t) x₀ + coords s₂ x₀ = coords (h :: t ++ s₂) x₀

Goals accomplished! 🐙
/-- Coordinates well-defined up to equivalence. -/ theorem
append_equiv: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] (s₁ s₂ t₁ t₂ : FormalSum R X), s₁ s₂t₁ t₂s₁ ++ t₁ s₂ ++ t₂
append_equiv
(
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
t₁: FormalSum R X
t₁
t₂: FormalSum R X
t₂
:
FormalSum: (R : Type ?u.33535) → Type ?u.33534 → [inst : Ring R] → Type (max?u.33534?u.33535)
FormalSum
R: Type ?u.33507
R
X: Type ?u.33522
X
) :(
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
) → (
t₁: FormalSum R X
t₁
t₂: FormalSum R X
t₂
) →
s₁: FormalSum R X
s₁
++
t₁: FormalSum R X
t₁
s₂: FormalSum R X
s₂
++
t₂: FormalSum R X
t₂
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X


s₁ s₂t₁ t₂s₁ ++ t₁ s₂ ++ t₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂


s₁ ++ t₁ s₂ ++ t₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X


s₁ s₂t₁ t₂s₁ ++ t₁ s₂ ++ t₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂


h
∀ (x : X), coords (s₁ ++ t₁) x = coords (s₂ ++ t₂) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X


s₁ s₂t₁ t₂s₁ ++ t₁ s₂ ++ t₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X


h
coords (s₁ ++ t₁) x₀ = coords (s₂ ++ t₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X


s₁ s₂t₁ t₂s₁ ++ t₁ s₂ ++ t₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X


h
coords (s₁ ++ t₁) x₀ = coords (s₂ ++ t₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X


h
coords s₁ x₀ + coords t₁ x₀ = coords (s₂ ++ t₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X


h
coords s₁ x₀ + coords t₁ x₀ = coords (s₂ ++ t₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X


s₁ s₂t₁ t₂s₁ ++ t₁ s₂ ++ t₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X


h
coords s₁ x₀ + coords t₁ x₀ = coords (s₂ ++ t₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X


h
coords s₁ x₀ + coords t₁ x₀ = coords s₂ x₀ + coords t₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X


h
coords s₁ x₀ + coords t₁ x₀ = coords s₂ x₀ + coords t₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X


s₁ s₂t₁ t₂s₁ ++ t₁ s₂ ++ t₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X


h
coords s₁ x₀ + coords t₁ x₀ = coords s₂ x₀ + coords t₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X


coords s₁ x₀ = coords s₂ x₀

Goals accomplished! 🐙
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X


s₁ s₂t₁ t₂s₁ ++ t₁ s₂ ++ t₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X

ls: coords s₁ x₀ = coords s₂ x₀


h
coords s₁ x₀ + coords t₁ x₀ = coords s₂ x₀ + coords t₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X

ls: coords s₁ x₀ = coords s₂ x₀


coords t₁ x₀ = coords t₂ x₀

Goals accomplished! 🐙
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X


s₁ s₂t₁ t₂s₁ ++ t₁ s₂ ++ t₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X

ls: coords s₁ x₀ = coords s₂ x₀

lt: coords t₁ x₀ = coords t₂ x₀


h
coords s₁ x₀ + coords t₁ x₀ = coords s₂ x₀ + coords t₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X

ls: coords s₁ x₀ = coords s₂ x₀

lt: coords t₁ x₀ = coords t₂ x₀


h
coords s₁ x₀ + coords t₁ x₀ = coords s₁ x₀ + coords t₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X

ls: coords s₁ x₀ = coords s₂ x₀

lt: coords t₁ x₀ = coords t₂ x₀


h
coords s₁ x₀ + coords t₁ x₀ = coords s₂ x₀ + coords t₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂, t₁, t₂: FormalSum R X

eqv₁: s₁ s₂

eqv₂: t₁ t₂

x₀: X

ls: coords s₁ x₀ = coords s₂ x₀

lt: coords t₁ x₀ = coords t₂ x₀


h
coords s₁ x₀ + coords t₁ x₀ = coords s₁ x₀ + coords t₁ x₀

Goals accomplished! 🐙
end FormalSum /-- Addition of elements in the free module. -/ def
FreeModule.add: R[X]R[X]R[X]
FreeModule.add
:
R: Type ?u.34280
R
[
X: Type ?u.34295
X
] →
R: Type ?u.34280
R
[
X: Type ?u.34295
X
] →
R: Type ?u.34280
R
[
X: Type ?u.34295
X
] :=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]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 XFormalSum R XR[X]


R[X]R[X]R[X]
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]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 XFormalSum R XR[X]


∀ (a₁ b₁ a₂ b₂ : FormalSum R X), a₁ a₂b₁ b₂f a₁ b₁ = f a₂ b₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]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 XFormalSum R XR[X]

a₁, b₁, a₂, b₂: FormalSum R X


a₁ a₂b₁ b₂f a₁ b₁ = f a₂ b₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]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 XFormalSum R XR[X]

a₁, b₁, a₂, b₂: FormalSum R X


a₁ a₂b₁ b₂a₁ ++ b₁ a₂ ++ b₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]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 XFormalSum R XR[X]

a₁, b₁, a₂, b₂: FormalSum R X

eq₁: a₁ a₂

eq₂: b₁ b₂


a₁ ++ b₁ a₂ ++ b₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]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 XFormalSum R XR[X]

a₁, b₁, a₂, b₂: FormalSum R X

eq₁: a₁ a₂

eq₂: b₁ b₂


h
∀ (x : X), coords (a₁ ++ b₁) x = coords (a₂ ++ b₂) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]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 XFormalSum R XR[X]

a₁, b₁, a₂, b₂: FormalSum R X

eq₁: a₁ a₂

eq₂: b₁ b₂

x₀: X


h
coords (a₁ ++ b₁) x₀ = coords (a₂ ++ b₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]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 XFormalSum R XR[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₀


h
coords (a₁ ++ b₁) x₀ = coords (a₂ ++ b₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]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 XFormalSum R XR[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₀


h
coords (a₁ ++ b₁) x₀ = coords (a₂ ++ b₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]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 XFormalSum R XR[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₀


h
coords (a₁ ++ b₁) x₀ = coords (a₂ ++ b₂) 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 XFormalSum R XR[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₀


h
coords a₁ x₀ + coords b₁ x₀ = coords (a₂ ++ b₂) 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 XFormalSum R XR[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₀


h
coords (a₁ ++ b₁) x₀ = coords (a₂ ++ b₂) 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 XFormalSum R XR[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₀


h
coords a₁ x₀ + coords b₁ x₀ = coords a₂ x₀ + coords b₂ 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 XFormalSum R XR[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₀


h
coords a₁ x₀ + coords b₁ x₀ = coords a₂ x₀ + coords b₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


R[X]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 XFormalSum R XR[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₀


h
coords a₁ x₀ + coords b₁ x₀ = coords a₂ x₀ + coords b₂ 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 XFormalSum R XR[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₀


h
coords a₂ x₀ + coords b₁ x₀ = coords a₂ x₀ + coords b₂ 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 XFormalSum R XR[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₀


h
coords a₁ x₀ + coords b₁ x₀ = coords a₂ x₀ + coords b₂ 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 XFormalSum R XR[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₀


h
coords a₂ x₀ + coords b₂ x₀ = coords a₂ x₀ + coords b₂ x₀

Goals accomplished! 🐙
instance: {R : Type} → [inst : Ring R] → {X : Type} → [inst_1 : DecidableEq X] → Add (R[X])
instance
:
Add: Type ?u.36102 → Type ?u.36102
Add
(
R: Type ?u.36075
R
[
X: Type ?u.36090
X
]) := ⟨
FreeModule.add: {R : Type} → [inst : Ring R] → {X : Type} → [inst_1 : DecidableEq X] → R[X]R[X]R[X]
FreeModule.add
instance: {R : Type} → [inst : Ring R] → {X : Type} → [inst_1 : DecidableEq X] → HSMul R (R[X]) (R[X])
instance
:
HSMul: Type ?u.36343 → Type ?u.36342 → outParam (Type ?u.36341)Type (max(max?u.36343?u.36342)?u.36341)
HSMul
R: Type ?u.36314
R
(
R: Type ?u.36314
R
[
X: Type ?u.36329
X
]) (
R: Type ?u.36314
R
[
X: Type ?u.36329
X
]) := ⟨
FreeModule.scmul: {R : Type} → [inst : Ring R] → {X : Type} → [inst_1 : DecidableEq X] → RR[X]R[X]
FreeModule.scmul
namespace FormalSum /-! ### Properties of operations on formal sums. -/ /-- Associativity for scalar multiplication for formal sums. -/ theorem
action: ∀ (a b : R) (s : FormalSum R X), scmul a (scmul b s) = scmul (a * b) s
action
(
a: R
a
b: R
b
:
R: Type ?u.36592
R
) (
s: FormalSum R X
s
:
FormalSum: (R : Type ?u.36624) → Type ?u.36623 → [inst : Ring R] → Type (max?u.36623?u.36624)
FormalSum
R: Type ?u.36592
R
X: Type ?u.36607
X
) : (
s: FormalSum R X
s
.
scmul: {R : Type ?u.36634} → [inst : Ring R] → {X : Type ?u.36633} → RFormalSum R XFormalSum R X
scmul
b: R
b
).
scmul: {R : Type ?u.36649} → [inst : Ring R] → {X : Type ?u.36648} → RFormalSum R XFormalSum R X
scmul
a: R
a
=
s: FormalSum R X
s
.
scmul: {R : Type ?u.36661} → [inst : Ring R] → {X : Type ?u.36660} → RFormalSum R XFormalSum R X
scmul
(
a: R
a
*
b: R
b
) :=
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

a, b: R

s: FormalSum R X


scmul a (scmul b s) = scmul (a * b) s
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

a, b: R

s: FormalSum R X


scmul a (scmul b s) = scmul (a * b) s
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

a, b: R


nil
scmul a (scmul b []) = scmul (a * b) []

Goals accomplished! 🐙
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

a, b: R

s: FormalSum R X


scmul a (scmul b s) = scmul (a * b) s
R: Type u_1

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_2

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a (scmul b t) = scmul (a * b) t


cons
scmul a (scmul b (h :: t)) = scmul (a * b) (h :: t)

Goals accomplished! 🐙
/-- Distributivity for the module operations. -/ theorem
act_sum: ∀ (a b : R) (s : FormalSum R X), scmul a s ++ scmul b s scmul (a + b) s
act_sum
(
a: R
a
b: R
b
:
R: Type ?u.37203
R
) (
s: FormalSum R X
s
:
FormalSum: (R : Type ?u.37235) → Type ?u.37234 → [inst : Ring R] → Type (max?u.37234?u.37235)
FormalSum
R: Type ?u.37203
R
X: Type ?u.37218
X
) : (
s: FormalSum R X
s
.
scmul: {R : Type ?u.37259} → [inst : Ring R] → {X : Type ?u.37258} → RFormalSum R XFormalSum R X
scmul
a: R
a
) ++ (
s: FormalSum R X
s
.
scmul: {R : Type ?u.37274} → [inst : Ring R] → {X : Type ?u.37273} → RFormalSum R XFormalSum R X
scmul
b: R
b
) ≈
s: FormalSum R X
s
.
scmul: {R : Type ?u.37326} → [inst : Ring R] → {X : Type ?u.37325} → RFormalSum R XFormalSum R X
scmul
(
a: R
a
+
b: R
b
) :=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

s: FormalSum R X


scmul a s ++ scmul b s scmul (a + b) s
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

s: FormalSum R X


scmul a s ++ scmul b s scmul (a + b) s
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R


nil
scmul a [] ++ scmul b [] scmul (a + b) []
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R


nil
[] []
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R


nil
scmul a [] ++ scmul b [] scmul (a + b) []

Goals accomplished! 🐙
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

s: FormalSum R X


scmul a s ++ scmul b s scmul (a + b) s
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t


cons
scmul a (h :: t) ++ scmul b (h :: t) scmul (a + b) (h :: t)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t


cons.h
∀ (x : X), coords (scmul a (h :: t) ++ scmul b (h :: t)) x = coords (scmul (a + b) (h :: t)) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t


cons.h
∀ (x : X), coords (scmul a (h :: t) ++ scmul b (h :: t)) x = coords (scmul (a + b) (h :: t)) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t


cons
scmul a (h :: t) ++ scmul b (h :: t) scmul (a + b) (h :: t)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X


cons.h
coords (scmul a (h :: t) ++ scmul b (h :: t)) x₀ = coords (scmul (a + b) (h :: t)) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t


cons
scmul a (h :: t) ++ scmul b (h :: t) scmul (a + b) (h :: t)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁:= congrFun ih x₀: coords (scmul a t ++ scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
coords (scmul a (h :: t) ++ scmul b (h :: t)) x₀ = coords (scmul (a + b) (h :: t)) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t


cons
scmul a (h :: t) ++ scmul b (h :: t) scmul (a + b) (h :: t)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁:= congrFun ih x₀: coords (scmul a t ++ scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
coords (scmul a (h :: t) ++ scmul b (h :: t)) x₀ = coords (scmul (a + b) (h :: t)) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁:= congrFun ih x₀: coords (scmul a t ++ scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
coords (scmul a (h :: t)) x₀ + coords (scmul b (h :: t)) x₀ = coords (scmul (a + b) (h :: t)) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁:= congrFun ih x₀: coords (scmul a t ++ scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
coords (scmul a (h :: t)) x₀ + coords (scmul b (h :: t)) x₀ = coords (scmul (a + b) (h :: t)) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t


cons
scmul a (h :: t) ++ scmul b (h :: t) scmul (a + b) (h :: t)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁:= congrFun ih x₀: coords (scmul a t ++ scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul (a + b) t) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t


cons
scmul a (h :: t) ++ scmul b (h :: t) scmul (a + b) (h :: t)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁:= congrFun ih x₀: coords (scmul a t ++ scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul (a + b) t) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul (a + b) t) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul (a + b) t) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul (a + b) t) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t


cons
scmul a (h :: t) ++ scmul b (h :: t) scmul (a + b) (h :: t)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul (a + b) t) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t


cons
scmul a (h :: t) ++ scmul b (h :: t) scmul (a + b) (h :: t)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t


cons
scmul a (h :: t) ++ scmul b (h :: t) scmul (a + b) (h :: t)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul a t) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + (coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀))
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + (coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀))
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


coords (scmul a t) x₀ + monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


coords (scmul a t) x₀ + monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


coords (scmul a t) x₀ + monomCoeff R X x₀ (b * h.fst, h.snd)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + coords (scmul a t) x₀ + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


coords (scmul a t) x₀ + monomCoeff R X x₀ (b * h.fst, h.snd)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul a t) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul a t) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t


cons
scmul a (h :: t) ++ scmul b (h :: t) scmul (a + b) (h :: t)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


cons.h
monomCoeff R X x₀ (a * h.fst, h.snd) + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul a t) x₀ + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul a t) x₀ + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + (monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀))
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + (monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀))
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + (monomCoeff R X x₀ (b * h.fst, h.snd) + coords (scmul a t) x₀ + coords (scmul b t) x₀) = monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + (monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀))
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

h: R × X

t: List (R × X)

ih: scmul a t ++ scmul b t scmul (a + b) t

x₀: X

il₁: coords (scmul a t) x₀ + coords (scmul b t) x₀ = coords (scmul (a + b) t) x₀


monomCoeff R X x₀ (a * h.fst, h.snd) + monomCoeff R X x₀ (b * h.fst, h.snd) + (coords (scmul a t) x₀ + coords (scmul b t) x₀)
end FormalSum namespace FreeModule /-! ### Module properties for the free module. -/ /-- Associativity for scalar and ring products. -/ theorem
module_action: ∀ (a b : R) (x : R[X]), a b x = (a * b) x
module_action
(
a: R
a
b: R
b
:
R: Type ?u.41995
R
) (
x: R[X]
x
:
R: Type ?u.41995
R
[
X: Type ?u.42010
X
]) :
a: R
a
• (
b: R
b
x: R[X]
x
) = (
a: R
a
*
b: R
b
) •
x: R[X]
x
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a b x = (a * b) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a
∀ (a_1 : FormalSum R X), a b Quotient.mk (formalSumSetoid R X) a_1 = (a * b) Quotient.mk (formalSumSetoid R X) a_1
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a b x = (a * b) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]

s: FormalSum R X


a
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a b x = (a * b) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]

s: FormalSum R X


a.a
scmul a (scmul b s) scmul (a * b) s
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a b x = (a * b) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]

s: FormalSum R X


a.a
scmul a (scmul b s) scmul (a * b) s
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]

s: FormalSum R X


a.a
scmul (a * b) s scmul (a * b) s
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]

s: FormalSum R X


a.a
scmul (a * b) s scmul (a * b) s
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a b x = (a * b) x

Goals accomplished! 🐙
/-- Commutativity of addition. -/ theorem
addn_comm: ∀ (x₁ x₂ : R[X]), x₁ + x₂ = x₂ + x₁
addn_comm
(
x₁: R[X]
x₁
x₂: R[X]
x₂
:
R: Type ?u.42614
R
[
X: Type ?u.42629
X
]) :
x₁: R[X]
x₁
+
x₂: R[X]
x₂
=
x₂: R[X]
x₂
+
x₁: R[X]
x₁
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


x₁ + x₂ = x₂ + x₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


h
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


x₁ + x₂ = x₂ + x₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

s₁, s₂: FormalSum R X


h
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


x₁ + x₂ = x₂ + x₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

s₁, s₂: FormalSum R X


h.a
s₁ ++ s₂ s₂ ++ s₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


x₁ + x₂ = x₂ + x₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

s₁, s₂: FormalSum R X


h.a.h
∀ (x : X), coords (s₁ ++ s₂) x = coords (s₂ ++ s₁) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


x₁ + x₂ = x₂ + x₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
coords (s₁ ++ s₂) x₀ = coords (s₂ ++ s₁) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


x₁ + x₂ = x₂ + x₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X

lm₁:= append_coords s₁ s₂ x₀: coords s₁ x₀ + coords s₂ x₀ = coords (s₁ ++ s₂) x₀


h.a.h
coords (s₁ ++ s₂) x₀ = coords (s₂ ++ s₁) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


x₁ + x₂ = x₂ + x₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X

lm₁:= append_coords s₁ s₂ x₀: coords s₁ x₀ + coords s₂ x₀ = coords (s₁ ++ s₂) x₀

lm₂:= append_coords s₂ s₁ x₀: coords s₂ x₀ + coords s₁ x₀ = coords (s₂ ++ s₁) x₀


h.a.h
coords (s₁ ++ s₂) x₀ = coords (s₂ ++ s₁) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


x₁ + x₂ = x₂ + x₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X

lm₁:= append_coords s₁ s₂ x₀: coords s₁ x₀ + coords s₂ x₀ = coords (s₁ ++ s₂) x₀

lm₂:= append_coords s₂ s₁ x₀: coords s₂ x₀ + coords s₁ x₀ = coords (s₂ ++ s₁) x₀


h.a.h
coords (s₁ ++ s₂) x₀ = coords (s₂ ++ s₁) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X

lm₁:= append_coords s₁ s₂ x₀: coords s₁ x₀ + coords s₂ x₀ = coords (s₁ ++ s₂) x₀

lm₂:= append_coords s₂ s₁ x₀: coords s₂ x₀ + coords s₁ x₀ = coords (s₂ ++ s₁) x₀


h.a.h
coords s₁ x₀ + coords s₂ x₀ = coords (s₂ ++ s₁) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X

lm₁:= append_coords s₁ s₂ x₀: coords s₁ x₀ + coords s₂ x₀ = coords (s₁ ++ s₂) x₀

lm₂:= append_coords s₂ s₁ x₀: coords s₂ x₀ + coords s₁ x₀ = coords (s₂ ++ s₁) x₀


h.a.h
coords (s₁ ++ s₂) x₀ = coords (s₂ ++ s₁) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X

lm₁:= append_coords s₁ s₂ x₀: coords s₁ x₀ + coords s₂ x₀ = coords (s₁ ++ s₂) x₀

lm₂:= append_coords s₂ s₁ x₀: coords s₂ x₀ + coords s₁ x₀ = coords (s₂ ++ s₁) x₀


h.a.h
coords s₁ x₀ + coords s₂ x₀ = coords s₂ x₀ + coords s₁ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X

lm₁:= append_coords s₁ s₂ x₀: coords s₁ x₀ + coords s₂ x₀ = coords (s₁ ++ s₂) x₀

lm₂:= append_coords s₂ s₁ x₀: coords s₂ x₀ + coords s₁ x₀ = coords (s₂ ++ s₁) x₀


h.a.h
coords s₁ x₀ + coords s₂ x₀ = coords s₂ x₀ + coords s₁ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂: R[X]


x₁ + x₂ = x₂ + x₁

Goals accomplished! 🐙
theorem
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₃)
add_assoc_aux
(
s₁: FormalSum R X
s₁
:
FormalSum: (R : Type ?u.43576) → Type ?u.43575 → [inst : Ring R] → Type (max?u.43575?u.43576)
FormalSum
R: Type ?u.43548
R
X: Type ?u.43563
X
) (
x₂: R[X]
x₂
x₃: R[X]
x₃
:
R: Type ?u.43548
R
[
X: Type ?u.43563
X
]) : (⟦
s₁: FormalSum R X
s₁
⟧ +
x₂: R[X]
x₂
) +
x₃: R[X]
x₃
= ⟦
s₁: FormalSum R X
s₁
⟧ + (
x₂: R[X]
x₂
+
x₃: R[X]
x₃
) :=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁: FormalSum R X

x₂, x₃: R[X]


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]


h
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁: FormalSum R X

x₂, x₃: R[X]


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


h
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁: FormalSum R X

x₂, x₃: R[X]


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


h.a
s₁ ++ x₂ ++ 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]


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


h.a.h
∀ (x : X), coords (s₁ ++ x₂ ++ x₃) x = coords (s₁ ++ (x₂ ++ x₃)) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁: FormalSum R X

x₂, x₃: R[X]


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

x₀: X


h.a.h
coords (s₁ ++ x₂ ++ x₃) x₀ = coords (s₁ ++ (x₂ ++ x₃)) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁: FormalSum R X

x₂, x₃: R[X]


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

x₀: X


h.a.h
coords (s₁ ++ x₂ ++ x₃) x₀ = coords (s₁ ++ (x₂ ++ 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

x₀: X


h.a.h
coords (s₁ ++ x₂) x₀ + coords x₃ x₀ = coords (s₁ ++ (x₂ ++ 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

x₀: X


h.a.h
coords (s₁ ++ x₂) x₀ + coords x₃ x₀ = coords (s₁ ++ (x₂ ++ x₃)) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁: FormalSum R X

x₂, x₃: R[X]


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

x₀: X


h.a.h
coords (s₁ ++ x₂) x₀ + coords x₃ x₀ = coords (s₁ ++ (x₂ ++ 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

x₀: X


h.a.h
coords s₁ x₀ + coords x₂ x₀ + coords x₃ x₀ = coords (s₁ ++ (x₂ ++ 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

x₀: X


h.a.h
coords s₁ x₀ + coords x₂ x₀ + coords x₃ x₀ = coords (s₁ ++ (x₂ ++ x₃)) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁: FormalSum R X

x₂, x₃: R[X]


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

x₀: X


h.a.h
coords s₁ x₀ + coords x₂ x₀ + coords x₃ x₀ = coords (s₁ ++ (x₂ ++ 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

x₀: X


h.a.h
coords s₁ x₀ + coords x₂ x₀ + coords x₃ x₀ = coords s₁ x₀ + coords (x₂ ++ 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

x₀: X


h.a.h
coords s₁ x₀ + coords x₂ x₀ + coords x₃ x₀ = coords s₁ x₀ + coords (x₂ ++ x₃) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁: FormalSum R X

x₂, x₃: R[X]


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

x₀: X


h.a.h
coords s₁ x₀ + coords x₂ x₀ + coords x₃ x₀ = coords s₁ x₀ + coords (x₂ ++ 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

x₀: X


h.a.h
coords s₁ x₀ + coords x₂ x₀ + coords x₃ x₀ = coords s₁ x₀ + (coords x₂ x₀ + coords 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

x₀: X


h.a.h
coords s₁ x₀ + coords x₂ x₀ + coords x₃ x₀ = coords s₁ x₀ + (coords x₂ x₀ + coords x₃ x₀)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁: FormalSum R X

x₂, x₃: R[X]


Quotient.mk (formalSumSetoid R X) s₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) s₁ + (x₂ + x₃)

Goals accomplished! 🐙
/-- Associativity of addition. -/ theorem
addn_assoc: ∀ (x₁ x₂ x₃ : R[X]), x₁ + x₂ + x₃ = x₁ + (x₂ + x₃)
addn_assoc
(
x₁: R[X]
x₁
x₂: R[X]
x₂
x₃: R[X]
x₃
:
R: Type ?u.45428
R
[
X: Type ?u.45443
X
]) : (
x₁: R[X]
x₁
+
x₂: R[X]
x₂
) +
x₃: R[X]
x₃
=
x₁: R[X]
x₁
+ (
x₂: R[X]
x₂
+
x₃: R[X]
x₃
) :=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂, x₃: R[X]


x₁ + x₂ + x₃ = x₁ + (x₂ + x₃)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂, x₃: R[X]


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₁ + x₂ + x₃ = x₁ + (x₂ + x₃)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁✝, x₂, x₃: R[X]

x₁: FormalSum R X


a
Quotient.mk (formalSumSetoid R X) x₁ + x₂ + x₃ = Quotient.mk (formalSumSetoid R X) x₁ + (x₂ + x₃)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₁, x₂, x₃: R[X]


x₁ + x₂ + x₃ = x₁ + (x₂ + x₃)

Goals accomplished! 🐙
/-- The zero element of the free module. -/ def
zero: {R : Type} → [inst : Ring R] → {X : Type} → [inst_1 : DecidableEq X] → R[X]
zero
:
R: Type ?u.46057
R
[
X: Type ?u.46072
X
] := ⟦
[]: List ?m.46148
[]
⟧ /-- adding zero-/ theorem
addn_zero: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] (x : R[X]), x + zero = x
addn_zero
(
x: R[X]
x
:
R: Type ?u.46241
R
[
X: Type ?u.46256
X
]) :
x: R[X]
x
+
zero: {R : Type} → [inst : Ring R] → {X : Type} → [inst_1 : DecidableEq X] → R[X]
zero
=
x: R[X]
x
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


x + zero = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


a
∀ (a : FormalSum R X), Quotient.mk (formalSumSetoid R X) a + zero = Quotient.mk (formalSumSetoid R X) a
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


x + zero = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X


a
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


x + zero = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X


a.a
x ++ [] x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


x + zero = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X


a.a.h
∀ (x_1 : X), coords (x ++ []) x_1 = coords x x_1
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


x + zero = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X

x₀: X


a.a.h
coords (x ++ []) x₀ = coords x x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


x + zero = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X

x₀: X


a.a.h
coords (x ++ []) x₀ = coords x x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X

x₀: X


a.a.h
coords x x₀ + coords [] x₀ = coords x x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X

x₀: X


a.a.h
coords x x₀ + coords [] x₀ = coords x x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


x + zero = x

Goals accomplished! 🐙
/-- adding zero-/ theorem
zero_addn: ∀ (x : R[X]), zero + x = x
zero_addn
(
x: R[X]
x
:
R: Type ?u.47663
R
[
X: Type ?u.47678
X
]) :
zero: {R : Type} → [inst : Ring R] → {X : Type} → [inst_1 : DecidableEq X] → R[X]
zero
+
x: R[X]
x
=
x: R[X]
x
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


zero + x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


a
∀ (a : FormalSum R X), zero + Quotient.mk (formalSumSetoid R X) a = Quotient.mk (formalSumSetoid R X) a
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


zero + x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X


a
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


zero + x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X


a.a
[] ++ x x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


zero + x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X


a.a.h
∀ (x_1 : X), coords ([] ++ x) x_1 = coords x x_1
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


zero + x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X

x₀: X


a.a.h
coords ([] ++ x) x₀ = coords x x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


zero + x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X

x₀: X


a.a.h
coords ([] ++ x) x₀ = coords x x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X

x₀: X


a.a.h
coords [] x₀ + coords x x₀ = coords x x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x✝: R[X]

x: FormalSum R X

x₀: X


a.a.h
coords [] x₀ + coords x x₀ = coords x x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


zero + x = x

Goals accomplished! 🐙
/-- Distributivity for addition of module elements. -/ theorem
elem_distrib: ∀ (a : R) (x₁ x₂ : R[X]), a (x₁ + x₂) = a x₁ + a x₂
elem_distrib
(
a: R
a
:
R: Type ?u.49081
R
) (
x₁: R[X]
x₁
x₂: R[X]
x₂
:
R: Type ?u.49081
R
[
X: Type ?u.49096
X
]) :
a: R
a
• (
x₁: R[X]
x₁
+
x₂: R[X]
x₂
) =
a: R
a
x₁: R[X]
x₁
+
a: R
a
x₂: R[X]
x₂
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]


a (x₁ + x₂) = a x₁ + a x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]


h
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]


a (x₁ + x₂) = a x₁ + a x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X


h
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]


a (x₁ + x₂) = a x₁ + a x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X


h.a
scmul a (s₁ ++ s₂) scmul a s₁ ++ scmul a s₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]


a (x₁ + x₂) = a x₁ + a x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X


h.a.h
∀ (x : X), coords (scmul a (s₁ ++ s₂)) x = coords (scmul a s₁ ++ scmul a s₂) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]


a (x₁ + x₂) = a x₁ + a x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
coords (scmul a (s₁ ++ s₂)) x₀ = coords (scmul a s₁ ++ scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]


a (x₁ + x₂) = a x₁ + a x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
coords (scmul a (s₁ ++ s₂)) x₀ = coords (scmul a s₁ ++ scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * coords (s₁ ++ s₂) x₀ = coords (scmul a s₁ ++ scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * coords (s₁ ++ s₂) x₀ = coords (scmul a s₁ ++ scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]


a (x₁ + x₂) = a x₁ + a x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * coords (s₁ ++ s₂) x₀ = coords (scmul a s₁ ++ scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * (coords s₁ x₀ + coords s₂ x₀) = coords (scmul a s₁ ++ scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * (coords s₁ x₀ + coords s₂ x₀) = coords (scmul a s₁ ++ scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]


a (x₁ + x₂) = a x₁ + a x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * (coords s₁ x₀ + coords s₂ x₀) = coords (scmul a s₁ ++ scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * (coords s₁ x₀ + coords s₂ x₀) = coords (scmul a s₁) x₀ + coords (scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * (coords s₁ x₀ + coords s₂ x₀) = coords (scmul a s₁) x₀ + coords (scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]


a (x₁ + x₂) = a x₁ + a x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * (coords s₁ x₀ + coords s₂ x₀) = coords (scmul a s₁) x₀ + coords (scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * (coords s₁ x₀ + coords s₂ x₀) = a * coords s₁ x₀ + coords (scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * (coords s₁ x₀ + coords s₂ x₀) = a * coords s₁ x₀ + coords (scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]


a (x₁ + x₂) = a x₁ + a x₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * (coords s₁ x₀ + coords s₂ x₀) = a * coords s₁ x₀ + coords (scmul a s₂) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * (coords s₁ x₀ + coords s₂ x₀) = a * coords s₁ x₀ + a * coords s₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]

s₁, s₂: FormalSum R X

x₀: X


h.a.h
a * (coords s₁ x₀ + coords s₂ x₀) = a * coords s₁ x₀ + a * coords s₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a: R

x₁, x₂: R[X]


a (x₁ + x₂) = a x₁ + a x₂

Goals accomplished! 🐙
/-- Distributivity with respect to scalars. -/ theorem
coeffs_distrib: ∀ (a b : R) (x : R[X]), a x + b x = (a + b) x
coeffs_distrib
(
a: R
a
b: R
b
:
R: Type ?u.50828
R
)(
x: R[X]
x
:
R: Type ?u.50828
R
[
X: Type ?u.50843
X
]) :
a: R
a
x: R[X]
x
+
b: R
b
x: R[X]
x
= (
a: R
a
+
b: R
b
) •
x: R[X]
x
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a x + b x = (a + b) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


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
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a x + b x = (a + b) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]

s: FormalSum R X


a
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a x + b x = (a + b) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]

s: FormalSum R X


a.a
scmul a s ++ scmul b s scmul (a + b) s
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a x + b x = (a + b) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]

s: FormalSum R X


a.a.h
∀ (x : X), coords (scmul a s ++ scmul b s) x = coords (scmul (a + b) s) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a x + b x = (a + b) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]

s: FormalSum R X

x₀: X


a.a.h
coords (scmul a s ++ scmul b s) x₀ = coords (scmul (a + b) s) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a x + b x = (a + b) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]

s: FormalSum R X

x₀: X

l:= act_sum a b s: scmul a s ++ scmul b s scmul (a + b) s


a.a.h
coords (scmul a s ++ scmul b s) x₀ = coords (scmul (a + b) s) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a x + b x = (a + b) x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]

s: FormalSum R X

x₀: X

l:= act_sum a b s: scmul a s ++ scmul b s scmul (a + b) s

l'':= congrFun l x₀: coords (scmul a s ++ scmul b s) x₀ = coords (scmul (a + b) s) x₀


a.a.h
coords (scmul a s ++ scmul b s) x₀ = coords (scmul (a + b) s) x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a, b: R

x: R[X]


a x + b x = (a + b) x

Goals accomplished! 🐙
/-- Multiplication by `1 : R`. -/ theorem
unit_coeffs: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] (x : R[X]), 1 x = x
unit_coeffs
(
x: R[X]
x
:
R: Type ?u.51602
R
[
X: Type ?u.51617
X
]) : (
1: ?m.51698
1
:
R: Type ?u.51602
R
) •
x: R[X]
x
=
x: R[X]
x
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


1 x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


a
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


1 x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X


a
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


1 x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X


a.a
scmul 1 s s
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


1 x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X


a.a.h
∀ (x : X), coords (scmul 1 s) x = coords s x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


1 x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X

x₀: X


a.a.h
coords (scmul 1 s) x₀ = coords s x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


1 x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X

x₀: X

l:= scmul_coords 1 s x₀: 1 * coords s x₀ = coords (scmul 1 s) x₀


a.a.h
coords (scmul 1 s) x₀ = coords s x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


1 x = x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X

x₀: X

l:= scmul_coords 1 s x₀: 1 * coords s x₀ = coords (scmul 1 s) x₀


a.a.h
coords (scmul 1 s) x₀ = coords s x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X

x₀: X

l:= scmul_coords 1 s x₀: 1 * coords s x₀ = coords (scmul 1 s) x₀


a.a.h
1 * coords s x₀ = coords s x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X

x₀: X

l:= scmul_coords 1 s x₀: 1 * coords s x₀ = coords (scmul 1 s) x₀


a.a.h
1 * coords s x₀ = coords s x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


1 x = x

Goals accomplished! 🐙
/-- Multiplication by `0 : R`. -/ theorem
zero_coeffs: ∀ (x : R[X]), 0 x = Quotient.mk (formalSumSetoid R X) []
zero_coeffs
(
x: R[X]
x
:
R: Type ?u.52262
R
[
X: Type ?u.52277
X
]) : (
0: ?m.52358
0
:
R: Type ?u.52262
R
) •
x: R[X]
x
= ⟦
[]: List ?m.52466
[]
⟧:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


a
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X


a
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X


a.a
scmul 0 s []
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X


a.a.h
∀ (x : X), coords (scmul 0 s) x = coords [] x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X

x₀: X


a.a.h
coords (scmul 0 s) x₀ = coords [] x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X

x₀: X

l:= scmul_coords 0 s x₀: 0 * coords s x₀ = coords (scmul 0 s) x₀


a.a.h
coords (scmul 0 s) x₀ = coords [] x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X

x₀: X

l:= scmul_coords 0 s x₀: 0 * coords s x₀ = coords (scmul 0 s) x₀


a.a.h
coords (scmul 0 s) x₀ = coords [] x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X

x₀: X

l:= scmul_coords 0 s x₀: 0 * coords s x₀ = coords (scmul 0 s) x₀


a.a.h
0 * coords s x₀ = coords [] x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

s: FormalSum R X

x₀: X

l:= scmul_coords 0 s x₀: 0 * coords s x₀ = coords (scmul 0 s) x₀


a.a.h
0 * coords s x₀ = coords [] x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]



Goals accomplished! 🐙
/-- The module is an additive commutative group, mainly proved as a check -/
instance: {R : Type} → [inst : Ring R] → {X : Type} → [inst_1 : DecidableEq X] → AddCommGroup (R[X])
instance
:
AddCommGroup: Type ?u.53167 → Type ?u.53167
AddCommGroup
(
R: Type ?u.53140
R
[
X: Type ?u.53155
X
]) := { zero := ⟦
[]: List ?m.53403
[]
add :=
FreeModule.add: {R : Type} → [inst : Ring R] → {X : Type} → [inst_1 : DecidableEq X] → R[X]R[X]R[X]
FreeModule.add
add_assoc :=
FreeModule.addn_assoc: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] (x₁ x₂ x₃ : R[X]), x₁ + x₂ + x₃ = x₁ + (x₂ + x₃)
FreeModule.addn_assoc
add_zero :=
FreeModule.addn_zero: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] (x : R[X]), x + zero = x
FreeModule.addn_zero
zero_add :=
FreeModule.zero_addn: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] (x : R[X]), zero + x = x
FreeModule.zero_addn
neg := fun
x: ?m.53549
x
=> (-
1: ?m.53562
1
:
R: Type ?u.53140
R
) •
x: ?m.53549
x
sub_eq_add_neg :=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (a b : R[X]), a - b = a + -b
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a✝, b✝: R[X]


a✝ - b✝ = a✝ + -b✝
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

a✝, b✝: R[X]


a✝ - b✝ = a✝ + -b✝
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (a b : R[X]), a - b = a + -b

Goals accomplished! 🐙
add_left_neg :=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (a : R[X]), -a + a = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]


-x + x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (a : R[X]), -a + a = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

l:= coeffs_distrib (-1) 1 x: -1 x + 1 x = (-1 + 1) x


-x + x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (a : R[X]), -a + a = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

l: -1 x + 1 x = 0 x


-x + x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (a : R[X]), -a + a = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

l: -1 x + 1 x = 0 x


-x + x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

l: -1 x + x = 0 x


-x + x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

l: -1 x + x = 0 x


-x + x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

l: -1 x + x = 0 x


-x + x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (a : R[X]), -a + a = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

l: -1 x + x = 0 x


-x + x = 0
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) []


-x + x = 0
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) []


-x + x = 0
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) []


-x + x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X


∀ (a : R[X]), -a + a = 0

Goals accomplished! 🐙
add_comm :=
FreeModule.addn_comm: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] (x₁ x₂ : R[X]), x₁ + x₂ = x₂ + x₁
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. -/ inductive
ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
ElementaryMove
(
R: Type
R
X: Type
X
:
Type: Type 1
Type
) [
Ring: Type ?u.56206 → Type ?u.56206
Ring
R: Type
R
] [
DecidableEq: Sort ?u.56209 → Sort (max1?u.56209)
DecidableEq
R: Type
R
][
DecidableEq: Sort ?u.56218 → Sort (max1?u.56218)
DecidableEq
X: Type
X
] :
FormalSum: (R : Type ?u.56229) → Type ?u.56228 → [inst : Ring R] → Type (max?u.56228?u.56229)
FormalSum
R: Type
R
X: Type
X
FormalSum: (R : Type ?u.56238) → Type ?u.56237 → [inst : Ring R] → Type (max?u.56237?u.56238)
FormalSum
R: Type
R
X: Type
X
Prop: Type
Prop
where |
zeroCoeff: ∀ {R X : Type} [inst : Ring R] [inst_1 : DecidableEq R] [inst_2 : DecidableEq X] (tail : FormalSum R X) (x : X) (a : R), a = 0ElementaryMove R X ((a, x) :: tail) tail
zeroCoeff
(
tail: FormalSum R X
tail
:
FormalSum: (R : Type ?u.56255) → Type ?u.56254 → [inst : Ring R] → Type (max?u.56254?u.56255)
FormalSum
R: Type
R
X: Type
X
) (
x: X
x
:
X: Type
X
) (
a: R
a
:
R: Type
R
) (
h: a = 0
h
:
a: R
a
=
0: ?m.56267
0
) :
ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
ElementaryMove
R: Type
R
X: Type
X
((
a: R
a
,
x: X
x
) ::
tail: FormalSum R X
tail
)
tail: FormalSum R X
tail
|
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)
addCoeffs
(
a: R
a
b: R
b
:
R: Type
R
) (
x: X
x
:
X: Type
X
) (
tail: FormalSum R X
tail
:
FormalSum: (R : Type ?u.56446) → Type ?u.56445 → [inst : Ring R] → Type (max?u.56445?u.56446)
FormalSum
R: Type
R
X: Type
X
) :
ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
ElementaryMove
R: Type
R
X: Type
X
((
a: R
a
,
x: X
x
) :: (
b: R
b
,
x: X
x
) ::
tail: FormalSum R X
tail
) ((
a: R
a
+
b: R
b
,
x: X
x
) ::
tail: FormalSum R X
tail
) |
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₂)
cons
(
a: R
a
:
R: Type
R
) (
x: X
x
:
X: Type
X
) (
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.56578) → Type ?u.56577 → [inst : Ring R] → Type (max?u.56577?u.56578)
FormalSum
R: Type
R
X: Type
X
) :
ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
ElementaryMove
R: Type
R
X: Type
X
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
ElementaryMove
R: Type
R
X: Type
X
((
a: R
a
,
x: X
x
) ::
s₁: FormalSum R X
s₁
) ((
a: R
a
,
x: X
x
) ::
s₂: FormalSum R X
s₂
) |
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)
swap
(
a₁: R
a₁
a₂: R
a₂
:
R: Type
R
) (
x₁: X
x₁
x₂: X
x₂
:
X: Type
X
) (
tail: FormalSum R X
tail
:
FormalSum: (R : Type ?u.56635) → Type ?u.56634 → [inst : Ring R] → Type (max?u.56634?u.56635)
FormalSum
R: Type
R
X: Type
X
) :
ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
ElementaryMove
R: Type
R
X: Type
X
((
a₁: R
a₁
,
x₁: X
x₁
) :: (
a₂: R
a₂
,
x₂: X
x₂
) ::
tail: FormalSum R X
tail
) ((
a₂: R
a₂
,
x₂: X
x₂
) :: (
a₁: R
a₁
,
x₁: X
x₁
) ::
tail: FormalSum R X
tail
) def
FreeModuleAux: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → ?m.57283 R X
FreeModuleAux
(
R: Type
R
X: Type
X
:
Type: Type 1
Type
) [
Ring: Type ?u.57261 → Type ?u.57261
Ring
R: Type
R
] [
DecidableEq: Sort ?u.57264 → Sort (max1?u.57264)
DecidableEq
R: Type
R
][
DecidableEq: Sort ?u.57273 → Sort (max1?u.57273)
DecidableEq
X: Type
X
] :=
Quot: {α : Sort ?u.57294} → (ααProp) → Sort ?u.57294
Quot
(
ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
ElementaryMove
R: Type
R
X: Type
X
) namespace FormalSum /-- Image in the quotient (i.e., actual, not formal, sum). -/ def
sum: FormalSum R XFreeModuleAux R X
sum
(
s: FormalSum R X
s
:
FormalSum: (R : Type ?u.57439) → Type ?u.57438 → [inst : Ring R] → Type (max?u.57438?u.57439)
FormalSum
R: Type ?u.57411
R
X: Type ?u.57426
X
) :
FreeModuleAux: (R X : Type) → [inst : Ring R] → [inst : DecidableEq R] → [inst : DecidableEq X] → Type
FreeModuleAux
R: Type ?u.57411
R
X: Type ?u.57426
X
:=
Quot.mk: {α : Sort ?u.57532} → (r : ααProp) → αQuot r
Quot.mk
(
ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
ElementaryMove
R: Type ?u.57411
R
X: Type ?u.57426
X
)
s: FormalSum R X
s
/-- Equivalence by having the same image. -/ def
equiv: FormalSum R XFormalSum R XProp
equiv
(
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.57736) → Type ?u.57735 → [inst : Ring R] → Type (max?u.57735?u.57736)
FormalSum
R: Type ?u.57699
R
X: Type ?u.57714
X
) :
Prop: Type
Prop
:=
s₁: FormalSum R X
s₁
.
sum: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → FormalSum R XFreeModuleAux R X
sum
=
s₂: FormalSum R X
s₂
.
sum: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → FormalSum R XFreeModuleAux R X
sum
infix:65 " ≃ " =>
FormalSum.equiv: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
FormalSum.equiv
/-! ### Invariance of coordinates under elementary moves -/ /-- Coordinates are invariant under moves. -/ theorem
coords_move_invariant: ∀ (x₀ : X) (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂coords s₁ x₀ = coords s₂ x₀
coords_move_invariant
(
x₀: X
x₀
:
X: Type ?u.66342
X
) (
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.66366) → Type ?u.66365 → [inst : Ring R] → Type (max?u.66365?u.66366)
FormalSum
R: Type ?u.66327
R
X: Type ?u.66342
X
) (
h: ElementaryMove R X s₁ s₂
h
:
ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
ElementaryMove
R: Type ?u.66327
R
X: Type ?u.66342
X
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
) :
coords: {R : Type ?u.66461} → [inst : Ring R] → {X : Type ?u.66460} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
s₁: FormalSum R X
s₁
x₀: X
x₀
=
coords: {R : Type ?u.66474} → [inst : Ring R] → {X : Type ?u.66473} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
s₂: FormalSum R X
s₂
x₀: X
x₀
:=
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₂


coords s₁ x₀ = coords s₂ x₀
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₂


coords s₁ x₀ = coords s₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X

s₁, s₂, tail: FormalSum R X

x: X

a: R

hyp: a = 0


zeroCoeff
coords ((a, x) :: tail) x₀ = coords tail x₀

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₂


coords s₁ x₀ = coords s₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X

s₁, s₂: FormalSum R X

a, b: R

x: X

tail: FormalSum R X


addCoeffs
coords ((a, x) :: (b, x) :: tail) x₀ = coords ((a + b, x) :: tail) x₀

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₂


coords s₁ x₀ = coords s₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X

s₁✝, s₂✝: FormalSum R X

a: R

x: X

s₁, s₂: FormalSum R X

a✝: ElementaryMove R X s₁ s₂

step: coords s₁ x₀ = coords s₂ x₀


cons
coords ((a, x) :: s₁) x₀ = coords ((a, x) :: s₂) x₀

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₂


coords s₁ x₀ = coords s₂ x₀
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X

s₁, s₂: FormalSum R X

a₁, a₂: R

x₁, x₂: X

tail: FormalSum R X


swap
coords ((a₁, x₁) :: (a₂, x₂) :: tail) x₀ = coords ((a₂, x₂) :: (a₁, x₁) :: tail) x₀

Goals accomplished! 🐙
end FormalSum /-- Coordinates on the quotients. -/ def
FreeModuleAux.coeff: XFreeModuleAux R XR
FreeModuleAux.coeff
(
x₀: X
x₀
:
X: Type ?u.68743
X
) :
FreeModuleAux: (R X : Type) → [inst : Ring R] → [inst : DecidableEq R] → [inst : DecidableEq X] → Type
FreeModuleAux
R: Type ?u.68728
R
X: Type ?u.68743
X
R: Type ?u.68728
R
:=
Quot.lift: {α : Sort ?u.68844} → {r : ααProp} → {β : Sort ?u.68843} → (f : αβ) → (∀ (a b : α), r a bf a = f b) → Quot rβ
Quot.lift
(fun
s: ?m.68857
s
=>
s: ?m.68857
s
.
coords: {R : Type ?u.68860} → [inst : Ring R] → {X : Type ?u.68859} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x₀: X
x₀
) (
coords_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₀
coords_move_invariant
x₀: X
x₀
) namespace FormalSum /-- Commutative diagram for coordinates. -/ theorem
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 x
coeff_factors
(
x: X
x
:
X: Type ?u.69194
X
) (
s: FormalSum R X
s
:
FormalSum: (R : Type ?u.69209) → Type ?u.69208 → [inst : Ring R] → Type (max?u.69208?u.69209)
FormalSum
R: Type ?u.69179
R
X: Type ?u.69194
X
) :
FreeModuleAux.coeff: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → XFreeModuleAux R XR
FreeModuleAux.coeff
x: X
x
(
sum: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → FormalSum R XFreeModuleAux R X
sum
s: FormalSum R X
s
) =
s: FormalSum R X
s
.
coords: {R : Type ?u.69404} → [inst : Ring R] → {X : Type ?u.69403} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x: X
x
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s: FormalSum R X


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s: FormalSum R X


Quot.lift (fun s => coords s x) (_ : ∀ (s₁ s₂ : FormalSum R X), ElementaryMove R X s₁ s₂coords s₁ x = coords s₂ x) (sum s) = coords s x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s: FormalSum R X


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s: FormalSum R X


c
∀ (a b : FormalSum R X), ElementaryMove R X a bcoords a x = coords b x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s: FormalSum R X



Goals accomplished! 🐙
/-- Coordinates well-defined under the equivalence generated by moves. -/ theorem
coords_well_defined: ∀ (x : X) (s₁ s₂ : FormalSum R X), s₁ s₂coords s₁ x = coords s₂ x
coords_well_defined
(
x: X
x
:
X: Type ?u.70025
X
) (
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.70040) → Type ?u.70039 → [inst : Ring R] → Type (max?u.70039?u.70040)
FormalSum
R: Type ?u.70010
R
X: Type ?u.70025
X
) :
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
s₁: FormalSum R X
s₁
.
coords: {R : Type ?u.71183} → [inst : Ring R] → {X : Type ?u.71182} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x: X
x
=
s₂: FormalSum R X
s₂
.
coords: {R : Type ?u.71201} → [inst : Ring R] → {X : Type ?u.71200} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x: X
x
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s₁, s₂: FormalSum R X


s₁ s₂coords s₁ x = coords s₂ x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s₁, s₂: FormalSum R X

hyp: s₁ s₂


coords s₁ x = coords s₂ x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s₁, s₂: FormalSum R X


s₁ s₂coords s₁ x = coords s₂ x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s₁, s₂: FormalSum R X

hyp: s₁ s₂


coords s₁ x = coords s₂ x
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s₁, s₂: FormalSum R X

hyp: s₁ s₂



Goals accomplished! 🐙
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s₁, s₂: FormalSum R X


s₁ s₂coords s₁ x = coords s₂ x
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₂ x


coords s₁ x = coords s₂ x
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₂ x


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₂ x


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s₁, s₂: FormalSum R X


s₁ s₂coords s₁ x = coords s₂ x
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₂ x


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₂ x


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₂ x


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: X

s₁, s₂: FormalSum R X


s₁ s₂coords s₁ x = coords s₂ x
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₂ x


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₂ x



Goals accomplished! 🐙
/-! ### Equal coordinates implies related by elementary moves. -/ /-- Cons respects equivalence. -/ theorem
cons_equiv_of_equiv: ∀ (s₁ s₂ : FormalSum R X) (a : R) (x : X), s₁ s₂(a, x) :: s₁ (a, x) :: s₂
cons_equiv_of_equiv
(
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.71955) → Type ?u.71954 → [inst : Ring R] → Type (max?u.71954?u.71955)
FormalSum
R: Type ?u.71918
R
X: Type ?u.71933
X
) (
a: R
a
:
R: Type ?u.71918
R
) (
x: X
x
:
X: Type ?u.71933
X
) :
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
→ (
a: R
a
,
x: X
x
) ::
s₁: FormalSum R X
s₁
≃ (
a: R
a
,
x: X
x
) ::
s₂: FormalSum R X
s₂
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

a: R

x: X


s₁ s₂(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₂


(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


s₁ s₂(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 XFreeModuleAux 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


s₁ s₂(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 XFreeModuleAux 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 XFreeModuleAux 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 XFreeModuleAux 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 XFreeModuleAux 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 XFreeModuleAux R X

s₁, s₂: FormalSum R X

hyp: ElementaryMove R X s₁ s₂


a
ElementaryMove 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 XFreeModuleAux 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 XFreeModuleAux R X

s₁, s₂: FormalSum R X

hyp: ElementaryMove R X s₁ s₂


a.a
ElementaryMove 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 XFreeModuleAux 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


s₁ s₂(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 XFreeModuleAux 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


(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


s₁ s₂(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 XFreeModuleAux 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)


(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


s₁ s₂(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 XFreeModuleAux 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)


(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 XFreeModuleAux 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)


sum ((a, x) :: 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 XFreeModuleAux 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)


sum ((a, x) :: 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


s₁ s₂(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 XFreeModuleAux 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)


sum ((a, x) :: 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 XFreeModuleAux 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)


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 XFreeModuleAux 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)


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


s₁ s₂(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 XFreeModuleAux 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)


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 XFreeModuleAux 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)


g (sum s₁) = g (sum 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 XFreeModuleAux 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)


g (sum s₁) = g (sum s₂)
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

a: R

x: X


s₁ s₂(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 XFreeModuleAux 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)


g (sum s₁) = g (sum 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 XFreeModuleAux 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)


g (sum s₂) = g (sum s₂)

Goals accomplished! 🐙
/-- 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`. -/ theorem
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 s
nonzero_coeff_has_complement
(
x₀: X
x₀
:
X: Type ?u.74996
X
)(
s: FormalSum R X
s
:
FormalSum: (R : Type ?u.75011) → Type ?u.75010 → [inst : Ring R] → Type (max?u.75010?u.75011)
FormalSum
R: Type ?u.74981
R
X: Type ?u.74996
X
) :
0: ?m.75023
0
s: FormalSum R X
s
.
coords: {R : Type ?u.75034} → [inst : Ring R] → {X : Type ?u.75033} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x₀: X
x₀
→ (∃
ys: FormalSum R X
ys
:
FormalSum: (R : Type ?u.75094) → Type ?u.75093 → [inst : Ring R] → Type (max?u.75093?u.75094)
FormalSum
R: Type ?u.74981
R
X: Type ?u.74996
X
, (((
s: FormalSum R X
s
.
coords: {R : Type ?u.75114} → [inst : Ring R] → {X : Type ?u.75113} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x₀: X
x₀
,
x₀: X
x₀
) ::
ys: FormalSum R X
ys
) ≃
s: FormalSum R X
s
) ∧ (
List.length: {α : Type ?u.76259} → List α
List.length
ys: FormalSum R X
ys
<
s: FormalSum R X
s
.
length: {α : Type ?u.76262} → List α
length
)) :=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X

s: FormalSum R X


0 coords s x₀ys, (coords s x₀, x₀) :: ys s List.length ys < List.length s
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X

s: FormalSum R X


0 coords s x₀ys, (coords s x₀, x₀) :: ys s List.length ys < List.length s
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X


nil
0 coords [] x₀ys, (coords [] x₀, x₀) :: ys [] List.length ys < List.length []
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X

contra: 0 coords [] x₀


nil
ys, (coords [] x₀, x₀) :: ys [] List.length ys < List.length []
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X


nil
0 coords [] x₀ys, (coords [] x₀, x₀) :: ys [] List.length ys < List.length []

Goals accomplished! 🐙
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x₀: X

s: FormalSum R X


0 coords s x₀ys, (coords s x₀, x₀) :: ys s List.length ys < List.length s
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


cons
0 coords (head :: tail) x₀ys, (coords (head :: tail) x₀, x₀) :: ys head :: tail List.length ys < List.length (head :: 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


cons
0 coords ((a, x) :: tail) x₀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


cons
0 coords (head :: tail) x₀ys, (coords (head :: tail) x₀, x₀) :: ys head :: tail List.length ys < List.length (head :: 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₀


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


cons
0 coords (head :: tail) x₀ys, (coords (head :: tail) x₀, x₀) :: ys head :: tail List.length ys < List.length (head :: 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₀

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₀: R


a + k = coords ((a, x) :: tail) x₀
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


a + k = coords ((a, x) :: tail) x₀
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


a + k = monomCoeff R X x₀ (a, x) + coords tail x₀
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


a + k = coords ((a, x) :: tail) x₀
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


a + k = (match (a, x).snd == x₀ with | true => (a, x).fst | false => 0) + coords tail x₀
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


a + k = coords ((a, x) :: tail) x₀
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


a + k = (match true with | true => (a, x).fst | false => 0) + 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 = k


List.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 tail


(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 tail


a
ElementaryMove 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 tail


(a, x₀) :: (k, x₀) :: ys (a + 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₀) = 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₀) :: ys


(a, x₀) :: (k, x₀) :: ys (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


a
(k, x₀) :: ys 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


(a, x₀) :: (k, x₀) :: ys (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

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₀) :: 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


List.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₀) :: 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₀

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)
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


k = coords ((a, x) :: 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₀) = 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)


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)


a
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)

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)


(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)


a
ElementaryMove 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)


(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'


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'


(a, x) :: (k, x₀) :: ys' (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'


a
(k, x₀) :: ys' 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'


(a, x) :: (k, x₀) :: ys' (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'

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) :: tail


(k, x₀) :: ys (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)

Goals accomplished! 🐙
/-- If all coordinates are zero, then moves relate to the empty sum. -/ theorem
equiv_e_of_zero_coeffs: ∀ (s : FormalSum R X), (∀ (x : X), coords s x = 0) → s []
equiv_e_of_zero_coeffs
(
s: FormalSum R X
s
:
FormalSum: (R : Type ?u.86726) → Type ?u.86725 → [inst : Ring R] → Type (max?u.86725?u.86726)
FormalSum
R: Type ?u.86698
R
X: Type ?u.86713
X
) (
hyp: ∀ (x : X), coords s x = 0
hyp
: ∀
x: X
x
:
X: Type ?u.86713
X
,
s: FormalSum R X
s
.
coords: {R : Type ?u.86739} → [inst : Ring R] → {X : Type ?u.86738} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x: X
x
=
0: ?m.86795
0
) :
s: FormalSum R X
s
[]: List ?m.86950
[]
:= -- let canc : IsAddLeftCancel R := -- ⟨fun a b c h => by -- rw [← neg_add_cancel_left a b, h, neg_add_cancel_left]⟩ match
mt: s = []
mt
:
s: FormalSum R X
s
with | [] =>
rfl: ∀ {α : Sort ?u.88057} {a : α}, a = a
rfl
|
h: R × X
h
::
t: List (R × X)
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)

hyp: ∀ (x : X), coords (h :: t) x = 0

mt: s = h :: t


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


(a₀, x₀) :: 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)

hyp: ∀ (x : X), coords (h :: t) x = 0

mt: s = h :: t


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₀:= hyp x₀: coords ((a₀, x₀) :: t) x₀ = 0


(a₀, x₀) :: 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)

hyp: ∀ (x : X), coords (h :: t) x = 0

mt: s = h :: t


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₀:= hyp x₀: coords ((a₀, x₀) :: t) x₀ = 0


(a₀, x₀) :: 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₀: monomCoeff R X x₀ (a₀, x₀) + coords t x₀ = 0


(a₀, x₀) :: 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₀: monomCoeff R X x₀ (a₀, x₀) + coords t x₀ = 0


(a₀, x₀) :: 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₀: monomCoeff R X x₀ (a₀, x₀) + coords t x₀ = 0


(a₀, x₀) :: 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)

hyp: ∀ (x : X), coords (h :: t) x = 0

mt: s = h :: t


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₀: monomCoeff R X x₀ (a₀, x₀) + coords t x₀ = 0


(a₀, x₀) :: 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₀: monomCoeff R X x₀ (a₀, x₀) + coords t x₀ = 0


monomCoeff R X x₀ (a₀, x₀) = a₀

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)

hyp: ∀ (x : X), coords (h :: t) x = 0

mt: s = h :: t


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₀: monomCoeff R X x₀ (a₀, x₀) + coords t x₀ = 0

c₀: monomCoeff R X x₀ (a₀, x₀) = a₀


(a₀, x₀) :: 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₀


(a₀, x₀) :: 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₀


(a₀, x₀) :: 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₀


(a₀, x₀) :: 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)

hyp: ∀ (x : X), coords (h :: t) x = 0

mt: s = h :: t


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₀


(a₀, x₀) :: 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


(a₀, x₀) :: 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


(a₀, x₀) :: 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₀: 0 + coords t x₀ = 0

c₀: monomCoeff R X x₀ (a₀, x₀) = a₀

hz: a₀ = 0


(a₀, x₀) :: 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₀: 0 + coords t x₀ = 0

c₀: monomCoeff R X x₀ (a₀, x₀) = a₀

hz: a₀ = 0


(a₀, x₀) :: 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₀: 0 + coords t x₀ = 0

c₀: monomCoeff R X x₀ (a₀, x₀) = a₀

hz: a₀ = 0


(a₀, x₀) :: 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


(a₀, x₀) :: 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₀: 0 + coords t x₀ = 0

c₀: monomCoeff R X x₀ (a₀, x₀) = a₀

hz: a₀ = 0


(a₀, x₀) :: 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


(a₀, x₀) :: 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


(a₀, x₀) :: 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


(a₀, x₀) :: 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


(a₀, x₀) :: 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


(a₀, x₀) :: 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


∀ (x : X), coords t x = 0
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


coords t x = 0
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), coords t x = 0
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


coords t x = 0
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), coords t x = 0
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


coords t x = 0
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


coords t x = 0
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


coords t x = 0
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


coords t x₀ = 0
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


coords t x₀ = 0
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


coords t x = 0

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


coords t x = 0
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


coords t x = 0
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 = 0


coords t x = 0
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


coords t x = 0
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: (match x₀ == x with | true => a₀ | false => 0) + coords t x = 0


coords t x = 0
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


coords t x = 0
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: (match x₀ == x with | true => a₀ | false => 0) + coords t x = 0

lf: (x₀ == x) = false


coords t x = 0
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


coords t x = 0
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: (match x₀ == x with | true => a₀ | false => 0) + coords t x = 0

lf: (x₀ == x) = false


coords t x = 0
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: (match false with | true => a₀ | false => 0) + coords t x = 0

lf: (x₀ == x) = false


coords t x = 0
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: (match false with | true => a₀ | false => 0) + coords t x = 0

lf: (x₀ == x) = false


coords t x = 0
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: (match false with | true => a₀ | false => 0) + coords t x = 0

lf: (x₀ == x) = false


coords t x = 0
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


coords t x = 0
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

lf: (x₀ == x) = false

hx: coords t x = 0


coords t x = 0
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


coords t x = 0

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


(a₀, x₀) :: 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


(a₀, x₀) :: 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



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


(a₀, x₀) :: 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)


(a₀, x₀) :: 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)


hyp
∀ (x : X), coords t x = 0
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 []

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


(a₀, x₀) :: 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₀, x₀) :: 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 []


(0, x₀) :: 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 []


(0, x₀) :: 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


(a₀, x₀) :: 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 []


(0, x₀) :: 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 []


(0, x₀) :: 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)

step:= equiv_e_of_zero_coeffs t tail_coeffs: t []


a
ElementaryMove R X ((0, x₀) :: 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)

step:= equiv_e_of_zero_coeffs t tail_coeffs: t []


(0, x₀) :: 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)

step:= equiv_e_of_zero_coeffs t tail_coeffs: t []


a.h
0 = 0
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 []


(0, x₀) :: 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₀: a₀ + coords t x₀ = 0

c₀: monomCoeff R X x₀ (a₀, x₀) = a₀

hz: a₀ = 0


(a₀, x₀) :: 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₀


(a₀, x₀) :: 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


(a₀, x₀) :: 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


(a₀, x₀) :: 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


0 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

contra': 0 = 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


0 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

contra': 0 = coords t x₀

contra:= Eq.symm contra': coords t x₀ = 0


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


0 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

contra': 0 = coords t x₀

contra:= Eq.symm contra': coords t x₀ = 0


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₀ + 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₀ = 0


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₀ = 0


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₀ = 0

c₀: monomCoeff R X x₀ (a₀, x₀) = a₀

hz: ¬a₀ = 0

contra': 0 = coords t x₀

contra:= Eq.symm contra': coords t x₀ = 0


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₀ = 0

c₀: monomCoeff R X x₀ (a₀, x₀) = a₀

hz: ¬a₀ = 0

contra': 0 = coords t x₀

contra:= Eq.symm contra': coords t x₀ = 0


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₀ = 0

c₀: monomCoeff R X x₀ (a₀, x₀) = a₀

hz: ¬a₀ = 0

contra': 0 = coords t x₀

contra:= Eq.symm contra': coords t x₀ = 0


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


0 coords t 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


(a₀, x₀) :: 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


(a₀, x₀) :: 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


(a₀, x₀) :: 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


(a₀, x₀) :: 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


∀ (x : X), coords ys x = 0
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


coords ys x = 0
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), coords ys x = 0
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


coords ys x = 0
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), coords ys x = 0
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


coords ys x = 0
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₀ = x


coords ys x = 0
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₀ = x


coords ys x = 0
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₀ = x


coords ys x₀ = 0
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₀ = x


coords ys x₀ = 0
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₀ = x


coords ys x = 0
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₀ = x

ceq:= coords_well_defined x₀ ((coords t x₀, x₀) :: ys) t eqnStep: coords ((coords t x₀, x₀) :: ys) x₀ = coords t x₀


coords ys x₀ = 0
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₀ = x


coords ys x = 0
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₀ = x

ceq: coords ys x₀ = 0


coords ys x₀ = 0
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₀ = x


coords ys x = 0

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

x: X


coords ys x = 0
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₀ = x


coords ys x = 0
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₀ = x

hx:= hyp x: coords ((a₀, x₀) :: t) x = 0


coords ys x = 0
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₀ = x


coords ys x = 0
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₀ = x

hx:= hyp x: (match x₀ == x with | true => a₀ | false => 0) + coords t x = 0


coords ys x = 0
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₀ = x


coords ys x = 0
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₀ = x

hx:= hyp x: (match x₀ == x with | true => a₀ | false => 0) + coords t x = 0

lf: (x₀ == x) = false


coords ys x = 0
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₀ = x


coords ys x = 0
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₀ = x

hx:= hyp x: (match x₀ == x with | true => a₀ | false => 0) + coords t x = 0

lf: (x₀ == x) = false


coords ys x = 0
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₀ = x

hx: (match false with | true => a₀ | false => 0) + coords t x = 0

lf: (x₀ == x) = false


coords ys x = 0
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₀ = x

hx: (match false with | true => a₀ | false => 0) + coords t x = 0

lf: (x₀ == x) = false


coords ys x = 0
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₀ = x

hx: (match false with | true => a₀ | false => 0) + coords t x = 0

lf: (x₀ == x) = false


coords ys x = 0
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₀ = x


coords ys x = 0
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₀ = x

lf: (x₀ == x) = false

hx: coords t x = 0


coords ys x = 0
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₀ = x


coords ys x = 0
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₀ = 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 x


coords ys x = 0
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₀ = x


coords ys x = 0
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₀ = x

lf: (x₀ == x) = false

hx: coords t x = 0

ceq: coords ys x = coords t x


coords ys x = 0
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₀ = x


coords ys x = 0
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₀ = x

lf: (x₀ == x) = false

hx: coords t x = 0

ceq: coords ys x = coords t x


coords ys x = 0
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₀ = x

lf: (x₀ == x) = false

hx: coords t x = 0

ceq: coords ys x = 0


coords ys x = 0
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₀ = x

lf: (x₀ == x) = false

hx: coords t x = 0

ceq: coords ys x = 0


coords ys x = 0
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₀ = x

lf: (x₀ == x) = false

hx: coords t x = 0

ceq: coords ys x = 0


coords ys x = 0
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₀ = x


coords ys x = 0

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


(a₀, x₀) :: 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


(a₀, x₀) :: 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


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


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


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


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



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


(a₀, x₀) :: 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)


(a₀, x₀) :: 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)


hyp
∀ (x : X), coords ys x = 0
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 []

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


(a₀, x₀) :: 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)

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₀)]


(a₀, x₀) :: 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


(a₀, x₀) :: 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)

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₀)]


(a₀, x₀) :: 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


(a₀, x₀) :: 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)

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₀)]


(a₀, x₀) :: 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


(a₀, x₀) :: 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)

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₀)]


sum [(a₀, x₀), (coords t x₀, x₀)] = sum []
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


(a₀, x₀) :: 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)

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₀)]


sum [(a₀, x₀), (coords t x₀, x₀)] = sum []
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₀)]


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₀)]


a
ElementaryMove 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₀)]


sum [(a₀, x₀), (coords t x₀, x₀)] = sum [(a₀ + 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


(a₀, x₀) :: 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)

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₀)]


sum [(a₀ + coords t x₀, x₀)] = sum []
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


(a₀, x₀) :: 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)

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₀)]


sum [(a₀ + coords t x₀, x₀)] = sum []
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₀)]


sum [(0, x₀)] = sum []
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₀)]


sum [(0, x₀)] = sum []
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


(a₀, x₀) :: 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)

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
ElementaryMove 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


(a₀, x₀) :: 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)

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.h
0 = 0
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


(a₀, x₀) :: t []

Goals accomplished! 🐙
termination_by _ R X s h =>
s: FormalSum R✝ R
s
.
length: {α : Type ?u.103706} → List α
length
decreasing_by

Goals accomplished! 🐙
/-- If coordinates are equal, the sums are related by moves. -/ theorem
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₂
equiv_of_equal_coeffs
(
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.104030) → Type ?u.104029 → [inst : Ring R] → Type (max?u.104029?u.104030)
FormalSum
R: Type ?u.104002
R
X: Type ?u.104017
X
) (
hyp: ∀ (x : X), coords s₁ x = coords s₂ x
hyp
: ∀
x: X
x
:
X: Type ?u.104017
X
,
s₁: FormalSum R X
s₁
.
coords: {R : Type ?u.104050} → [inst : Ring R] → {X : Type ?u.104049} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x: X
x
=
s₂: FormalSum R X
s₂
.
coords: {R : Type ?u.104106} → [inst : Ring R] → {X : Type ?u.104105} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x: X
x
) :
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:= match
s₁: FormalSum R X
s₁
with | [] => have
coeffs: ∀ (x : X), coords s₂ x = 0
coeffs
: ∀
x: X
x
:
X: Type ?u.104017
X
,
s₂: FormalSum R X
s₂
.
coords: {R : Type ?u.105342} → [inst : Ring R] → {X : Type ?u.105341} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
x: X
x
=
0: ?m.105360
0
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

hyp: ∀ (x : X), coords [] x = coords s₂ x


∀ (x : X), coords s₂ x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

hyp: ∀ (x : X), coords [] x = coords s₂ x

x: X


coords s₂ x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

hyp: ∀ (x : X), coords [] x = coords s₂ x


∀ (x : X), coords s₂ x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

hyp: ∀ (x : X), coords [] x = coords s₂ x

x: X

h:= hyp x: coords [] x = coords s₂ x


coords s₂ x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

hyp: ∀ (x : X), coords [] x = coords s₂ x


∀ (x : X), coords s₂ x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

hyp: ∀ (x : X), coords [] x = coords s₂ x

x: X

h:= hyp x: coords [] x = coords s₂ x


coords s₂ x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

hyp: ∀ (x : X), coords [] x = coords s₂ x

x: X

h:= hyp x: coords [] x = coords s₂ x


coords [] x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

hyp: ∀ (x : X), coords [] x = coords s₂ x

x: X

h:= hyp x: coords [] x = coords s₂ x


coords [] x = 0
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

s₁, s₂: FormalSum R X

hyp: ∀ (x : X), coords [] x = coords s₂ x


∀ (x : X), coords s₂ x = 0

Goals accomplished! 🐙
let
zl: ?m.105437
zl
:=
equiv_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 []
equiv_e_of_zero_coeffs
s₂: FormalSum R X
s₂
coeffs: ∀ (x : X), coords s₂ x = 0
coeffs
Eq.symm: ∀ {α : Sort ?u.105474} {a b : α}, a = bb = a
Eq.symm
zl: ?m.105437
zl
|
h: R × X
h
::
t: List (R × X)
t
=> let (
a₀: R
a₀
,
x₀: X
x₀
) :=
h: R × X
h
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


(a₀, x₀) :: t 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


(a₀, x₀) :: t 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₀, x₀) :: t 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₀, x₀) :: t 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₀, x₀) :: t t
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
ElementaryMove R X ((a₀, x₀) :: t) t
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₀, x₀) :: t t
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.h
a₀ = 0
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₀, x₀) :: t t
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.h.h
0 = a₀
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₀, x₀) :: t 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₀, x₀) :: t 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₀

eq₁: (a₀, x₀) :: t t


(a₀, x₀) :: t 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₀

eq₁: (a₀, x₀) :: t 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₀, x₀) :: t 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₀

eq₁: (a₀, x₀) :: t t

x✝: List.length t < List.length (h :: t)


(a₀, x₀) :: t 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₀

eq₁: (a₀, x₀) :: t t

x✝: List.length t < List.length (h :: t)


t 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₀

eq₁: (a₀, x₀) :: t t

x✝: List.length t < List.length (h :: t)


∀ (x : X), coords t x = coords s₂ 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₀

eq₁: (a₀, x₀) :: t t

x✝: List.length t < List.length (h :: t)


t 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₀

eq₁: (a₀, x₀) :: t t

x✝: List.length t < List.length (h :: t)

x: X


coords t x = coords s₂ 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₀

eq₁: (a₀, x₀) :: t t

x✝: List.length t < List.length (h :: t)


t 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₀

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 x


coords t x = coords s₂ 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₀

eq₁: (a₀, x₀) :: t t

x✝: List.length t < List.length (h :: t)


t 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₀, x₀) :: t 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


(a₀, x₀) :: t 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₀, x₀) :: t 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


(a₀, x₀) :: t 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₀, x₀) :: t 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


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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₁


coords s₂ x₀ = a₀
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₁


coords s₂ x₀ = a₀
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₁


coords ((a₀, x₀) :: t) x₀ = a₀
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₁


coords ((a₀, x₀) :: t) x₀ = a₀
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₁


coords s₂ x₀ = a₀

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₁


(a₀, x₀) :: t 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₀


(a₀, x₀) :: t 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₀


0 coords s₂ 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₁

cf₂: coords s₂ x₀ = a₀


0 coords s₂ 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₁

cf₂: coords s₂ x₀ = a₀


0 a₀
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₀


0 a₀
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₀


0 coords s₂ 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₁

cf₂: coords s₂ x₀ = a₀

ys: FormalSum R X

eqn: (coords s₂ x₀, x₀) :: ys s₂

right✝: List.length ys < List.length s₂


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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₂ x


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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₂ x


(a₀, x₀) :: t 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: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x


(a₀, x₀) :: t 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: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x


(a₀, x₀) :: t 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: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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: ∀ (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) x


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x

cfs': ∀ (x : X), coords t x = coords ys x


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x

cfs': ∀ (x : X), coords t x = coords ys x


(a₀, x₀) :: t 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: ∀ (x : X), coords ((a₀, x₀) :: ys) x = coords s₂ x

cfs': ∀ (x : X), coords t x = coords ys 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₁


(a₀, x₀) :: t 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: ∀ (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


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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: ∀ (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₀) :: ys


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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: ∀ (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₀) :: ys


(a₀, x₀) :: t 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: (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₀) :: ys


(a₀, x₀) :: t 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: (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₀) :: ys


(a₀, x₀) :: t 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: (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₀) :: ys


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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)


(a₀, x₀) :: t 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₁


(a₀, x₀) :: t 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)


(a₀, x₀) :: t 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)


(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)


a
ElementaryMove 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)


(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)

lem:= ElementaryMove.addCoeffs a₀ a₁ x₀ ys: ElementaryMove R X ((a₀, x₀) :: (a₁, x₀) :: ys) ((a₀ + a₁, x₀) :: ys)


a
ElementaryMove 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)


(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₁


(a₀, x₀) :: t 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₃


(a₀, x₀) :: t 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₃


(a₀, x₀) :: (a₁, x₀) :: ys (a₀, x₀) :: t
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₃


a
(a₁, x₀) :: ys t
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₃


(a₀, x₀) :: (a₁, x₀) :: ys (a₀, x₀) :: 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₁


(a₀, x₀) :: t 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


(a₀, x₀) :: t 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


s₃ 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


s₃ 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


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


a
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



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₀) :: t


s₃ 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


hyp
∀ (x : X), coords s₃ x = coords s₂ 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


s₃ 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


hyp
coords s₃ x = coords s₂ 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


s₃ 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


hyp
coords s₃ x = coords s₂ 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


hyp
coords s₃ x = coords ((a₀, x₀) :: t) 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


hyp
coords s₃ x = coords ((a₀, x₀) :: t) 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


s₃ 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


hyp
monomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t 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


s₃ 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


hyp
monomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t 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


s₃ 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


hyp
monomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t 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


hyp
monomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t 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


hyp
monomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t 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


hyp
monomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t 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


s₃ 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


hyp
monomCoeff R X x (a₀ + coords t x₀, x₀) + coords ys x = monomCoeff R X x (a₀, x₀) + coords t 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


hyp
monomCoeff 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


hyp
monomCoeff 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


s₃ 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₁


(a₀, x₀) :: t s₂

Goals accomplished! 🐙
termination_by _ R X s _ _ =>
s: FormalSum R✝ R
s
.
length: {α : Type ?u.117313} → List α
length
decreasing_by

Goals accomplished! 🐙
/-! ## Functions invariant under moves pass to the quotient. -/ /-- Lifting functions to the move induced quotient. -/ theorem
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₂
func_eql_of_move_equiv
{
β: Sort u
β
:
Sort u: Type u
Sort
Sort u: Type u
u
} (
f: FormalSum R Xβ
f
:
FormalSum: (R : Type ?u.117790) → Type ?u.117789 → [inst : Ring R] → Type (max?u.117789?u.117790)
FormalSum
R: Type ?u.117759
R
X: Type ?u.117774
X
β: Sort u
β
) : (∀
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.117809) → Type ?u.117808 → [inst : Ring R] → Type (max?u.117808?u.117809)
FormalSum
R: Type ?u.117759
R
X: Type ?u.117774
X
,
ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
ElementaryMove
R: Type ?u.117759
R
X: Type ?u.117774
X
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
f: FormalSum R Xβ
f
s₁: FormalSum R X
s₁
=
f: FormalSum R Xβ
f
s₂: FormalSum R X
s₂
) → (∀
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.117912) → Type ?u.117911 → [inst : Ring R] → Type (max?u.117911?u.117912)
FormalSum
R: Type ?u.117759
R
X: Type ?u.117774
X
,
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
f: FormalSum R Xβ
f
s₁: FormalSum R X
s₁
=
f: FormalSum R Xβ
f
s₂: FormalSum R X
s₂
) :=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: 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₂
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₂


∀ (s₁ s₂ : FormalSum 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β


(∀ (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₂
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β


∀ (s₁ s₂ : FormalSum 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β


(∀ (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₂
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β


∀ (s₁ s₂ : FormalSum 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β


∀ (s : FormalSum R X), f s = fbar (sum 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β


c
∀ (a b : FormalSum R X), ?r a bf a = f b
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
FormalSum R XFormalSum R XProp
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β


∀ (s : FormalSum R X), f s = fbar (sum s)

Goals accomplished! 🐙
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: 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₂
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β


(∀ (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₂
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β


(∀ (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₂
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β


(∀ (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₂
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₂


sum s₁ = sum 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₂


hyp
∀ (x : X), coords s₁ x = coords s₂ 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β

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₂


sum s₁ = sum 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


hyp
coords s₁ x = coords s₂ 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β

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₂


sum s₁ = sum s₂

Goals accomplished! 🐙
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: 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₂

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: ∀ (a b : ), a max a b
fst_le_max
(
a:
a
b:
b
:
Nat: Type
Nat
):
a:
a
max: {α : Type ?u.118732} → [self : Max α] → ααα
max
a:
a
b:
b
:=
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:


a max a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:


a max a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:


a max a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:


a max a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: a b


a max a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: a b


R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: a b


a max a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: a b


a maxOfLe.1 a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: a b


a max a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: a b


a { max := fun x y => if x y then y else x }.1 a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: a b


a max a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: a b


a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: a b


a max a b

Goals accomplished! 🐙
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:


a max a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: ¬a b


a max a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: ¬a b


R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: ¬a b


a max a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: ¬a b


a maxOfLe.1 a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: ¬a b


a max a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: ¬a b


a { max := fun x y => if x y then y else x }.1 a b
R: Type ?u.118700

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.118715

inst✝: DecidableEq X

a, b:

c: ¬a b


a max a b

Goals accomplished! 🐙
theorem
snd_le_max: ∀ (a b : ), b max a b
snd_le_max
(
a:
a
b:
b
:
Nat: Type
Nat
):
b:
b
max: {α : Type ?u.119824} → [self : Max α] → ααα
max
a:
a
b:
b
:=
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: a b


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: a b


R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: a b


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: a b


b maxOfLe.1 a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: a b


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: a b


b { max := fun x y => if x y then y else x }.1 a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: a b


b max a b

Goals accomplished! 🐙
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: ¬a b


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: ¬a b


R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: ¬a b


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: ¬a b


b maxOfLe.1 a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: ¬a b


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: ¬a b


b { max := fun x y => if x y then y else x }.1 a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: ¬a b


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: ¬a b


b a
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: ¬a b


b max a b
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: ¬a b


h
b < a
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: ¬a b


b max a b
R: 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


h
b < a
R: Type ?u.119792

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.119807

inst✝: DecidableEq X

a, b:

c: ¬a b


b max a b

Goals accomplished! 🐙
theorem
eq_fst_or_snd_of_max: ∀ (a b : ), max a b = a max a b = b
eq_fst_or_snd_of_max
(
a:
a
b:
b
:
Nat: Type
Nat
) : (
max: {α : Type ?u.120940} → [self : Max α] → ααα
max
a:
a
b:
b
=
a:
a
) ∨ (
max: {α : Type ?u.120948} → [self : Max α] → ααα
max
a:
a
b:
b
=
b:
b
) :=
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:


max a b = a max a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:


max a b = a max a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:


max a b = a max a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:


max a b = a max a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: a b


max a b = a max a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: a b


R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: a b


max a b = a max a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: a b


maxOfLe.1 a b = a maxOfLe.1 a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: a b


max a b = a max a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: a b


{ max := fun x y => if x y then y else x }.1 a b = a { max := fun x y => if x y then y else x }.1 a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: a b


max a b = a max a b = b

Goals accomplished! 🐙
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:


max a b = a max a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: ¬a b


max a b = a max a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: ¬a b


R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: ¬a b


max a b = a max a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: ¬a b


maxOfLe.1 a b = a maxOfLe.1 a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: ¬a b


max a b = a max a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: ¬a b


{ max := fun x y => if x y then y else x }.1 a b = a { max := fun x y => if x y then y else x }.1 a b = b
R: Type ?u.120908

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.120923

inst✝: DecidableEq X

a, b:

c: ¬a b


max a b = a max a b = b

Goals accomplished! 🐙
def
maxNormSuccOnSupp: {R : Type u_1} → [inst : Ring R] → [inst : DecidableEq R] → {X : Type u_2} → (X) → (XR) → List X
maxNormSuccOnSupp
(
norm: X
norm
:
X: Type ?u.122056
X
Nat: Type
Nat
)(
crds: XR
crds
:
X: Type ?u.122056
X
R: Type ?u.122041
R
)(
s: List X
s
:
List: Type ?u.122076 → Type ?u.122076
List
X: Type ?u.122056
X
) :
Nat: Type
Nat
:= match
s: List X
s
with | [] =>
0: ?m.122094
0
|
head: X
head
::
tail: List X
tail
=> if
crds: XR
crds
head: X
head
0: ?m.122127
0
then
max: {α : Type ?u.122224} → [self : Max α] → ααα
max
(
norm: X
norm
head: X
head
+
1: ?m.122234
1
) (
maxNormSuccOnSupp: (X) → (XR) → List X
maxNormSuccOnSupp
norm: X
norm
crds: XR
crds
tail: List X
tail
) else
maxNormSuccOnSupp: (X) → (XR) → List X
maxNormSuccOnSupp
norm: X
norm
crds: XR
crds
tail: List X
tail
theorem
max_in_support: ∀ (norm : X) (crds : XR) (s : List X), maxNormSuccOnSupp norm crds s > 0x, crds x 0 maxNormSuccOnSupp norm crds s = norm x + 1
max_in_support
(
norm: X
norm
:
X: Type ?u.122795
X
Nat: Type
Nat
)(
crds: XR
crds
:
X: Type ?u.122795
X
R: Type ?u.122780
R
)(
s: List X
s
:
List: Type ?u.122815 → Type ?u.122815
List
X: Type ?u.122795
X
) :
maxNormSuccOnSupp: {R : Type ?u.122821} → [inst : Ring R] → [inst : DecidableEq R] → {X : Type ?u.122820} → (X) → (XR) → List X
maxNormSuccOnSupp
norm: X
norm
crds: XR
crds
s: List X
s
>
0: ?m.122881
0
→ ∃
x: X
x
:
X: Type ?u.122795
X
,
crds: XR
crds
x: X
x
0: ?m.122917
0
maxNormSuccOnSupp: {R : Type ?u.122980} → [inst : Ring R] → [inst : DecidableEq R] → {X : Type ?u.122979} → (X) → (XR) → List X
maxNormSuccOnSupp
norm: X
norm
crds: XR
crds
s: List X
s
=
norm: X
norm
x: X
x
+
1: ?m.123031
1
:=
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X


maxNormSuccOnSupp norm crds s > 0x, crds x 0 maxNormSuccOnSupp norm crds s = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X

h: maxNormSuccOnSupp norm crds s > 0


x, crds x 0 maxNormSuccOnSupp norm crds s = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X


maxNormSuccOnSupp norm crds s > 0x, crds x 0 maxNormSuccOnSupp norm crds s = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X

h: maxNormSuccOnSupp norm crds s > 0


x, crds x 0 maxNormSuccOnSupp norm crds s = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

h: maxNormSuccOnSupp norm crds [] > 0


nil
x, crds x 0 maxNormSuccOnSupp norm crds [] = norm x + 1

Goals accomplished! 🐙
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X

h: maxNormSuccOnSupp norm crds s > 0


x, crds x 0 maxNormSuccOnSupp norm crds s = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0


cons
x, crds x 0 maxNormSuccOnSupp norm crds (head :: tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0


cons
x, crds x 0 maxNormSuccOnSupp norm crds (head :: tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0

c: crds head = 0


x, crds x 0 maxNormSuccOnSupp norm crds (head :: tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0

c: crds head = 0


x, ¬crds x = 0 maxNormSuccOnSupp norm crds tail = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0

c: crds head = 0


x, crds x 0 maxNormSuccOnSupp norm crds (head :: tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

c: crds head = 0

h: maxNormSuccOnSupp norm crds tail > 0


x, ¬crds x = 0 maxNormSuccOnSupp norm crds tail = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0

c: crds head = 0


x, crds x 0 maxNormSuccOnSupp norm crds (head :: tail) = norm x + 1

Goals accomplished! 🐙
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0


cons
x, crds x 0 maxNormSuccOnSupp norm crds (head :: tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0

c: ¬crds head = 0


x, crds x 0 maxNormSuccOnSupp norm crds (head :: tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0

c: ¬crds head = 0


x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0

c: ¬crds head = 0


x, crds x 0 maxNormSuccOnSupp norm crds (head :: tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

c: ¬crds head = 0

h: max (norm head + 1) (maxNormSuccOnSupp norm crds tail) > 0


x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0

c: ¬crds head = 0


x, crds x 0 maxNormSuccOnSupp norm crds (head :: tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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


x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0

c: ¬crds head = 0


x, crds x 0 maxNormSuccOnSupp norm crds (head :: tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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


inl
x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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


inr
x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0

c: ¬crds head = 0


x, crds x 0 maxNormSuccOnSupp norm crds (head :: tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 tail


x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 tail


x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 tail


x, ¬crds x = 0 maxNormSuccOnSupp norm crds tail = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 tail


x, ¬crds x = 0 maxNormSuccOnSupp norm crds tail = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 tail


x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 tail


x, ¬crds x = 0 maxNormSuccOnSupp norm crds tail = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 tail


x, ¬crds x = 0 maxNormSuccOnSupp norm crds tail = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 tail


x, ¬crds x = 0 maxNormSuccOnSupp norm crds tail = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 tail


x, ¬crds x = 0 maxNormSuccOnSupp norm crds tail = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 tail


x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1

Goals accomplished! 🐙
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, crds x 0 maxNormSuccOnSupp norm crds tail = norm x + 1

h: maxNormSuccOnSupp norm crds (head :: tail) > 0

c: ¬crds head = 0


x, crds x 0 maxNormSuccOnSupp norm crds (head :: tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 + 1


x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 + 1


x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 + 1


x, ¬crds x = 0 norm head + 1 = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 + 1


x, ¬crds x = 0 norm head + 1 = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 + 1


x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 + 1


x, ¬crds x = 0 norm head + 1 = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 + 1


x, ¬crds x = 0 norm head + 1 = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 + 1


x, ¬crds x = 0 norm head + 1 = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 + 1


x, ¬crds x = 0 norm head + 1 = norm x + 1
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

head: X

tail: List X

ih: maxNormSuccOnSupp norm crds tail > 0x, 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 + 1


x, ¬crds x = 0 max (norm head + 1) (maxNormSuccOnSupp norm crds tail) = norm x + 1

Goals accomplished! 🐙
theorem
supp_below_max: ∀ (norm : X) (crds : XR) (s : List X) (x : X), x scrds x 0norm x + 1 maxNormSuccOnSupp norm crds s
supp_below_max
(
norm: X
norm
:
X: Type ?u.127570
X
Nat: Type
Nat
)(
crds: XR
crds
:
X: Type ?u.127570
X
R: Type ?u.127555
R
)(
s: List X
s
:
List: Type ?u.127590 → Type ?u.127590
List
X: Type ?u.127570
X
) : (
x: X
x
:
X: Type ?u.127570
X
) →
x: X
x
s: List X
s
crds: XR
crds
x: X
x
0: ?m.127627
0
norm: X
norm
x: X
x
+
1: ?m.127696
1
maxNormSuccOnSupp: {R : Type ?u.127712} → [inst : Ring R] → [inst : DecidableEq R] → {X : Type ?u.127711} → (X) → (XR) → List X
maxNormSuccOnSupp
norm: X
norm
crds: XR
crds
s: List X
s
:=
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X


∀ (x : X), x scrds x 0norm x + 1 maxNormSuccOnSupp norm crds s
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X

x: X

h₁: x s

h₂: crds x 0


norm x + 1 maxNormSuccOnSupp norm crds s
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X


∀ (x : X), x scrds x 0norm x + 1 maxNormSuccOnSupp norm crds s
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

x: X

h₂: crds x 0

as✝: List X


head
norm 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: XR

x: X

h₂: crds x 0

b✝: X

as✝: List X

a✝: List.Mem x as✝


tail
norm 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: XR

s: List X


∀ (x : X), x scrds x 0norm x + 1 maxNormSuccOnSupp norm crds s
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

x: X

h₂: crds x 0

as: List X


norm 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: XR

x: X

h₂: crds x 0

as: List X


norm 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: XR

x: X

h₂: crds x 0

as: List X


norm x + 1 if crds x 0 then max (norm x + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds as
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

x: X

h₂: crds x 0

as: List X


norm x + 1 if crds x 0 then max (norm x + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds as
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

x: X

h₂: crds x 0

as: List X


norm 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: XR

x: X

h₂: crds x 0

as: List X


norm 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: XR

x: X

h₂: crds x 0

as: List X


norm 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: XR

s: List X


∀ (x : X), x scrds x 0norm x + 1 maxNormSuccOnSupp norm crds s
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

x: X

h₂: crds x 0

a: X

as: List X

th: List.Mem x as


norm 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: XR

x: X

h₂: crds x 0

a: X

as: List X

th: List.Mem x as


norm 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: XR

x: X

h₂: crds x 0

a: X

as: List X

th: List.Mem x as


norm x + 1 if crds a 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds as
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

x: X

h₂: crds x 0

a: X

as: List X

th: List.Mem x as


norm x + 1 if crds a 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds as
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

x: X

h₂: crds x 0

a: X

as: List X

th: List.Mem x as


norm 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: XR

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


norm x + 1 if crds a 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds as
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

x: X

h₂: crds x 0

a: X

as: List X

th: List.Mem x as


norm 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: XR

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


norm x + 1 if crds a 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds as
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

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 0


norm x + 1 if crds a 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds as
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

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 0


norm 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: XR

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 0


norm x + 1 if crds a 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds as
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

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 0


maxNormSuccOnSupp 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: XR

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 0


norm x + 1 if crds a 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds as

Goals accomplished! 🐙
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

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


norm x + 1 if crds a 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds as
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

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 0


norm x + 1 if crds a 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds as
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

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 0


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: XR

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 0


norm x + 1 if crds a 0 then max (norm a + 1) (maxNormSuccOnSupp norm crds as) else maxNormSuccOnSupp norm crds as

Goals accomplished! 🐙
theorem
supp_zero_of_max_zero: ∀ (norm : X) (crds : XR) (s : List X), maxNormSuccOnSupp norm crds s = 0∀ (x : X), x scrds x = 0
supp_zero_of_max_zero
(
norm: X
norm
:
X: Type ?u.129879
X
Nat: Type
Nat
)(
crds: XR
crds
:
X: Type ?u.129879
X
R: Type ?u.129864
R
)(
s: List X
s
:
List: Type ?u.129899 → Type ?u.129899
List
X: Type ?u.129879
X
) :
maxNormSuccOnSupp: {R : Type ?u.129905} → [inst : Ring R] → [inst : DecidableEq R] → {X : Type ?u.129904} → (X) → (XR) → List X
maxNormSuccOnSupp
norm: X
norm
crds: XR
crds
s: List X
s
=
0: ?m.129965
0
→ (
x: X
x
:
X: Type ?u.129879
X
) →
x: X
x
s: List X
s
crds: XR
crds
x: X
x
=
0: ?m.130021
0
:= fun
hyp: ?m.130101
hyp
x: ?m.130104
x
hm: ?m.130107
hm
=> if
c: ?m.130204
c
:
crds: XR
crds
x: ?m.130104
x
=
0: ?m.130111
0
then
c: ?m.130204
c
else
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X

hyp: maxNormSuccOnSupp norm crds s = 0

x: X

hm: x s

c: ¬crds x = 0


crds x = 0
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X

hyp: maxNormSuccOnSupp norm crds s = 0

x: X

hm: x s

c: ¬crds x = 0


crds x = 0
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X

hyp: maxNormSuccOnSupp norm crds s = 0

x: X

hm: x s

c: ¬crds x = 0


crds x = 0
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

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 s


crds x = 0
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X

hyp: maxNormSuccOnSupp norm crds s = 0

x: X

hm: x s

c: ¬crds x = 0


crds x = 0
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

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 s


crds x = 0
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X

hyp: maxNormSuccOnSupp norm crds s = 0

x: X

hm: x s

c: ¬crds x = 0

l: norm x + 1 0


crds x = 0
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X

hyp: maxNormSuccOnSupp norm crds s = 0

x: X

hm: x s

c: ¬crds x = 0

l: norm x + 1 0


crds x = 0
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X

hyp: maxNormSuccOnSupp norm crds s = 0

x: X

hm: x s

c: ¬crds x = 0

l: norm x + 1 0


crds x = 0
R: Type u_2

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type u_1

inst✝: DecidableEq X

norm: X

crds: XR

s: List X

hyp: maxNormSuccOnSupp norm crds s = 0

x: X

hm: x s

c: ¬crds x = 0


crds x = 0

Goals accomplished! 🐙
def
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
FormalSum.normSucc
(
norm: X
norm
:
X: Type ?u.130569
X
Nat: Type
Nat
)(
s: FormalSum R X
s
:
FormalSum: (R : Type ?u.130586) → Type ?u.130585 → [inst : Ring R] → Type (max?u.130585?u.130586)
FormalSum
R: Type ?u.130554
R
X: Type ?u.130569
X
) :
Nat: Type
Nat
:=
maxNormSuccOnSupp: {R : Type ?u.130598} → [inst : Ring R] → [inst : DecidableEq R] → {X : Type ?u.130597} → (X) → (XR) → List X
maxNormSuccOnSupp
norm: X
norm
s: FormalSum R X
s
.
coords: {R : Type ?u.130645} → [inst : Ring R] → {X : Type ?u.130644} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
s: FormalSum R X
s
.
support: {R : Type ?u.130703} → [inst : Ring R] → {X : Type ?u.130702} → FormalSum R XList X
support
) open FormalSum theorem
normsucc_le: ∀ (norm : X) (s₁ s₂ : FormalSum R X), s₁ s₂normSucc norm s₁ normSucc norm s₂
normsucc_le
(
norm: X
norm
:
X: Type ?u.130903
X
Nat: Type
Nat
)(
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.130920) → Type ?u.130919 → [inst : Ring R] → Type (max?u.130919?u.130920)
FormalSum
R: Type ?u.130888
R
X: Type ?u.130903
X
)(
eql: s₁ s₂
eql
:
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
):
s₁: FormalSum R X
s₁
.
normSucc: {R : Type ?u.131002} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type ?u.131001} → [inst_2 : DecidableEq X] → (X) → FormalSum R X
normSucc
norm: X
norm
s₂: FormalSum R X
s₂
.
normSucc: {R : Type ?u.131096} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type ?u.131095} → [inst_2 : DecidableEq X] → (X) → FormalSum R X
normSucc
norm: X
norm
:= if
c: ?m.131216
c
:
s₁: FormalSum R X
s₁
.
normSucc: {R : Type ?u.131140} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type ?u.131139} → [inst_2 : DecidableEq X] → (X) → FormalSum R X
normSucc
norm: X
norm
=
0: ?m.131169
0
then
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₁ = 0


normSucc norm s₁ normSucc norm 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: normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm 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: normSucc norm s₁ = 0


0 normSucc norm 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: normSucc norm s₁ = 0


0 normSucc norm 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: normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm s₂

Goals accomplished! 🐙
else
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₁ = 0


normSucc norm s₁ normSucc norm 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: ¬normSucc norm s₁ = 0


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: ¬normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm 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


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: ¬normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm 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


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


maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
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

h✝: maxNormSuccOnSupp norm (coords s₁) (support s₁) = 0


inl
maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
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

h✝: maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0


inr
maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
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


maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
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

h✝: maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0


inr
maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0
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


maxNormSuccOnSupp norm (coords s₁) (support s₁) > 0

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: ¬normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm 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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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


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: ¬normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm 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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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


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: ¬normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm 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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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


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: ¬normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm 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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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: ¬normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm 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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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: ¬normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm 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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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₀


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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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₀


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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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₀ = 0


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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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₀


0 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: ¬normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm 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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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: ¬normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm 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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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: ¬normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm 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₁)) = tmaxNormSuccOnSupp norm (coords s₁) (support s₁) > 0) (Nat.eq_zero_or_pos (maxNormSuccOnSupp norm (coords s₁) (support s₁))) (fun h h_1 => Eq.symm h_1absurd h c) (fun h h_1 => Eq.symm h_1h) (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: ¬normSucc norm s₁ = 0


normSucc norm s₁ normSucc norm s₂

Goals accomplished! 🐙
theorem
norm_succ_eq: ∀ (norm : X) (s₁ s₂ : FormalSum R X), s₁ s₂normSucc norm s₁ = normSucc norm s₂
norm_succ_eq
(
norm: X
norm
:
X: Type ?u.133553
X
Nat: Type
Nat
)(
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
:
FormalSum: (R : Type ?u.133579) → Type ?u.133578 → [inst : Ring R] → Type (max?u.133578?u.133579)
FormalSum
R: Type ?u.133538
R
X: Type ?u.133553
X
)(
eql: s₁ s₂
eql
:
s₁: FormalSum R X
s₁
s₂: FormalSum R X
s₂
):
s₁: FormalSum R X
s₁
.
normSucc: {R : Type ?u.133652} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type ?u.133651} → [inst_2 : DecidableEq X] → (X) → FormalSum R X
normSucc
norm: X
norm
=
s₂: FormalSum R X
s₂
.
normSucc: {R : Type ?u.133746} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type ?u.133745} → [inst_2 : DecidableEq X] → (X) → FormalSum R X
normSucc
norm: X
norm
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

norm: X

s₁, s₂: FormalSum R X

eql: s₁ s₂


normSucc norm s₁ = normSucc norm 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₁
normSucc norm s₁ normSucc norm 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₂
normSucc norm s₂ normSucc norm s₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

norm: X

s₁, s₂: FormalSum R X

eql: s₁ s₂


normSucc norm s₁ = normSucc norm 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₁
normSucc norm s₁ normSucc norm 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₂
normSucc norm s₂ normSucc norm s₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

norm: X

s₁, s₂: FormalSum R X

eql: s₁ s₂


normSucc norm s₁ = normSucc norm 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
s₂ s₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

norm: X

s₁, s₂: FormalSum R X

eql: s₁ s₂


normSucc norm s₁ = normSucc norm 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
s₂ s₁
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

norm: X

s₁, s₂: FormalSum R X

eql: s₁ s₂


normSucc norm s₁ = normSucc norm 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.a
eqlCoords R X s₁ s₂
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

norm: X

s₁, s₂: FormalSum R X

eql: s₁ s₂


normSucc norm s₁ = normSucc norm s₂

Goals accomplished! 🐙
class
NormCube: {α : Type} → (α) → (List α) → NormCube α
NormCube
(
α: Type
α
:
Type: Type 1
Type
) where
norm: {α : Type} → [self : NormCube α] → α
norm
:
α: Type
α
Nat: Type
Nat
cube: {α : Type} → [self : NormCube α] → List α
cube
:
Nat: Type
Nat
List: Type ?u.133977 → Type ?u.133977
List
α: Type
α
def
normCube: (α : Type) → [nc : NormCube α] → List α
normCube
(
α: Type
α
:
Type: Type 1
Type
) [
nc: NormCube α
nc
:
NormCube: TypeType
NormCube
α: Type
α
](
k:
k
:
Nat: Type
Nat
) :=
nc: NormCube α
nc
.
cube: {α : Type} → [self : NormCube α] → List α
cube
k:
k
instance
natCube: NormCube
natCube
:
NormCube: TypeType
NormCube
Nat: Type
Nat
:= ⟨
id: {α : Sort ?u.134123} → αα
id
, fun
n: ?m.134129
n
=> (
List.range: List
List.range
n: ?m.134129
n
).
reverse: {α : Type ?u.134131} → List αList α
reverse
instance
finCube: {k : } → NormCube (Fin (Nat.succ k))
finCube
{
k:
k
:
Nat: Type
Nat
} :
NormCube: TypeType
NormCube
(
Fin: Type
Fin
(
Nat.succ:
Nat.succ
k:
k
)) := let
i: Fin (Nat.succ k)
i
:
Nat: Type
Nat
Fin: Type
Fin
(
Nat.succ:
Nat.succ
k:
k
) := fun
n: ?m.134210
n
=> ⟨
n: ?m.134210
n
% (
Nat.succ:
Nat.succ
k:
k
),
R: Type ?u.134175

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.134190

inst✝: DecidableEq X

k, n:


R: Type ?u.134175

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.134190

inst✝: DecidableEq X

k, n:


a
R: Type ?u.134175

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type ?u.134190

inst✝: DecidableEq X

k, n:



Goals accomplished! 🐙
⟩ ⟨fun
j: ?m.134261
j
=>
j: ?m.134261
j
.
val: {n : } → Fin n
val
, fun
n: ?m.134267
n
=> (
List.range: List
List.range
(
min: {α : Type ?u.134269} → [self : Min α] → ααα
min
(
k:
k
+
1: ?m.134279
1
)
n: ?m.134267
n
)).
reverse: {α : Type ?u.134334} → List αList α
reverse
.
map: {α : Type ?u.134338} → {β : Type ?u.134337} → (αβ) → List αList β
map
i: Fin (Nat.succ k)
i
instance
intCube: NormCube
intCube
:
NormCube: TypeType
NormCube
: Type
where norm :=
Int.natAbs:
Int.natAbs
cube :
Nat: Type
Nat
List: Type ?u.134681 → Type ?u.134681
List
: Type
:= fun
n: ?m.134683
n
=> (
List.range: List
List.range
(
n: ?m.134683
n
)).
reverse: {α : Type ?u.134688} → List αList α
reverse
.
map: {α : Type ?u.134692} → {β : Type ?u.134691} → (αβ) → List αList β
map
(
Int.ofNat:
Int.ofNat
) ++ (
List.range: List
List.range
(
n: ?m.134683
n
-
1: ?m.134706
1
)).
map: {α : Type ?u.134759} → {β : Type ?u.134758} → (αβ) → List αList β
map
(
Int.negSucc:
Int.negSucc
) instance
prodCube: {α β : Type} → [na : NormCube α] → [nb : NormCube β] → NormCube (α × β)
prodCube
{
α: Type
α
β: Type
β
:
Type: Type 1
Type
} [
na: NormCube α
na
:
NormCube: TypeType
NormCube
α: Type
α
] [
nb: NormCube β
nb
:
NormCube: TypeType
NormCube
β: Type
β
] :
NormCube: TypeType
NormCube
(
α: Type
α
×
β: Type
β
) where norm : (
α: Type
α
×
β: Type
β
) →
Nat: Type
Nat
:= fun
a: α
a
,
b: β
b
⟩ =>
max: {α : Type ?u.135012} → [self : Max α] → ααα
max
(
na: NormCube α
na
.
norm: {α : Type} → [self : NormCube α] → α
norm
a: α
a
) (
nb: NormCube β
nb
.
norm: {α : Type} → [self : NormCube α] → α
norm
b: β
b
) cube :
Nat: Type
Nat
List: Type ?u.135096 → Type ?u.135096
List
(
α: Type
α
×
β: Type
β
) := fun
n: ?m.135100
n
=> (
na: NormCube α
na
.
cube: {α : Type} → [self : NormCube α] → List α
cube
n: ?m.135100
n
).
bind: {α : Type ?u.135105} → {β : Type ?u.135104} → List α(αList β) → List β
bind
(fun
a: ?m.135114
a
=> (
nb: NormCube β
nb
.
cube: {α : Type} → [self : NormCube α] → List α
cube
n: ?m.135100
n
).
map: {α : Type ?u.135118} → {β : Type ?u.135117} → (αβ) → List αList β
map
(fun
b: ?m.135126
b
=> (
a: ?m.135114
a
,
b: ?m.135126
b
))) def
FreeModule.normBound: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → R[X][nx : NormCube X] →
FreeModule.normBound
(
x: R[X]
x
:
R: Type ?u.135516
R
[
X: Type ?u.135531
X
])[
nx: NormCube X
nx
:
NormCube: TypeType
NormCube
X: Type ?u.135531
X
] :
Nat: Type
Nat
:=
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

nx: NormCube 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


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

nx: NormCube 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


a
∀ (a b : FormalSum R X), a bf a = f b
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


a
Quotient ?m.135772
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


R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

nx: NormCube 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


a
R: Type

inst✝²: Ring R

inst✝¹: DecidableEq R

X: Type

inst✝: DecidableEq X

x: R[X]

nx: NormCube X



Goals accomplished! 🐙
-- this should be viewable directly if `R` and `X` are, as in our case def
FreeModule.coeffList: R[X][nx : NormCube X] → List (R × X)
FreeModule.coeffList
(
x: R[X]
x
:
R: Type ?u.136041
R
[
X: Type ?u.136056
X
])[
nx: NormCube X
nx
:
NormCube: TypeType
NormCube
X: Type ?u.136056
X
] :
List: Type ?u.136128 → Type ?u.136128
List
(
R: Type ?u.136041
R
×
X: Type ?u.136056
X
) := (
nx: NormCube X
nx
.
cube: {α : Type} → [self : NormCube α] → List α
cube
(
x: R[X]
x
.
normBound: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → R[X][nx : NormCube X] →
normBound
)).
filterMap: {α : Type ?u.136235} → {β : Type ?u.136234} → (αOption β) → List αList β
filterMap
fun
x₀: ?m.136244
x₀
=> let
a: ?m.136247
a
:=
x: R[X]
x
.
coordinates: {R : Type} → [inst : Ring R] → {X : Type} → [inst_1 : DecidableEq X] → XR[X]R
coordinates
x₀: ?m.136244
x₀
if
a: ?m.136247
a
=
0: ?m.136302
0
then
none: {α : Type ?u.136389} → Option α
none
else
some: {α : Type ?u.136392} → αOption α
some
(
a: ?m.136247
a
,
x₀: ?m.136244
x₀
) -- basic repr instance
basicRepr: [inst : NormCube X] → [inst : Repr X] → [inst : Repr R] → Repr (R[X])
basicRepr
[
NormCube: TypeType
NormCube
X: Type ?u.136620
X
][
Repr: Type ?u.136634 → Type ?u.136634
Repr
X: Type ?u.136620
X
][
Repr: Type ?u.136637 → Type ?u.136637
Repr
R: Type ?u.136605
R
]:
Repr: Type ?u.136640 → Type ?u.136640
Repr
(
R: Type ?u.136605
R
[
X: Type ?u.136620
X
]) := ⟨fun
x: ?m.136707
x
_: ?m.136710
_
=>
reprStr: {α : Type ?u.136712} → [inst : Repr α] → αString
reprStr
(
x: ?m.136707
x
.
coeffList: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {X : Type} → [inst_2 : DecidableEq X] → R[X][nx : NormCube X] → List (R × X)
coeffList
)⟩ end NormRepr