Theorem: ContinuousMap.Homotopy.evalAt_eq
File: Mathlib/AlgebraicTopology/FundamentalGroupoid/InducedMaps.lean

Proof steps:
state_before: X Y : TopCat
f g : C(↑X, ↑Y)
H : f.Homotopy g
x₀ x₁ : ↑X
p : fromTop x₀ ⟶ fromTop x₁
x : ↑X
⊢ ⟦H.evalAt x⟧ = hcast ⋯ ≫ (π.map H.uliftMap).map (prodToProdTopI uhpath01 (𝟙 (fromTop x))) ≫ hcast ⋯
state_after: X Y : TopCat
f g : C(↑X, ↑Y)
H : f.Homotopy g
x₀ x₁ : ↑X
p : fromTop x₀ ⟶ fromTop x₁
x : ↑X
⊢ ⟦H.evalAt x⟧ =
    eqToHom ⋯ ≫
      (π.map H.uliftMap).map
          ((prodToProdTop (TopCat.of (ULift.{u, 0} ↑I)) X).map (⟦unitInterval.upath01⟧, 𝟙 (fromTop x))) ≫
        eqToHom ⋯
tactic: dsimp only [prodToProdTopI, uhpath01, hcast]
state_before: X Y : TopCat
f g : C(↑X, ↑Y)
H : f.Homotopy g
x₀ x₁ : ↑X
p : fromTop x₀ ⟶ fromTop x₁
x : ↑X
⊢ ⟦H.evalAt x⟧ =
    eqToHom ⋯ ≫
      (π.map H.uliftMap).map
          ((prodToProdTop (TopCat.of (ULift.{u, 0} ↑I)) X).map (⟦unitInterval.upath01⟧, 𝟙 (fromTop x))) ≫
        eqToHom ⋯
state_after: X Y : TopCat
f g : C(↑X, ↑Y)
H : f.Homotopy g
x₀ x₁ : ↑X
p : fromTop x₀ ⟶ fromTop x₁
x : ↑X
⊢ HEq ⟦H.evalAt x⟧
    ((π.map H.uliftMap).map
      ((prodToProdTop (TopCat.of (ULift.{u, 0} ↑I)) X).map (⟦unitInterval.upath01⟧, 𝟙 (fromTop x))))
tactic: refine (@Functor.conj_eqToHom_iff_heq (πₓ Y) _ _ _ _ _ _ _ _
    (FundamentalGroupoid.ext _ _ <| H.apply_one x).symm).mpr ?_
state_before: X Y : TopCat
f g : C(↑X, ↑Y)
H : f.Homotopy g
x₀ x₁ : ↑X
p : fromTop x₀ ⟶ fromTop x₁
x : ↑X
⊢ HEq ⟦H.evalAt x⟧
    ((π.map H.uliftMap).map
      ((prodToProdTop (TopCat.of (ULift.{u, 0} ↑I)) X).map (⟦unitInterval.upath01⟧, 𝟙 (fromTop x))))
state_after: X Y : TopCat
f g : C(↑X, ↑Y)
H : f.Homotopy g
x₀ x₁ : ↑X
p : fromTop x₀ ⟶ fromTop x₁
x : ↑X
⊢ HEq ⟦H.evalAt x⟧
    (Path.Homotopic.Quotient.mapFn
      ((prodToProdTop (TopCat.of (ULift.{u, 0} ↑I)) X).map (⟦unitInterval.upath01⟧, 𝟙 (fromTop x))) H.uliftMap)
tactic: simp only [id_eq_path_refl, prodToProdTop_map, Path.Homotopic.prod_lift, map_eq, ←
    Path.Homotopic.map_lift]
state_before: X Y : TopCat
f g : C(↑X, ↑Y)
H : f.Homotopy g
x₀ x₁ : ↑X
p : fromTop x₀ ⟶ fromTop x₁
x : ↑X
⊢ HEq ⟦H.evalAt x⟧
    (Path.Homotopic.Quotient.mapFn
      ((prodToProdTop (TopCat.of (ULift.{u, 0} ↑I)) X).map (⟦unitInterval.upath01⟧, 𝟙 (fromTop x))) H.uliftMap)
state_after: case hp
X Y : TopCat
f g : C(↑X, ↑Y)
H : f.Homotopy g
x₀ x₁ : ↑X
p : fromTop x₀ ⟶ fromTop x₁
x : ↑X
⊢ ∀ (t : ↑I), (H.evalAt x) t = ((fun q => q.map ⋯) (unitInterval.upath01.prod (Path.refl (fromTop x).as))) t
tactic: apply Path.Homotopic.hpath_hext
state_before: case hp
X Y : TopCat
f g : C(↑X, ↑Y)
H : f.Homotopy g
x₀ x₁ : ↑X
p : fromTop x₀ ⟶ fromTop x₁
x : ↑X
⊢ ∀ (t : ↑I), (H.evalAt x) t = ((fun q => q.map ⋯) (unitInterval.upath01.prod (Path.refl (fromTop x).as))) t
state_after: case hp
X Y : TopCat
f g : C(↑X, ↑Y)
H : f.Homotopy g
x₀ x₁ : ↑X
p : fromTop x₀ ⟶ fromTop x₁
x : ↑X
t✝ : ↑I
⊢ (H.evalAt x) t✝ = ((fun q => q.map ⋯) (unitInterval.upath01.prod (Path.refl (fromTop x).as))) t✝
tactic: intro
state_before: case hp
X Y : TopCat
f g : C(↑X, ↑Y)
H : f.Homotopy g
x₀ x₁ : ↑X
p : fromTop x₀ ⟶ fromTop x₁
x : ↑X
t✝ : ↑I
⊢ (H.evalAt x) t✝ = ((fun q => q.map ⋯) (unitInterval.upath01.prod (Path.refl (fromTop x).as))) t✝
state_after: no goals
tactic: rfl