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 UnitConjecture.FreeModule

/-!
# Group Rings

We construct the Group ring `R[G]` given a group `G` and a ring `R`, both having decidable equality. The ring structures is constructed using the (implicit) universal property of `R`-modules. As a check on our definitions, `R[G]` is proved to be a Ring.

We first define multiplication on formal sums. We prove many properties that are used both to show invariance under elementary moves and to prove that `R[G]` is a ring.

-/

variable {
R: Type
R
:
Type: Type 1
Type
} [
Ring: Type ?u.6428 → Type ?u.6428
Ring
R: Type
R
] [
DecidableEq: Sort ?u.49 → Sort (max1?u.49)
DecidableEq
R: Type
R
] variable {
G: Type
G
:
Type: Type 1
Type
} [
Group: Type ?u.1721 → Type ?u.1721
Group
G: Type
G
] [
DecidableEq: Sort ?u.1191 → Sort (max1?u.1191)
DecidableEq
G: Type
G
] /-! ## Multiplication on formal sums -/ section FormalSumMul /-- multiplication by a monomial -/ def
FormalSum.mulMonom: RGFormalSum R GFormalSum R G
FormalSum.mulMonom
(
b: R
b
:
R: Type
R
)(
h: G
h
:
G: Type
G
) :
FormalSum: (R : Type ?u.78) → Type ?u.77 → [inst : Ring R] → Type (max?u.77?u.78)
FormalSum
R: Type
R
G: Type
G
FormalSum: (R : Type ?u.86) → Type ?u.85 → [inst : Ring R] → Type (max?u.85?u.86)
FormalSum
R: Type
R
G: Type
G
| [] =>
[]: List ?m.109
[]
| (
a: R
a
,
g: G
g
) ::
tail: List (R × G)
tail
=> (
a: R
a
*
b: R
b
,
g: G
g
*
h: G
h
) :: (
mulMonom: RGFormalSum R GFormalSum R G
mulMonom
b: R
b
h: G
h
tail: List (R × G)
tail
) /-- multiplication for formal sums -/ def
FormalSum.mul: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → FormalSum R GFormalSum R GFormalSum R G
FormalSum.mul
(
fst: FormalSum R G
fst
:
FormalSum: (R : Type ?u.1201) → Type ?u.1200 → [inst : Ring R] → Type (max?u.1200?u.1201)
FormalSum
R: Type
R
G: Type
G
) :
FormalSum: (R : Type ?u.1211) → Type ?u.1210 → [inst : Ring R] → Type (max?u.1210?u.1211)
FormalSum
R: Type
R
G: Type
G
FormalSum: (R : Type ?u.1215) → Type ?u.1214 → [inst : Ring R] → Type (max?u.1214?u.1215)
FormalSum
R: Type
R
G: Type
G
| [] =>
[]: List ?m.1236
[]
| (
b: R
b
,
h: G
h
) ::
ys: List (R × G)
ys
=> (
FormalSum.mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
FormalSum.mulMonom
b: R
b
h: G
h
fst: FormalSum R G
fst
) ++ (
mul: FormalSum R GFormalSum R GFormalSum R G
mul
fst: FormalSum R G
fst
ys: List (R × G)
ys
) end FormalSumMul /-! ## Properties of multiplication on formal sums -/ namespace GroupRing open FormalSum /-- multiplication by the zero monomial -/ theorem
mul_monom_zero: ∀ {R : Type} [inst : Ring R] {G : Type} [inst_1 : Group G] [inst_2 : DecidableEq G] (g x₀ : G) (s : FormalSum R G), coords (mulMonom 0 g s) x₀ = 0
mul_monom_zero
(
g: G
g
x₀: G
x₀
:
G: Type
G
)(
s: FormalSum R G
s
:
FormalSum: (R : Type ?u.1738) → Type ?u.1737 → [inst : Ring R] → Type (max?u.1737?u.1738)
FormalSum
R: Type
R
G: Type
G
):
coords: {R : Type ?u.1748} → [inst : Ring R] → {X : Type ?u.1747} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
0: ?m.1766
0
g: G
g
s: FormalSum R G
s
)
x₀: G
x₀
=
0: ?m.1876
0
:=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

g, x₀: G

s: FormalSum R G


coords (mulMonom 0 g s) x₀ = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

g, x₀: G

s: FormalSum R G


coords (mulMonom 0 g s) x₀ = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

g, x₀: G


nil
coords (mulMonom 0 g []) x₀ = 0

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

g, x₀: G

s: FormalSum R G


coords (mulMonom 0 g s) x₀ = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

g, x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 0 g t) x₀ = 0


cons
coords (mulMonom 0 g (h :: t)) x₀ = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

g, x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 0 g t) x₀ = 0


cons
coords (mulMonom 0 g t) x₀ = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

g, x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 0 g t) x₀ = 0


cons
coords (mulMonom 0 g (h :: t)) x₀ = 0

Goals accomplished! 🐙
/-- distributivity of multiplication by a monomial -/ theorem
mul_monom_dist: ∀ (b : R) (h x₀ : G) (s₁ s₂ : FormalSum R G), coords (mulMonom b h (s₁ ++ s₂)) x₀ = coords (mulMonom b h s₁) x₀ + coords (mulMonom b h s₂) x₀
mul_monom_dist
(
b: R
b
:
R: Type
R
)(
h: G
h
x₀: G
x₀
:
G: Type
G
)(
s₁: FormalSum R G
s₁
s₂: FormalSum R G
s₂
:
FormalSum: (R : Type ?u.4016) → Type ?u.4015 → [inst : Ring R] → Type (max?u.4015?u.4016)
FormalSum
R: Type
R
G: Type
G
):
coords: {R : Type ?u.4031} → [inst : Ring R] → {X : Type ?u.4030} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
b: R
b
h: G
h
(
s₁: FormalSum R G
s₁
++
s₂: FormalSum R G
s₂
))
x₀: G
x₀
=
coords: {R : Type ?u.4136} → [inst : Ring R] → {X : Type ?u.4135} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
b: R
b
h: G
h
s₁: FormalSum R G
s₁
)
x₀: G
x₀
+
coords: {R : Type ?u.4157} → [inst : Ring R] → {X : Type ?u.4156} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
b: R
b
h: G
h
s₂: FormalSum R G
s₂
)
x₀: G
x₀
:=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₂: FormalSum R G


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

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₂: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (tail ++ s₂)) x₀ = coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀


cons
coords (mulMonom b h (head :: tail ++ s₂)) x₀ = coords (mulMonom b h (head :: tail)) x₀ + coords (mulMonom b h s₂) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₂: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (tail ++ s₂)) x₀ = coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀


cons
monomCoeff R G x₀ (head.fst * b, head.snd * h) + coords (mulMonom b h (tail ++ s₂)) x₀ = monomCoeff R G x₀ (head.fst * b, head.snd * h) + coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₂: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (tail ++ s₂)) x₀ = coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀


cons
coords (mulMonom b h (head :: tail ++ s₂)) x₀ = coords (mulMonom b h (head :: tail)) x₀ + coords (mulMonom b h s₂) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₂: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (tail ++ s₂)) x₀ = coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀


cons
monomCoeff R G x₀ (head.fst * b, head.snd * h) + coords (mulMonom b h (tail ++ s₂)) x₀ = monomCoeff R G x₀ (head.fst * b, head.snd * h) + coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₂: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (tail ++ s₂)) x₀ = coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀


cons
monomCoeff R G x₀ (head.fst * b, head.snd * h) + (coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀) = monomCoeff R G x₀ (head.fst * b, head.snd * h) + coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₂: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (tail ++ s₂)) x₀ = coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀


cons
monomCoeff R G x₀ (head.fst * b, head.snd * h) + (coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀) = monomCoeff R G x₀ (head.fst * b, head.snd * h) + coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₂: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (tail ++ s₂)) x₀ = coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀


cons
coords (mulMonom b h (head :: tail ++ s₂)) x₀ = coords (mulMonom b h (head :: tail)) x₀ + coords (mulMonom b h s₂) x₀

Goals accomplished! 🐙
/-- right distributivity -/ theorem
mul_dist: ∀ (x₀ : G) (s₁ s₂ s₃ : FormalSum R G), coords (mul s₁ (s₂ ++ s₃)) x₀ = coords (mul s₁ s₂) x₀ + coords (mul s₁ s₃) x₀
mul_dist
(
x₀: G
x₀
:
G: Type
G
)(
s₁: FormalSum R G
s₁
s₂: FormalSum R G
s₂
s₃: FormalSum R G
s₃
:
FormalSum: (R : Type ?u.6471) → Type ?u.6470 → [inst : Ring R] → Type (max?u.6470?u.6471)
FormalSum
R: Type
R
G: Type
G
):
coords: {R : Type ?u.6477} → [inst : Ring R] → {X : Type ?u.6476} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mul: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → FormalSum R GFormalSum R GFormalSum R G
mul
s₁: FormalSum R G
s₁
(
s₂: FormalSum R G
s₂
++
s₃: FormalSum R G
s₃
))
x₀: G
x₀
=
coords: {R : Type ?u.6582} → [inst : Ring R] → {X : Type ?u.6581} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mul: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → FormalSum R GFormalSum R GFormalSum R G
mul
s₁: FormalSum R G
s₁
s₂: FormalSum R G
s₂
)
x₀: G
x₀
+
coords: {R : Type ?u.6603} → [inst : Ring R] → {X : Type ?u.6602} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mul: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → FormalSum R GFormalSum R GFormalSum R G
mul
s₁: FormalSum R G
s₁
s₃: FormalSum R G
s₃
)
x₀: G
x₀
:=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

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


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

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


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G


nil
coords (mul s₁ ([] ++ s₃)) x₀ = coords (mul s₁ []) x₀ + coords (mul s₁ s₃) x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

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


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mul s₁ (head :: tail ++ s₃)) x₀ = coords (mul s₁ (head :: tail)) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mulMonom head.fst head.snd s₁ ++ mul s₁ (tail ++ s₃)) x₀ = coords (mulMonom head.fst head.snd s₁ ++ mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mul s₁ (head :: tail ++ s₃)) x₀ = coords (mul s₁ (head :: tail)) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mulMonom head.fst head.snd s₁ ++ mul s₁ (tail ++ s₃)) x₀ = coords (mulMonom head.fst head.snd s₁ ++ mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mulMonom head.fst head.snd s₁) x₀ + coords (mul s₁ (tail ++ s₃)) x₀ = coords (mulMonom head.fst head.snd s₁ ++ mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mulMonom head.fst head.snd s₁) x₀ + coords (mul s₁ (tail ++ s₃)) x₀ = coords (mulMonom head.fst head.snd s₁ ++ mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mul s₁ (head :: tail ++ s₃)) x₀ = coords (mul s₁ (head :: tail)) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mulMonom head.fst head.snd s₁) x₀ + coords (mul s₁ (tail ++ s₃)) x₀ = coords (mulMonom head.fst head.snd s₁ ++ mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mulMonom head.fst head.snd s₁) x₀ + coords (mul s₁ (tail ++ s₃)) x₀ = coords (mulMonom head.fst head.snd s₁) x₀ + coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mulMonom head.fst head.snd s₁) x₀ + coords (mul s₁ (tail ++ s₃)) x₀ = coords (mulMonom head.fst head.snd s₁) x₀ + coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mul s₁ (head :: tail ++ s₃)) x₀ = coords (mul s₁ (head :: tail)) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mulMonom head.fst head.snd s₁) x₀ + coords (mul s₁ (tail ++ s₃)) x₀ = coords (mulMonom head.fst head.snd s₁) x₀ + coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mulMonom head.fst head.snd s₁) x₀ + (coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀) = coords (mulMonom head.fst head.snd s₁) x₀ + coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mulMonom head.fst head.snd s₁) x₀ + (coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀) = coords (mulMonom head.fst head.snd s₁) x₀ + coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

s₁, s₃: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mul s₁ (tail ++ s₃)) x₀ = coords (mul s₁ tail) x₀ + coords (mul s₁ s₃) x₀


cons
coords (mul s₁ (head :: tail ++ s₃)) x₀ = coords (mul s₁ (head :: tail)) x₀ + coords (mul s₁ s₃) x₀

Goals accomplished! 🐙
/-- associativity with two terms monomials -/ theorem
mul_monom_monom_assoc: ∀ {R : Type} [inst : Ring R] {G : Type} [inst_1 : Group G] [inst_2 : DecidableEq G] {x : G} (a b : R) (h x₀ : G) (s : FormalSum R G), coords (mulMonom b h (mulMonom a x s)) x₀ = coords (mulMonom (a * b) (x * h) s) x₀
mul_monom_monom_assoc
(
a: R
a
b: R
b
:
R: Type
R
)(
h: G
h
x₀: G
x₀
:
G: Type
G
)(
s: FormalSum R G
s
:
FormalSum: (R : Type ?u.8755) → Type ?u.8754 → [inst : Ring R] → Type (max?u.8754?u.8755)
FormalSum
R: Type
R
G: Type
G
):
coords: {R : Type ?u.8812} → [inst : Ring R] → {X : Type ?u.8811} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
b: R
b
h: G
h
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
a: R
a
x: ?m.8794
x
s: FormalSum R G
s
))
x₀: G
x₀
=
coords: {R : Type ?u.8877} → [inst : Ring R] → {X : Type ?u.8876} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
(
a: R
a
*
b: R
b
) (
x: ?m.8794
x
*
h: G
h
)
s: FormalSum R G
s
)
x₀: G
x₀
:=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: G

