Theorem: TopCat.Presheaf.generateEquivalenceOpensLe_inverse'_map
File: Mathlib/Topology/Sheaves/SheafCondition/OpensLeCover.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F : Presheaf C X
ι : Type w
U : ι → Opens ↑X
Y : Opens ↑X
hY : Y = iSup U
x✝ : OpensLeCover U
⊢ { obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
          map := fun {x x_1} g => Over.homMk g ⋯ }.map
      (𝟙 x✝) =
    𝟙
      ({ obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
            map := fun {x x_1} g => Over.homMk g ⋯ }.obj
        x✝)
state_after: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F : Presheaf C X
ι : Type w
U : ι → Opens ↑X
Y : Opens ↑X
hY : Y = iSup U
x✝ : OpensLeCover U
⊢ ({ obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
            map := fun {x x_1} g => Over.homMk g ⋯ }.map
        (𝟙 x✝)).left =
    (𝟙
        ({ obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
              map := fun {x x_1} g => Over.homMk g ⋯ }.obj
          x✝)).left
tactic: refine Over.OverMorphism.ext ?_
state_before: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F : Presheaf C X
ι : Type w
U : ι → Opens ↑X
Y : Opens ↑X
hY : Y = iSup U
x✝ : OpensLeCover U
⊢ ({ obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
            map := fun {x x_1} g => Over.homMk g ⋯ }.map
        (𝟙 x✝)).left =
    (𝟙
        ({ obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
              map := fun {x x_1} g => Over.homMk g ⋯ }.obj
          x✝)).left
state_after: no goals
tactic: simp only [Functor.id_obj, Sieve.generate_apply, Functor.const_obj_obj, Over.homMk_left,
      eq_iff_true_of_subsingleton]
state_before: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F : Presheaf C X
ι : Type w
U : ι → Opens ↑X
Y : Opens ↑X
hY : Y = iSup U
x✝² x✝¹ x✝ : OpensLeCover U
f : x✝² ⟶ x✝¹
g : x✝¹ ⟶ x✝
⊢ { obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
          map := fun {x x_1} g => Over.homMk g ⋯ }.map
      (f ≫ g) =
    { obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
            map := fun {x x_1} g => Over.homMk g ⋯ }.map
        f ≫
      { obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
            map := fun {x x_1} g => Over.homMk g ⋯ }.map
        g
state_after: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F : Presheaf C X
ι : Type w
U : ι → Opens ↑X
Y : Opens ↑X
hY : Y = iSup U
x✝² x✝¹ x✝ : OpensLeCover U
f : x✝² ⟶ x✝¹
g : x✝¹ ⟶ x✝
⊢ ({ obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
            map := fun {x x_1} g => Over.homMk g ⋯ }.map
        (f ≫ g)).left =
    ({ obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
              map := fun {x x_1} g => Over.homMk g ⋯ }.map
          f ≫
        { obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
              map := fun {x x_1} g => Over.homMk g ⋯ }.map
          g).left
tactic: refine Over.OverMorphism.ext ?_
state_before: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F : Presheaf C X
ι : Type w
U : ι → Opens ↑X
Y : Opens ↑X
hY : Y = iSup U
x✝² x✝¹ x✝ : OpensLeCover U
f : x✝² ⟶ x✝¹
g : x✝¹ ⟶ x✝
⊢ ({ obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
            map := fun {x x_1} g => Over.homMk g ⋯ }.map
        (f ≫ g)).left =
    ({ obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
              map := fun {x x_1} g => Over.homMk g ⋯ }.map
          f ≫
        { obj := fun V => { obj := { left := V.obj, right := { as := PUnit.unit }, hom := homOfLE ⋯ }, property := ⋯ },
              map := fun {x x_1} g => Over.homMk g ⋯ }.map
          g).left
state_after: no goals
tactic: simp only [Functor.id_obj, Sieve.generate_apply, Functor.const_obj_obj, Over.homMk_left,
      eq_iff_true_of_subsingleton]