Theorem: CategoryTheory.Localization.structuredArrowEquiv_symm_apply
File: Mathlib/CategoryTheory/Localization/StructuredArrow.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
D' : Type u_3
inst✝⁴ : Category.{?u.202, u_1} C
inst✝³ : Category.{?u.206, u_2} D
inst✝² : Category.{?u.210, u_3} D'
W : MorphismProperty C
L : C ⥤ D
L' : C ⥤ D'
inst✝¹ : L.IsLocalization W
inst✝ : L'.IsLocalization W
X : C
f : StructuredArrow (L.obj X) L
⊢ (fun f => StructuredArrow.mk ((homEquiv W L' L) f.hom)) ((fun f => StructuredArrow.mk ((homEquiv W L L') f.hom)) f) =
    f
state_after: case intro.intro
C : Type u_1
D : Type u_2
D' : Type u_3
inst✝⁴ : Category.{?u.202, u_1} C
inst✝³ : Category.{?u.206, u_2} D
inst✝² : Category.{?u.210, u_3} D'
W : MorphismProperty C
L : C ⥤ D
L' : C ⥤ D'
inst✝¹ : L.IsLocalization W
inst✝ : L'.IsLocalization W
X Y : C
f : L.obj X ⟶ L.obj Y
⊢ (fun f => StructuredArrow.mk ((homEquiv W L' L) f.hom))
      ((fun f => StructuredArrow.mk ((homEquiv W L L') f.hom)) (StructuredArrow.mk f)) =
    StructuredArrow.mk f
tactic: obtain ⟨Y, f, rfl⟩ := f.mk_surjective
state_before: case intro.intro
C : Type u_1
D : Type u_2
D' : Type u_3
inst✝⁴ : Category.{?u.202, u_1} C
inst✝³ : Category.{?u.206, u_2} D
inst✝² : Category.{?u.210, u_3} D'
W : MorphismProperty C
L : C ⥤ D
L' : C ⥤ D'
inst✝¹ : L.IsLocalization W
inst✝ : L'.IsLocalization W
X Y : C
f : L.obj X ⟶ L.obj Y
⊢ (fun f => StructuredArrow.mk ((homEquiv W L' L) f.hom))
      ((fun f => StructuredArrow.mk ((homEquiv W L L') f.hom)) (StructuredArrow.mk f)) =
    StructuredArrow.mk f
state_after: case intro.intro
C : Type u_1
D : Type u_2
D' : Type u_3
inst✝⁴ : Category.{?u.202, u_1} C
inst✝³ : Category.{?u.206, u_2} D
inst✝² : Category.{?u.210, u_3} D'
W : MorphismProperty C
L : C ⥤ D
L' : C ⥤ D'
inst✝¹ : L.IsLocalization W
inst✝ : L'.IsLocalization W
X Y : C
f : L.obj X ⟶ L.obj Y
⊢ StructuredArrow.mk ((homEquiv W L' L) ((homEquiv W L L') f)) = StructuredArrow.mk f
tactic: dsimp
state_before: case intro.intro
C : Type u_1
D : Type u_2
D' : Type u_3
inst✝⁴ : Category.{?u.202, u_1} C
inst✝³ : Category.{?u.206, u_2} D
inst✝² : Category.{?u.210, u_3} D'
W : MorphismProperty C
L : C ⥤ D
L' : C ⥤ D'
inst✝¹ : L.IsLocalization W
inst✝ : L'.IsLocalization W
X Y : C
f : L.obj X ⟶ L.obj Y
⊢ StructuredArrow.mk ((homEquiv W L' L) ((homEquiv W L L') f)) = StructuredArrow.mk f
state_after: no goals
tactic: rw [← homEquiv_symm_apply, Equiv.symm_apply_apply]
state_before: C : Type u_1
D : Type u_2
D' : Type u_3
inst✝⁴ : Category.{?u.202, u_1} C
inst✝³ : Category.{?u.206, u_2} D
inst✝² : Category.{?u.210, u_3} D'
W : MorphismProperty C
L : C ⥤ D
L' : C ⥤ D'
inst✝¹ : L.IsLocalization W
inst✝ : L'.IsLocalization W
X : C
f : StructuredArrow (L'.obj X) L'
⊢ (fun f => StructuredArrow.mk ((homEquiv W L L') f.hom)) ((fun f => StructuredArrow.mk ((homEquiv W L' L) f.hom)) f) =
    f
state_after: case intro.intro
C : Type u_1
D : Type u_2
D' : Type u_3
inst✝⁴ : Category.{?u.202, u_1} C
inst✝³ : Category.{?u.206, u_2} D
inst✝² : Category.{?u.210, u_3} D'
W : MorphismProperty C
L : C ⥤ D
L' : C ⥤ D'
inst✝¹ : L.IsLocalization W
inst✝ : L'.IsLocalization W
X Y : C
f : L'.obj X ⟶ L'.obj Y
⊢ (fun f => StructuredArrow.mk ((homEquiv W L L') f.hom))
      ((fun f => StructuredArrow.mk ((homEquiv W L' L) f.hom)) (StructuredArrow.mk f)) =
    StructuredArrow.mk f
tactic: obtain ⟨Y, f, rfl⟩ := f.mk_surjective
state_before: case intro.intro
C : Type u_1
D : Type u_2
D' : Type u_3
inst✝⁴ : Category.{?u.202, u_1} C
inst✝³ : Category.{?u.206, u_2} D
inst✝² : Category.{?u.210, u_3} D'
W : MorphismProperty C
L : C ⥤ D
L' : C ⥤ D'
inst✝¹ : L.IsLocalization W
inst✝ : L'.IsLocalization W
X Y : C
f : L'.obj X ⟶ L'.obj Y
⊢ (fun f => StructuredArrow.mk ((homEquiv W L L') f.hom))
      ((fun f => StructuredArrow.mk ((homEquiv W L' L) f.hom)) (StructuredArrow.mk f)) =
    StructuredArrow.mk f
state_after: case intro.intro
C : Type u_1
D : Type u_2
D' : Type u_3
inst✝⁴ : Category.{?u.202, u_1} C
inst✝³ : Category.{?u.206, u_2} D
inst✝² : Category.{?u.210, u_3} D'
W : MorphismProperty C
L : C ⥤ D
L' : C ⥤ D'
inst✝¹ : L.IsLocalization W
inst✝ : L'.IsLocalization W
X Y : C
f : L'.obj X ⟶ L'.obj Y
⊢ StructuredArrow.mk ((homEquiv W L L') ((homEquiv W L' L) f)) = StructuredArrow.mk f
tactic: dsimp
state_before: case intro.intro
C : Type u_1
D : Type u_2
D' : Type u_3
inst✝⁴ : Category.{?u.202, u_1} C
inst✝³ : Category.{?u.206, u_2} D
inst✝² : Category.{?u.210, u_3} D'
W : MorphismProperty C
L : C ⥤ D
L' : C ⥤ D'
inst✝¹ : L.IsLocalization W
inst✝ : L'.IsLocalization W
X Y : C
f : L'.obj X ⟶ L'.obj Y
⊢ StructuredArrow.mk ((homEquiv W L L') ((homEquiv W L' L) f)) = StructuredArrow.mk f
state_after: no goals
tactic: rw [← homEquiv_symm_apply, Equiv.symm_apply_apply]