Theorem: CategoryTheory.Functor.toSheafify_pullbackSheafificationCompatibility
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
⊢ toSheafify J (G.op ⋙ F) ≫ ((G.pushforwardContinuousSheafificationCompatibility A J K).hom.app F).val =
    whiskerLeft G.op (toSheafify K F)
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
⊢ toSheafify J (G.op ⋙ F) ≫ ((G.pushforwardContinuousSheafificationCompatibility A J K).hom.app F).val =
    whiskerLeft G.op (toSheafify K F)
tactic: let adj₁ := G.op.ranAdjunction A
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
⊢ toSheafify J (G.op ⋙ F) ≫ ((G.pushforwardContinuousSheafificationCompatibility A J K).hom.app F).val =
    whiskerLeft G.op (toSheafify K F)
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
⊢ toSheafify J (G.op ⋙ F) ≫ ((G.pushforwardContinuousSheafificationCompatibility A J K).hom.app F).val =
    whiskerLeft G.op (toSheafify K F)
tactic: let adj₂ := sheafificationAdjunction J A
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
⊢ toSheafify J (G.op ⋙ F) ≫ ((G.pushforwardContinuousSheafificationCompatibility A J K).hom.app F).val =
    whiskerLeft G.op (toSheafify K F)
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
⊢ toSheafify J (G.op ⋙ F) ≫ ((G.pushforwardContinuousSheafificationCompatibility A J K).hom.app F).val =
    whiskerLeft G.op (toSheafify K F)
tactic: let adj₃ := sheafificationAdjunction K A
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
⊢ toSheafify J (G.op ⋙ F) ≫ ((G.pushforwardContinuousSheafificationCompatibility A J K).hom.app F).val =
    whiskerLeft G.op (toSheafify K F)
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
⊢ toSheafify J (G.op ⋙ F) ≫ ((G.pushforwardContinuousSheafificationCompatibility A J K).hom.app F).val =
    whiskerLeft G.op (toSheafify K F)
tactic: let adj₄ := G.sheafAdjunctionCocontinuous A J K
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
⊢ toSheafify J (G.op ⋙ F) ≫ ((G.pushforwardContinuousSheafificationCompatibility A J K).hom.app F).val =
    whiskerLeft G.op (toSheafify K F)
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
⊢ adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F) ≫
      (sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F) =
    ((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F)
tactic: change adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F) ≫
    (sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F) =
      ((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F)
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
⊢ adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F) ≫
      (sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F) =
    ((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F)
state_after: case a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
⊢ (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F) ≫
        (sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F))
tactic: apply (adj₁.homEquiv _ _).injective
state_before: case a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
⊢ (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F) ≫
        (sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F))
state_after: case a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
eq :
  (adj₁.comp adj₂).unit.app F ≫
      (sheafToPresheaf J A ⋙ G.op.ran).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F) =
    (adj₃.comp adj₄).unit.app F
⊢ (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F) ≫
        (sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F))
tactic: have eq := (adj₁.comp adj₂).unit_leftAdjointUniq_hom_app (adj₃.comp adj₄) F
state_before: case a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
eq :
  (adj₁.comp adj₂).unit.app F ≫
      (sheafToPresheaf J A ⋙ G.op.ran).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F) =
    (adj₃.comp adj₄).unit.app F
⊢ (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F) ≫
        (sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F))
state_after: case a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
eq :
  adj₁.unit.app F ≫
      G.op.ran.map (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F)) ≫
        G.op.ran.map ((sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))
⊢ (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F) ≫
        (sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F))
tactic: rw [Adjunction.comp_unit_app, Adjunction.comp_unit_app, comp_map,
    Category.assoc] at eq
state_before: case a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
eq :
  adj₁.unit.app F ≫
      G.op.ran.map (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F)) ≫
        G.op.ran.map ((sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))
⊢ (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F) ≫
        (sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F))
state_after: case a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
eq :
  adj₁.unit.app F ≫
      G.op.ran.map (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F)) ≫
        G.op.ran.map ((sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))
⊢ adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F)) =
    (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F))
tactic: rw [adj₁.homEquiv_unit, Functor.map_comp, eq]
state_before: case a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
eq :
  adj₁.unit.app F ≫
      G.op.ran.map (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F)) ≫
        G.op.ran.map ((sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))
⊢ adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F)) =
    (adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
      (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F))
state_after: case a.a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
eq :
  adj₁.unit.app F ≫
      G.op.ran.map (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F)) ≫
        G.op.ran.map ((sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))
