Theorem: CategoryTheory.Functor.sheafAdjunctionCocontinuous_unit_app_val
File: Mathlib/CategoryTheory/Sites/CoverLifting.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_4, u_1} C
inst✝⁵ : Category.{u_3, u_2} D
G : C ⥤ D
A : Type w
inst✝⁴ : Category.{w', w} A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝³ : G.IsCocontinuous J K
inst✝² : ∀ (F : Cᵒᵖ ⥤ A), G.op.HasPointwiseRightKanExtension F
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Sheaf K A
⊢ ((G.sheafAdjunctionCocontinuous A J K).unit.app F).val = (G.op.ranAdjunction A).unit.app F.val
state_after: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_4, u_1} C
inst✝⁵ : Category.{u_3, u_2} D
G : C ⥤ D
A : Type w
inst✝⁴ : Category.{w', w} A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝³ : G.IsCocontinuous J K
inst✝² : ∀ (F : Cᵒᵖ ⥤ A), G.op.HasPointwiseRightKanExtension F
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Sheaf K A
⊢ (G.op.ranAdjunction A).unit.app ((sheafToPresheaf K A).obj F) ≫
      G.op.ran.map ((G.sheafPushforwardContinuousCompSheafToPresheafIso A J K).symm.hom.app F) ≫
        (G.sheafPushforwardCocontinuousCompSheafToPresheafIso A J K).symm.hom.app
          ((G.sheafPushforwardContinuous A J K).obj F) =
    (G.op.ranAdjunction A).unit.app F.val
tactic: apply ((G.op.ranAdjunction A).map_restrictFullyFaithful_unit_app
    (fullyFaithfulSheafToPresheaf K A) (fullyFaithfulSheafToPresheaf J A)
    (G.sheafPushforwardContinuousCompSheafToPresheafIso A J K).symm
    (G.sheafPushforwardCocontinuousCompSheafToPresheafIso A J K).symm F).trans
state_before: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_4, u_1} C
inst✝⁵ : Category.{u_3, u_2} D
G : C ⥤ D
A : Type w
inst✝⁴ : Category.{w', w} A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝³ : G.IsCocontinuous J K
inst✝² : ∀ (F : Cᵒᵖ ⥤ A), G.op.HasPointwiseRightKanExtension F
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Sheaf K A
⊢ (G.op.ranAdjunction A).unit.app ((sheafToPresheaf K A).obj F) ≫
      G.op.ran.map ((G.sheafPushforwardContinuousCompSheafToPresheafIso A J K).symm.hom.app F) ≫
        (G.sheafPushforwardCocontinuousCompSheafToPresheafIso A J K).symm.hom.app
          ((G.sheafPushforwardContinuous A J K).obj F) =
    (G.op.ranAdjunction A).unit.app F.val
state_after: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_4, u_1} C
inst✝⁵ : Category.{u_3, u_2} D
G : C ⥤ D
A : Type w
inst✝⁴ : Category.{w', w} A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝³ : G.IsCocontinuous J K
inst✝² : ∀ (F : Cᵒᵖ ⥤ A), G.op.HasPointwiseRightKanExtension F
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Sheaf K A
⊢ (G.op.ranAdjunction A).unit.app F.val ≫
      G.op.ran.map ((G.sheafPushforwardContinuousCompSheafToPresheafIso A J K).inv.app F) ≫
        𝟙 ((G.sheafPushforwardCocontinuous A J K).obj ((G.sheafPushforwardContinuous A J K).obj F)).val =
    (G.op.ranAdjunction A).unit.app F.val
tactic: dsimp
state_before: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_4, u_1} C
inst✝⁵ : Category.{u_3, u_2} D
G : C ⥤ D
A : Type w
inst✝⁴ : Category.{w', w} A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝³ : G.IsCocontinuous J K
inst✝² : ∀ (F : Cᵒᵖ ⥤ A), G.op.HasPointwiseRightKanExtension F
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Sheaf K A
⊢ (G.op.ranAdjunction A).unit.app F.val ≫
      G.op.ran.map ((G.sheafPushforwardContinuousCompSheafToPresheafIso A J K).inv.app F) ≫
        𝟙 ((G.sheafPushforwardCocontinuous A J K).obj ((G.sheafPushforwardContinuous A J K).obj F)).val =
    (G.op.ranAdjunction A).unit.app F.val
state_after: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_4, u_1} C
inst✝⁵ : Category.{u_3, u_2} D
G : C ⥤ D
A : Type w
inst✝⁴ : Category.{w', w} A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝³ : G.IsCocontinuous J K
inst✝² : ∀ (F : Cᵒᵖ ⥤ A), G.op.HasPointwiseRightKanExtension F
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Sheaf K A
⊢ (G.op.ranAdjunction A).unit.app F.val ≫
      𝟙 (G.op.ran.obj (G.op ⋙ F.val)) ≫
        𝟙 ((G.sheafPushforwardCocontinuous A J K).obj ((G.sheafPushforwardContinuous A J K).obj F)).val =
    (G.op.ranAdjunction A).unit.app F.val
tactic: erw [Functor.map_id]
state_before: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_4, u_1} C
inst✝⁵ : Category.{u_3, u_2} D
G : C ⥤ D
A : Type w
inst✝⁴ : Category.{w', w} A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝³ : G.IsCocontinuous J K
inst✝² : ∀ (F : Cᵒᵖ ⥤ A), G.op.HasPointwiseRightKanExtension F
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Sheaf K A
⊢ (G.op.ranAdjunction A).unit.app F.val ≫
      𝟙 (G.op.ran.obj (G.op ⋙ F.val)) ≫
        𝟙 ((G.sheafPushforwardCocontinuous A J K).obj ((G.sheafPushforwardContinuous A J K).obj F)).val =
    (G.op.ranAdjunction A).unit.app F.val
state_after: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_4, u_1} C
inst✝⁵ : Category.{u_3, u_2} D
G : C ⥤ D
A : Type w
inst✝⁴ : Category.{w', w} A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝³ : G.IsCocontinuous J K
inst✝² : ∀ (F : Cᵒᵖ ⥤ A), G.op.HasPointwiseRightKanExtension F
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Sheaf K A
⊢ (G.op.ranAdjunction A).unit.app F.val ≫ 𝟙 (G.op.ran.obj (G.op ⋙ F.val)) ≫ 𝟙 (G.op.ran.obj (G.op ⋙ F.val)) =
    (G.op.ranAdjunction A).unit.app F.val
tactic: change _ ≫ 𝟙 _ ≫ 𝟙 _ = _
state_before: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_4, u_1} C
inst✝⁵ : Category.{u_3, u_2} D
G : C ⥤ D
A : Type w
inst✝⁴ : Category.{w', w} A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝³ : G.IsCocontinuous J K
inst✝² : ∀ (F : Cᵒᵖ ⥤ A), G.op.HasPointwiseRightKanExtension F
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Sheaf K A
⊢ (G.op.ranAdjunction A).unit.app F.val ≫ 𝟙 (G.op.ran.obj (G.op ⋙ F.val)) ≫ 𝟙 (G.op.ran.obj (G.op ⋙ F.val)) =
    (G.op.ranAdjunction A).unit.app F.val
state_after: no goals
tactic: simp only [Category.comp_id]