Theorem: SimplexCategory.toTop_map
File: Mathlib/AlgebraicTopology/TopologicalSimplex.lean

Proof steps:
state_before: X✝ Y✝ : SimplexCategory
f : X✝ ⟶ Y✝
⊢ Continuous (toTopMap f)
state_after: no goals
tactic: continuity
state_before: ⊢ ∀ (X : SimplexCategory),
    { obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
        (𝟙 X) =
      𝟙
        ({ obj := fun x => TopCat.of ↑x.toTopObj,
              map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
          X)
state_after: Δ : SimplexCategory
⊢ { obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
      (𝟙 Δ) =
    𝟙
      ({ obj := fun x => TopCat.of ↑x.toTopObj,
            map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
        Δ)
tactic: intro Δ
state_before: Δ : SimplexCategory
⊢ { obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
      (𝟙 Δ) =
    𝟙
      ({ obj := fun x => TopCat.of ↑x.toTopObj,
            map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
        Δ)
state_after: case w
Δ : SimplexCategory
f :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      Δ)
⊢ ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
        (𝟙 Δ))
      f =
    (𝟙
        ({ obj := fun x => TopCat.of ↑x.toTopObj,
              map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
          Δ))
      f
tactic: ext f
state_before: case w
Δ : SimplexCategory
f :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      Δ)
⊢ ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
        (𝟙 Δ))
      f =
    (𝟙
        ({ obj := fun x => TopCat.of ↑x.toTopObj,
              map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
          Δ))
      f
state_after: case w.a
Δ : SimplexCategory
f :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      Δ)
⊢ ↑(({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
          (𝟙 Δ))
        f) =
    ↑((𝟙
          ({ obj := fun x => TopCat.of ↑x.toTopObj,
                map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
            Δ))
        f)
tactic: apply toTopObj.ext
state_before: case w.a
Δ : SimplexCategory
f :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      Δ)
⊢ ↑(({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
          (𝟙 Δ))
        f) =
    ↑((𝟙
          ({ obj := fun x => TopCat.of ↑x.toTopObj,
                map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
            Δ))
        f)
state_after: case w.a.h
Δ : SimplexCategory
f :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      Δ)
i : (forget SimplexCategory).obj Δ
⊢ ↑(({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
            (𝟙 Δ))
          f)
      i =
    ↑((𝟙
            ({ obj := fun x => TopCat.of ↑x.toTopObj,
                  map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
              Δ))
          f)
      i
tactic: funext i
state_before: case w.a.h
Δ : SimplexCategory
f :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      Δ)
i : (forget SimplexCategory).obj Δ
⊢ ∑ j ∈ Finset.filter (fun x => x = i) Finset.univ, ↑f j =
    ↑((𝟙
            ({ obj := fun x => TopCat.of ↑x.toTopObj,
                  map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
              Δ))
          f)
      i
state_after: no goals
tactic: simp [Finset.sum_filter, CategoryTheory.id_apply]
state_before: X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ { obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
      (f ≫ g) =
    { obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
        f ≫
      { obj := fun x => TopCat.of ↑x.toTopObj,
            map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
        g
state_after: case w
X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
h :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      X✝)
⊢ ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
        (f ≫ g))
      h =
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
          f ≫
        { obj := fun x => TopCat.of ↑x.toTopObj,
              map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
          g)
      h
tactic: ext h
state_before: case w
X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
h :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      X✝)
⊢ ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
        (f ≫ g))
      h =
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
          f ≫
        { obj := fun x => TopCat.of ↑x.toTopObj,
              map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
          g)
      h
state_after: case w.a
X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
h :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      X✝)
⊢ ↑(({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
          (f ≫ g))
        h) =
    ↑(({ obj := fun x => TopCat.of ↑x.toTopObj,
                map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
            f ≫
          { obj := fun x => TopCat.of ↑x.toTopObj,
                map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
            g)
        h)
tactic: apply toTopObj.ext
state_before: case w.a
X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
h :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      X✝)
⊢ ↑(({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
          (f ≫ g))
        h) =
    ↑(({ obj := fun x => TopCat.of ↑x.toTopObj,
                map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
            f ≫
          { obj := fun x => TopCat.of ↑x.toTopObj,
                map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
            g)
        h)
state_after: case w.a.h
X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
h :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      X✝)
i : (forget SimplexCategory).obj Z✝
⊢ ↑(({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
            (f ≫ g))
          h)
      i =
    ↑(({ obj := fun x => TopCat.of ↑x.toTopObj,
                  map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
              f ≫
            { obj := fun x => TopCat.of ↑x.toTopObj,
                  map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
              g)
          h)
      i
tactic: funext i
state_before: case w.a.h
X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
h :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      X✝)
i : (forget SimplexCategory).obj Z✝
⊢ ↑(({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
            (f ≫ g))
          h)
      i =
    ↑(({ obj := fun x => TopCat.of ↑x.toTopObj,
                  map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
              f ≫
            { obj := fun x => TopCat.of ↑x.toTopObj,
                  map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.map
              g)
          h)
      i
state_after: case w.a.h
X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
h :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      X✝)
i : (forget SimplexCategory).obj Z✝
⊢ ∑ j ∈ Finset.filter (fun x => (f ≫ g) x = i) Finset.univ, ↑h j =
    ↑(({ toFun := toTopMap f, continuous_toFun := ⋯ } ≫ { toFun := toTopMap g, continuous_toFun := ⋯ }) h) i
tactic: dsimp
state_before: case w.a.h
X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
h :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      X✝)
i : (forget SimplexCategory).obj Z✝
⊢ ∑ j ∈ Finset.filter (fun x => (f ≫ g) x = i) Finset.univ, ↑h j =
    ↑(({ toFun := toTopMap f, continuous_toFun := ⋯ } ≫ { toFun := toTopMap g, continuous_toFun := ⋯ }) h) i
state_after: case w.a.h
X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
h :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      X✝)
i : (forget SimplexCategory).obj Z✝
⊢ ∑ x ∈ Finset.filter (fun x => g (f x) = i) Finset.univ, ↑h x =
    ∑ x ∈ Finset.filter (fun x => g x = i) Finset.univ, ∑ x ∈ Finset.filter (fun x_1 => f x_1 = x) Finset.univ, ↑h x
tactic: simp only [comp_apply, TopCat.coe_of_of, ContinuousMap.coe_mk, coe_toTopMap]
state_before: case w.a.h
X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
h :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      X✝)
i : (forget SimplexCategory).obj Z✝
⊢ ∑ x ∈ Finset.filter (fun x => g (f x) = i) Finset.univ, ↑h x =
    ∑ x ∈ Finset.filter (fun x => g x = i) Finset.univ, ∑ x ∈ Finset.filter (fun x_1 => f x_1 = x) Finset.univ, ↑h x
state_after: case w.a.h
X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
h :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      X✝)
i : (forget SimplexCategory).obj Z✝
⊢ ∑ x ∈ Finset.filter (fun x => g (f x) = i) Finset.univ, ↑h x =
    ∑
      x ∈
        (Finset.filter (fun x => g x = i) Finset.univ).biUnion fun x =>
          Finset.filter (fun x_1 => f x_1 = x) Finset.univ,
      ↑h x

case w.a.h
X✝ Y✝ Z✝ : SimplexCategory
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
h :
  (forget TopCat).obj
    ({ obj := fun x => TopCat.of ↑x.toTopObj, map := fun {X Y} f => { toFun := toTopMap f, continuous_toFun := ⋯ } }.obj
      X✝)
i : (forget SimplexCategory).obj Z✝
⊢ (↑(Finset.filter (fun x => g x = i) Finset.univ)).PairwiseDisjoint fun x =>
    Finset.filter (fun x_1 => f x_1 = x) Finset.univ
tactic: rw [← Finset.sum_biUnion]