Theorem: CategoryTheory.Localization.strictUniversalPropertyFixedTargetId_lift
File: Mathlib/CategoryTheory/Localization/Predicate.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝² : Category.{?u.4312, u_1} C
inst✝¹ : Category.{?u.4316, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.4362, u_3} E
hW : W ≤ MorphismProperty.isomorphisms C
F : C ⥤ E
hF : W.IsInvertedBy F
⊢ 𝟭 C ⋙ (fun F x => F) F hF = F
state_after: case mk
C : Type u_1
D : Type u_2
inst✝² : Category.{?u.4312, u_1} C
inst✝¹ : Category.{?u.4316, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.4362, u_3} E
hW : W ≤ MorphismProperty.isomorphisms C
toPrefunctor✝ : C ⥤q E
map_id✝ : ∀ (X : C), toPrefunctor✝.map (𝟙 X) = 𝟙 (toPrefunctor✝.obj X)
map_comp✝ : ∀ {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z), toPrefunctor✝.map (f ≫ g) = toPrefunctor✝.map f ≫ toPrefunctor✝.map g
hF : W.IsInvertedBy { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ }
⊢ 𝟭 C ⋙ (fun F x => F) { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ } hF =
    { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ }
tactic: cases F
state_before: case mk
C : Type u_1
D : Type u_2
inst✝² : Category.{?u.4312, u_1} C
inst✝¹ : Category.{?u.4316, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.4362, u_3} E
hW : W ≤ MorphismProperty.isomorphisms C
toPrefunctor✝ : C ⥤q E
map_id✝ : ∀ (X : C), toPrefunctor✝.map (𝟙 X) = 𝟙 (toPrefunctor✝.obj X)
map_comp✝ : ∀ {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z), toPrefunctor✝.map (f ≫ g) = toPrefunctor✝.map f ≫ toPrefunctor✝.map g
hF : W.IsInvertedBy { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ }
⊢ 𝟭 C ⋙ (fun F x => F) { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ } hF =
    { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ }
state_after: no goals
tactic: rfl
state_before: C : Type u_1
D : Type u_2
inst✝² : Category.{?u.4312, u_1} C
inst✝¹ : Category.{?u.4316, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.4362, u_3} E
hW : W ≤ MorphismProperty.isomorphisms C
F₁ F₂ : C ⥤ E
eq : 𝟭 C ⋙ F₁ = 𝟭 C ⋙ F₂
⊢ F₁ = F₂
state_after: case mk
C : Type u_1
D : Type u_2
inst✝² : Category.{?u.4312, u_1} C
inst✝¹ : Category.{?u.4316, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.4362, u_3} E
hW : W ≤ MorphismProperty.isomorphisms C
F₂ : C ⥤ E
toPrefunctor✝ : C ⥤q E
map_id✝ : ∀ (X : C), toPrefunctor✝.map (𝟙 X) = 𝟙 (toPrefunctor✝.obj X)
map_comp✝ : ∀ {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z), toPrefunctor✝.map (f ≫ g) = toPrefunctor✝.map f ≫ toPrefunctor✝.map g
eq : 𝟭 C ⋙ { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ } = 𝟭 C ⋙ F₂
⊢ { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ } = F₂
tactic: cases F₁
state_before: case mk
C : Type u_1
D : Type u_2
inst✝² : Category.{?u.4312, u_1} C
inst✝¹ : Category.{?u.4316, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.4362, u_3} E
hW : W ≤ MorphismProperty.isomorphisms C
F₂ : C ⥤ E
toPrefunctor✝ : C ⥤q E
map_id✝ : ∀ (X : C), toPrefunctor✝.map (𝟙 X) = 𝟙 (toPrefunctor✝.obj X)
map_comp✝ : ∀ {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z), toPrefunctor✝.map (f ≫ g) = toPrefunctor✝.map f ≫ toPrefunctor✝.map g
eq : 𝟭 C ⋙ { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ } = 𝟭 C ⋙ F₂
⊢ { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ } = F₂
state_after: case mk.mk
C : Type u_1
D : Type u_2
inst✝² : Category.{?u.4312, u_1} C
inst✝¹ : Category.{?u.4316, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.4362, u_3} E
hW : W ≤ MorphismProperty.isomorphisms C
toPrefunctor✝¹ : C ⥤q E
map_id✝¹ : ∀ (X : C), toPrefunctor✝¹.map (𝟙 X) = 𝟙 (toPrefunctor✝¹.obj X)
map_comp✝¹ :
  ∀ {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z), toPrefunctor✝¹.map (f ≫ g) = toPrefunctor✝¹.map f ≫ toPrefunctor✝¹.map g
toPrefunctor✝ : C ⥤q E
map_id✝ : ∀ (X : C), toPrefunctor✝.map (𝟙 X) = 𝟙 (toPrefunctor✝.obj X)
map_comp✝ : ∀ {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z), toPrefunctor✝.map (f ≫ g) = toPrefunctor✝.map f ≫ toPrefunctor✝.map g
eq :
  𝟭 C ⋙ { toPrefunctor := toPrefunctor✝¹, map_id := map_id✝¹, map_comp := map_comp✝¹ } =
    𝟭 C ⋙ { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ }
⊢ { toPrefunctor := toPrefunctor✝¹, map_id := map_id✝¹, map_comp := map_comp✝¹ } =
    { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ }
tactic: cases F₂
state_before: case mk.mk
C : Type u_1
D : Type u_2
inst✝² : Category.{?u.4312, u_1} C
inst✝¹ : Category.{?u.4316, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.4362, u_3} E
hW : W ≤ MorphismProperty.isomorphisms C
toPrefunctor✝¹ : C ⥤q E
map_id✝¹ : ∀ (X : C), toPrefunctor✝¹.map (𝟙 X) = 𝟙 (toPrefunctor✝¹.obj X)
map_comp✝¹ :
  ∀ {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z), toPrefunctor✝¹.map (f ≫ g) = toPrefunctor✝¹.map f ≫ toPrefunctor✝¹.map g
toPrefunctor✝ : C ⥤q E
map_id✝ : ∀ (X : C), toPrefunctor✝.map (𝟙 X) = 𝟙 (toPrefunctor✝.obj X)
map_comp✝ : ∀ {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z), toPrefunctor✝.map (f ≫ g) = toPrefunctor✝.map f ≫ toPrefunctor✝.map g
eq :
  𝟭 C ⋙ { toPrefunctor := toPrefunctor✝¹, map_id := map_id✝¹, map_comp := map_comp✝¹ } =
    𝟭 C ⋙ { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ }
⊢ { toPrefunctor := toPrefunctor✝¹, map_id := map_id✝¹, map_comp := map_comp✝¹ } =
    { toPrefunctor := toPrefunctor✝, map_id := map_id✝, map_comp := map_comp✝ }
state_after: no goals
tactic: exact eq