a, b: R

h, x₀: G

s: FormalSum R G


coords (mulMonom b h (mulMonom a x s)) x₀ = coords (mulMonom (a * b) (x * h) s) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: G

a, b: R

h, x₀: G

s: FormalSum R G


coords (mulMonom b h (mulMonom a x s)) x₀ = coords (mulMonom (a * b) (x * h) s) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: G

a, b: R

h, x₀: G


nil
coords (mulMonom b h (mulMonom a x [])) x₀ = coords (mulMonom (a * b) (x * h) []) x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: G

a, b: R

h, x₀: G

s: FormalSum R G


coords (mulMonom b h (mulMonom a x s)) x₀ = coords (mulMonom (a * b) (x * h) s) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: G

a, b: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mulMonom a x tail)) x₀ = coords (mulMonom (a * b) (x * h) tail) x₀


cons
coords (mulMonom b h (mulMonom a x (head :: tail))) x₀ = coords (mulMonom (a * b) (x * h) (head :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: G

a, b: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mulMonom a x tail)) x₀ = coords (mulMonom (a * b) (x * h) tail) x₀

a₁: R

x₁: G


cons
coords (mulMonom b h (mulMonom a x ((a₁, x₁) :: tail))) x₀ = coords (mulMonom (a * b) (x * h) ((a₁, x₁) :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: G

a, b: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mulMonom a x tail)) x₀ = coords (mulMonom (a * b) (x * h) tail) x₀


cons
coords (mulMonom b h (mulMonom a x (head :: tail))) x₀ = coords (mulMonom (a * b) (x * h) (head :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: G

a, b: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mulMonom a x tail)) x₀ = coords (mulMonom (a * b) (x * h) tail) x₀

a₁: R

x₁: G


cons
coords (mulMonom b h (mulMonom a x tail)) x₀ = coords (mulMonom (a * b) (x * h) tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: G

a, b: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mulMonom a x tail)) x₀ = coords (mulMonom (a * b) (x * h) tail) x₀


cons
coords (mulMonom b h (mulMonom a x (head :: tail))) x₀ = coords (mulMonom (a * b) (x * h) (head :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: G

a, b: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mulMonom a x tail)) x₀ = coords (mulMonom (a * b) (x * h) tail) x₀

a₁: R

x₁: G


cons
coords (mulMonom b h (mulMonom a x tail)) x₀ = coords (mulMonom (a * b) (x * h) tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: G

a, b: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mulMonom a x tail)) x₀ = coords (mulMonom (a * b) (x * h) tail) x₀

a₁: R

x₁: G


cons
coords (mulMonom (a * b) (x * h) tail) x₀ = coords (mulMonom (a * b) (x * h) tail) x₀

Goals accomplished! 🐙
/-- associativity with one term a monomial -/ theorem
mul_monom_assoc: ∀ (b : R) (h x₀ : G) (s₁ s₂ : FormalSum R G), coords (mulMonom b h (mul s₁ s₂)) x₀ = coords (mul s₁ (mulMonom b h s₂)) x₀
mul_monom_assoc
(
b: R
b
:
R: Type
R
)(
h: G
h
x₀: G
x₀
:
G: Type
G
)(
s₁: FormalSum R G
s₁
s₂: FormalSum R G
s₂
:
FormalSum: (R : Type ?u.11315) → Type ?u.11314 → [inst : Ring R] → Type (max?u.11314?u.11315)
FormalSum
R: Type
R
G: Type
G
):
coords: {R : Type ?u.11330} → [inst : Ring R] → {X : Type ?u.11329} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
b: R
b
h: G
h
(
mul: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → FormalSum R GFormalSum R GFormalSum R G
mul
s₁: FormalSum R G
s₁
s₂: FormalSum R G
s₂
))
x₀: G
x₀
=
coords: {R : Type ?u.11399} → [inst : Ring R] → {X : Type ?u.11398} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mul: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → FormalSum R GFormalSum R GFormalSum R G
mul
s₁: FormalSum R G
s₁
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
b: R
b
h: G
h
s₂: FormalSum R G
s₂
))
x₀: G
x₀
:=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G


