Theorem: CategoryTheory.MorphismProperty.map_eq_iff_precomp
File: Mathlib/CategoryTheory/Localization/CalculusOfFractions.lean

tactic: constructor
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z : C
f₁ f₂ : Y ⟶ Z
⊢ L.map f₁ = L.map f₂ ↔ ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂
state_after: case mp
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z : C
f₁ f₂ : Y ⟶ Z
⊢ L.map f₁ = L.map f₂ → ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂

case mpr
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z : C
f₁ f₂ : Y ⟶ Z
⊢ (∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂) → L.map f₁ = L.map f₂

tactic: intro h
state_before: case mp
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z : C
f₁ f₂ : Y ⟶ Z
⊢ L.map f₁ = L.map f₂ → ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂
state_after: case mp
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z : C
f₁ f₂ : Y ⟶ Z
h : L.map f₁ = L.map f₂
⊢ ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂

tactic: rw [← RightFraction.map_ofHom W _ L (Localization.inverts _ _),
  ← RightFraction.map_ofHom W _ L (Localization.inverts _ _),
  RightFraction.map_eq_iff] at h
state_before: case mp
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z : C
f₁ f₂ : Y ⟶ Z
h : L.map f₁ = L.map f₂
⊢ ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂
state_after: case mp
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z : C
f₁ f₂ : Y ⟶ Z
h : RightFractionRel (RightFraction.ofHom W f₁) (RightFraction.ofHom W f₂)
⊢ ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂

tactic: obtain ⟨Z, t₁, t₂, hst, hft, ht⟩ := h
state_before: case mp
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z : C
f₁ f₂ : Y ⟶ Z
h : RightFractionRel (RightFraction.ofHom W f₁) (RightFraction.ofHom W f₂)
⊢ ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂
state_after: case mp.intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z✝ : C
f₁ f₂ : Y ⟶ Z✝
Z : C
t₁ : Z ⟶ (RightFraction.ofHom W f₁).X'
t₂ : Z ⟶ (RightFraction.ofHom W f₂).X'
hst : t₁ ≫ (RightFraction.ofHom W f₁).s = t₂ ≫ (RightFraction.ofHom W f₂).s
hft : t₁ ≫ (RightFraction.ofHom W f₁).f = t₂ ≫ (RightFraction.ofHom W f₂).f
ht : W (t₁ ≫ (RightFraction.ofHom W f₁).s)
⊢ ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂

tactic: dsimp at t₁ t₂ hst hft ht
state_before: case mp.intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z✝ : C
f₁ f₂ : Y ⟶ Z✝
Z : C
t₁ : Z ⟶ (RightFraction.ofHom W f₁).X'
t₂ : Z ⟶ (RightFraction.ofHom W f₂).X'
hst : t₁ ≫ (RightFraction.ofHom W f₁).s = t₂ ≫ (RightFraction.ofHom W f₂).s
hft : t₁ ≫ (RightFraction.ofHom W f₁).f = t₂ ≫ (RightFraction.ofHom W f₂).f
ht : W (t₁ ≫ (RightFraction.ofHom W f₁).s)
⊢ ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂
state_after: case mp.intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z✝ : C
f₁ f₂ : Y ⟶ Z✝
Z : C
t₁ t₂ : Z ⟶ Y
hst : t₁ ≫ 𝟙 Y = t₂ ≫ 𝟙 Y
hft : t₁ ≫ f₁ = t₂ ≫ f₂
ht : W (t₁ ≫ 𝟙 Y)
⊢ ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂

tactic: simp only [comp_id] at hst
state_before: case mp.intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z✝ : C
f₁ f₂ : Y ⟶ Z✝
Z : C
t₁ t₂ : Z ⟶ Y
hst : t₁ ≫ 𝟙 Y = t₂ ≫ 𝟙 Y
hft : t₁ ≫ f₁ = t₂ ≫ f₂
ht : W (t₁ ≫ 𝟙 Y)
⊢ ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂
state_after: case mp.intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z✝ : C
f₁ f₂ : Y ⟶ Z✝
Z : C
t₁ t₂ : Z ⟶ Y
hft : t₁ ≫ f₁ = t₂ ≫ f₂
ht : W (t₁ ≫ 𝟙 Y)
hst : t₁ = t₂
⊢ ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂

tactic: exact ⟨Z, t₁, by simpa using ht, by rw [hft, hst]⟩
state_before: case mp.intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z✝ : C
f₁ f₂ : Y ⟶ Z✝
Z : C
t₁ t₂ : Z ⟶ Y
hft : t₁ ≫ f₁ = t₂ ≫ f₂
ht : W (t₁ ≫ 𝟙 Y)
hst : t₁ = t₂
⊢ ∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂
state_after: no goals

tactic: simpa using ht
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z✝ : C
f₁ f₂ : Y ⟶ Z✝
Z : C
t₁ t₂ : Z ⟶ Y
hft : t₁ ≫ f₁ = t₂ ≫ f₂
ht : W (t₁ ≫ 𝟙 Y)
hst : t₁ = t₂
⊢ W t₁
state_after: no goals

tactic: rw [hft, hst]
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z✝ : C
f₁ f₂ : Y ⟶ Z✝
Z : C
t₁ t₂ : Z ⟶ Y
hft : t₁ ≫ f₁ = t₂ ≫ f₂
ht : W (t₁ ≫ 𝟙 Y)
hst : t₁ = t₂
⊢ t₁ ≫ f₁ = t₁ ≫ f₂
state_after: no goals

tactic: rintro ⟨Z, s, hs, fac⟩
state_before: case mpr
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z : C
f₁ f₂ : Y ⟶ Z
⊢ (∃ X s, ∃ (_ : W s), s ≫ f₁ = s ≫ f₂) → L.map f₁ = L.map f₂
state_after: case mpr.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z✝ : C
f₁ f₂ : Y ⟶ Z✝
Z : C
s : Z ⟶ Y
hs : W s
fac : s ≫ f₁ = s ≫ f₂
⊢ L.map f₁ = L.map f₂

tactic: simp only [← cancel_epi (Localization.isoOfHom L W s hs).hom,
  Localization.isoOfHom_hom, ← L.map_comp, fac]
state_before: case mpr.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{u_4, u_2} D
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasRightCalculusOfFractions
Y Z✝ : C
f₁ f₂ : Y ⟶ Z✝
Z : C
s : Z ⟶ Y
hs : W s
fac : s ≫ f₁ = s ≫ f₂
⊢ L.map f₁ = L.map f₂
state_after: no goals