Theorem: CategoryTheory.RanIsSheafOfIsCocontinuous.getSection_is_unique
File: Mathlib/CategoryTheory/Sites/CoverLifting.lean

tactic: apply IsSheafFor.isSeparatedFor _ (pulledbackFamily ℱ S x Y)
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
A : Type w
inst✝² : Category.{w', w} A
inst✝¹ : ∀ (X : Dᵒᵖ), HasLimitsOfShape (StructuredArrow X G.op) A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝ : G.IsCocontinuous J K
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ K.sieves U
x : FamilyOfElements ((ran G.op).obj ℱ.val ⋙ coyoneda.obj { unop := X }) S.arrows
hx : x.Compatible
Y : StructuredArrow { unop := U } G.op
y : ((𝟭 (Cᵒᵖ ⥤ A)).obj ℱ.val ⋙ coyoneda.obj { unop := X }).obj { unop := Y.right.unop }
H : (pulledbackFamily ℱ S x Y).IsAmalgamation y
⊢ y = getSection ℱ hS hx Y
state_after: case a
C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
A : Type w
inst✝² : Category.{w', w} A
inst✝¹ : ∀ (X : Dᵒᵖ), HasLimitsOfShape (StructuredArrow X G.op) A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝ : G.IsCocontinuous J K
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ K.sieves U
x : FamilyOfElements ((ran G.op).obj ℱ.val ⋙ coyoneda.obj { unop := X }) S.arrows
hx : x.Compatible
Y : StructuredArrow { unop := U } G.op
y : ((𝟭 (Cᵒᵖ ⥤ A)).obj ℱ.val ⋙ coyoneda.obj { unop := X }).obj { unop := Y.right.unop }
H : (pulledbackFamily ℱ S x Y).IsAmalgamation y
⊢ (pulledbackFamily ℱ S x Y).IsAmalgamation y

case a
C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
A : Type w
inst✝² : Category.{w', w} A
inst✝¹ : ∀ (X : Dᵒᵖ), HasLimitsOfShape (StructuredArrow X G.op) A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝ : G.IsCocontinuous J K
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ K.sieves U
x : FamilyOfElements ((ran G.op).obj ℱ.val ⋙ coyoneda.obj { unop := X }) S.arrows
hx : x.Compatible
Y : StructuredArrow { unop := U } G.op
y : ((𝟭 (Cᵒᵖ ⥤ A)).obj ℱ.val ⋙ coyoneda.obj { unop := X }).obj { unop := Y.right.unop }
H : (pulledbackFamily ℱ S x Y).IsAmalgamation y
⊢ (pulledbackFamily ℱ S x Y).IsAmalgamation (getSection ℱ hS hx Y)

C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
A : Type w
inst✝² : Category.{w', w} A
inst✝¹ : ∀ (X : Dᵒᵖ), HasLimitsOfShape (StructuredArrow X G.op) A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝ : G.IsCocontinuous J K
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ K.sieves U
x : FamilyOfElements ((ran G.op).obj ℱ.val ⋙ coyoneda.obj { unop := X }) S.arrows
hx : x.Compatible
Y : StructuredArrow { unop := U } G.op
y : ((𝟭 (Cᵒᵖ ⥤ A)).obj ℱ.val ⋙ coyoneda.obj { unop := X }).obj { unop := Y.right.unop }
H : (pulledbackFamily ℱ S x Y).IsAmalgamation y
⊢ IsSheafFor ((𝟭 (Cᵒᵖ ⥤ A)).obj ℱ.val ⋙ coyoneda.obj { unop := X })
    (Presieve.functorPullback G (Sieve.pullback Y.hom.unop S).arrows)

tactic: exact H
state_before: case a
C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
A : Type w
inst✝² : Category.{w', w} A
inst✝¹ : ∀ (X : Dᵒᵖ), HasLimitsOfShape (StructuredArrow X G.op) A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝ : G.IsCocontinuous J K
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ K.sieves U
x : FamilyOfElements ((ran G.op).obj ℱ.val ⋙ coyoneda.obj { unop := X }) S.arrows
hx : x.Compatible
Y : StructuredArrow { unop := U } G.op
y : ((𝟭 (Cᵒᵖ ⥤ A)).obj ℱ.val ⋙ coyoneda.obj { unop := X }).obj { unop := Y.right.unop }
H : (pulledbackFamily ℱ S x Y).IsAmalgamation y
⊢ (pulledbackFamily ℱ S x Y).IsAmalgamation y
state_after: no goals

tactic: apply getSection_isAmalgamation
state_before: case a
C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
A : Type w
inst✝² : Category.{w', w} A
inst✝¹ : ∀ (X : Dᵒᵖ), HasLimitsOfShape (StructuredArrow X G.op) A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝ : G.IsCocontinuous J K
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ K.sieves U
x : FamilyOfElements ((ran G.op).obj ℱ.val ⋙ coyoneda.obj { unop := X }) S.arrows
hx : x.Compatible
Y : StructuredArrow { unop := U } G.op
y : ((𝟭 (Cᵒᵖ ⥤ A)).obj ℱ.val ⋙ coyoneda.obj { unop := X }).obj { unop := Y.right.unop }
H : (pulledbackFamily ℱ S x Y).IsAmalgamation y
⊢ (pulledbackFamily ℱ S x Y).IsAmalgamation (getSection ℱ hS hx Y)
state_after: no goals

tactic: exact ℱ.2 X _ (G.cover_lift _ _ (K.pullback_stable Y.hom.unop hS))
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
A : Type w
inst✝² : Category.{w', w} A
inst✝¹ : ∀ (X : Dᵒᵖ), HasLimitsOfShape (StructuredArrow X G.op) A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝ : G.IsCocontinuous J K
ℱ : Sheaf J A
X : A
U : D
S : Sieve U
hS : S ∈ K.sieves U
x : FamilyOfElements ((ran G.op).obj ℱ.val ⋙ coyoneda.obj { unop := X }) S.arrows
hx : x.Compatible
Y : StructuredArrow { unop := U } G.op
y : ((𝟭 (Cᵒᵖ ⥤ A)).obj ℱ.val ⋙ coyoneda.obj { unop := X }).obj { unop := Y.right.unop }
H : (pulledbackFamily ℱ S x Y).IsAmalgamation y
⊢ IsSheafFor ((𝟭 (Cᵒᵖ ⥤ A)).obj ℱ.val ⋙ coyoneda.obj { unop := X })
    (Presieve.functorPullback G (Sieve.pullback Y.hom.unop S).arrows)
state_after: no goals