Theorem: SSet.quasicategory_of_filler
File: Mathlib/AlgebraicTopology/Quasicategory.lean

tactic: obtain ⟨σ, h⟩ := filler σ₀ h₀ hₙ
state_before: S : SSet
filler :
  ∀ ⦃n : ℕ⦄ ⦃i : Fin (n + 3)⦄ (σ₀ : Λ[n + 2, i] ⟶ S),
    0 < i →
      i < Fin.last (n + 2) →
        ∃ σ, ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
n : ℕ
i : Fin (n + 3)
σ₀ : Λ[n + 2, i] ⟶ S
h₀ : 0 < i
hₙ : i < Fin.last (n + 2)
⊢ ∃ σ, σ₀ = hornInclusion (n + 2) i ≫ σ
state_after: case intro
S : SSet
filler :
  ∀ ⦃n : ℕ⦄ ⦃i : Fin (n + 3)⦄ (σ₀ : Λ[n + 2, i] ⟶ S),
    0 < i →
      i < Fin.last (n + 2) →
        ∃ σ, ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
n : ℕ
i : Fin (n + 3)
σ₀ : Λ[n + 2, i] ⟶ S
h₀ : 0 < i
hₙ : i < Fin.last (n + 2)
σ : S _[n + 2]
h : ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
⊢ ∃ σ, σ₀ = hornInclusion (n + 2) i ≫ σ

tactic: refine ⟨(S.yonedaEquiv _).symm σ, ?_⟩
state_before: case intro
S : SSet
filler :
  ∀ ⦃n : ℕ⦄ ⦃i : Fin (n + 3)⦄ (σ₀ : Λ[n + 2, i] ⟶ S),
    0 < i →
      i < Fin.last (n + 2) →
        ∃ σ, ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
n : ℕ
i : Fin (n + 3)
σ₀ : Λ[n + 2, i] ⟶ S
h₀ : 0 < i
hₙ : i < Fin.last (n + 2)
σ : S _[n + 2]
h : ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
⊢ ∃ σ, σ₀ = hornInclusion (n + 2) i ≫ σ
state_after: case intro
S : SSet
filler :
  ∀ ⦃n : ℕ⦄ ⦃i : Fin (n + 3)⦄ (σ₀ : Λ[n + 2, i] ⟶ S),
    0 < i →
      i < Fin.last (n + 2) →
        ∃ σ, ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
n : ℕ
i : Fin (n + 3)
σ₀ : Λ[n + 2, i] ⟶ S
h₀ : 0 < i
hₙ : i < Fin.last (n + 2)
σ : S _[n + 2]
h : ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
⊢ σ₀ = hornInclusion (n + 2) i ≫ (S.yonedaEquiv [n + 2]).symm σ

tactic: apply horn.hom_ext
state_before: case intro
S : SSet
filler :
  ∀ ⦃n : ℕ⦄ ⦃i : Fin (n + 3)⦄ (σ₀ : Λ[n + 2, i] ⟶ S),
    0 < i →
      i < Fin.last (n + 2) →
        ∃ σ, ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
n : ℕ
i : Fin (n + 3)
σ₀ : Λ[n + 2, i] ⟶ S
h₀ : 0 < i
hₙ : i < Fin.last (n + 2)
σ : S _[n + 2]
h : ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
⊢ σ₀ = hornInclusion (n + 2) i ≫ (S.yonedaEquiv [n + 2]).symm σ
state_after: case intro.h
S : SSet
filler :
  ∀ ⦃n : ℕ⦄ ⦃i : Fin (n + 3)⦄ (σ₀ : Λ[n + 2, i] ⟶ S),
    0 < i →
      i < Fin.last (n + 2) →
        ∃ σ, ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
n : ℕ
i : Fin (n + 3)
σ₀ : Λ[n + 2, i] ⟶ S
h₀ : 0 < i
hₙ : i < Fin.last (n + 2)
σ : S _[n + 2]
h : ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
⊢ ∀ (j : Fin (n + 1 + 2)) (h : j ≠ i),
    σ₀.app { unop := [n + 1] } (horn.face i j h) =
      (hornInclusion (n + 2) i ≫ (S.yonedaEquiv [n + 2]).symm σ).app { unop := [n + 1] } (horn.face i j h)

