Theorem: CategoryTheory.Localization.exists_leftFraction₂
File: Mathlib/CategoryTheory/Localization/CalculusOfFractions/Fractions.lean

tactic: have ⟨φ, hφ⟩ := exists_leftFraction L W f
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯
state_after: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯

tactic: have ⟨φ', hφ'⟩ := exists_leftFraction L W f'
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯
state_after: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯

tactic: obtain ⟨α, hα⟩ := (RightFraction.mk _ φ.hs φ'.s).exists_leftFraction
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯
state_after: case intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯

tactic: let ψ : W.LeftFraction₂ X Y :=
  { Y' := α.Y'
    f := φ.f ≫ α.f
    f' := φ'.f ≫ α.s
    s := φ'.s ≫ α.s
    hs := W.comp_mem _ _ φ'.hs α.hs }
state_before: case intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯
state_after: case intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯

tactic: have := inverts L W _ φ'.hs
state_before: case intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯
state_after: case intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this : IsIso (L.map φ'.s)
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯

tactic: have := inverts L W _ α.hs
state_before: case intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this : IsIso (L.map φ'.s)
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯
state_after: case intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝ : IsIso (L.map φ'.s)
this : IsIso (L.map α.s)
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯

tactic: have : IsIso (L.map (φ'.s ≫ α.s)) := by
  rw [L.map_comp]
  infer_instance
state_before: case intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝ : IsIso (L.map φ'.s)
this : IsIso (L.map α.s)
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯
state_after: case intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝¹ : IsIso (L.map φ'.s)
this✝ : IsIso (L.map α.s)
this : IsIso (L.map (φ'.s ≫ α.s))
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯

tactic: refine ⟨ψ, ?_, ?_⟩
state_before: case intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝¹ : IsIso (L.map φ'.s)
this✝ : IsIso (L.map α.s)
this : IsIso (L.map (φ'.s ≫ α.s))
⊢ ∃ φ, f = φ.fst.map L ⋯ ∧ f' = φ.snd.map L ⋯
state_after: case intro.refine_1
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝¹ : IsIso (L.map φ'.s)
this✝ : IsIso (L.map α.s)
this : IsIso (L.map (φ'.s ≫ α.s))
⊢ f = ψ.fst.map L ⋯

case intro.refine_2
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝¹ : IsIso (L.map φ'.s)
this✝ : IsIso (L.map α.s)
this : IsIso (L.map (φ'.s ≫ α.s))
⊢ f' = ψ.snd.map L ⋯

tactic: rw [L.map_comp]
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝ : IsIso (L.map φ'.s)
this : IsIso (L.map α.s)
⊢ IsIso (L.map (φ'.s ≫ α.s))
state_after: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝ : IsIso (L.map φ'.s)
this : IsIso (L.map α.s)
⊢ IsIso (L.map φ'.s ≫ L.map α.s)

tactic: infer_instance
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝ : IsIso (L.map φ'.s)
this : IsIso (L.map α.s)
⊢ IsIso (L.map φ'.s ≫ L.map α.s)
state_after: no goals

tactic: rw [← cancel_mono (L.map (φ'.s ≫ α.s)), LeftFraction.map_comp_map_s,
  hα, L.map_comp, hφ, LeftFraction.map_comp_map_s_assoc,
  L.map_comp]
state_before: case intro.refine_1
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝¹ : IsIso (L.map φ'.s)
this✝ : IsIso (L.map α.s)
this : IsIso (L.map (φ'.s ≫ α.s))
⊢ f = ψ.fst.map L ⋯
state_after: no goals

tactic: rw [← cancel_mono (L.map (φ'.s ≫ α.s)), hφ']
state_before: case intro.refine_2
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝¹ : IsIso (L.map φ'.s)
this✝ : IsIso (L.map α.s)
this : IsIso (L.map (φ'.s ≫ α.s))
⊢ f' = ψ.snd.map L ⋯
state_after: case intro.refine_2
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝¹ : IsIso (L.map φ'.s)
this✝ : IsIso (L.map α.s)
this : IsIso (L.map (φ'.s ≫ α.s))
⊢ φ'.map L ⋯ ≫ L.map (φ'.s ≫ α.s) = ψ.snd.map L ⋯ ≫ L.map (φ'.s ≫ α.s)

tactic: nth_rw 1 [L.map_comp]
state_before: case intro.refine_2
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝¹ : IsIso (L.map φ'.s)
this✝ : IsIso (L.map α.s)
this : IsIso (L.map (φ'.s ≫ α.s))
⊢ φ'.map L ⋯ ≫ L.map (φ'.s ≫ α.s) = ψ.snd.map L ⋯ ≫ L.map (φ'.s ≫ α.s)
state_after: case intro.refine_2
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝¹ : IsIso (L.map φ'.s)
this✝ : IsIso (L.map α.s)
this : IsIso (L.map (φ'.s ≫ α.s))
⊢ φ'.map L ⋯ ≫ L.map φ'.s ≫ L.map α.s = ψ.snd.map L ⋯ ≫ L.map (φ'.s ≫ α.s)

tactic: rw [LeftFraction.map_comp_map_s_assoc, LeftFraction.map_comp_map_s,
  L.map_comp]
state_before: case intro.refine_2
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_4, u_1} C
inst✝² : Category.{u_3, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y : C
f f' : L.obj X ⟶ L.obj Y
φ : W.LeftFraction X Y
hφ : f = φ.map L ⋯
φ' : W.LeftFraction X Y
hφ' : f' = φ'.map L ⋯
α : W.LeftFraction φ.Y' φ'.Y'
hα : (RightFraction.mk φ.s ⋯ φ'.s).f ≫ α.s = (RightFraction.mk φ.s ⋯ φ'.s).s ≫ α.f
ψ : W.LeftFraction₂ X Y := LeftFraction₂.mk (φ.f ≫ α.f) (φ'.f ≫ α.s) (φ'.s ≫ α.s) ⋯
this✝¹ : IsIso (L.map φ'.s)
this✝ : IsIso (L.map α.s)
this : IsIso (L.map (φ'.s ≫ α.s))
⊢ φ'.map L ⋯ ≫ L.map φ'.s ≫ L.map α.s = ψ.snd.map L ⋯ ≫ L.map (φ'.s ≫ α.s)
state_after: no goals