Theorem: Function.Exact.of_ladder_addEquiv_of_exact
File: Mathlib/Algebra/Exact.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
M' : Type u_3
N : Type u_4
N' : Type u_5
P : Type u_6
P' : Type u_7
inst✝⁸ : AddGroup M
inst✝⁷ : AddGroup N
inst✝⁶ : AddGroup P
f : M →+ N
g : N →+ P
X₁ : Type u_8
X₂ : Type u_9
X₃ : Type u_10
Y₁ : Type u_11
Y₂ : Type u_12
Y₃ : Type u_13
inst✝⁵ : AddCommMonoid X₁
inst✝⁴ : AddCommMonoid X₂
inst✝³ : AddCommMonoid X₃
inst✝² : AddCommMonoid Y₁
inst✝¹ : AddCommMonoid Y₂
inst✝ : AddCommMonoid Y₃
e₁ : X₁ ≃+ Y₁
e₂ : X₂ ≃+ Y₂
e₃ : X₃ ≃+ Y₃
f₁₂ : X₁ →+ X₂
f₂₃ : X₂ →+ X₃
g₁₂ : Y₁ →+ Y₂
g₂₃ : Y₂ →+ Y₃
comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂
comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃
H : Exact ⇑f₁₂ ⇑f₂₃
⊢ Exact ⇑g₁₂ ⇑g₂₃
state_after: R : Type u_1
M : Type u_2
M' : Type u_3
N : Type u_4
N' : Type u_5
P : Type u_6
P' : Type u_7
inst✝⁸ : AddGroup M
inst✝⁷ : AddGroup N
inst✝⁶ : AddGroup P
f : M →+ N
g : N →+ P
X₁ : Type u_8
X₂ : Type u_9
X₃ : Type u_10
Y₁ : Type u_11
Y₂ : Type u_12
Y₃ : Type u_13
inst✝⁵ : AddCommMonoid X₁
inst✝⁴ : AddCommMonoid X₂
inst✝³ : AddCommMonoid X₃
inst✝² : AddCommMonoid Y₁
inst✝¹ : AddCommMonoid Y₂
inst✝ : AddCommMonoid Y₃
e₁ : X₁ ≃+ Y₁
e₂ : X₂ ≃+ Y₂
e₃ : X₃ ≃+ Y₃
f₁₂ : X₁ →+ X₂
f₂₃ : X₂ →+ X₃
g₁₂ : Y₁ →+ Y₂
g₂₃ : Y₂ →+ Y₃
comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂
comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃
H : Exact ⇑f₁₂ ⇑f₂₃
h₁₂ : ∀ (x : X₁), (g₁₂.comp ↑e₁) x = ((↑e₂).comp f₁₂) x
⊢ Exact ⇑g₁₂ ⇑g₂₃
tactic: have h₁₂ := DFunLike.congr_fun comm₁₂
state_before: R : Type u_1
M : Type u_2
M' : Type u_3
N : Type u_4
N' : Type u_5
P : Type u_6
P' : Type u_7
inst✝⁸ : AddGroup M
inst✝⁷ : AddGroup N
inst✝⁶ : AddGroup P
f : M →+ N
g : N →+ P
X₁ : Type u_8
X₂ : Type u_9
X₃ : Type u_10
Y₁ : Type u_11
Y₂ : Type u_12
Y₃ : Type u_13
inst✝⁵ : AddCommMonoid X₁
inst✝⁴ : AddCommMonoid X₂
inst✝³ : AddCommMonoid X₃
inst✝² : AddCommMonoid Y₁
inst✝¹ : AddCommMonoid Y₂
inst✝ : AddCommMonoid Y₃
e₁ : X₁ ≃+ Y₁
e₂ : X₂ ≃+ Y₂
e₃ : X₃ ≃+ Y₃
f₁₂ : X₁ →+ X₂
f₂₃ : X₂ →+ X₃
g₁₂ : Y₁ →+ Y₂
g₂₃ : Y₂ →+ Y₃
comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂
comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃
H : Exact ⇑f₁₂ ⇑f₂₃
h₁₂ : ∀ (x : X₁), (g₁₂.comp ↑e₁) x = ((↑e₂).comp f₁₂) x
⊢ Exact ⇑g₁₂ ⇑g₂₃
state_after: R : Type u_1
M : Type u_2
M' : Type u_3
N : Type u_4
N' : Type u_5
P : Type u_6
P' : Type u_7
inst✝⁸ : AddGroup M
inst✝⁷ : AddGroup N
inst✝⁶ : AddGroup P
f : M →+ N
g : N →+ P
X₁ : Type u_8
X₂ : Type u_9
X₃ : Type u_10
Y₁ : Type u_11
Y₂ : Type u_12
Y₃ : Type u_13
inst✝⁵ : AddCommMonoid X₁
inst✝⁴ : AddCommMonoid X₂
inst✝³ : AddCommMonoid X₃
inst✝² : AddCommMonoid Y₁
inst✝¹ : AddCommMonoid Y₂
inst✝ : AddCommMonoid Y₃
e₁ : X₁ ≃+ Y₁
e₂ : X₂ ≃+ Y₂
e₃ : X₃ ≃+ Y₃
f₁₂ : X₁ →+ X₂
f₂₃ : X₂ →+ X₃
g₁₂ : Y₁ →+ Y₂
g₂₃ : Y₂ →+ Y₃
comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂
comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃
H : Exact ⇑f₁₂ ⇑f₂₃
h₁₂ : ∀ (x : X₁), (g₁₂.comp ↑e₁) x = ((↑e₂).comp f₁₂) x
h₂₃ : ∀ (x : X₂), (g₂₃.comp ↑e₂) x = ((↑e₃).comp f₂₃) x
⊢ Exact ⇑g₁₂ ⇑g₂₃
tactic: have h₂₃ := DFunLike.congr_fun comm₂₃
state_before: R : Type u_1
M : Type u_2
M' : Type u_3
N : Type u_4
N' : Type u_5
P : Type u_6
P' : Type u_7
inst✝⁸ : AddGroup M
inst✝⁷ : AddGroup N
inst✝⁶ : AddGroup P
f : M →+ N
g : N →+ P
X₁ : Type u_8
X₂ : Type u_9
X₃ : Type u_10
Y₁ : Type u_11
Y₂ : Type u_12
Y₃ : Type u_13
inst✝⁵ : AddCommMonoid X₁
inst✝⁴ : AddCommMonoid X₂
inst✝³ : AddCommMonoid X₃
inst✝² : AddCommMonoid Y₁
inst✝¹ : AddCommMonoid Y₂
inst✝ : AddCommMonoid Y₃
e₁ : X₁ ≃+ Y₁
e₂ : X₂ ≃+ Y₂
e₃ : X₃ ≃+ Y₃
f₁₂ : X₁ →+ X₂
f₂₃ : X₂ →+ X₃
g₁₂ : Y₁ →+ Y₂
g₂₃ : Y₂ →+ Y₃
comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂
comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃
H : Exact ⇑f₁₂ ⇑f₂₃
h₁₂ : ∀ (x : X₁), (g₁₂.comp ↑e₁) x = ((↑e₂).comp f₁₂) x
h₂₃ : ∀ (x : X₂), (g₂₃.comp ↑e₂) x = ((↑e₃).comp f₂₃) x
⊢ Exact ⇑g₁₂ ⇑g₂₃
state_after: R : Type u_1
M : Type u_2
M' : Type u_3
N : Type u_4
N' : Type u_5
P : Type u_6
P' : Type u_7
inst✝⁸ : AddGroup M
inst✝⁷ : AddGroup N
inst✝⁶ : AddGroup P
f : M →+ N
g : N →+ P
X₁ : Type u_8
X₂ : Type u_9
X₃ : Type u_10
Y₁ : Type u_11
Y₂ : Type u_12
Y₃ : Type u_13
inst✝⁵ : AddCommMonoid X₁
inst✝⁴ : AddCommMonoid X₂
inst✝³ : AddCommMonoid X₃
inst✝² : AddCommMonoid Y₁
inst✝¹ : AddCommMonoid Y₂
inst✝ : AddCommMonoid Y₃
e₁ : X₁ ≃+ Y₁
e₂ : X₂ ≃+ Y₂
e₃ : X₃ ≃+ Y₃
f₁₂ : X₁ →+ X₂
f₂₃ : X₂ →+ X₃
g₁₂ : Y₁ →+ Y₂
g₂₃ : Y₂ →+ Y₃
comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂
comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃
H : Exact ⇑f₁₂ ⇑f₂₃
h₁₂ : ∀ (x : X₁), g₁₂ (e₁ x) = e₂ (f₁₂ x)
h₂₃ : ∀ (x : X₂), g₂₃ (e₂ x) = e₃ (f₂₃ x)
⊢ Exact ⇑g₁₂ ⇑g₂₃
tactic: dsimp at h₁₂ h₂₃
state_before: R : Type u_1
M : Type u_2
M' : Type u_3
N : Type u_4
N' : Type u_5
P : Type u_6
P' : Type u_7
inst✝⁸ : AddGroup M
inst✝⁷ : AddGroup N
inst✝⁶ : AddGroup P
f : M →+ N
g : N →+ P
X₁ : Type u_8
X₂ : Type u_9
X₃ : Type u_10
Y₁ : Type u_11
Y₂ : Type u_12
Y₃ : Type u_13
inst✝⁵ : AddCommMonoid X₁
inst✝⁴ : AddCommMonoid X₂
inst✝³ : AddCommMonoid X₃
inst✝² : AddCommMonoid Y₁
inst✝¹ : AddCommMonoid Y₂
inst✝ : AddCommMonoid Y₃
e₁ : X₁ ≃+ Y₁
e₂ : X₂ ≃+ Y₂
e₃ : X₃ ≃+ Y₃
f₁₂ : X₁ →+ X₂
f₂₃ : X₂ →+ X₃
g₁₂ : Y₁ →+ Y₂
g₂₃ : Y₂ →+ Y₃
comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂
comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃
H : Exact ⇑f₁₂ ⇑f₂₃
h₁₂ : ∀ (x : X₁), g₁₂ (e₁ x) = e₂ (f₁₂ x)
h₂₃ : ∀ (x : X₂), g₂₃ (e₂ x) = e₃ (f₂₃ x)
⊢ Exact ⇑g₁₂ ⇑g₂₃
state_after: case hc
R : Type u_1
M : Type u_2
M' : Type u_3
N : Type u_4
N' : Type u_5
P : Type u_6
P' : Type u_7
inst✝⁸ : AddGroup M
inst✝⁷ : AddGroup N
inst✝⁶ : AddGroup P
f : M →+ N
g : N →+ P
X₁ : Type u_8
X₂ : Type u_9
X₃ : Type u_10
Y₁ : Type u_11
Y₂ : Type u_12
Y₃ : Type u_13
inst✝⁵ : AddCommMonoid X₁
inst✝⁴ : AddCommMonoid X₂
inst✝³ : AddCommMonoid X₃
inst✝² : AddCommMonoid Y₁
inst✝¹ : AddCommMonoid Y₂
inst✝ : AddCommMonoid Y₃
e₁ : X₁ ≃+ Y₁
e₂ : X₂ ≃+ Y₂
e₃ : X₃ ≃+ Y₃
f₁₂ : X₁ →+ X₂
f₂₃ : X₂ →+ X₃
g₁₂ : Y₁ →+ Y₂
g₂₃ : Y₂ →+ Y₃
comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂
comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃
H : Exact ⇑f₁₂ ⇑f₂₃
h₁₂ : ∀ (x : X₁), g₁₂ (e₁ x) = e₂ (f₁₂ x)
h₂₃ : ∀ (x : X₂), g₂₃ (e₂ x) = e₃ (f₂₃ x)
⊢ ⇑g₂₃ ∘ ⇑g₁₂ = 0