coords (mulMonom b h (mul s₁ s₂)) x₀ = coords (mul s₁ (mulMonom b h s₂)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G


coords (mulMonom b h (mul s₁ s₂)) x₀ = coords (mul s₁ (mulMonom b h s₂)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G


nil
coords (mulMonom b h (mul s₁ [])) x₀ = coords (mul s₁ (mulMonom b h [])) x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G


coords (mulMonom b h (mul s₁ s₂)) x₀ = coords (mul s₁ (mulMonom b h s₂)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀


cons
coords (mulMonom b h (mul s₁ (head :: tail))) x₀ = coords (mul s₁ (mulMonom b h (head :: tail))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mul s₁ ((a, x) :: tail))) x₀ = coords (mul s₁ (mulMonom b h ((a, x) :: tail))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀


cons
coords (mulMonom b h (mul s₁ (head :: tail))) x₀ = coords (mul s₁ (mulMonom b h (head :: tail))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁ ++ mul s₁ tail)) x₀ = coords (mulMonom (a * b) (x * h) s₁ ++ mul s₁ (mulMonom b h tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀


cons
coords (mulMonom b h (mul s₁ (head :: tail))) x₀ = coords (mul s₁ (mulMonom b h (head :: tail))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁ ++ mul s₁ tail)) x₀ = coords (mulMonom (a * b) (x * h) s₁ ++ mul s₁ (mulMonom b h tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁ ++ mul s₁ tail)) x₀ = coords (mulMonom (a * b) (x * h) s₁) x₀ + coords (mul s₁ (mulMonom b h tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁ ++ mul s₁ tail)) x₀ = coords (mulMonom (a * b) (x * h) s₁) x₀ + coords (mul s₁ (mulMonom b h tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀


cons
coords (mulMonom b h (mul s₁ (head :: tail))) x₀ = coords (mul s₁ (mulMonom b h (head :: tail))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁ ++ mul s₁ tail)) x₀ = coords (mulMonom (a * b) (x * h) s₁) x₀ + coords (mul s₁ (mulMonom b h tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀


cons
coords (mulMonom b h (mul s₁ (head :: tail))) x₀ = coords (mul s₁ (mulMonom b h (head :: tail))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁ ++ mul s₁ tail)) x₀ = coords (mulMonom (a * b) (x * h) s₁) x₀ + coords (mul s₁ (mulMonom b h tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁)) x₀ + coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mulMonom (a * b) (x * h) s₁) x₀ + coords (mul s₁ (mulMonom b h tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁)) x₀ + coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mulMonom (a * b) (x * h) s₁) x₀ + coords (mul s₁ (mulMonom b h tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀


cons
coords (mulMonom b h (mul s₁ (head :: tail))) x₀ = coords (mul s₁ (mulMonom b h (head :: tail))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁)) x₀ + coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mulMonom (a * b) (x * h) s₁) x₀ + coords (mul s₁ (mulMonom b h tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁)) x₀ + coords (mul s₁ (mulMonom b h tail)) x₀ = coords (mulMonom (a * b) (x * h) s₁) x₀ + coords (mul s₁ (mulMonom b h tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁)) x₀ + coords (mul s₁ (mulMonom b h tail)) x₀ = coords (mulMonom (a * b) (x * h) s₁) x₀ + coords (mul s₁ (mulMonom b h tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀


cons
coords (mulMonom b h (mul s₁ (head :: tail))) x₀ = coords (mul s₁ (mulMonom b h (head :: tail))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁)) x₀ = coords (mulMonom (a * b) (x * h) s₁) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀


cons
coords (mulMonom b h (mul s₁ (head :: tail))) x₀ = coords (mul s₁ (mulMonom b h (head :: tail))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom b h (mulMonom a x s₁)) x₀ = coords (mulMonom (a * b) (x * h) s₁) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁: FormalSum R G

head: R × G

tail: List (R × G)

ih: coords (mulMonom b h (mul s₁ tail)) x₀ = coords (mul s₁ (mulMonom b h tail)) x₀

a: R

x: G


cons
coords (mulMonom (a * b) (x * h) s₁) x₀ = coords (mulMonom (a * b) (x * h) s₁) x₀

Goals accomplished! 🐙
/-- left distributivity for multiplication by a monomial -/ theorem
mul_monom_add: ∀ (b₁ b₂ : R) (h x₀ : G) (s : FormalSum R G), coords (mulMonom (b₁ + b₂) h s) x₀ = coords (mulMonom b₁ h s) x₀ + coords (mulMonom b₂ h s) x₀
mul_monom_add
(
b₁: R
b₁
b₂: R
b₂
:
R: Type
R
)(
h: G
h
x₀: G
x₀
:
G: Type
G
)(
s: FormalSum R G
s
:
FormalSum: (R : Type ?u.14098) → Type ?u.14097 → [inst : Ring R] → Type (max?u.14097?u.14098)
FormalSum
R: Type
R
G: Type
G
):
coords: {R : Type ?u.14108} → [inst : Ring R] → {X : Type ?u.14107} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
(
b₁: R
b₁
+
b₂: R
b₂
)
h: G
h
s: FormalSum R G
s
)
x₀: G
x₀
=
coords: {R : Type ?u.14257} → [inst : Ring R] → {X : Type ?u.14256} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
b₁: R
b₁
h: G
h
s: FormalSum R G
s
)
x₀: G
x₀
+
coords: {R : Type ?u.14278} → [inst : Ring R] → {X : Type ?u.14277} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
b₂: R
b₂
h: G
h
s: FormalSum R G
s
)
x₀: G
x₀
:=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

s: FormalSum R G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

s: FormalSum R G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G


nil
coords (mulMonom (b₁ + b₂) h []) x₀ = coords (mulMonom b₁ h []) x₀ + coords (mulMonom b₂ h []) x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

s: FormalSum R G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀


cons
coords (mulMonom (b₁ + b₂) h (head :: tail)) x₀ = coords (mulMonom b₁ h (head :: tail)) x₀ + coords (mulMonom b₂ h (head :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
coords (mulMonom (b₁ + b₂) h ((a, g) :: tail)) x₀ = coords (mulMonom b₁ h ((a, g) :: tail)) x₀ + coords (mulMonom b₂ h ((a, g) :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀


cons
coords (mulMonom (b₁ + b₂) h (head :: tail)) x₀ = coords (mulMonom b₁ h (head :: tail)) x₀ + coords (mulMonom b₂ h (head :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * (b₁ + b₂), g * h) + coords (mulMonom (b₁ + b₂) h tail) x₀ = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀


cons
coords (mulMonom (b₁ + b₂) h (head :: tail)) x₀ = coords (mulMonom b₁ h (head :: tail)) x₀ + coords (mulMonom b₂ h (head :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * (b₁ + b₂), g * h) + coords (mulMonom (b₁ + b₂) h tail) x₀ = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * b₁ + a * b₂, g * h) + coords (mulMonom (b₁ + b₂) h tail) x₀ = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * b₁ + a * b₂, g * h) + coords (mulMonom (b₁ + b₂) h tail) x₀ = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀


cons
coords (mulMonom (b₁ + b₂) h (head :: tail)) x₀ = coords (mulMonom b₁ h (head :: tail)) x₀ + coords (mulMonom b₂ h (head :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * b₁ + a * b₂, g * h) + coords (mulMonom (b₁ + b₂) h tail) x₀ = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom (b₁ + b₂) h tail) x₀ = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom (b₁ + b₂) h tail) x₀ = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀


cons
coords (mulMonom (b₁ + b₂) h (head :: tail)) x₀ = coords (mulMonom b₁ h (head :: tail)) x₀ + coords (mulMonom b₂ h (head :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom (b₁ + b₂) h tail) x₀ = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀


cons
coords (mulMonom (b₁ + b₂) h (head :: tail)) x₀ = coords (mulMonom b₁ h (head :: tail)) x₀ + coords (mulMonom b₂ h (head :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


a
coords (mulMonom b₁ h tail) x₀ + monomCoeff R G x₀ (a * b₂, g * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


a
coords (mulMonom b₂ h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + (monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + (monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


a
monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₁ h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


a
coords (mulMonom b₂ h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + monomCoeff R G x₀ (a * b₂, g * h) + (coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


a
monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₁ h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


a
coords (mulMonom b₂ h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


a
coords (mulMonom b₁ h tail) x₀ + monomCoeff R G x₀ (a * b₂, g * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


a
coords (mulMonom b₂ h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


a
coords (mulMonom b₁ h tail) x₀ + monomCoeff R G x₀ (a * b₂, g * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


a
coords (mulMonom b₂ h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀


cons
coords (mulMonom (b₁ + b₂) h (head :: tail)) x₀ = coords (mulMonom b₁ h (head :: tail)) x₀ + coords (mulMonom b₂ h (head :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀


cons
coords (mulMonom (b₁ + b₂) h (head :: tail)) x₀ = coords (mulMonom b₁ h (head :: tail)) x₀ + coords (mulMonom b₂ h (head :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


coords (mulMonom b₁ h tail) x₀ + monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


cons
monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀) = monomCoeff R G x₀ (a * b₁, g * h) + (coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


coords (mulMonom b₁ h tail) x₀ + (monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


coords (mulMonom b₁ h tail) x₀ + monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b₁, b₂: R

h, x₀: G

head: R × G

tail: List (R × G)

ih: coords (mulMonom (b₁ + b₂) h tail) x₀ = coords (mulMonom b₁ h tail) x₀ + coords (mulMonom b₂ h tail) x₀

a: R

g: G


coords (mulMonom b₁ h tail) x₀ + monomCoeff R G x₀ (a * b₂, g * h) + coords (mulMonom b₂ h tail) x₀
/-- multiplication equivalent when adding term with `0` coefficient -/ theorem
mul_zero_cons: ∀ {h : G} (s t : FormalSum R G), mul s ((0, h) :: t) mul s t
mul_zero_cons
(
s: FormalSum R G
s
t: FormalSum R G
t
:
FormalSum: (R : Type ?u.18202) → Type ?u.18201 → [inst : Ring R] → Type (max?u.18201?u.18202)
FormalSum
R: Type
R
G: Type
G
) :
mul: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → FormalSum R GFormalSum R GFormalSum R G
mul
s: FormalSum R G
s
((
0: ?m.18238
0
,
h: ?m.18198
h
) ::
t: FormalSum R G
t
) ≈
mul: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → FormalSum R GFormalSum R GFormalSum R G
mul
s: FormalSum R G
s
t: FormalSum R G
t
:=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

s, t: FormalSum R G


mul s ((0, h) :: t) mul s t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G


nil
mul [] ((0, h) :: t) mul [] t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head✝: R × G

tail✝: List (R × G)

tail_ih✝: mul tail✝ ((0, h) :: t) mul tail✝ t


cons
mul (head✝ :: tail✝) ((0, h) :: t) mul (head✝ :: tail✝) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

s, t: FormalSum R G


mul s ((0, h) :: t) mul s t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G


mul [] ((0, h) :: t) mul [] t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G


mul [] t mul [] t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G


mul [] ((0, h) :: t) mul [] t

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

s, t: FormalSum R G


mul s ((0, h) :: t) mul s t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


mul (head :: tail) ((0, h) :: t) mul (head :: tail) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


(0, head.snd * h) :: (mulMonom 0 h tail ++ mul (head :: tail) t) mul (head :: tail) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


mul (head :: tail) ((0, h) :: t) mul (head :: tail) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


h
∀ (x : G), coords ((0, head.snd * h) :: (mulMonom 0 h tail ++ mul (head :: tail) t)) x = coords (mul (head :: tail) t) x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


mul (head :: tail) ((0, h) :: t) mul (head :: tail) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


h
∀ (x : G), coords ((0, head.snd * h) :: (mulMonom 0 h tail ++ mul (head :: tail) t)) x = coords (mul (head :: tail) t) x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


mul (head :: tail) ((0, h) :: t) mul (head :: tail) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G


h
coords ((0, head.snd * h) :: (mulMonom 0 h tail ++ mul (head :: tail) t)) x₀ = coords (mul (head :: tail) t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


mul (head :: tail) ((0, h) :: t) mul (head :: tail) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G


h
monomCoeff R G x₀ (0, head.snd * h) + coords (mulMonom 0 h tail ++ mul (head :: tail) t) x₀ = coords (mul (head :: tail) t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


mul (head :: tail) ((0, h) :: t) mul (head :: tail) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G


h
monomCoeff R G x₀ (0, head.snd * h) + coords (mulMonom 0 h tail ++ mul (head :: tail) t) x₀ = coords (mul (head :: tail) t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G


h
0 + coords (mulMonom 0 h tail ++ mul (head :: tail) t) x₀ = coords (mul (head :: tail) t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G


h
0 + coords (mulMonom 0 h tail ++ mul (head :: tail) t) x₀ = coords (mul (head :: tail) t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


mul (head :: tail) ((0, h) :: t) mul (head :: tail) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G


h
0 + coords (mulMonom 0 h tail ++ mul (head :: tail) t) x₀ = coords (mul (head :: tail) t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G


h
coords (mulMonom 0 h tail ++ mul (head :: tail) t) x₀ = coords (mul (head :: tail) t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G


h
coords (mulMonom 0 h tail ++ mul (head :: tail) t) x₀ = coords (mul (head :: tail) t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


mul (head :: tail) ((0, h) :: t) mul (head :: tail) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G


h
coords (mulMonom 0 h tail ++ mul (head :: tail) t) x₀ = coords (mul (head :: tail) t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G


h
coords (mulMonom 0 h tail) x₀ + coords (mul (head :: tail) t) x₀ = coords (mul (head :: tail) t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G


h
coords (mulMonom 0 h tail) x₀ + coords (mul (head :: tail) t) x₀ = coords (mul (head :: tail) t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


mul (head :: tail) ((0, h) :: t) mul (head :: tail) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G


h
coords (mulMonom 0 h tail) x₀ = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


mul (head :: tail) ((0, h) :: t) mul (head :: tail) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G

l:= mul_monom_zero h x₀ tail: coords (mulMonom 0 h tail) x₀ = 0


h
coords (mulMonom 0 h tail) x₀ = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t


mul (head :: tail) ((0, h) :: t) mul (head :: tail) t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G

l:= mul_monom_zero h x₀ tail: coords (mulMonom 0 h tail) x₀ = 0


h
coords (mulMonom 0 h tail) x₀ = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: G

t: FormalSum R G

head: R × G

tail: List (R × G)

tail_ih✝: mul tail ((0, h) :: t) mul tail t

x₀: G

l:= mul_monom_zero h x₀ tail: coords (mulMonom 0 h tail) x₀ = 0


h
0 = 0

Goals accomplished! 🐙
/-! ## Induced product on the quotient -/ /-- Quotient in second argument for group ring multiplication -/ def
mulAux: FormalSum R GR[G]R[G]
mulAux
:
FormalSum: (R : Type ?u.20839) → Type ?u.20838 → [inst : Ring R] → Type (max?u.20838?u.20839)
FormalSum
R: Type
R
G: Type
G
R: Type
R
[
G: Type
G
] →
R: Type
R
[
G: Type
G
] :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


FormalSum R GR[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s: FormalSum R G


R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


FormalSum R GR[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s: FormalSum R G


∀ (a b : FormalSum R G), a bQuotient.mk (formalSumSetoid R G) (mul s a) = Quotient.mk (formalSumSetoid R G) (mul s b)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


FormalSum R GR[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s: FormalSum R G


a
∀ (s₁ s₂ : FormalSum R G), ElementaryMove R G s₁ s₂Quotient.mk (formalSumSetoid R G) (mul s s₁) = Quotient.mk (formalSumSetoid R G) (mul s s₂)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


FormalSum R GR[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

rel: ElementaryMove R G t t'


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


FormalSum R GR[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

rel: ElementaryMove R G t t'


a
mul s t mul s t'
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


FormalSum R GR[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

rel: ElementaryMove R G t t'


a
mul s t mul s t'
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff
mul s ((a, g) :: tail) mul s tail
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff
mul s ((a, g) :: tail) mul s tail
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff
mul s ((0, g) :: tail) mul s tail
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff
mul s ((0, g) :: tail) mul s tail
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff
mul s ((a, g) :: tail) mul s tail
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff
mulMonom 0 g s ++ mul s tail mul s tail
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff
mul s ((a, g) :: tail) mul s tail
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff.h
∀ (x : G), coords (mulMonom 0 g s ++ mul s tail) x = coords (mul s tail) x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff
mul s ((a, g) :: tail) mul s tail
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


a.zeroCoeff.h
coords (mulMonom 0 g s ++ mul s tail) x₀ = coords (mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff
mul s ((a, g) :: tail) mul s tail
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


a.zeroCoeff.h
coords (mulMonom 0 g s ++ mul s tail) x₀ = coords (mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


a.zeroCoeff.h
coords (mulMonom 0 g s) x₀ + coords (mul s tail) x₀ = coords (mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


a.zeroCoeff.h
coords (mulMonom 0 g s) x₀ + coords (mul s tail) x₀ = coords (mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff
mul s ((a, g) :: tail) mul s tail
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G

l:= mul_monom_zero g x₀ s: coords (mulMonom 0 g s) x₀ = 0


a.zeroCoeff.h
coords (mulMonom 0 g s) x₀ + coords (mul s tail) x₀ = coords (mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff
mul s ((a, g) :: tail) mul s tail
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G

l:= mul_monom_zero g x₀ s: coords (mulMonom 0 g s) x₀ = 0


a.zeroCoeff.h
coords (mulMonom 0 g s) x₀ + coords (mul s tail) x₀ = coords (mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G

l:= mul_monom_zero g x₀ s: coords (mulMonom 0 g s) x₀ = 0


a.zeroCoeff.h
0 + coords (mul s tail) x₀ = coords (mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G

l:= mul_monom_zero g x₀ s: coords (mulMonom 0 g s) x₀ = 0


a.zeroCoeff.h
0 + coords (mul s tail) x₀ = coords (mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t', tail: FormalSum R G

g: G

a: R

hyp: a = 0


a.zeroCoeff
mul s ((a, g) :: tail) mul s tail

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

rel: ElementaryMove R G t t'


a
mul s t mul s t'
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G


a.addCoeffs
mul s ((a, x) :: (b, x) :: tail) mul s ((a + b, x) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G


a.addCoeffs.h
∀ (x_1 : G), coords (mul s ((a, x) :: (b, x) :: tail)) x_1 = coords (mul s ((a + b, x) :: tail)) x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G


a.addCoeffs.h
∀ (x_1 : G), coords (mul s ((a, x) :: (b, x) :: tail)) x_1 = coords (mul s ((a + b, x) :: tail)) x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G


a.addCoeffs
mul s ((a, x) :: (b, x) :: tail) mul s ((a + b, x) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G

x₀: G


a.addCoeffs.h
coords (mul s ((a, x) :: (b, x) :: tail)) x₀ = coords (mul s ((a + b, x) :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G


a.addCoeffs
mul s ((a, x) :: (b, x) :: tail) mul s ((a + b, x) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G

x₀: G


a.addCoeffs.h
coords (mulMonom a x s ++ (mulMonom b x s ++ mul s tail)) x₀ = coords (mulMonom (a + b) x s ++ mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G


a.addCoeffs
mul s ((a, x) :: (b, x) :: tail) mul s ((a + b, x) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G

x₀: G


a.addCoeffs.h
coords (mulMonom a x s ++ (mulMonom b x s ++ mul s tail)) x₀ = coords (mulMonom (a + b) x s ++ mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G

x₀: G


a.addCoeffs.h
coords (mulMonom a x s) x₀ + (coords (mulMonom b x s) x₀ + coords (mul s tail) x₀) = coords (mulMonom (a + b) x s) x₀ + coords (mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G

x₀: G


a.addCoeffs.h
coords (mulMonom a x s ++ (mulMonom b x s ++ mul s tail)) x₀ = coords (mulMonom (a + b) x s ++ mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G

x₀: G


a.addCoeffs.h
coords (mulMonom a x s) x₀ + (coords (mulMonom b x s) x₀ + coords (mul s tail) x₀) = coords (mulMonom (a + b) x s ++ mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G

x₀: G


a.addCoeffs.h
coords (mulMonom a x s) x₀ + coords (mulMonom b x s ++ mul s tail) x₀ = coords (mulMonom (a + b) x s ++ mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G

x₀: G


a.addCoeffs.h
coords (mulMonom a x s) x₀ + (coords (mulMonom b x s) x₀ + coords (mul s tail) x₀) = coords (mulMonom (a + b) x s) x₀ + coords (mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G


a.addCoeffs
mul s ((a, x) :: (b, x) :: tail) mul s ((a + b, x) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G

x₀: G


a.addCoeffs.h
coords (mulMonom a x s) x₀ + (coords (mulMonom b x s) x₀ + coords (mul s tail) x₀) = coords (mulMonom (a + b) x s) x₀ + coords (mul s tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a, b: R

x: G

tail: FormalSum R G


a.addCoeffs
mul s ((a, x) :: (b, x) :: tail) mul s ((a + b, x) :: tail)

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

rel: ElementaryMove R G t t'


a
mul s t mul s t'
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂


a.cons
mul s ((a, x) :: s₁) mul s ((a, x) :: s₂)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂


a.cons.h
∀ (x_1 : G), coords (mul s ((a, x) :: s₁)) x_1 = coords (mul s ((a, x) :: s₂)) x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂


a.cons
mul s ((a, x) :: s₁) mul s ((a, x) :: s₂)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂


a.cons.h
∀ (x_1 : G), coords (mul s ((a, x) :: s₁)) x_1 = coords (mul s ((a, x) :: s₂)) x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂


a.cons
mul s ((a, x) :: s₁) mul s ((a, x) :: s₂)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂

x₀: G


a.cons.h
coords (mul s ((a, x) :: s₁)) x₀ = coords (mul s ((a, x) :: s₂)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂


a.cons
mul s ((a, x) :: s₁) mul s ((a, x) :: s₂)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂


a.cons
mul s ((a, x) :: s₁) mul s ((a, x) :: s₂)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂


a.cons
mul s ((a, x) :: s₁) mul s ((a, x) :: s₂)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂


a.cons
mul s ((a, x) :: s₁) mul s ((a, x) :: s₂)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂


a.cons
mul s ((a, x) :: s₁) mul s ((a, x) :: s₂)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂

x₀: G

l:= congrFun step x₀: coords (mul s s₁) x₀ = coords (mul s s₂) x₀


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂


a.cons
mul s ((a, x) :: s₁) mul s ((a, x) :: s₂)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂

x₀: G

l:= congrFun step x₀: coords (mul s s₁) x₀ = coords (mul s s₂) x₀


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a: R

x: G

s₁, s₂: FormalSum R G

a✝: ElementaryMove R G s₁ s₂

step: mul s s₁ mul s s₂

x₀: G

l:= congrFun step x₀: coords (mul s s₁) x₀ = coords (mul s s₂) x₀


a.cons.h
coords (mul s s₂) x₀ = coords (mul s s₂) x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

rel: ElementaryMove R G t t'


a
mul s t mul s t'
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


a.swap
mul s ((a₁, x₁) :: (a₂, x₂) :: tail) mul s ((a₂, x₂) :: (a₁, x₁) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


a.swap.h
∀ (x : G), coords (mul s ((a₁, x₁) :: (a₂, x₂) :: tail)) x = coords (mul s ((a₂, x₂) :: (a₁, x₁) :: tail)) x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


a.swap
mul s ((a₁, x₁) :: (a₂, x₂) :: tail) mul s ((a₂, x₂) :: (a₁, x₁) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


a.swap.h
∀ (x : G), coords (mul s ((a₁, x₁) :: (a₂, x₂) :: tail)) x = coords (mul s ((a₂, x₂) :: (a₁, x₁) :: tail)) x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


a.swap
mul s ((a₁, x₁) :: (a₂, x₂) :: tail) mul s ((a₂, x₂) :: (a₁, x₁) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


a.swap.h
coords (mul s ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ = coords (mul s ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


a.swap
mul s ((a₁, x₁) :: (a₂, x₂) :: tail) mul s ((a₂, x₂) :: (a₁, x₁) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


a.swap
mul s ((a₁, x₁) :: (a₂, x₂) :: tail) mul s ((a₂, x₂) :: (a₁, x₁) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


a.swap
mul s ((a₁, x₁) :: (a₂, x₂) :: tail) mul s ((a₂, x₂) :: (a₁, x₁) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


a.swap
mul s ((a₁, x₁) :: (a₂, x₂) :: tail) mul s ((a₂, x₂) :: (a₁, x₁) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


a.swap
mul s ((a₁, x₁) :: (a₂, x₂) :: tail) mul s ((a₂, x₂) :: (a₁, x₁) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

lc:= add_comm (coords (mulMonom a₁ x₁ s) x₀) (coords (mulMonom a₂ x₂ s) x₀): coords (mulMonom a₁ x₁ s) x₀ + coords (mulMonom a₂ x₂ s) x₀ = coords (mulMonom a₂ x₂ s) x₀ + coords (mulMonom a₁ x₁ s) x₀


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


a.swap
mul s ((a₁, x₁) :: (a₂, x₂) :: tail) mul s ((a₂, x₂) :: (a₁, x₁) :: tail)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

lc:= add_comm (coords (mulMonom a₁ x₁ s) x₀) (coords (mulMonom a₂ x₂ s) x₀): coords (mulMonom a₁ x₁ s) x₀ + coords (mulMonom a₂ x₂ s) x₀ = coords (mulMonom a₂ x₂ s) x₀ + coords (mulMonom a₁ x₁ s) x₀


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s, t, t': FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

lc:= add_comm (coords (mulMonom a₁ x₁ s) x₀) (coords (mulMonom a₂ x₂ s) x₀): coords (mulMonom a₁ x₁ s) x₀ + coords (mulMonom a₂ x₂ s) x₀ = coords (mulMonom a₂ x₂ s) x₀ + coords (mulMonom a₁ x₁ s) x₀


a.swap.h
coords (mulMonom a₂ x₂ s) x₀ + coords (mulMonom a₁ x₁ s) x₀ = coords (mulMonom a₂ x₂ s) x₀ + coords (mulMonom a₁ x₁ s) x₀

Goals accomplished! 🐙
open ElementaryMove /-- invariance under moves of multiplication by monomials -/ theorem
mul_monom_invariant: ∀ (b : R) (h x₀ : G) (s₁ s₂ : FormalSum R G), ElementaryMove R G s₁ s₂coords (mulMonom b h s₁) x₀ = coords (mulMonom b h s₂) x₀
mul_monom_invariant
(
b: R
b
:
R: Type
R
)(
h: G
h
x₀: G
x₀
:
G: Type
G
)(
s₁: FormalSum R G
s₁
s₂: FormalSum R G
s₂
:
FormalSum: (R : Type ?u.26636) → Type ?u.26635 → [inst : Ring R] → Type (max?u.26635?u.26636)
FormalSum
R: Type
R
G: Type
G
) (
rel: ElementaryMove R G s₁ s₂
rel
:
ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
ElementaryMove
R: Type
R
G: Type
G
s₁: FormalSum R G
s₁
s₂: FormalSum R G
s₂
) :
coords: {R : Type ?u.26725} → [inst : Ring R] → {X : Type ?u.26724} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
b: R
b
h: G
h
s₁: FormalSum R G
s₁
)
x₀: G
x₀
=
coords: {R : Type ?u.26750} → [inst : Ring R] → {X : Type ?u.26749} → [inst_1 : DecidableEq X] → FormalSum R XXR
coords
(
mulMonom: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → RGFormalSum R GFormalSum R G
mulMonom
b: R
b
h: G
h
s₂: FormalSum R G
s₂
)
x₀: G
x₀
:=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


coords (mulMonom b h s₁) x₀ = coords (mulMonom b h s₂) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


coords (mulMonom b h s₁) x₀ = coords (mulMonom b h s₂) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂, tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
coords (mulMonom b h ((a, g) :: tail)) x₀ = coords (mulMonom b h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂, tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
coords (mulMonom b h ((a, g) :: tail)) x₀ = coords (mulMonom b h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂, tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
coords (mulMonom b h ((0, g) :: tail)) x₀ = coords (mulMonom b h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂, tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
coords (mulMonom b h ((0, g) :: tail)) x₀ = coords (mulMonom b h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂, tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
coords (mulMonom b h ((a, g) :: tail)) x₀ = coords (mulMonom b h tail) x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


coords (mulMonom b h s₁) x₀ = coords (mulMonom b h s₂) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
coords (mulMonom b h ((a₁, x) :: (a₂, x) :: tail)) x₀ = coords (mulMonom b h ((a₁ + a₂, x) :: tail)) x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


coords (mulMonom b h s₁) x₀ = coords (mulMonom b h s₂) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a: R

x: G

t₁, t₂: FormalSum R G

a✝: ElementaryMove R G t₁ t₂

step: coords (mulMonom b h t₁) x₀ = coords (mulMonom b h t₂) x₀


cons
coords (mulMonom b h ((a, x) :: t₁)) x₀ = coords (mulMonom b h ((a, x) :: t₂)) x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


coords (mulMonom b h s₁) x₀ = coords (mulMonom b h s₂) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

b: R

h, x₀: G

s₁, s₂: FormalSum R G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀

Goals accomplished! 🐙
/-- invariance under moves for the first argument for multipilication -/ theorem
first_arg_invariant: ∀ {R : Type} [inst : Ring R] [inst_1 : DecidableEq R] {G : Type} [inst_2 : Group G] [inst_3 : DecidableEq G] (s₁ s₂ t : FormalSum R G), ElementaryMove R G s₁ s₂mul s₁ t mul s₂ t
first_arg_invariant
(
s₁: FormalSum R G
s₁
s₂: FormalSum R G
s₂
t: FormalSum R G
t
:
FormalSum: (R : Type ?u.30290) → Type ?u.30289 → [inst : Ring R] → Type (max?u.30289?u.30290)
FormalSum
R: Type
R
G: Type
G
) (
rel: ElementaryMove R G s₁ s₂
rel
:
ElementaryMove: (R X : Type) → [inst : Ring R] → [inst_1 : DecidableEq R] → [inst_2 : DecidableEq X] → FormalSum R XFormalSum R XProp
ElementaryMove
R: Type
R
G: Type
G
s₁: FormalSum R G
s₁
s₂: FormalSum R G
s₂
) :
FormalSum.mul: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → FormalSum R GFormalSum R GFormalSum R G
FormalSum.mul
s₁: FormalSum R G
s₁
t: FormalSum R G
t
FormalSum.mul: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → FormalSum R GFormalSum R GFormalSum R G
FormalSum.mul
s₂: FormalSum R G
s₂
t: FormalSum R G
t
:=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂, t: FormalSum R G

rel: ElementaryMove R G s₁ s₂


mul s₁ t mul s₂ t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


nil
mul s₁ [] mul s₂ []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

head✝: R × G

tail✝: List (R × G)


cons
mul s₁ (head✝ :: tail✝) mul s₂ (head✝ :: tail✝)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂, t: FormalSum R G

rel: ElementaryMove R G s₁ s₂


mul s₁ t mul s₂ t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


mul s₁ [] mul s₂ []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


[] []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


mul s₁ [] mul s₂ []

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂, t: FormalSum R G

rel: ElementaryMove R G s₁ s₂


mul s₁ t mul s₂ t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

head': R × G

tail': List (R × G)


mul s₁ (head' :: tail') mul s₂ (head' :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

head': R × G

tail': List (R × G)

b: R

h: G


mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

head': R × G

tail': List (R × G)


mul s₁ (head' :: tail') mul s₂ (head' :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

head': R × G

tail': List (R × G)

b: R

h: G


mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((0, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((0, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
(0, g * h) :: (mulMonom b h tail ++ mul ((0, g) :: tail) tail') mulMonom b h tail ++ mul tail tail'
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff.h
∀ (x : G), coords ((0, g * h) :: (mulMonom b h tail ++ mul ((0, g) :: tail) tail')) x = coords (mulMonom b h tail ++ mul tail tail') x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff.h
∀ (x : G), coords ((0, g * h) :: (mulMonom b h tail ++ mul ((0, g) :: tail) tail')) x = coords (mulMonom b h tail ++ mul tail tail') x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


zeroCoeff.h
coords ((0, g * h) :: (mulMonom b h tail ++ mul ((0, g) :: tail) tail')) x₀ = coords (mulMonom b h tail ++ mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


zeroCoeff.h
coords ((0, g * h) :: (mulMonom b h tail ++ mul ((0, g) :: tail) tail')) x₀ = coords (mulMonom b h tail ++ mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


zeroCoeff.h
coords ((0, g * h) :: (mulMonom b h tail ++ mul ((0, g) :: tail) tail')) x₀ = coords (mulMonom b h tail) x₀ + coords (mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


zeroCoeff.h
coords ((0, g * h) :: (mulMonom b h tail ++ mul ((0, g) :: tail) tail')) x₀ = coords (mulMonom b h tail) x₀ + coords (mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


zeroCoeff.h
coords ((0, g * h) :: (mulMonom b h tail ++ mul ((0, g) :: tail) tail')) x₀ = coords (mulMonom b h tail) x₀ + coords (mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


zeroCoeff.h
coords (mulMonom b h tail ++ mul ((0, g) :: tail) tail') x₀ = coords (mulMonom b h tail) x₀ + coords (mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


zeroCoeff.h
coords (mulMonom b h tail ++ mul ((0, g) :: tail) tail') x₀ = coords (mulMonom b h tail) x₀ + coords (mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


zeroCoeff.h
coords (mulMonom b h tail) x₀ + coords (mul ((0, g) :: tail) tail') x₀ = coords (mulMonom b h tail) x₀ + coords (mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


zeroCoeff.h
coords (mulMonom b h tail) x₀ + coords (mul ((0, g) :: tail) tail') x₀ = coords (mulMonom b h tail) x₀ + coords (mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


zeroCoeff.h
coords (mul ((0, g) :: tail) tail') x₀ = coords (mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


zeroCoeff.h
coords (mul ((0, g) :: tail) tail') x₀ = coords (mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


ElementaryMove R G ((0, g) :: tail) tail
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


h
0 = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G


ElementaryMove R G ((0, g) :: tail) tail

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G

rel':= zeroCoeff tail g 0 (Eq.refl 0): ElementaryMove R G ((0, g) :: tail) tail

prev:= first_arg_invariant ((0, g) :: tail) tail tail' rel': mul ((0, g) :: tail) tail' mul tail tail'


zeroCoeff.h
coords (mul ((0, g) :: tail) tail') x₀ = coords (mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G

rel':= zeroCoeff tail g 0 (Eq.refl 0): ElementaryMove R G ((0, g) :: tail) tail

prev:= first_arg_invariant ((0, g) :: tail) tail tail' rel': mul ((0, g) :: tail) tail' mul tail tail'

pl:= congrFun prev x₀: coords (mul ((0, g) :: tail) tail') x₀ = coords (mul tail tail') x₀


zeroCoeff.h
coords (mul ((0, g) :: tail) tail') x₀ = coords (mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0


zeroCoeff
mul ((a, g) :: tail) ((b, h) :: tail') mul tail ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G

rel':= zeroCoeff tail g 0 (Eq.refl 0): ElementaryMove R G ((0, g) :: tail) tail

prev:= first_arg_invariant ((0, g) :: tail) tail tail' rel': mul ((0, g) :: tail) tail' mul tail tail'

pl:= congrFun prev x₀: coords (mul ((0, g) :: tail) tail') x₀ = coords (mul tail tail') x₀


zeroCoeff.h
coords (mul ((0, g) :: tail) tail') x₀ = coords (mul tail tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

tail: FormalSum R G

g: G

a: R

hyp: a = 0

x₀: G

rel':= zeroCoeff tail g 0 (Eq.refl 0): ElementaryMove R G ((0, g) :: tail) tail

prev:= first_arg_invariant ((0, g) :: tail) tail tail' rel': mul ((0, g) :: tail) tail' mul tail tail'

pl:= congrFun prev x₀: coords (mul ((0, g) :: tail) tail') x₀ = coords (mul tail tail') x₀


zeroCoeff.h
coords (mul tail tail') x₀ = coords (mul tail tail') x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

head': R × G

tail': List (R × G)

b: R

h: G


mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mulMonom b h ((a₁, x) :: (a₂, x) :: tail) ++ mul ((a₁, x) :: (a₂, x) :: tail) tail' mulMonom b h ((a₁ + a₂, x) :: tail) ++ mul ((a₁ + a₂, x) :: tail) tail'
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs.h
∀ (x_1 : G), coords (mulMonom b h ((a₁, x) :: (a₂, x) :: tail) ++ mul ((a₁, x) :: (a₂, x) :: tail) tail') x_1 = coords (mulMonom b h ((a₁ + a₂, x) :: tail) ++ mul ((a₁ + a₂, x) :: tail) tail') x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs.h
∀ (x_1 : G), coords (mulMonom b h ((a₁, x) :: (a₂, x) :: tail) ++ mul ((a₁, x) :: (a₂, x) :: tail) tail') x_1 = coords (mulMonom b h ((a₁ + a₂, x) :: tail) ++ mul ((a₁ + a₂, x) :: tail) tail') x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
coords (mulMonom b h ((a₁, x) :: (a₂, x) :: tail) ++ mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = coords (mulMonom b h ((a₁ + a₂, x) :: tail) ++ mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
coords (mulMonom b h ((a₁, x) :: (a₂, x) :: tail) ++ mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = coords (mulMonom b h ((a₁ + a₂, x) :: tail) ++ mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
coords (mulMonom b h ((a₁, x) :: (a₂, x) :: tail)) x₀ + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = coords (mulMonom b h ((a₁ + a₂, x) :: tail) ++ mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
coords (mulMonom b h ((a₁, x) :: (a₂, x) :: tail)) x₀ + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = coords (mulMonom b h ((a₁ + a₂, x) :: tail) ++ mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
coords (mulMonom b h ((a₁, x) :: (a₂, x) :: tail)) x₀ + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = coords (mulMonom b h ((a₁ + a₂, x) :: tail) ++ mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
coords (mulMonom b h ((a₁, x) :: (a₂, x) :: tail)) x₀ + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = coords (mulMonom b h ((a₁ + a₂, x) :: tail)) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
coords (mulMonom b h ((a₁, x) :: (a₂, x) :: tail)) x₀ + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = coords (mulMonom b h ((a₁ + a₂, x) :: tail)) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
monomCoeff R G x₀ (a₁ * b, x * h) + (monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = monomCoeff R G x₀ ((a₁ + a₂) * b, x * h) + coords (mulMonom b h tail) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
monomCoeff R G x₀ (a₁ * b, x * h) + (monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = monomCoeff R G x₀ ((a₁ + a₂) * b, x * h) + coords (mulMonom b h tail) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
monomCoeff R G x₀ (a₁ * b, x * h) + (monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = monomCoeff R G x₀ (a₁ * b + a₂ * b, x * h) + coords (mulMonom b h tail) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
monomCoeff R G x₀ (a₁ * b, x * h) + (monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = monomCoeff R G x₀ (a₁ * b + a₂ * b, x * h) + coords (mulMonom b h tail) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
monomCoeff R G x₀ (a₁ * b, x * h) + (monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = monomCoeff R G x₀ (a₁ * b, x * h) + monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


addCoeffs.h
monomCoeff R G x₀ (a₁ * b, x * h) + (monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = monomCoeff R G x₀ (a₁ * b, x * h) + monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G


ElementaryMove R G ((a₁, x) :: (a₂, x) :: tail) ((a₁ + a₂, x) :: tail)

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G

rel':= addCoeffs a₁ a₂ x tail: ElementaryMove R G ((a₁, x) :: (a₂, x) :: tail) ((a₁ + a₂, x) :: tail)

prev:= first_arg_invariant ((a₁, x) :: (a₂, x) :: tail) ((a₁ + a₂, x) :: tail) tail' rel': mul ((a₁, x) :: (a₂, x) :: tail) tail' mul ((a₁ + a₂, x) :: tail) tail'


addCoeffs.h
monomCoeff R G x₀ (a₁ * b, x * h) + (monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = monomCoeff R G x₀ (a₁ * b, x * h) + monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G

rel':= addCoeffs a₁ a₂ x tail: ElementaryMove R G ((a₁, x) :: (a₂, x) :: tail) ((a₁ + a₂, x) :: tail)

prev:= first_arg_invariant ((a₁, x) :: (a₂, x) :: tail) ((a₁ + a₂, x) :: tail) tail' rel': mul ((a₁, x) :: (a₂, x) :: tail) tail' mul ((a₁ + a₂, x) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = coords (mul ((a₁ + a₂, x) :: tail) tail') x₀


addCoeffs.h
monomCoeff R G x₀ (a₁ * b, x * h) + (monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = monomCoeff R G x₀ (a₁ * b, x * h) + monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G

rel':= addCoeffs a₁ a₂ x tail: ElementaryMove R G ((a₁, x) :: (a₂, x) :: tail) ((a₁ + a₂, x) :: tail)

prev:= first_arg_invariant ((a₁, x) :: (a₂, x) :: tail) ((a₁ + a₂, x) :: tail) tail' rel': mul ((a₁, x) :: (a₂, x) :: tail) tail' mul ((a₁ + a₂, x) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = coords (mul ((a₁ + a₂, x) :: tail) tail') x₀


addCoeffs.h
monomCoeff R G x₀ (a₁ * b, x * h) + (monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = monomCoeff R G x₀ (a₁ * b, x * h) + monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G

rel':= addCoeffs a₁ a₂ x tail: ElementaryMove R G ((a₁, x) :: (a₂, x) :: tail) ((a₁ + a₂, x) :: tail)

prev:= first_arg_invariant ((a₁, x) :: (a₂, x) :: tail) ((a₁ + a₂, x) :: tail) tail' rel': mul ((a₁, x) :: (a₂, x) :: tail) tail' mul ((a₁ + a₂, x) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = coords (mul ((a₁ + a₂, x) :: tail) tail') x₀


addCoeffs.h
monomCoeff R G x₀ (a₁ * b, x * h) + (monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀ = monomCoeff R G x₀ (a₁ * b, x * h) + monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G

x₀: G

rel':= addCoeffs a₁ a₂ x tail: ElementaryMove R G ((a₁, x) :: (a₂, x) :: tail) ((a₁ + a₂, x) :: tail)

prev:= first_arg_invariant ((a₁, x) :: (a₂, x) :: tail) ((a₁ + a₂, x) :: tail) tail' rel': mul ((a₁, x) :: (a₂, x) :: tail) tail' mul ((a₁ + a₂, x) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x) :: (a₂, x) :: tail) tail') x₀ = coords (mul ((a₁ + a₂, x) :: tail) tail') x₀


addCoeffs.h
monomCoeff R G x₀ (a₁ * b, x * h) + (monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀ = monomCoeff R G x₀ (a₁ * b, x * h) + monomCoeff R G x₀ (a₂ * b, x * h) + coords (mulMonom b h tail) x₀ + coords (mul ((a₁ + a₂, x) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x: G

tail: FormalSum R G


addCoeffs
mul ((a₁, x) :: (a₂, x) :: tail) ((b, h) :: tail') mul ((a₁ + a₂, x) :: tail) ((b, h) :: tail')

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

head': R × G

tail': List (R × G)

b: R

h: G


mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mul ((a, x) :: s₁) ((b, h) :: tail') mul ((a, x) :: s₂) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mulMonom b h ((a, x) :: s₁) ++ mul ((a, x) :: s₁) tail' mulMonom b h ((a, x) :: s₂) ++ mul ((a, x) :: s₂) tail'
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mul ((a, x) :: s₁) ((b, h) :: tail') mul ((a, x) :: s₂) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons.h
∀ (x_1 : G), coords (mulMonom b h ((a, x) :: s₁) ++ mul ((a, x) :: s₁) tail') x_1 = coords (mulMonom b h ((a, x) :: s₂) ++ mul ((a, x) :: s₂) tail') x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons.h
∀ (x_1 : G), coords (mulMonom b h ((a, x) :: s₁) ++ mul ((a, x) :: s₁) tail') x_1 = coords (mulMonom b h ((a, x) :: s₂) ++ mul ((a, x) :: s₂) tail') x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mul ((a, x) :: s₁) ((b, h) :: tail') mul ((a, x) :: s₂) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G


cons.h
coords (mulMonom b h ((a, x) :: s₁) ++ mul ((a, x) :: s₁) tail') x₀ = coords (mulMonom b h ((a, x) :: s₂) ++ mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mul ((a, x) :: s₁) ((b, h) :: tail') mul ((a, x) :: s₂) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G


cons.h
coords (mulMonom b h ((a, x) :: s₁) ++ mul ((a, x) :: s₁) tail') x₀ = coords (mulMonom b h ((a, x) :: s₂) ++ mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G


cons.h
coords (mulMonom b h ((a, x) :: s₁)) x₀ + coords (mul ((a, x) :: s₁) tail') x₀ = coords (mulMonom b h ((a, x) :: s₂) ++ mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G


cons.h
coords (mulMonom b h ((a, x) :: s₁)) x₀ + coords (mul ((a, x) :: s₁) tail') x₀ = coords (mulMonom b h ((a, x) :: s₂) ++ mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mul ((a, x) :: s₁) ((b, h) :: tail') mul ((a, x) :: s₂) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G


cons.h
coords (mulMonom b h ((a, x) :: s₁)) x₀ + coords (mul ((a, x) :: s₁) tail') x₀ = coords (mulMonom b h ((a, x) :: s₂) ++ mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G


cons.h
coords (mulMonom b h ((a, x) :: s₁)) x₀ + coords (mul ((a, x) :: s₁) tail') x₀ = coords (mulMonom b h ((a, x) :: s₂)) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G


cons.h
coords (mulMonom b h ((a, x) :: s₁)) x₀ + coords (mul ((a, x) :: s₁) tail') x₀ = coords (mulMonom b h ((a, x) :: s₂)) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mul ((a, x) :: s₁) ((b, h) :: tail') mul ((a, x) :: s₂) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G


cons.h
monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₁) tail') x₀ = monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mul ((a, x) :: s₁) ((b, h) :: tail') mul ((a, x) :: s₂) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G


cons.h
monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₁) tail') x₀ = monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G


ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G


a
ElementaryMove R G s₁ s₂
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G


ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂)

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mul ((a, x) :: s₁) ((b, h) :: tail') mul ((a, x) :: s₂) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G

rel':= cons a x s₁ s₂ r: ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂)

prev:= first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel': mul ((a, x) :: s₁) tail' mul ((a, x) :: s₂) tail'


cons.h
monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₁) tail') x₀ = monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mul ((a, x) :: s₁) ((b, h) :: tail') mul ((a, x) :: s₂) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G

rel':= cons a x s₁ s₂ r: ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂)

prev:= first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel': mul ((a, x) :: s₁) tail' mul ((a, x) :: s₂) tail'

pl:= congrFun prev x₀: coords (mul ((a, x) :: s₁) tail') x₀ = coords (mul ((a, x) :: s₂) tail') x₀


cons.h
monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₁) tail') x₀ = monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mul ((a, x) :: s₁) ((b, h) :: tail') mul ((a, x) :: s₂) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G

rel':= cons a x s₁ s₂ r: ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂)

prev:= first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel': mul ((a, x) :: s₁) tail' mul ((a, x) :: s₂) tail'

pl:= congrFun prev x₀: coords (mul ((a, x) :: s₁) tail') x₀ = coords (mul ((a, x) :: s₂) tail') x₀


cons.h
monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₁) tail') x₀ = monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G

rel':= cons a x s₁ s₂ r: ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂)

prev:= first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel': mul ((a, x) :: s₁) tail' mul ((a, x) :: s₂) tail'

pl:= congrFun prev x₀: coords (mul ((a, x) :: s₁) tail') x₀ = coords (mul ((a, x) :: s₂) tail') x₀


cons.h
monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₂) tail') x₀ = monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G

rel':= cons a x s₁ s₂ r: ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂)

prev:= first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel': mul ((a, x) :: s₁) tail' mul ((a, x) :: s₂) tail'

pl:= congrFun prev x₀: coords (mul ((a, x) :: s₁) tail') x₀ = coords (mul ((a, x) :: s₂) tail') x₀


cons.h
monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₂) tail') x₀ = monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mul ((a, x) :: s₁) ((b, h) :: tail') mul ((a, x) :: s₂) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G

rel':= cons a x s₁ s₂ r: ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂)

prev:= first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel': mul ((a, x) :: s₁) tail' mul ((a, x) :: s₂) tail'

pl:= congrFun prev x₀: coords (mul ((a, x) :: s₁) tail') x₀ = coords (mul ((a, x) :: s₂) tail') x₀

ps:= mul_monom_invariant b h x₀ s₁ s₂ r: coords (mulMonom b h s₁) x₀ = coords (mulMonom b h s₂) x₀


cons.h
monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₂) tail') x₀ = monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')


cons
mul ((a, x) :: s₁) ((b, h) :: tail') mul ((a, x) :: s₂) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G

rel':= cons a x s₁ s₂ r: ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂)

prev:= first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel': mul ((a, x) :: s₁) tail' mul ((a, x) :: s₂) tail'

pl:= congrFun prev x₀: coords (mul ((a, x) :: s₁) tail') x₀ = coords (mul ((a, x) :: s₂) tail') x₀

ps:= mul_monom_invariant b h x₀ s₁ s₂ r: coords (mulMonom b h s₁) x₀ = coords (mulMonom b h s₂) x₀


cons.h
monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₂) tail') x₀ = monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁✝, s₂✝: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a: R

x: G

s₁, s₂: FormalSum R G

r: ElementaryMove R G s₁ s₂

a_ih✝: mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')

x₀: G

rel':= cons a x s₁ s₂ r: ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂)

prev:= first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel': mul ((a, x) :: s₁) tail' mul ((a, x) :: s₂) tail'

pl:= congrFun prev x₀: coords (mul ((a, x) :: s₁) tail') x₀ = coords (mul ((a, x) :: s₂) tail') x₀

ps:= mul_monom_invariant b h x₀ s₁ s₂ r: coords (mulMonom b h s₁) x₀ = coords (mulMonom b h s₂) x₀


cons.h
monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀ = monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

head': R × G

tail': List (R × G)

b: R

h: G


mul s₁ ((b, h) :: tail') mul s₂ ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail) ++ mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap.h
∀ (x : G), coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail) ++ mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap.h
∀ (x : G), coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail) ++ mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail) ++ mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail) ++ mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords ((a₁ * b, x₁ * h) :: mulMonom b h ((a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords ((a₁ * b, x₁ * h) :: mulMonom b h ((a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords ((a₁ * b, x₁ * h) :: mulMonom b h ((a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords ((a₁ * b, x₁ * h) :: (a₂ * b, x₂ * h) :: mulMonom b h tail) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords ((a₁ * b, x₁ * h) :: (a₂ * b, x₂ * h) :: mulMonom b h tail) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
coords ((a₁ * b, x₁ * h) :: (a₂ * b, x₂ * h) :: mulMonom b h tail) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords ((a₂ * b, x₂ * h) :: mulMonom b h tail) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords ((a₂ * b, x₂ * h) :: mulMonom b h tail) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords ((a₂ * b, x₂ * h) :: mulMonom b h tail) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords ((a₂ * b, x₂ * h) :: mulMonom b h ((a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords ((a₂ * b, x₂ * h) :: mulMonom b h ((a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords ((a₂ * b, x₂ * h) :: mulMonom b h ((a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords ((a₂ * b, x₂ * h) :: (a₁ * b, x₁ * h) :: mulMonom b h tail) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords ((a₂ * b, x₂ * h) :: (a₁ * b, x₁ * h) :: mulMonom b h tail) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords ((a₂ * b, x₂ * h) :: (a₁ * b, x₁ * h) :: mulMonom b h tail) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords ((a₁ * b, x₁ * h) :: mulMonom b h tail) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords ((a₁ * b, x₁ * h) :: mulMonom b h tail) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords ((a₁ * b, x₁ * h) :: mulMonom b h tail) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G


ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀ = monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h) = monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G


swap
mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


swap.h
monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h) = monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h) = monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


monomCoeff R G x₀ (a₁ * b, x₁ * h) + monomCoeff R G x₀ (a₂ * b, x₂ * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

s₁, s₂: FormalSum R G

head': R × G

tail': List (R × G)

b: R

h: G

a₁, a₂: R

x₁, x₂: G

tail: FormalSum R G

x₀: G

rel':= swap a₁ a₂ x₁ x₂ tail: ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail)

prev:= first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel': mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'

pl:= congrFun prev x₀: coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ = coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀


monomCoeff R G x₀ (a₂ * b, x₂ * h) + monomCoeff R G x₀ (a₁ * b, x₁ * h)
/-- multiplication for free modules -/ def
mul: R[G]R[G]R[G]
mul
:
R: Type
R
[
G: Type
G
] →
R: Type
R
[
G: Type
G
] →
R: Type
R
[
G: Type
G
] :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]


a
∀ (s₁ s₂ : FormalSum R G), ElementaryMove R G s₁ s₂f s₁ = f s₂
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


a
f s₁ = f s₂
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


a
(fun t => mulAux s₁ t) = fun t => mulAux s₂ t
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


a.h
∀ (x : R[G]), mulAux s₁ x = mulAux s₂ x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂


a.h.a
∀ (a : FormalSum R G), mulAux s₁ (Quotient.mk (formalSumSetoid R G) a) = mulAux s₂ (Quotient.mk (formalSumSetoid R G) a)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

t: FormalSum R G


a.h.a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

t: FormalSum R G


a.h.a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

t: FormalSum R G



Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

t: FormalSum R G

lhs:= Eq.refl (mulAux s₁ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₁ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₁ t)


a.h.a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

t: FormalSum R G

lhs:= Eq.refl (mulAux s₁ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₁ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₁ t)



Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

t: FormalSum R G

lhs:= Eq.refl (mulAux s₁ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₁ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₁ t)

rhs:= Eq.refl (mulAux s₂ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₂ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₂ t)


a.h.a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

t: FormalSum R G

lhs:= Eq.refl (mulAux s₁ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₁ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₁ t)

rhs:= Eq.refl (mulAux s₂ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₂ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₂ t)


a.h.a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

t: FormalSum R G

lhs:= Eq.refl (mulAux s₁ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₁ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₁ t)

rhs:= Eq.refl (mulAux s₂ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₂ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₂ t)


a.h.a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

t: FormalSum R G

lhs:= Eq.refl (mulAux s₁ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₁ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₁ t)

rhs:= Eq.refl (mulAux s₂ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₂ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₂ t)


a.h.a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

t: FormalSum R G

lhs:= Eq.refl (mulAux s₁ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₁ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₁ t)

rhs:= Eq.refl (mulAux s₂ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₂ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₂ t)


a.h.a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

t: FormalSum R G

lhs:= Eq.refl (mulAux s₁ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₁ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₁ t)

rhs:= Eq.refl (mulAux s₂ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₂ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₂ t)


a.h.a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

f:= fun s t => mulAux s t: FormalSum R GR[G]R[G]

s₁, s₂: FormalSum R G

rel: ElementaryMove R G s₁ s₂

t: FormalSum R G

lhs:= Eq.refl (mulAux s₁ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₁ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₁ t)

rhs:= Eq.refl (mulAux s₂ (Quotient.mk (formalSumSetoid R G) t)): mulAux s₂ (Quotient.mk (formalSumSetoid R G) t) = Quotient.mk (formalSumSetoid R G) (FormalSum.mul s₂ t)


a.h.a.rel
ElementaryMove R G s₁ s₂
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R[G]R[G]R[G]

Goals accomplished! 🐙
/-! ## The Ring Structure -/ instance
groupRingMul: Mul (R[G])
groupRingMul
:
Mul: Type ?u.44472 → Type ?u.44472
Mul
(
R: Type
R
[
G: Type
G
]) := ⟨
mul: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {G : Type} → [inst_2 : Group G] → [inst_3 : DecidableEq G] → R[G]R[G]R[G]
mul
instance: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : Group G] → [inst_2 : DecidableEq G] → One (R[G])
instance
:
One: Type ?u.44839 → Type ?u.44839
One
(
R: Type
R
[
G: Type
G
]) := ⟨⟦[(
1: ?m.44918
1
,
1: ?m.44951
1
)]⟧⟩
instance: {R : Type} → [inst : Ring R] → {G : Type} → [inst_1 : DecidableEq G] → AddCommGroup (R[G])
instance
:
AddCommGroup: Type ?u.45330 → Type ?u.45330
AddCommGroup
(
R: Type
R
[
G: Type
G
]) := { zero := ⟦
[]: List ?m.45566
[]
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 + FreeModule.zero = x
FreeModule.addn_zero
zero_add :=
FreeModule.zero_addn: ∀ {R : Type} [inst : Ring R] {X : Type} [inst_1 : DecidableEq X] (x : R[X]), FreeModule.zero + x = x
FreeModule.zero_addn
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
add_left_neg :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

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


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

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


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + 1 x = 0 x


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

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


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + x = 0 x


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

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


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + x = Quotient.mk (formalSumSetoid R G) []


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + x = Quotient.mk (formalSumSetoid R G) []


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + x = Quotient.mk (formalSumSetoid R G) []


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

Goals accomplished! 🐙
} /-- The group ring is a ring -/
instance: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {G : Type} → [inst_2 : Group G] → [inst_3 : DecidableEq G] → Ring (R[G])
instance
:
Ring: Type ?u.46963 → Type ?u.46963
Ring
(
R: Type
R
[
G: Type
G
]) := { mul :=
mul: {R : Type} → [inst : Ring R] → [inst_1 : DecidableEq R] → {G : Type} → [inst_2 : Group G] → [inst_3 : DecidableEq G] → R[G]R[G]R[G]
mul
neg := fun
x: ?m.47542
x
=> (-
1: ?m.47555
1
:
R: Type
R
) •
x: ?m.47542
x
sub_eq_add_neg :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: R[G]


x - y = x + -y
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

Goals accomplished! 🐙
add_left_neg :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

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


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + 1 x = 0 x


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + 1 x = 0 x


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + 1 x = 0 x


-1 + 1 = 0

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + 1 x = 0 x

lc: -1 + 1 = 0


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + x = 0 x

lc: -1 + 1 = 0


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + x = 0 x

lc: -1 + 1 = 0


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + x = 0 x

lc: -1 + 1 = 0


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + x = 0 x

lc: -1 + 1 = 0


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + x = Quotient.mk (formalSumSetoid R G) []

lc: -1 + 1 = 0


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + x = Quotient.mk (formalSumSetoid R G) []

lc: -1 + 1 = 0


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: R[G]

l: -1 x + x = Quotient.mk (formalSumSetoid R G) []

lc: -1 + 1 = 0


-x + x = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


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

Goals accomplished! 🐙
left_distrib :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * (b + c) = a * b + a * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : FormalSum R G) (b c : R[G]), Quotient.mk (formalSumSetoid R G) a * (b + c) = Quotient.mk (formalSumSetoid R G) a * b + Quotient.mk (formalSumSetoid R G) a * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * (b + c) = a * b + a * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


∀ (b c : R[G]), Quotient.mk (formalSumSetoid R G) x * (b + c) = Quotient.mk (formalSumSetoid R G) x * b + Quotient.mk (formalSumSetoid R G) x * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * (b + c) = a * b + a * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * (b + c) = a * b + a * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * (b + c) = a * b + a * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * (b + c) = a * b + a * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G


a.nil
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G


a.nil
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G


a.nil
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G


a.nil
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G


a.nil

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z


a.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z


a.cons
mulMonom h.fst h.snd x ++ FormalSum.mul x (t ++ z) mulMonom h.fst h.snd x ++ (FormalSum.mul x t ++ FormalSum.mul x z)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z


a.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z


a.cons.h
∀ (x_1 : G), coords (mulMonom h.fst h.snd x ++ FormalSum.mul x (t ++ z)) x_1 = coords (mulMonom h.fst h.snd x ++ (FormalSum.mul x t ++ FormalSum.mul x z)) x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z


a.cons.h
∀ (x_1 : G), coords (mulMonom h.fst h.snd x ++ FormalSum.mul x (t ++ z)) x_1 = coords (mulMonom h.fst h.snd x ++ (FormalSum.mul x t ++ FormalSum.mul x z)) x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z


a.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G


a.cons.h
coords (mulMonom h.fst h.snd x ++ FormalSum.mul x (t ++ z)) x₀ = coords (mulMonom h.fst h.snd x ++ (FormalSum.mul x t ++ FormalSum.mul x z)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z


a.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G


a.cons.h
coords (mulMonom h.fst h.snd x ++ FormalSum.mul x (t ++ z)) x₀ = coords (mulMonom h.fst h.snd x ++ (FormalSum.mul x t ++ FormalSum.mul x z)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G


a.cons.h
coords (mulMonom h.fst h.snd x) x₀ + coords (FormalSum.mul x (t ++ z)) x₀ = coords (mulMonom h.fst h.snd x ++ (FormalSum.mul x t ++ FormalSum.mul x z)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G


a.cons.h
coords (mulMonom h.fst h.snd x) x₀ + coords (FormalSum.mul x (t ++ z)) x₀ = coords (mulMonom h.fst h.snd x ++ (FormalSum.mul x t ++ FormalSum.mul x z)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G


a.cons.h
coords (mulMonom h.fst h.snd x) x₀ + coords (FormalSum.mul x (t ++ z)) x₀ = coords (mulMonom h.fst h.snd x) x₀ + (coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G


a.cons.h
coords (mulMonom h.fst h.snd x) x₀ + coords (FormalSum.mul x (t ++ z)) x₀ = coords (mulMonom h.fst h.snd x) x₀ + coords (FormalSum.mul x t ++ FormalSum.mul x z) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G


a.cons.h
coords (mulMonom h.fst h.snd x) x₀ + coords (FormalSum.mul x (t ++ z)) x₀ = coords (mulMonom h.fst h.snd x) x₀ + coords (FormalSum.mul x t ++ FormalSum.mul x z) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z


a.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G


a.cons.h
coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z


a.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G

lih:= congrFun ih x₀: coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t ++ FormalSum.mul x z) x₀


a.cons.h
coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z


a.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G

lih:= congrFun ih x₀: coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t ++ FormalSum.mul x z) x₀


a.cons.h
coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G

lih: coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀


a.cons.h
coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G

lih: coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀


a.cons.h
coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G

lih: coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀


a.cons.h
coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z


a.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G

lih: coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀


a.cons.h
coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, z: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul x (t ++ z) FormalSum.mul x t ++ FormalSum.mul x z

x₀: G

lih: coords (FormalSum.mul x (t ++ z)) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀


a.cons.h
coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul x z) x₀

Goals accomplished! 🐙
right_distrib :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), (a + b) * c = a * c + b * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : FormalSum R G) (b c : R[G]), (Quotient.mk (formalSumSetoid R G) a + b) * c = Quotient.mk (formalSumSetoid R G) a * c + b * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), (a + b) * c = a * c + b * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


∀ (b c : R[G]), (Quotient.mk (formalSumSetoid R G) x + b) * c = Quotient.mk (formalSumSetoid R G) x * c + b * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), (a + b) * c = a * c + b * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), (a + b) * c = a * c + b * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), (a + b) * c = a * c + b * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), (a + b) * c = a * c + b * c
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G


a.nil
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G


a.nil
[] []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G


a.nil

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t


a.cons
FormalSum.mul (x ++ y) (h :: t) FormalSum.mul x (h :: t) ++ FormalSum.mul y (h :: t)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h: G


a.cons
FormalSum.mul (x ++ y) ((a, h) :: t) FormalSum.mul x ((a, h) :: t) ++ FormalSum.mul y ((a, h) :: t)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t


a.cons
FormalSum.mul (x ++ y) (h :: t) FormalSum.mul x (h :: t) ++ FormalSum.mul y (h :: t)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h: G


a.cons
mulMonom a h (x ++ y) ++ FormalSum.mul (x ++ y) t mulMonom a h x ++ (FormalSum.mul x t ++ (mulMonom a h y ++ FormalSum.mul y t))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t


a.cons
FormalSum.mul (x ++ y) (h :: t) FormalSum.mul x (h :: t) ++ FormalSum.mul y (h :: t)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G


a.cons.h
coords (mulMonom a h (x ++ y) ++ FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x ++ (FormalSum.mul x t ++ (mulMonom a h y ++ FormalSum.mul y t))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t


a.cons
FormalSum.mul (x ++ y) (h :: t) FormalSum.mul x (h :: t) ++ FormalSum.mul y (h :: t)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G


a.cons.h
coords (mulMonom a h (x ++ y) ++ FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x ++ (FormalSum.mul x t ++ (mulMonom a h y ++ FormalSum.mul y t))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + coords (FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x) x₀ + coords (FormalSum.mul x t ++ (mulMonom a h y ++ FormalSum.mul y t)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + coords (FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x) x₀ + coords (FormalSum.mul x t ++ (mulMonom a h y ++ FormalSum.mul y t)) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + coords (FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + coords (FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + coords (mulMonom a h y ++ FormalSum.mul y t) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + coords (FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + coords (mulMonom a h y ++ FormalSum.mul y t) x₀)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t


a.cons
FormalSum.mul (x ++ y) (h :: t) FormalSum.mul x (h :: t) ++ FormalSum.mul y (h :: t)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + coords (FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t


a.cons
FormalSum.mul (x ++ y) (h :: t) FormalSum.mul x (h :: t) ++ FormalSum.mul y (h :: t)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G

lih:= congrFun ih x₀: coords (FormalSum.mul (x ++ y) t) x₀ = coords (FormalSum.mul x t ++ FormalSum.mul y t) x₀


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + coords (FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t


a.cons
FormalSum.mul (x ++ y) (h :: t) FormalSum.mul x (h :: t) ++ FormalSum.mul y (h :: t)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G

lih:= congrFun ih x₀: coords (FormalSum.mul (x ++ y) t) x₀ = coords (FormalSum.mul x t ++ FormalSum.mul y t) x₀


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + coords (FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G

lih: coords (FormalSum.mul (x ++ y) t) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + coords (FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G

lih: coords (FormalSum.mul (x ++ y) t) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + coords (FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G

lih: coords (FormalSum.mul (x ++ y) t) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + coords (FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t


a.cons
FormalSum.mul (x ++ y) (h :: t) FormalSum.mul x (h :: t) ++ FormalSum.mul y (h :: t)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G

lih: coords (FormalSum.mul (x ++ y) t) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + coords (FormalSum.mul (x ++ y) t) x₀ = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G

lih: coords (FormalSum.mul (x ++ y) t) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + (coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀) = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G

lih: coords (FormalSum.mul (x ++ y) t) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + (coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀) = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t


a.cons
FormalSum.mul (x ++ y) (h :: t) FormalSum.mul x (h :: t) ++ FormalSum.mul y (h :: t)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G

lih: coords (FormalSum.mul (x ++ y) t) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + (coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀) = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t


a.cons
FormalSum.mul (x ++ y) (h :: t) FormalSum.mul x (h :: t) ++ FormalSum.mul y (h :: t)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G

lih: coords (FormalSum.mul (x ++ y) t) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀


a.cons.h
coords (mulMonom a h (x ++ y)) x₀ + (coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀) = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G

lih: coords (FormalSum.mul (x ++ y) t) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀


a.cons.h
coords (mulMonom a h x) x₀ + coords (mulMonom a h y) x₀ + (coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀) = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h✝: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t

a: R

h, x₀: G

lih: coords (FormalSum.mul (x ++ y) t) x₀ = coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀


a.cons.h
coords (mulMonom a h x) x₀ + coords (mulMonom a h y) x₀ + (coords (FormalSum.mul x t) x₀ + coords (FormalSum.mul y t) x₀) = coords (mulMonom a h x) x₀ + (coords (FormalSum.mul x t) x₀ + (coords (mulMonom a h y) x₀ + coords (FormalSum.mul y t) x₀))
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

h: R × G

t: List (R × G)

ih: FormalSum.mul (x ++ y) t FormalSum.mul x t ++ FormalSum.mul y t


a.cons
FormalSum.mul (x ++ y) (h :: t) FormalSum.mul x (h :: t) ++ FormalSum.mul y (h :: t)

Goals accomplished! 🐙
zero_mul :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), 0 * a = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


a
∀ (a : FormalSum R G), 0 * Quotient.mk (formalSumSetoid R G) a = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), 0 * a = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), 0 * a = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a.a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), 0 * a = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a.a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


a.a.nil

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a.a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
FormalSum.mul [] (h :: t) []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
FormalSum.mul [] (h :: t) []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
mulMonom h.fst h.snd [] ++ FormalSum.mul [] t []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
mulMonom h.fst h.snd [] ++ FormalSum.mul [] t []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
FormalSum.mul [] (h :: t) []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
mulMonom h.fst h.snd [] ++ FormalSum.mul [] t []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
FormalSum.mul [] (h :: t) []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons.h
∀ (x : G), coords (mulMonom h.fst h.snd [] ++ FormalSum.mul [] t) x = coords [] x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
FormalSum.mul [] (h :: t) []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons.h
∀ (x : G), coords (mulMonom h.fst h.snd [] ++ FormalSum.mul [] t) x = coords [] x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
FormalSum.mul [] (h :: t) []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G


a.a.cons.h
coords (mulMonom h.fst h.snd [] ++ FormalSum.mul [] t) x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
FormalSum.mul [] (h :: t) []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih:= congrFun ih x₀: coords (FormalSum.mul [] t) x₀ = coords [] x₀


a.a.cons.h
coords (mulMonom h.fst h.snd [] ++ FormalSum.mul [] t) x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
FormalSum.mul [] (h :: t) []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih:= congrFun ih x₀: coords (FormalSum.mul [] t) x₀ = coords [] x₀


a.a.cons.h
coords (mulMonom h.fst h.snd [] ++ FormalSum.mul [] t) x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih: coords (FormalSum.mul [] t) x₀ = 0


a.a.cons.h
coords (mulMonom h.fst h.snd [] ++ FormalSum.mul [] t) x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih: coords (FormalSum.mul [] t) x₀ = 0


a.a.cons.h
coords (mulMonom h.fst h.snd [] ++ FormalSum.mul [] t) x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih: coords (FormalSum.mul [] t) x₀ = 0


a.a.cons.h
coords (mulMonom h.fst h.snd [] ++ FormalSum.mul [] t) x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
FormalSum.mul [] (h :: t) []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih: coords (FormalSum.mul [] t) x₀ = 0


a.a.cons.h
coords (mulMonom h.fst h.snd [] ++ FormalSum.mul [] t) x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih: coords (FormalSum.mul [] t) x₀ = 0


a.a.cons.h
coords (mulMonom h.fst h.snd []) x₀ + coords (FormalSum.mul [] t) x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih: coords (FormalSum.mul [] t) x₀ = 0


a.a.cons.h
coords (mulMonom h.fst h.snd []) x₀ + coords (FormalSum.mul [] t) x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
FormalSum.mul [] (h :: t) []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih: coords (FormalSum.mul [] t) x₀ = 0


a.a.cons.h
coords (mulMonom h.fst h.snd []) x₀ + coords (FormalSum.mul [] t) x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih: coords (FormalSum.mul [] t) x₀ = 0


a.a.cons.h
coords (mulMonom h.fst h.snd []) x₀ + 0 = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih: coords (FormalSum.mul [] t) x₀ = 0


a.a.cons.h
coords (mulMonom h.fst h.snd []) x₀ + 0 = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
FormalSum.mul [] (h :: t) []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih: coords (FormalSum.mul [] t) x₀ = 0


a.a.cons.h
coords (mulMonom h.fst h.snd []) x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []


a.a.cons
FormalSum.mul [] (h :: t) []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih: coords (FormalSum.mul [] t) x₀ = 0


a.a.cons.h
coords (mulMonom h.fst h.snd []) x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

h: R × G

t: List (R × G)

ih: FormalSum.mul [] t []

x₀: G

lih: coords (FormalSum.mul [] t) x₀ = 0


a.a.cons.h
coords [] x₀ = coords [] x₀

Goals accomplished! 🐙
mul_zero :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), a * 0 = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


a
∀ (a : FormalSum R G), Quotient.mk (formalSumSetoid R G) a * 0 = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), a * 0 = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), a * 0 = 0

Goals accomplished! 🐙
one := ⟦[(
1: ?m.47331
1
,
1: ?m.47361
1
)]⟧ natCast := fun
n: ?m.47470
n
=> ⟦ [(
n: ?m.47470
n
,
1: ?m.47527
1
)] ⟧ natCast_zero :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


a
[(0, 1)] []
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


a.h
∀ (x : G), coords [(0, 1)] x = coords [] x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


a.h
∀ (x : G), coords [(0, 1)] x = coords [] x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G


a.h
coords [(0, 1)] x₀ = coords [] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G


a.h
(match 1 == x₀ with | true => 0 | false => 0) = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G


a.h.false
(match false with | true => 0 | false => 0) = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G


a.h.true
(match true with | true => 0 | false => 0) = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G


a.h
(match 1 == x₀ with | true => 0 | false => 0) = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G


a.h.false
(match false with | true => 0 | false => 0) = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G


a.h.true
(match true with | true => 0 | false => 0) = 0
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G


a.h
(match 1 == x₀ with | true => 0 | false => 0) = 0

Goals accomplished! 🐙
natCast_succ :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (n : ), NatCast.natCast (n + 1) = NatCast.natCast n + 1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:


R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (n : ), NatCast.natCast (n + 1) = NatCast.natCast n + 1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:


a
[(↑(n + 1), 1)] [(n, 1)] ++ [(1, 1)]
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (n : ), NatCast.natCast (n + 1) = NatCast.natCast n + 1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:


a.h
∀ (x : G), coords [(↑(n + 1), 1)] x = coords ([(n, 1)] ++ [(1, 1)]) x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:


a.h
∀ (x : G), coords [(↑(n + 1), 1)] x = coords ([(n, 1)] ++ [(1, 1)]) x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (n : ), NatCast.natCast (n + 1) = NatCast.natCast n + 1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:

x₀: G


a.h
coords [(↑(n + 1), 1)] x₀ = coords ([(n, 1)] ++ [(1, 1)]) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (n : ), NatCast.natCast (n + 1) = NatCast.natCast n + 1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:

x₀: G


a.h
coords [(↑(n + 1), 1)] x₀ = coords ([(n, 1)] ++ [(1, 1)]) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:

x₀: G


a.h
coords [(↑(n + 1), 1)] x₀ = coords [(n, 1)] x₀ + coords [(1, 1)] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:

x₀: G


a.h
coords [(↑(n + 1), 1)] x₀ = coords [(n, 1)] x₀ + coords [(1, 1)] x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (n : ), NatCast.natCast (n + 1) = NatCast.natCast n + 1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (n : ), NatCast.natCast (n + 1) = NatCast.natCast n + 1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:

x₀: G

x✝: Bool

m: (1 == x₀) = x✝


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:

x₀: G

m: (1 == x₀) = true


a.h.true
coords [(n + 1, 1)] x₀ = coords [(n, 1)] x₀ + coords [(1, 1)] x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:

x₀: G

x✝: Bool

m: (1 == x₀) = x✝


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

n:

x₀: G

m: (1 == x₀) = false


a.h.false
coords [(n + 1, 1)] x₀ = coords [(n, 1)] x₀ + coords [(1, 1)] x₀

Goals accomplished! 🐙
mul_assoc :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * b * c = a * (b * c)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : FormalSum R G) (b c : R[G]), Quotient.mk (formalSumSetoid R G) a * b * c = Quotient.mk (formalSumSetoid R G) a * (b * c)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * b * c = a * (b * c)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


∀ (b c : R[G]), Quotient.mk (formalSumSetoid R G) x * b * c = Quotient.mk (formalSumSetoid R G) x * (b * c)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * b * c = a * (b * c)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * b * c = a * (b * c)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * b * c = a * (b * c)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * b * c = a * (b * c)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G


a.h
∀ (x_1 : G), coords (FormalSum.mul (FormalSum.mul x y) z) x_1 = coords (FormalSum.mul x (FormalSum.mul y z)) x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G


a.h
∀ (x_1 : G), coords (FormalSum.mul (FormalSum.mul x y) z) x_1 = coords (FormalSum.mul x (FormalSum.mul y z)) x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * b * c = a * (b * c)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G

x₀: G


a.h
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * b * c = a * (b * c)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G

x₀: G


a.h
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a b c : R[G]), a * b * c = a * (b * c)
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G

x₀: G


a.h
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G


a.h.nil
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G


a.h.nil
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G


a.h.nil

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y, z: FormalSum R G

x₀: G


a.h
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀


a.h.cons
coords (FormalSum.mul (FormalSum.mul x y) (h :: t)) x₀ = coords (FormalSum.mul x (FormalSum.mul y (h :: t))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
coords (FormalSum.mul (FormalSum.mul x y) ((a, h) :: t)) x₀ = coords (FormalSum.mul x (FormalSum.mul y ((a, h) :: t))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀


a.h.cons
coords (FormalSum.mul (FormalSum.mul x y) (h :: t)) x₀ = coords (FormalSum.mul x (FormalSum.mul y (h :: t))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀


a.h.cons
coords (FormalSum.mul (FormalSum.mul x y) (h :: t)) x₀ = coords (FormalSum.mul x (FormalSum.mul y (h :: t))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀


a.h.cons
coords (FormalSum.mul (FormalSum.mul x y) (h :: t)) x₀ = coords (FormalSum.mul x (FormalSum.mul y (h :: t))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀


a.h.cons
coords (FormalSum.mul (FormalSum.mul x y) (h :: t)) x₀ = coords (FormalSum.mul x (FormalSum.mul y (h :: t))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀


a.h.cons
coords (FormalSum.mul (FormalSum.mul x y) (h :: t)) x₀ = coords (FormalSum.mul x (FormalSum.mul y (h :: t))) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x, y: FormalSum R G

x₀: G

h✝: R × G

t: List (R × G)

ih: coords (FormalSum.mul (FormalSum.mul x y) t) x₀ = coords (FormalSum.mul x (FormalSum.mul y t)) x₀

a: R

h: G


a.h.cons

Goals accomplished! 🐙
mul_one :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), a * 1 = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), a * 1 = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), a * 1 = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a.a
FormalSum.mul x [(1, 1)] x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), a * 1 = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a.a.h
∀ (x_1 : G), coords (FormalSum.mul x [(1, 1)]) x_1 = coords x x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a.a.h
∀ (x_1 : G), coords (FormalSum.mul x [(1, 1)]) x_1 = coords x x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), a * 1 = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


a.a.h
coords (FormalSum.mul x [(1, 1)]) x₀ = coords x x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), a * 1 = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


a.a.h
coords (FormalSum.mul x [(1, 1)]) x₀ = coords x x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


a.a.h
coords (FormalSum.mul x [(1, 1)]) x₀ = coords x x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


a.a.h
coords (FormalSum.mul x [(1, 1)]) x₀ = coords x x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


a.a.h
coords (mulMonom 1 1 x ++ FormalSum.mul x []) x₀ = coords x x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


a.a.h
coords (mulMonom 1 1 x ++ FormalSum.mul x []) x₀ = coords x x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), a * 1 = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), a * 1 = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G


a.a.h.nil
coords (mulMonom 1 1 []) x₀ = coords [] x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


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

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀


a.a.h.cons
coords (mulMonom 1 1 (h :: t)) x₀ = coords (h :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (mulMonom 1 1 ((a, x) :: t)) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀


a.a.h.cons
coords (mulMonom 1 1 (h :: t)) x₀ = coords (h :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (mulMonom 1 1 ((a, x) :: t)) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords ((a * 1, x * 1) :: mulMonom 1 1 t) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (mulMonom 1 1 ((a, x) :: t)) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
monomCoeff R G x₀ (a * 1, x * 1) + coords (mulMonom 1 1 t) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (mulMonom 1 1 ((a, x) :: t)) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
(match (a * 1, x * 1).snd == x₀ with | true => (a * 1, x * 1).fst | false => 0) + coords (mulMonom 1 1 t) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
(match (a * 1, x * 1).snd == x₀ with | true => (a * 1, x * 1).fst | false => 0) + coords (mulMonom 1 1 t) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀


a.a.h.cons
coords (mulMonom 1 1 (h :: t)) x₀ = coords (h :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
(match x == x₀ with | true => a | false => 0) + coords (mulMonom 1 1 t) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀


a.a.h.cons
coords (mulMonom 1 1 (h :: t)) x₀ = coords (h :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
(match x == x₀ with | true => a | false => 0) + coords (mulMonom 1 1 t) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
(match x == x₀ with | true => a | false => 0) + coords (mulMonom 1 1 t) x₀ = monomCoeff R G x₀ (a, x) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
(match x == x₀ with | true => a | false => 0) + coords (mulMonom 1 1 t) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
(match x == x₀ with | true => a | false => 0) + coords (mulMonom 1 1 t) x₀ = (match (a, x).snd == x₀ with | true => (a, x).fst | false => 0) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
(match x == x₀ with | true => a | false => 0) + coords (mulMonom 1 1 t) x₀ = (match (a, x).snd == x₀ with | true => (a, x).fst | false => 0) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀


a.a.h.cons
coords (mulMonom 1 1 (h :: t)) x₀ = coords (h :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G

m: (x == x₀) = false


a.a.h.cons.false
(match false with | true => a | false => 0) + coords (mulMonom 1 1 t) x₀ = (match false with | true => (a, x).fst | false => 0) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G

m: (x == x₀) = true


a.a.h.cons.true
(match true with | true => a | false => 0) + coords (mulMonom 1 1 t) x₀ = (match true with | true => (a, x).fst | false => 0) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
(match x == x₀ with | true => a | false => 0) + coords (mulMonom 1 1 t) x₀ = (match (a, x).snd == x₀ with | true => (a, x).fst | false => 0) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G

m: (x == x₀) = false


a.a.h.cons.false
(match false with | true => a | false => 0) + coords (mulMonom 1 1 t) x₀ = (match false with | true => (a, x).fst | false => 0) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G

m: (x == x₀) = true


a.a.h.cons.true
(match true with | true => a | false => 0) + coords (mulMonom 1 1 t) x₀ = (match true with | true => (a, x).fst | false => 0) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (mulMonom 1 1 t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
(match x == x₀ with | true => a | false => 0) + coords (mulMonom 1 1 t) x₀ = (match (a, x).snd == x₀ with | true => (a, x).fst | false => 0) + coords t x₀

Goals accomplished! 🐙
one_mul :=
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), 1 * a = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), 1 * a = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), 1 * a = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a.a
FormalSum.mul [(1, 1)] x x
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), 1 * a = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a.a.h
∀ (x_1 : G), coords (FormalSum.mul [(1, 1)] x) x_1 = coords x x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G


a.a.h
∀ (x_1 : G), coords (FormalSum.mul [(1, 1)] x) x_1 = coords x x_1
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), 1 * a = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


a.a.h
coords (FormalSum.mul [(1, 1)] x) x₀ = coords x x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G


∀ (a : R[G]), 1 * a = a
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


a.a.h
coords (FormalSum.mul [(1, 1)] x) x₀ = coords x x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G


a.a.h.nil
coords (FormalSum.mul [(1, 1)] []) x₀ = coords [] x₀

Goals accomplished! 🐙
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x: FormalSum R G

x₀: G


a.a.h
coords (FormalSum.mul [(1, 1)] x) x₀ = coords x x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀


a.a.h.cons
coords (FormalSum.mul [(1, 1)] (h :: t)) x₀ = coords (h :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (FormalSum.mul [(1, 1)] ((a, x) :: t)) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀


a.a.h.cons
coords (FormalSum.mul [(1, 1)] (h :: t)) x₀ = coords (h :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (FormalSum.mul [(1, 1)] ((a, x) :: t)) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (FormalSum.mul [(1, 1)] ((a, x) :: t)) x₀ = monomCoeff R G x₀ (a, x) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (FormalSum.mul [(1, 1)] ((a, x) :: t)) x₀ = coords ((a, x) :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (FormalSum.mul [(1, 1)] ((a, x) :: t)) x₀ = monomCoeff R G x₀ (a, x) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (FormalSum.mul [(1, 1)] ((a, x) :: t)) x₀ = monomCoeff R G x₀ (a, x) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (FormalSum.mul [(1, 1)] ((a, x) :: t)) x₀ = monomCoeff R G x₀ (a, x) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀


a.a.h.cons
coords (FormalSum.mul [(1, 1)] (h :: t)) x₀ = coords (h :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (FormalSum.mul [(1, 1)] ((a, x) :: t)) x₀ = monomCoeff R G x₀ (a, x) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀


a.a.h.cons
coords (FormalSum.mul [(1, 1)] (h :: t)) x₀ = coords (h :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (FormalSum.mul [(1, 1)] ((a, x) :: t)) x₀ = monomCoeff R G x₀ (a, x) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (mulMonom a x [(1, 1)] ++ FormalSum.mul [(1, 1)] t) x₀ = monomCoeff R G x₀ (a, x) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (mulMonom a x [(1, 1)] ++ FormalSum.mul [(1, 1)] t) x₀ = monomCoeff R G x₀ (a, x) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀


a.a.h.cons
coords (FormalSum.mul [(1, 1)] (h :: t)) x₀ = coords (h :: t) x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (mulMonom a x [(1, 1)] ++ FormalSum.mul [(1, 1)] t) x₀ = monomCoeff R G x₀ (a, x) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (mulMonom a x [(1, 1)]) x₀ + coords (FormalSum.mul [(1, 1)] t) x₀ = monomCoeff R G x₀ (a, x) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀

a: R

x: G


a.a.h.cons
coords (mulMonom a x [(1, 1)]) x₀ + coords (FormalSum.mul [(1, 1)] t) x₀ = monomCoeff R G x₀ (a, x) + coords t x₀
R: Type

inst✝³: Ring R

inst✝²: DecidableEq R

G: Type

inst✝¹: Group G

inst✝: DecidableEq G

x₀: G

h: R × G

t: List (R × G)

ih: coords (FormalSum.mul [(1, 1)] t) x₀ = coords t x₀


a.a.h.cons
coords (FormalSum.mul [(1, 1)] (h :: t)) x₀ = coords (h :: t) x₀

Goals accomplished! 🐙
} end GroupRing