tactic: intro j hj
state_before: case intro.h
S : SSet
filler :
  ∀ ⦃n : ℕ⦄ ⦃i : Fin (n + 3)⦄ (σ₀ : Λ[n + 2, i] ⟶ S),
    0 < i →
      i < Fin.last (n + 2) →
        ∃ σ, ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
n : ℕ
i : Fin (n + 3)
σ₀ : Λ[n + 2, i] ⟶ S
h₀ : 0 < i
hₙ : i < Fin.last (n + 2)
σ : S _[n + 2]
h : ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
⊢ ∀ (j : Fin (n + 1 + 2)) (h : j ≠ i),
    σ₀.app { unop := [n + 1] } (horn.face i j h) =
      (hornInclusion (n + 2) i ≫ (S.yonedaEquiv [n + 2]).symm σ).app { unop := [n + 1] } (horn.face i j h)
state_after: case intro.h
S : SSet
filler :
  ∀ ⦃n : ℕ⦄ ⦃i : Fin (n + 3)⦄ (σ₀ : Λ[n + 2, i] ⟶ S),
    0 < i →
      i < Fin.last (n + 2) →
        ∃ σ, ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
n : ℕ
i : Fin (n + 3)
σ₀ : Λ[n + 2, i] ⟶ S
h₀ : 0 < i
hₙ : i < Fin.last (n + 2)
σ : S _[n + 2]
h : ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
j : Fin (n + 1 + 2)
hj : j ≠ i
⊢ σ₀.app { unop := [n + 1] } (horn.face i j hj) =
    (hornInclusion (n + 2) i ≫ (S.yonedaEquiv [n + 2]).symm σ).app { unop := [n + 1] } (horn.face i j hj)

tactic: rw [← h j hj, NatTrans.comp_app]
state_before: case intro.h
S : SSet
filler :
  ∀ ⦃n : ℕ⦄ ⦃i : Fin (n + 3)⦄ (σ₀ : Λ[n + 2, i] ⟶ S),
    0 < i →
      i < Fin.last (n + 2) →
        ∃ σ, ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
n : ℕ
i : Fin (n + 3)
σ₀ : Λ[n + 2, i] ⟶ S
h₀ : 0 < i
hₙ : i < Fin.last (n + 2)
σ : S _[n + 2]
h : ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
j : Fin (n + 1 + 2)
hj : j ≠ i
⊢ σ₀.app { unop := [n + 1] } (horn.face i j hj) =
    (hornInclusion (n + 2) i ≫ (S.yonedaEquiv [n + 2]).symm σ).app { unop := [n + 1] } (horn.face i j hj)
state_after: case intro.h
S : SSet
filler :
  ∀ ⦃n : ℕ⦄ ⦃i : Fin (n + 3)⦄ (σ₀ : Λ[n + 2, i] ⟶ S),
    0 < i →
      i < Fin.last (n + 2) →
        ∃ σ, ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
n : ℕ
i : Fin (n + 3)
σ₀ : Λ[n + 2, i] ⟶ S
h₀ : 0 < i
hₙ : i < Fin.last (n + 2)
σ : S _[n + 2]
h : ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
j : Fin (n + 1 + 2)
hj : j ≠ i
⊢ SimplicialObject.δ S j σ =
    ((hornInclusion (n + 2) i).app { unop := [n + 1] } ≫ ((S.yonedaEquiv [n + 2]).symm σ).app { unop := [n + 1] })
      (horn.face i j hj)

tactic: rfl
state_before: case intro.h
S : SSet
filler :
  ∀ ⦃n : ℕ⦄ ⦃i : Fin (n + 3)⦄ (σ₀ : Λ[n + 2, i] ⟶ S),
    0 < i →
      i < Fin.last (n + 2) →
        ∃ σ, ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
n : ℕ
i : Fin (n + 3)
σ₀ : Λ[n + 2, i] ⟶ S
h₀ : 0 < i
hₙ : i < Fin.last (n + 2)
σ : S _[n + 2]
h : ∀ (j : Fin (n + 3)) (h : j ≠ i), SimplicialObject.δ S j σ = σ₀.app { unop := [n + 1] } (horn.face i j h)
j : Fin (n + 1 + 2)
hj : j ≠ i
⊢ SimplicialObject.δ S j σ =
    ((hornInclusion (n + 2) i).app { unop := [n + 1] } ≫ ((S.yonedaEquiv [n + 2]).symm σ).app { unop := [n + 1] })
      (horn.face i j hj)
state_after: no goals