Theorem: SimplicialObject.Split.Hom.ext
File: Mathlib/AlgebraicTopology/SplitSimplicialObject.lean

tactic: rcases Φ₁ with ⟨F₁, f₁, c₁⟩
state_before: C : Type u_1
inst✝¹ : Category C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ₁ Φ₂ : Hom S₁ S₂
h : ∀ (n : ℕ), f Φ₁ n = f Φ₂ n
⊢ Φ₁ = Φ₂

tactic: rcases Φ₂ with ⟨F₂, f₂, c₂⟩
state_before: case mk
C : Type u_1
inst✝¹ : Category C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ₂ : Hom S₁ S₂
F₁ : S₁.X ⟶ S₂.X
f₁ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₁ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₁.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
h : ∀ (n : ℕ), f (mk F₁ f₁) n = f Φ₂ n
⊢ mk F₁ f₁ = Φ₂

tactic: have h' : f₁ = f₂ := by
  ext
  apply h
state_before: case mk.mk
C : Type u_1
inst✝¹ : Category C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
F₁ : S₁.X ⟶ S₂.X
f₁ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₁ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₁.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
F₂ : S₁.X ⟶ S₂.X
f₂ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₂ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₂.app [n].op = f₂ n ≫ Splitting.ι S₂.s n
h : ∀ (n : ℕ), f (mk F₁ f₁) n = f (mk F₂ f₂) n
⊢ mk F₁ f₁ = mk F₂ f₂

tactic: subst h'
state_before: case mk.mk
C : Type u_1
inst✝¹ : Category C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
F₁ : S₁.X ⟶ S₂.X
f₁ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₁ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₁.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
F₂ : S₁.X ⟶ S₂.X
f₂ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₂ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₂.app [n].op = f₂ n ≫ Splitting.ι S₂.s n
h : ∀ (n : ℕ), f (mk F₁ f₁) n = f (mk F₂ f₂) n
h' : f₁ = f₂
⊢ mk F₁ f₁ = mk F₂ f₂

tactic: simp only [mk.injEq, and_true]
state_before: case mk.mk
C : Type u_1
inst✝¹ : Category C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
F₁ : S₁.X ⟶ S₂.X
f₁ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₁ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₁.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
F₂ : S₁.X ⟶ S₂.X
c₂ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₂.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
h : ∀ (n : ℕ), f (mk F₁ f₁) n = f (mk F₂ f₁) n
⊢ mk F₁ f₁ = mk F₂ f₁

tactic: apply S₁.s.hom_ext
state_before: case mk.mk
C : Type u_1
inst✝¹ : Category C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
F₁ : S₁.X ⟶ S₂.X
f₁ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₁ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₁.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
F₂ : S₁.X ⟶ S₂.X
c₂ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₂.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
h : ∀ (n : ℕ), f (mk F₁ f₁) n = f (mk F₂ f₁) n
⊢ F₁ = F₂

tactic: intro n
state_before: case mk.mk.h
C : Type u_1
inst✝¹ : Category C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
F₁ : S₁.X ⟶ S₂.X
f₁ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₁ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₁.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
F₂ : S₁.X ⟶ S₂.X
c₂ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₂.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
h : ∀ (n : ℕ), f (mk F₁ f₁) n = f (mk F₂ f₁) n
⊢ ∀ (n : ℕ), Splitting.φ S₁.s F₁ n = Splitting.φ S₁.s F₂ n

tactic: dsimp
state_before: case mk.mk.h
C : Type u_1
inst✝¹ : Category C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
F₁ : S₁.X ⟶ S₂.X
f₁ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₁ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₁.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
F₂ : S₁.X ⟶ S₂.X
c₂ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₂.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
h : ∀ (n : ℕ), f (mk F₁ f₁) n = f (mk F₂ f₁) n
n : ℕ
⊢ Splitting.φ S₁.s F₁ n = Splitting.φ S₁.s F₂ n

tactic: rw [c₁, c₂]
state_before: case mk.mk.h
C : Type u_1
inst✝¹ : Category C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
F₁ : S₁.X ⟶ S₂.X
f₁ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₁ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₁.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
F₂ : S₁.X ⟶ S₂.X
c₂ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₂.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
h : ∀ (n : ℕ), f (mk F₁ f₁) n = f (mk F₂ f₁) n
n : ℕ
⊢ Splitting.ι S₁.s n ≫ F₁.app [n].op = Splitting.ι S₁.s n ≫ F₂.app [n].op

tactic: ext
state_before: C : Type u_1
inst✝¹ : Category C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
F₁ : S₁.X ⟶ S₂.X
f₁ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₁ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₁.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
F₂ : S₁.X ⟶ S₂.X
f₂ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₂ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₂.app [n].op = f₂ n ≫ Splitting.ι S₂.s n
h : ∀ (n : ℕ), f (mk F₁ f₁) n = f (mk F₂ f₂) n
⊢ f₁ = f₂

tactic: apply h
state_before: case h
C : Type u_1
inst✝¹ : Category C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
F₁ : S₁.X ⟶ S₂.X
f₁ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₁ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₁.app [n].op = f₁ n ≫ Splitting.ι S₂.s n
F₂ : S₁.X ⟶ S₂.X
f₂ : (n : ℕ) → Splitting.N S₁.s n ⟶ Splitting.N S₂.s n
c₂ : ∀ (n : ℕ), Splitting.ι S₁.s n ≫ F₂.app [n].op = f₂ n ≫ Splitting.ι S₂.s n
h : ∀ (n : ℕ), f (mk F₁ f₁) n = f (mk F₂ f₂) n
x✝ : ℕ
⊢ f₁ x✝ = f₂ x✝