Theorem: CategoryTheory.Quotient.lift_spec
File: Mathlib/CategoryTheory/Quotient.lean

tactic: apply Functor.ext
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
⊢ functor r ⋙ lift r F H = F
state_after: case h_map
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
⊢ autoParam (∀ (X Y : C) (f : X ⟶ Y), (functor r ⋙ lift r F H).map f = eqToHom ⋯ ≫ F.map f ≫ eqToHom ⋯) _auto✝

case h_obj
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
⊢ ∀ (X : C), (functor r ⋙ lift r F H).obj X = F.obj X

tactic: rotate_left
state_before: case h_map
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
⊢ autoParam (∀ (X Y : C) (f : X ⟶ Y), (functor r ⋙ lift r F H).map f = eqToHom ⋯ ≫ F.map f ≫ eqToHom ⋯) _auto✝

case h_obj
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
⊢ ∀ (X : C), (functor r ⋙ lift r F H).obj X = F.obj X
state_after: case h_obj
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
⊢ ∀ (X : C), (functor r ⋙ lift r F H).obj X = F.obj X

case h_map
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
⊢ autoParam (∀ (X Y : C) (f : X ⟶ Y), (functor r ⋙ lift r F H).map f = eqToHom ⋯ ≫ F.map f ≫ eqToHom ⋯) _auto✝

tactic: rintro X
state_before: case h_obj
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
⊢ ∀ (X : C), (functor r ⋙ lift r F H).obj X = F.obj X
state_after: case h_obj
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
X : C
⊢ (functor r ⋙ lift r F H).obj X = F.obj X

tactic: rfl
state_before: case h_obj
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
X : C
⊢ (functor r ⋙ lift r F H).obj X = F.obj X
state_after: no goals

tactic: rintro X Y f
state_before: case h_map
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
⊢ autoParam (∀ (X Y : C) (f : X ⟶ Y), (functor r ⋙ lift r F H).map f = eqToHom ⋯ ≫ F.map f ≫ eqToHom ⋯) _auto✝
state_after: case h_map
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
X Y : C
f : X ⟶ Y
⊢ (functor r ⋙ lift r F H).map f = eqToHom ⋯ ≫ F.map f ≫ eqToHom ⋯

tactic: dsimp [lift, functor]
state_before: case h_map
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
X Y : C
f : X ⟶ Y
⊢ (functor r ⋙ lift r F H).map f = eqToHom ⋯ ≫ F.map f ≫ eqToHom ⋯
state_after: case h_map
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
X Y : C
f : X ⟶ Y
⊢ (Quot.mk (CompClosure r) f).liftOn (fun f => F.map f) ⋯ = 𝟙 (F.obj X) ≫ F.map f ≫ 𝟙 (F.obj Y)

tactic: simp
state_before: case h_map
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
r : HomRel C
D : Type u_3
inst✝ : Category.{u_4, u_3} D
F : C ⥤ D
H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂
X Y : C
f : X ⟶ Y
⊢ (Quot.mk (CompClosure r) f).liftOn (fun f => F.map f) ⋯ = 𝟙 (F.obj X) ≫ F.map f ≫ 𝟙 (F.obj Y)
state_after: no goals