case hr
R : Type u_1
M : Type u_2
M' : Type u_3
N : Type u_4
N' : Type u_5
P : Type u_6
P' : Type u_7
inst✝⁸ : AddGroup M
inst✝⁷ : AddGroup N
inst✝⁶ : AddGroup P
f : M →+ N
g : N →+ P
X₁ : Type u_8
X₂ : Type u_9
X₃ : Type u_10
Y₁ : Type u_11
Y₂ : Type u_12
Y₃ : Type u_13
inst✝⁵ : AddCommMonoid X₁
inst✝⁴ : AddCommMonoid X₂
inst✝³ : AddCommMonoid X₃
inst✝² : AddCommMonoid Y₁
inst✝¹ : AddCommMonoid Y₂
inst✝ : AddCommMonoid Y₃
e₁ : X₁ ≃+ Y₁
e₂ : X₂ ≃+ Y₂
e₃ : X₃ ≃+ Y₃
f₁₂ : X₁ →+ X₂
f₂₃ : X₂ →+ X₃
g₁₂ : Y₁ →+ Y₂
g₂₃ : Y₂ →+ Y₃
comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂
comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃
H : Exact ⇑f₁₂ ⇑f₂₃
h₁₂ : ∀ (x : X₁), g₁₂ (e₁ x) = e₂ (f₁₂ x)
h₂₃ : ∀ (x : X₂), g₂₃ (e₂ x) = e₃ (f₂₃ x)
⊢ ∀ (y : Y₂), g₂₃ y = 0 → y ∈ Set.range ⇑g₁₂
tactic: apply of_comp_eq_zero_of_ker_in_range