case nil
ι : Type ?u.71204
α : Type ?u.71207
M : Type u_1
N : Type ?u.71213
P : Type ?u.71216
M₀ : Type ?u.71219
G : Type ?u.71222
R : Type ?u.71225
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l✝ l₁ l₂ : List M
a : M
l : List M
y : M
h✝ : ∀ (x : M), x ∈ l → Commute y x
h : ∀ (x : M), x ∈ [] → Commute y x
⊢ Commute y (prod [])

case cons
ι : Type ?u.71204
α : Type ?u.71207
M : Type u_1
N : Type ?u.71213
P : Type ?u.71216
M₀ : Type ?u.71219
G : Type ?u.71222
R : Type ?u.71225
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l✝¹ l₁ l₂ : List M
a : M
l✝ : List M
y : M
h✝ : ∀ (x : M), x ∈ l✝ → Commute y x
z : M
l : List M
IH : (∀ (x : M), x ∈ l → Commute y x) → Commute y (prod l)
h : ∀ (x : M), x ∈ z :: l → Commute y x
⊢ Commute y (prod (z :: l))
ι : Type ?u.71204
α : Type ?u.71207
M : Type u_1
N : Type ?u.71213
P : Type ?u.71216
M₀ : Type ?u.71219
G : Type ?u.71222
R : Type ?u.71225
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l✝ l₁ l₂ : List M
a : M
l : List M
y : M
h : ∀ (x : M), x ∈ l → Commute y x
⊢ Commute y (prod l)
induction' l with z l IH
no goals
case nil
ι : Type ?u.71204
α : Type ?u.71207
M : Type u_1
N : Type ?u.71213
P : Type ?u.71216
M₀ : Type ?u.71219
G : Type ?u.71222
R : Type ?u.71225
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l✝ l₁ l₂ : List M
a : M
l : List M
y : M
h✝ : ∀ (x : M), x ∈ l → Commute y x
h : ∀ (x : M), x ∈ [] → Commute y x
⊢ Commute y (prod [])
simp
case cons
ι : Type ?u.71204
α : Type ?u.71207
M : Type u_1
N : Type ?u.71213
P : Type ?u.71216
M₀ : Type ?u.71219
G : Type ?u.71222
R : Type ?u.71225
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l✝¹ l₁ l₂ : List M
a : M
l✝ : List M
y : M
h✝ : ∀ (x : M), x ∈ l✝ → Commute y x
z : M
l : List M
IH : (∀ (x : M), x ∈ l → Commute y x) → Commute y (prod l)
h : Commute y z ∧ ∀ (x : M), x ∈ l → Commute y x
⊢ Commute y (prod (z :: l))
case cons
ι : Type ?u.71204
α : Type ?u.71207
M : Type u_1
N : Type ?u.71213
P : Type ?u.71216
M₀ : Type ?u.71219
G : Type ?u.71222
R : Type ?u.71225
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l✝¹ l₁ l₂ : List M
a : M
l✝ : List M
y : M
h✝ : ∀ (x : M), x ∈ l✝ → Commute y x
z : M
l : List M
IH : (∀ (x : M), x ∈ l → Commute y x) → Commute y (prod l)
h : ∀ (x : M), x ∈ z :: l → Commute y x
⊢ Commute y (prod (z :: l))
rw [List.forall_mem_cons] at h
case cons
ι : Type ?u.71204
α : Type ?u.71207
M : Type u_1
N : Type ?u.71213
P : Type ?u.71216
M₀ : Type ?u.71219
G : Type ?u.71222
R : Type ?u.71225
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l✝¹ l₁ l₂ : List M
a : M
l✝ : List M
y : M
h✝ : ∀ (x : M), x ∈ l✝ → Commute y x
z : M
l : List M
IH : (∀ (x : M), x ∈ l → Commute y x) → Commute y (prod l)
h : Commute y z ∧ ∀ (x : M), x ∈ l → Commute y x
⊢ Commute y (z * prod l)
case cons
ι : Type ?u.71204
α : Type ?u.71207
M : Type u_1
N : Type ?u.71213
P : Type ?u.71216
M₀ : Type ?u.71219
G : Type ?u.71222
R : Type ?u.71225
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l✝¹ l₁ l₂ : List M
a : M
l✝ : List M
y : M
h✝ : ∀ (x : M), x ∈ l✝ → Commute y x
z : M
l : List M
IH : (∀ (x : M), x ∈ l → Commute y x) → Commute y (prod l)
h : Commute y z ∧ ∀ (x : M), x ∈ l → Commute y x
⊢ Commute y (prod (z :: l))
rw [List.prod_cons]
no goals
case cons
ι : Type ?u.71204
α : Type ?u.71207
M : Type u_1
N : Type ?u.71213
P : Type ?u.71216
M₀ : Type ?u.71219
G : Type ?u.71222
R : Type ?u.71225
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l✝¹ l₁ l₂ : List M
a : M
l✝ : List M
y : M
h✝ : ∀ (x : M), x ∈ l✝ → Commute y x
z : M
l : List M
IH : (∀ (x : M), x ∈ l → Commute y x) → Commute y (prod l)
h : Commute y z ∧ ∀ (x : M), x ∈ l → Commute y x
⊢ Commute y (z * prod l)
exact Commute.mul_right h.1 (IH h.2)