⊢ (adj₁.homEquiv ((𝟭 (Dᵒᵖ ⥤ A)).obj F)
          ((G.sheafPushforwardContinuous A J K).obj ((presheafToSheaf K A).obj F)).val).symm
      (adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))) =
    (adj₁.homEquiv ((𝟭 (Dᵒᵖ ⥤ A)).obj F)
          ((G.sheafPushforwardContinuous A J K).obj ((presheafToSheaf K A).obj F)).val).symm
      ((adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
        (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F)))
tactic: apply (adj₁.homEquiv _ _).symm.injective
state_before: case a.a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
eq :
  adj₁.unit.app F ≫
      G.op.ran.map (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F)) ≫
        G.op.ran.map ((sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))
⊢ (adj₁.homEquiv ((𝟭 (Dᵒᵖ ⥤ A)).obj F)
          ((G.sheafPushforwardContinuous A J K).obj ((presheafToSheaf K A).obj F)).val).symm
      (adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))) =
    (adj₁.homEquiv ((𝟭 (Dᵒᵖ ⥤ A)).obj F)
          ((G.sheafPushforwardContinuous A J K).obj ((presheafToSheaf K A).obj F)).val).symm
      ((adj₁.homEquiv F ((sheafToPresheaf J A).obj ((presheafToSheaf K A ⋙ G.sheafPushforwardContinuous A J K).obj F)))
        (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F)))
state_after: case a.a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
eq :
  adj₁.unit.app F ≫
      G.op.ran.map (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F)) ≫
        G.op.ran.map ((sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))
⊢ ((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F) ≫
      ((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map
          ((sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))) ≫
        adj₁.counit.app ((G.sheafPushforwardContinuous A J K).obj ((presheafToSheaf K A).obj F)).val =
    ((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F) ≫
      ((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₁.unit.app ((presheafToSheaf K A ⋙ sheafToPresheaf K A).obj F)) ≫
        adj₁.counit.app ((G.sheafPushforwardContinuous A J K).obj ((presheafToSheaf K A).obj F)).val
tactic: simp only [Adjunction.homEquiv_counit, map_comp, Category.assoc,
    Adjunction.homEquiv_unit, Adjunction.unit_naturality]
state_before: case a.a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
eq :
  adj₁.unit.app F ≫
      G.op.ran.map (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F)) ≫
        G.op.ran.map ((sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))
⊢ ((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F) ≫
      ((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map
          ((sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))) ≫
        adj₁.counit.app ((G.sheafPushforwardContinuous A J K).obj ((presheafToSheaf K A).obj F)).val =
    ((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₃.unit.app F) ≫
      ((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).map (adj₁.unit.app ((presheafToSheaf K A ⋙ sheafToPresheaf K A).obj F)) ≫
        adj₁.counit.app ((G.sheafPushforwardContinuous A J K).obj ((presheafToSheaf K A).obj F)).val
state_after: case a.a.e_a.e_a.e_a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
eq :
  adj₁.unit.app F ≫
      G.op.ran.map (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F)) ≫
        G.op.ran.map ((sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))
⊢ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F)) =
    adj₁.unit.app ((presheafToSheaf K A ⋙ sheafToPresheaf K A).obj F)
tactic: congr 3
state_before: case a.a.e_a.e_a.e_a
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
inst✝³ : HasWeakSheafify J A
inst✝² : HasWeakSheafify K A
inst✝¹ : G.IsCocontinuous J K
inst✝ : G.IsContinuous J K
F : Dᵒᵖ ⥤ A
adj₁ : (whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op ⊣ G.op.ran := G.op.ranAdjunction A
adj₂ : presheafToSheaf J A ⊣ sheafToPresheaf J A := sheafificationAdjunction J A
adj₃ : presheafToSheaf K A ⊣ sheafToPresheaf K A := sheafificationAdjunction K A
adj₄ : G.sheafPushforwardContinuous A J K ⊣ G.sheafPushforwardCocontinuous A J K := G.sheafAdjunctionCocontinuous A J K
eq :
  adj₁.unit.app F ≫
      G.op.ran.map (adj₂.unit.app (((whiskeringLeft Cᵒᵖ Dᵒᵖ A).obj G.op).obj F)) ≫
        G.op.ran.map ((sheafToPresheaf J A).map (((adj₁.comp adj₂).leftAdjointUniq (adj₃.comp adj₄)).hom.app F)) =
    adj₃.unit.app F ≫ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F))
⊢ (sheafToPresheaf K A).map (adj₄.unit.app ((presheafToSheaf K A).obj F)) =
    adj₁.unit.app ((presheafToSheaf K A ⋙ sheafToPresheaf K A).obj F)
state_after: no goals
tactic: exact G.sheafAdjunctionCocontinuous_unit_app_val A J K ((presheafToSheaf K A).obj F)