case w.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
⊢ (whiskerLeft (Functor.op G) (sheafHom H α)).app X = α.app X
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
⊢ whiskerLeft (Functor.op G) (sheafHom H α) = α
ext X
case w.h.a
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
⊢ yoneda.map ((whiskerLeft (Functor.op G) (sheafHom H α)).app X) = yoneda.map (α.app X)
case w.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
⊢ (whiskerLeft (Functor.op G) (sheafHom H α)).app X = α.app X
apply yoneda.map_injective
case w.h.a.w.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
⊢ (yoneda.map ((whiskerLeft (Functor.op G) (sheafHom H α)).app X)).app U a✝ = (yoneda.map (α.app X)).app U a✝
case w.h.a
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
⊢ yoneda.map ((whiskerLeft (Functor.op G) (sheafHom H α)).app X) = yoneda.map (α.app X)
ext U
case w.h.a.w.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
⊢ ((sheafYonedaHom H α).app ((Functor.op G).obj X)).app U a✝ = (yoneda.map (α.app X)).app U a✝
case w.h.a.w.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
⊢ (yoneda.map ((whiskerLeft (Functor.op G) (sheafHom H α)).app X)).app U a✝ = (yoneda.map (α.app X)).app U a✝
erw [yoneda.image_preimage ((H.sheafYonedaHom α).app (G.op.obj X))]
case w.h.a.w.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
⊢ (yoneda.map (α.app X)).app U a✝ = ((sheafYonedaHom H α).app ((Functor.op G).obj X)).app U a✝
case w.h.a.w.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
⊢ ((sheafYonedaHom H α).app ((Functor.op G).obj X)).app U a✝ = (yoneda.map (α.app X)).app U a✝
symm
case w.h.a.w.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
⊢ (let_fun this := (yoneda.map (α.app X)).app U a✝;
    this) =
    ((sheafYonedaHom H α).app ((Functor.op G).obj X)).app U a✝
