Theorem: CategoryTheory.Functor.isZero
File: Mathlib/CategoryTheory/Limits/Shapes/ZeroObjects.lean

tactic: constructor <;> intro G <;> refine' ⟨⟨⟨_⟩, _⟩⟩
state_before: C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
⊢ IsZero F

tactic: refine'
  { app := fun X => (hF _).to_ _
    naturality := _ }
state_before: case unique_to.refine'_1
C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
G : C ⥤ D
⊢ F ⟶ G

tactic: intros
state_before: case unique_to.refine'_1
C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
G : C ⥤ D
⊢ ∀ ⦃X Y : C⦄ (f : X ⟶ Y),
    F.map f ≫ (fun X => IsZero.to_ (_ : IsZero (F.obj X)) (G.obj X)) Y =
      (fun X => IsZero.to_ (_ : IsZero (F.obj X)) (G.obj X)) X ≫ G.map f

tactic: exact (hF _).eq_of_src _ _
state_before: case unique_to.refine'_1
C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
G : C ⥤ D
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ F.map f✝ ≫ (fun X => IsZero.to_ (_ : IsZero (F.obj X)) (G.obj X)) Y✝ =
    (fun X => IsZero.to_ (_ : IsZero (F.obj X)) (G.obj X)) X✝ ≫ G.map f✝

tactic: intro f
state_before: case unique_to.refine'_2
C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
G : C ⥤ D
⊢ ∀ (a : F ⟶ G), a = default

tactic: ext
state_before: case unique_to.refine'_2
C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
G : C ⥤ D
f : F ⟶ G
⊢ f = default

tactic: apply (hF _).eq_of_src _ _
state_before: case unique_to.refine'_2.w.h
C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
G : C ⥤ D
f : F ⟶ G
x✝ : C
⊢ f.app x✝ = default.app x✝

tactic: refine'
  { app := fun X => (hF _).from_ _
    naturality := _ }
state_before: case unique_from.refine'_1
C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
G : C ⥤ D
⊢ G ⟶ F

tactic: intros
state_before: case unique_from.refine'_1
C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
G : C ⥤ D
⊢ ∀ ⦃X Y : C⦄ (f : X ⟶ Y),
    G.map f ≫ (fun X => IsZero.from_ (_ : IsZero (F.obj X)) (G.obj X)) Y =
      (fun X => IsZero.from_ (_ : IsZero (F.obj X)) (G.obj X)) X ≫ F.map f

tactic: exact (hF _).eq_of_tgt _ _
state_before: case unique_from.refine'_1
C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
G : C ⥤ D
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ G.map f✝ ≫ (fun X => IsZero.from_ (_ : IsZero (F.obj X)) (G.obj X)) Y✝ =
    (fun X => IsZero.from_ (_ : IsZero (F.obj X)) (G.obj X)) X✝ ≫ F.map f✝

tactic: intro f
state_before: case unique_from.refine'_2
C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
G : C ⥤ D
⊢ ∀ (a : G ⟶ F), a = default

tactic: ext
state_before: case unique_from.refine'_2
C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
G : C ⥤ D
f : G ⟶ F
⊢ f = default

tactic: apply (hF _).eq_of_tgt _ _
state_before: case unique_from.refine'_2.w.h
C : Type u
inst✝¹ : Category C
D : Type u'
inst✝ : Category D
F : C ⥤ D
hF : ∀ (X : C), IsZero (F.obj X)
G : C ⥤ D
f : G ⟶ F
x✝ : C
⊢ f.app x✝ = default.app x✝