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

Proof steps:
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 (Opposite.op [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 (Opposite.op [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 (Opposite.op [n + 1]) (horn.face i j h)
⊢ ∃ σ, σ₀ = hornInclusion (n + 2) i ≫ σ
tactic: obtain ⟨σ, h⟩ := filler σ₀ h₀ hₙ
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 (Opposite.op [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 (Opposite.op [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 (Opposite.op [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 (Opposite.op [n + 1]) (horn.face i j h)
⊢ σ₀ = hornInclusion (n + 2) i ≫ (S.yonedaEquiv [n + 2]).symm σ
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 (Opposite.op [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 (Opposite.op [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 (Opposite.op [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 (Opposite.op [n + 1]) (horn.face i j h)
⊢ ∀ (j : Fin (n + 1 + 2)) (h : j ≠ i),
    σ₀.app (Opposite.op [n + 1]) (horn.face i j h) =
      (hornInclusion (n + 2) i ≫ (S.yonedaEquiv [n + 2]).symm σ).app (Opposite.op [n + 1]) (horn.face i j h)
tactic: apply horn.hom_ext
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 (Opposite.op [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 (Opposite.op [n + 1]) (horn.face i j h)
⊢ ∀ (j : Fin (n + 1 + 2)) (h : j ≠ i),
    σ₀.app (Opposite.op [n + 1]) (horn.face i j h) =
      (hornInclusion (n + 2) i ≫ (S.yonedaEquiv [n + 2]).symm σ).app (Opposite.op [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 (Opposite.op [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 (Opposite.op [n + 1]) (horn.face i j h)
j : Fin (n + 1 + 2)
hj : j ≠ i
⊢ σ₀.app (Opposite.op [n + 1]) (horn.face i j hj) =
    (hornInclusion (n + 2) i ≫ (S.yonedaEquiv [n + 2]).symm σ).app (Opposite.op [n + 1]) (horn.face i j hj)
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 (Opposite.op [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 (Opposite.op [n + 1]) (horn.face i j h)
j : Fin (n + 1 + 2)
hj : j ≠ i
⊢ σ₀.app (Opposite.op [n + 1]) (horn.face i j hj) =
    (hornInclusion (n + 2) i ≫ (S.yonedaEquiv [n + 2]).symm σ).app (Opposite.op [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 (Opposite.op [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 (Opposite.op [n + 1]) (horn.face i j h)
j : Fin (n + 1 + 2)
hj : j ≠ i
⊢ SimplicialObject.δ S j σ =
    ((hornInclusion (n + 2) i).app (Opposite.op [n + 1]) ≫ ((S.yonedaEquiv [n + 2]).symm σ).app (Opposite.op [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 (Opposite.op [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 (Opposite.op [n + 1]) (horn.face i j h)
j : Fin (n + 1 + 2)
hj : j ≠ i
⊢ SimplicialObject.δ S j σ =
    ((hornInclusion (n + 2) i).app (Opposite.op [n + 1]) ≫ ((S.yonedaEquiv [n + 2]).symm σ).app (Opposite.op [n + 1]))
      (horn.face i j hj)
state_after: no goals
tactic: rfl