case w.h.a.w.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
⊢ (yoneda.map (α.app X)).app U a✝ = ((sheafYonedaHom H α).app ((Functor.op G).obj X)).app U a✝
change (show (ℱ'.val ⋙ coyoneda.obj (op (unop U))).obj (op (G.obj (unop X))) from _) = _
case w.h.a.w.h.h.hx
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
⊢ FamilyOfElements.Compatible (pushforwardFamily (homOver α U.unop) a✝)

case w.h.a.w.h.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
⊢ FamilyOfElements.IsAmalgamation (pushforwardFamily (homOver α U.unop) a✝)
    (let_fun this := (yoneda.map (α.app X)).app U a✝;
    this)
case w.h.a.w.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
⊢ (let_fun this := (yoneda.map (α.app X)).app U a✝;
    this) =
    ((sheafYonedaHom H α).app ((Functor.op G).obj X)).app U a✝
apply sheaf_eq_amalgamation ℱ' (H.is_cover _)
case w.h.a.w.h.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ (ℱ'.val ⋙ coyoneda.obj U.unop.op).map f.op
      (let_fun this := (yoneda.map (α.app X)).app U a✝;
      this) =
    pushforwardFamily (homOver α U.unop) a✝ f hf
case w.h.a.w.h.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
⊢ FamilyOfElements.IsAmalgamation (pushforwardFamily (homOver α U.unop) a✝)
    (let_fun this := (yoneda.map (α.app X)).app U a✝;
    this)
intro Y f hf
case w.h.a.w.h.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ (ℱ'.val ⋙ coyoneda.obj U.unop.op).map ((Nonempty.some hf).lift ≫ (Nonempty.some hf).map).op
      (let_fun this := (yoneda.map (α.app X)).app U a✝;
      this) =
    pushforwardFamily (homOver α U.unop) a✝ f hf
case w.h.a.w.h.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ (ℱ'.val ⋙ coyoneda.obj U.unop.op).map f.op
      (let_fun this := (yoneda.map (α.app X)).app U a✝;
      this) =
    pushforwardFamily (homOver α U.unop) a✝ f hf
conv_lhs => rw [← hf.some.fac]
case w.h.a.w.h.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ ((a✝ ≫ α.app X) ≫ ℱ'.val.map (Nonempty.some hf).map.op) ≫ ℱ'.val.map (Nonempty.some hf).lift.op =
    (sheafOver ℱ' U.unop).val.map (Nonempty.some hf).lift.op
      ((a✝ ≫ ℱ.map (Nonempty.some hf).map.op) ≫ α.app (Nonempty.some hf).1.op)
case w.h.a.w.h.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ (ℱ'.val ⋙ coyoneda.obj U.unop.op).map ((Nonempty.some hf).lift ≫ (Nonempty.some hf).map).op
      (let_fun this := (yoneda.map (α.app X)).app U a✝;
      this) =
    pushforwardFamily (homOver α U.unop) a✝ f hf
simp only [pushforwardFamily, Functor.comp_map, yoneda_map_app, coyoneda_obj_map, op_comp,
  FunctorToTypes.map_comp_apply, homOver_app, ← Category.assoc]
case w.h.a.w.h.h.h.e_a
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ (a✝ ≫ α.app X) ≫ ℱ'.val.map (Nonempty.some hf).map.op =
    (a✝ ≫ ℱ.map (Nonempty.some hf).map.op) ≫ α.app (Nonempty.some hf).1.op
case w.h.a.w.h.h.h
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ ((a✝ ≫ α.app X) ≫ ℱ'.val.map (Nonempty.some hf).map.op) ≫ ℱ'.val.map (Nonempty.some hf).lift.op =
    (sheafOver ℱ' U.unop).val.map (Nonempty.some hf).lift.op
      ((a✝ ≫ ℱ.map (Nonempty.some hf).map.op) ≫ α.app (Nonempty.some hf).1.op)
congr 1
case w.h.a.w.h.h.h.e_a
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ a✝ ≫ α.app X ≫ ℱ'.val.map (Nonempty.some hf).map.op =
    a✝ ≫ ℱ.map (Nonempty.some hf).map.op ≫ α.app (Nonempty.some hf).1.op
case w.h.a.w.h.h.h.e_a
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ (a✝ ≫ α.app X) ≫ ℱ'.val.map (Nonempty.some hf).map.op =
    (a✝ ≫ ℱ.map (Nonempty.some hf).map.op) ≫ α.app (Nonempty.some hf).1.op
simp only [Category.assoc]
case w.h.a.w.h.h.h.e_a.e_a
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ α.app X ≫ ℱ'.val.map (Nonempty.some hf).map.op = ℱ.map (Nonempty.some hf).map.op ≫ α.app (Nonempty.some hf).1.op
case w.h.a.w.h.h.h.e_a
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ a✝ ≫ α.app X ≫ ℱ'.val.map (Nonempty.some hf).map.op =
    a✝ ≫ ℱ.map (Nonempty.some hf).map.op ≫ α.app (Nonempty.some hf).1.op
congr 1
case w.h.a.w.h.h.h.e_a.e_a
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ α.app X ≫ ℱ'.val.map (G.map (G.preimage (Nonempty.some hf).map)).op =
    ℱ.map (G.map (G.preimage (Nonempty.some hf).map)).op ≫ α.app (Nonempty.some hf).1.op
case w.h.a.w.h.h.h.e_a.e_a
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ α.app X ≫ ℱ'.val.map (Nonempty.some hf).map.op = ℱ.map (Nonempty.some hf).map.op ≫ α.app (Nonempty.some hf).1.op
rw [← G.image_preimage hf.some.map]
case w.h.a.w.h.h.h.e_a.e_a
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ ℱ.map (G.map (G.preimage (Nonempty.some hf).map)).op ≫ α.app (Nonempty.some hf).1.op =
    α.app X ≫ ℱ'.val.map (G.map (G.preimage (Nonempty.some hf).map)).op
case w.h.a.w.h.h.h.e_a.e_a
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ α.app X ≫ ℱ'.val.map (G.map (G.preimage (Nonempty.some hf).map)).op =
    ℱ.map (G.map (G.preimage (Nonempty.some hf).map)).op ≫ α.app (Nonempty.some hf).1.op
symm
no goals
case w.h.a.w.h.h.h.e_a.e_a
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
Y : D
f : Y ⟶ G.obj X.unop
hf : (Sieve.coverByImage G (G.obj X.unop)).arrows f
⊢ ℱ.map (G.map (G.preimage (Nonempty.some hf).map)).op ≫ α.app (Nonempty.some hf).1.op =
    α.app X ≫ ℱ'.val.map (G.map (G.preimage (Nonempty.some hf).map)).op
apply α.naturality (G.preimage hf.some.map).op
no goals
case w.h.a.w.h.h.hx
C : Type u_1
inst✝⁴ : Category C
D : Type u_6
inst✝³ : Category D
E : Type ?u.124486
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_3
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ A
ℱ' : Sheaf K A
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : Cᵒᵖ
U : Aᵒᵖ
a✝ : (yoneda.obj ((Functor.op G ⋙ ℱ).obj X)).obj U
⊢ FamilyOfElements.Compatible (pushforwardFamily (homOver α U.unop) a✝)
exact (pushforwardFamily_compatible H _ _)