Theorem: TopCat.Presheaf.isGluing_iff_pairwise
File: Mathlib/Topology/Sheaves/SheafCondition/UniqueGluing.lean

tactic: refine ⟨fun h ↦ ?_, fun h i ↦ h (op <| Pairwise.single i)⟩
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X : TopCat
F : Presheaf (Type u) X
ι : Type x
U : ι → Opens ↑X
sf : (i : ι) → (forget (Type u)).obj (F.obj { unop := U i })
s : (forget (Type u)).obj (F.obj { unop := iSup U })
⊢ F.IsGluing U sf s ↔
    ∀ (i : (CategoryTheory.Pairwise ι)ᵒᵖ),
      (Functor.mapCone F (Pairwise.cocone U).op).π.app i s = objPairwiseOfFamily sf i
state_after: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X : TopCat
F : Presheaf (Type u) X
ι : Type x
U : ι → Opens ↑X
sf : (i : ι) → (forget (Type u)).obj (F.obj { unop := U i })
s : (forget (Type u)).obj (F.obj { unop := iSup U })
h : F.IsGluing U sf s
⊢ ∀ (i : (CategoryTheory.Pairwise ι)ᵒᵖ), (Functor.mapCone F (Pairwise.cocone U).op).π.app i s = objPairwiseOfFamily sf i

tactic: rintro (i|⟨i,j⟩)
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X : TopCat
F : Presheaf (Type u) X
ι : Type x
U : ι → Opens ↑X
sf : (i : ι) → (forget (Type u)).obj (F.obj { unop := U i })
s : (forget (Type u)).obj (F.obj { unop := iSup U })
h : F.IsGluing U sf s
⊢ ∀ (i : (CategoryTheory.Pairwise ι)ᵒᵖ), (Functor.mapCone F (Pairwise.cocone U).op).π.app i s = objPairwiseOfFamily sf i
state_after: case op.single
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X : TopCat
F : Presheaf (Type u) X
ι : Type x
U : ι → Opens ↑X
sf : (i : ι) → (forget (Type u)).obj (F.obj { unop := U i })
s : (forget (Type u)).obj (F.obj { unop := iSup U })
h : F.IsGluing U sf s
i : ι
⊢ (Functor.mapCone F (Pairwise.cocone U).op).π.app { unop := Pairwise.single i } s =
    objPairwiseOfFamily sf { unop := Pairwise.single i }

case op.pair
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X : TopCat
F : Presheaf (Type u) X
ι : Type x
U : ι → Opens ↑X
sf : (i : ι) → (forget (Type u)).obj (F.obj { unop := U i })
s : (forget (Type u)).obj (F.obj { unop := iSup U })
h : F.IsGluing U sf s
i j : ι
⊢ (Functor.mapCone F (Pairwise.cocone U).op).π.app { unop := Pairwise.pair i j } s =
    objPairwiseOfFamily sf { unop := Pairwise.pair i j }

tactic: exact h i
state_before: case op.single
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X : TopCat
F : Presheaf (Type u) X
ι : Type x
U : ι → Opens ↑X
sf : (i : ι) → (forget (Type u)).obj (F.obj { unop := U i })
s : (forget (Type u)).obj (F.obj { unop := iSup U })
h : F.IsGluing U sf s
i : ι
⊢ (Functor.mapCone F (Pairwise.cocone U).op).π.app { unop := Pairwise.single i } s =
    objPairwiseOfFamily sf { unop := Pairwise.single i }
state_after: no goals

tactic: rw [← (F.mapCone (Pairwise.cocone U).op).w (op <| Pairwise.Hom.left i j)]
state_before: case op.pair
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X : TopCat
F : Presheaf (Type u) X
ι : Type x
U : ι → Opens ↑X
sf : (i : ι) → (forget (Type u)).obj (F.obj { unop := U i })
s : (forget (Type u)).obj (F.obj { unop := iSup U })
h : F.IsGluing U sf s
i j : ι
⊢ (Functor.mapCone F (Pairwise.cocone U).op).π.app { unop := Pairwise.pair i j } s =
    objPairwiseOfFamily sf { unop := Pairwise.pair i j }
state_after: case op.pair
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X : TopCat
F : Presheaf (Type u) X
ι : Type x
U : ι → Opens ↑X
sf : (i : ι) → (forget (Type u)).obj (F.obj { unop := U i })
s : (forget (Type u)).obj (F.obj { unop := iSup U })
h : F.IsGluing U sf s
i j : ι
⊢ ((Functor.mapCone F (Pairwise.cocone U).op).π.app { unop := Pairwise.single i } ≫
        ((Pairwise.diagram U).op ⋙ F).map { unop := Pairwise.Hom.left i j })
      s =
    objPairwiseOfFamily sf { unop := Pairwise.pair i j }

tactic: exact congr_arg _ (h i)
state_before: case op.pair
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X : TopCat
F : Presheaf (Type u) X
ι : Type x
U : ι → Opens ↑X
sf : (i : ι) → (forget (Type u)).obj (F.obj { unop := U i })
s : (forget (Type u)).obj (F.obj { unop := iSup U })
h : F.IsGluing U sf s
i j : ι
⊢ ((Functor.mapCone F (Pairwise.cocone U).op).π.app { unop := Pairwise.single i } ≫
        ((Pairwise.diagram U).op ⋙ F).map { unop := Pairwise.Hom.left i j })
      s =
    objPairwiseOfFamily sf { unop := Pairwise.pair i j }
state_after: no goals