Theorem: CategoryTheory.ran_isSheaf_of_coverLifting
File: Mathlib/CategoryTheory/Sites/CoverLifting.lean

tactic: intro X U S hS x hx
state_before: 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
hG : CoverLifting J K G
ℱ : Sheaf J A
⊢ Presheaf.IsSheaf K ((ran (Functor.op G)).obj ℱ.val)

tactic: constructor
state_before: 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
hG : 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
⊢ ∃! t, IsAmalgamation x t

tactic: swap
state_before: case h
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
hG : 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
⊢ (fun t => IsAmalgamation x t) ?w ∧
    ∀ (y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op), (fun t => IsAmalgamation x t) y → y = ?w

case 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
hG : 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
⊢ ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op

tactic: constructor
state_before: case h
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
hG : 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
⊢ (fun t => IsAmalgamation x t) (RanIsSheafOfCoverLifting.gluedSection hG ℱ hS hx) ∧
    ∀ (y : ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op),
      (fun t => IsAmalgamation x t) y → y = RanIsSheafOfCoverLifting.gluedSection hG ℱ hS hx

tactic: apply RanIsSheafOfCoverLifting.gluedSection hG ℱ hS hx
state_before: case 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
hG : 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
⊢ ((ran (Functor.op G)).obj ℱ.val ⋙ coyoneda.obj X.op).obj U.op

tactic: apply RanIsSheafOfCoverLifting.gluedSection_isAmalgamation
state_before: case h.left
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
hG : 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
⊢ (fun t => IsAmalgamation x t) (RanIsSheafOfCoverLifting.gluedSection hG ℱ hS hx)

tactic: apply RanIsSheafOfCoverLifting.gluedSection_is_unique
state_before: case h.right
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
hG : 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),
    (fun t => IsAmalgamation x t) y → y = RanIsSheafOfCoverLifting.gluedSection hG ℱ hS hx