C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
⊢ y = IsLimit.lift (limit.isLimit (Ran.diagram (Functor.op G) ℱ.val U.op)) (gluedLimitCone hu ℱ hS hx)
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
⊢ y = gluedSection hu ℱ hS hx
unfold gluedSection limit.lift
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
⊢ y ≫ limit.π (Ran.diagram (Functor.op G) ℱ.val U.op) W =
    IsLimit.lift (limit.isLimit (Ran.diagram (Functor.op G) ℱ.val U.op)) (gluedLimitCone hu ℱ hS hx) ≫
      limit.π (Ran.diagram (Functor.op G) ℱ.val U.op) W
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
⊢ y = IsLimit.lift (limit.isLimit (Ran.diagram (Functor.op G) ℱ.val U.op)) (gluedLimitCone hu ℱ hS hx)
refine limit.hom_ext (λ (W : StructuredArrow (op U) G.op) => ?_)
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
⊢ y ≫ limit.π (Ran.diagram (Functor.op G) ℱ.val U.op) W = (gluedLimitCone hu ℱ hS hx).π.app W
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
⊢ y ≫ limit.π (Ran.diagram (Functor.op G) ℱ.val U.op) W =
    IsLimit.lift (limit.isLimit (Ran.diagram (Functor.op G) ℱ.val U.op)) (gluedLimitCone hu ℱ hS hx) ≫
      limit.π (Ran.diagram (Functor.op G) ℱ.val U.op) W
erw [limit.lift_π]
case h.e'_3.h.h.e'_8
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
e_1✝ : (X.op.unop ⟶ (Ran.diagram (Functor.op G) ℱ.val U.op).obj W) = (X ⟶ (Ran.diagram (Functor.op G) ℱ.val U.op).obj W)
⊢ W = (StructuredArrow.map (𝟙 U).op).obj W

C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
⊢ ∀ {V' : C} {fV : G.obj V' ⟶ U} (hV : S.arrows (fV ≫ 𝟙 U)),
    y ≫ ((ran (Functor.op G)).obj ℱ.val).map fV.op = x (fV ≫ 𝟙 U) hV
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
⊢ y ≫ limit.π (Ran.diagram (Functor.op G) ℱ.val U.op) W = (gluedLimitCone hu ℱ hS hx).π.app W
convert helper hu ℱ hS hx (𝟙 _) y W _
no goals
case h.e'_3.h.h.e'_8
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
e_1✝ : (X.op.unop ⟶ (Ran.diagram (Functor.op G) ℱ.val U.op).obj W) = (X ⟶ (Ran.diagram (Functor.op G) ℱ.val U.op).obj W)
⊢ W = (StructuredArrow.map (𝟙 U).op).obj W
simp only [op_id, StructuredArrow.map_id]
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
V' : C
fV' : G.obj V' ⟶ U
hV' : S.arrows (fV' ≫ 𝟙 U)
⊢ y ≫ ((ran (Functor.op G)).obj ℱ.val).map fV'.op = x (fV' ≫ 𝟙 U) hV'
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
⊢ ∀ {V' : C} {fV : G.obj V' ⟶ U} (hV : S.arrows (fV ≫ 𝟙 U)),
    y ≫ ((ran (Functor.op G)).obj ℱ.val).map fV.op = x (fV ≫ 𝟙 U) hV
intro V' fV' hV'
case h.e'_3.h.h.e'_2
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
V' : C
fV' : G.obj V' ⟶ U
hV' : S.arrows (fV' ≫ 𝟙 U)
e_1✝ :
  (X ⟶ ((ran (Functor.op G)).obj ℱ.val).obj (G.obj V').op) =
    ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj (G.obj V').op
⊢ fV' ≫ 𝟙 U = fV'
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
V' : C
fV' : G.obj V' ⟶ U
hV' : S.arrows (fV' ≫ 𝟙 U)
⊢ y ≫ ((ran (Functor.op G)).obj ℱ.val).map fV'.op = x (fV' ≫ 𝟙 U) hV'
convert hy fV' (by simpa only [Category.comp_id] using hV')
no goals
case h.e'_3.h.h.e'_2
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
V' : C
fV' : G.obj V' ⟶ U
hV' : S.arrows (fV' ≫ 𝟙 U)
e_1✝ :
  (X ⟶ ((ran (Functor.op G)).obj ℱ.val).obj (G.obj V').op) =
    ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj (G.obj V').op
⊢ fV' ≫ 𝟙 U = fV'
erw [Category.comp_id]
no goals
C D : Type u
inst✝³ : Category C
inst✝² : Category D
A : Type w
inst✝¹ : Category A
inst✝ : HasLimits A
J : GrothendieckTopology C
K : GrothendieckTopology D
G : C ⥤ D
hu : CoverLifting J K G
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ GrothendieckTopology.sieves K U
x : FamilyOfElements ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op) S.arrows
hx : Compatible x
y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op
hy : IsAmalgamation x y
W : StructuredArrow U.op (Functor.op G)
V' : C
fV' : G.obj V' ⟶ U
hV' : S.arrows (fV' ≫ 𝟙 U)
⊢ S.arrows fV'
simpa only [Category.comp_id] using hV'