Documentation

Mathlib.CategoryTheory.GlueData

Gluing data #

We define GlueData as a family of data needed to glue topological spaces, schemes, etc. We provide the API to realize it as a multispan diagram, and also state lemmas about its interaction with a functor that preserves certain pullbacks.

structure CategoryTheory.GlueData (C : Type u₁) [Category.{v, u₁} C] :
Type (max u₁ (v + 1))

A gluing datum consists of

  1. An index type J
  2. An object U i for each i : J.
  3. An object V i j for each i j : J.
  4. A monomorphism f i j : V i j ⟶ U i for each i j : J.
  5. A transition map t i j : V i j ⟶ V j i for each i j : J. such that
  6. f i i is an isomorphism.
  7. t i i is the identity.
  8. The pullback for f i j and f i k exists.
  9. V i j ×[U i] V i k ⟶ V i j ⟶ V j i factors through V j k ×[U j] V j i ⟶ V j i via some t' : V i j ×[U i] V i k ⟶ V j k ×[U j] V j i.
  10. t' i j k ≫ t' j k i ≫ t' k i j = 𝟙 _.
Instances For
    theorem CategoryTheory.GlueData.t_fac_assoc {C : Type u₁} [Category.{v, u₁} C] (self : GlueData C) (i j k : self.J) {Z : C} (h : self.V (j, i) Z) :
    CategoryStruct.comp (self.t' i j k) (CategoryStruct.comp (Limits.pullback.snd (self.f j k) (self.f j i)) h) = CategoryStruct.comp (Limits.pullback.fst (self.f i j) (self.f i k)) (CategoryStruct.comp (self.t i j) h)
    theorem CategoryTheory.GlueData.cocycle_assoc {C : Type u₁} [Category.{v, u₁} C] (self : GlueData C) (i j k : self.J) {Z : C} (h : Limits.pullback (self.f i j) (self.f i k) Z) :
    CategoryStruct.comp (self.t' i j k) (CategoryStruct.comp (self.t' j k i) (CategoryStruct.comp (self.t' k i j) h)) = h
    @[simp]
    theorem CategoryTheory.GlueData.t'_iij {C : Type u₁} [Category.{v, u₁} C] (D : GlueData C) (i j : D.J) :
    D.t' i i j = (Limits.pullbackSymmetry (D.f i i) (D.f i j)).hom
    theorem CategoryTheory.GlueData.t'_jii {C : Type u₁} [Category.{v, u₁} C] (D : GlueData C) (i j : D.J) :
    D.t' j i i = CategoryStruct.comp (Limits.pullback.fst (D.f j i) (D.f j i)) (CategoryStruct.comp (D.t j i) (inv (Limits.pullback.snd (D.f i i) (D.f i j))))
    theorem CategoryTheory.GlueData.t'_iji {C : Type u₁} [Category.{v, u₁} C] (D : GlueData C) (i j : D.J) :
    D.t' i j i = CategoryStruct.comp (Limits.pullback.fst (D.f i j) (D.f i i)) (CategoryStruct.comp (D.t i j) (inv (Limits.pullback.snd (D.f j i) (D.f j i))))
    @[simp]
    theorem CategoryTheory.GlueData.t_inv {C : Type u₁} [Category.{v, u₁} C] (D : GlueData C) (i j : D.J) :
    CategoryStruct.comp (D.t i j) (D.t j i) = CategoryStruct.id (D.V (i, j))
    theorem CategoryTheory.GlueData.t_inv_assoc {C : Type u₁} [Category.{v, u₁} C] (D : GlueData C) (i j : D.J) {Z : C} (h : D.V (i, j) Z) :
    @[simp]
    theorem CategoryTheory.GlueData.t_inv_apply {C : Type u₁} [Category.{v, u₁} C] (D : GlueData C) (i j : D.J) {F : CCType uF} {carrier : CType w} {instFunLike : (X Y : C) → FunLike (F X Y) (carrier X) (carrier Y)} [inst : ConcreteCategory C F] (x : ToType (D.V (i, j))) :
    (ConcreteCategory.hom (D.t j i)) ((ConcreteCategory.hom (D.t i j)) x) = x
    instance CategoryTheory.GlueData.t_isIso {C : Type u₁} [Category.{v, u₁} C] (D : GlueData C) (i j : D.J) :
    IsIso (D.t i j)
    instance CategoryTheory.GlueData.t'_isIso {C : Type u₁} [Category.{v, u₁} C] (D : GlueData C) (i j k : D.J) :
    IsIso (D.t' i j k)

    (Implementation) The disjoint union of U i.

    Equations
    Instances For

      (Implementation) The diagram to take colimit of.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        @[simp]
        theorem CategoryTheory.GlueData.diagram_fst {C : Type u₁} [Category.{v, u₁} C] (D : GlueData C) (i j : D.J) :
        D.diagram.fst (i, j) = D.f i j
        @[simp]
        theorem CategoryTheory.GlueData.diagram_snd {C : Type u₁} [Category.{v, u₁} C] (D : GlueData C) (i j : D.J) :
        D.diagram.snd (i, j) = CategoryStruct.comp (D.t i j) (D.f j i)

        The glued object given a family of gluing data.

        Equations
        Instances For

          The map D.U i ⟶ D.glued for each i.

          Equations
          Instances For
            @[simp]
            theorem CategoryTheory.GlueData.glue_condition_apply {C : Type u₁} [Category.{v, u₁} C] (D : GlueData C) [Limits.HasMulticoequalizer D.diagram] (i j : D.J) {F : CCType uF} {carrier : CType w} {instFunLike : (X Y : C) → FunLike (F X Y) (carrier X) (carrier Y)} [inst : ConcreteCategory C F] (x : ToType (D.V (i, j))) :

            The pullback cone spanned by V i j ⟶ U i and V i j ⟶ U j. This will often be a pullback diagram.

            Equations
            Instances For
              theorem CategoryTheory.GlueData.types_ι_jointly_surjective (D : GlueData (Type v)) (x : D.glued) :
              ∃ (i : D.J) (y : D.U i), D.ι i y = x
              instance CategoryTheory.GlueData.instHasPullbackMapF {C : Type u₁} [Category.{v, u₁} C] {C' : Type u₂} [Category.{v, u₂} C'] (D : GlueData C) (F : Functor C C') [∀ (i j k : D.J), Limits.PreservesLimit (Limits.cospan (D.f i j) (D.f i k)) F] (i j k : D.J) :
              Limits.HasPullback (F.map (D.f i j)) (F.map (D.f i k))
              def CategoryTheory.GlueData.mapGlueData {C : Type u₁} [Category.{v, u₁} C] {C' : Type u₂} [Category.{v, u₂} C'] (D : GlueData C) (F : Functor C C') [∀ (i j k : D.J), Limits.PreservesLimit (Limits.cospan (D.f i j) (D.f i k)) F] :

              A functor that preserves the pullbacks of f i j and f i k can map a family of glue data.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                @[simp]
                theorem CategoryTheory.GlueData.mapGlueData_V {C : Type u₁} [Category.{v, u₁} C] {C' : Type u₂} [Category.{v, u₂} C'] (D : GlueData C) (F : Functor C C') [∀ (i j k : D.J), Limits.PreservesLimit (Limits.cospan (D.f i j) (D.f i k)) F] (i : D.J × D.J) :
                (D.mapGlueData F).V i = F.obj (D.V i)
                @[simp]
                theorem CategoryTheory.GlueData.mapGlueData_U {C : Type u₁} [Category.{v, u₁} C] {C' : Type u₂} [Category.{v, u₂} C'] (D : GlueData C) (F : Functor C C') [∀ (i j k : D.J), Limits.PreservesLimit (Limits.cospan (D.f i j) (D.f i k)) F] (i : D.J) :
                (D.mapGlueData F).U i = F.obj (D.U i)
                @[simp]
                theorem CategoryTheory.GlueData.mapGlueData_t {C : Type u₁} [Category.{v, u₁} C] {C' : Type u₂} [Category.{v, u₂} C'] (D : GlueData C) (F : Functor C C') [∀ (i j k : D.J), Limits.PreservesLimit (Limits.cospan (D.f i j) (D.f i k)) F] (i j : D.J) :
                (D.mapGlueData F).t i j = F.map (D.t i j)
                @[simp]
                theorem CategoryTheory.GlueData.mapGlueData_t' {C : Type u₁} [Category.{v, u₁} C] {C' : Type u₂} [Category.{v, u₂} C'] (D : GlueData C) (F : Functor C C') [∀ (i j k : D.J), Limits.PreservesLimit (Limits.cospan (D.f i j) (D.f i k)) F] (i j k : D.J) :
                (D.mapGlueData F).t' i j k = CategoryStruct.comp (Limits.PreservesPullback.iso F (D.f i j) (D.f i k)).inv (CategoryStruct.comp (F.map (D.t' i j k)) (Limits.PreservesPullback.iso F (D.f j k) (D.f j i)).hom)
                @[simp]
                theorem CategoryTheory.GlueData.mapGlueData_f {C : Type u₁} [Category.{v, u₁} C] {C' : Type u₂} [Category.{v, u₂} C'] (D : GlueData C) (F : Functor C C') [∀ (i j k : D.J), Limits.PreservesLimit (Limits.cospan (D.f i j) (D.f i k)) F] (i j : D.J) :
                (D.mapGlueData F).f i j = F.map (D.f i j)
                @[simp]
                theorem CategoryTheory.GlueData.mapGlueData_J {C : Type u₁} [Category.{v, u₁} C] {C' : Type u₂} [Category.{v, u₂} C'] (D : GlueData C) (F : Functor C C') [∀ (i j k : D.J), Limits.PreservesLimit (Limits.cospan (D.f i j) (D.f i k)) F] :
                (D.mapGlueData F).J = D.J
                def CategoryTheory.GlueData.diagramIso {C : Type u₁} [Category.{v, u₁} C] {C' : Type u₂} [Category.{v, u₂} C'] (D : GlueData C) (F : Functor C C') [∀ (i j k : D.J), Limits.PreservesLimit (Limits.cospan (D.f i j) (D.f i k)) F] :

                The diagram of the image of a GlueData under a functor F is naturally isomorphic to the original diagram of the GlueData via F.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For

                  If F preserves the gluing, we obtain an iso between the glued objects.

                  Equations
                  Instances For

                    If F preserves the gluing, and reflects the pullback of U i ⟶ glued and U j ⟶ glued, then F reflects the fact that V_pullback_cone is a pullback.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      theorem CategoryTheory.GlueData.ι_jointly_surjective {C : Type u₁} [Category.{v, u₁} C] (D : GlueData C) [Limits.HasMulticoequalizer D.diagram] (F : Functor C (Type v)) [Limits.PreservesColimit D.diagram.multispan F] [∀ (i j k : D.J), Limits.PreservesLimit (Limits.cospan (D.f i j) (D.f i k)) F] (x : F.obj D.glued) :
                      ∃ (i : D.J) (y : F.obj (D.U i)), F.map (D.ι i) y = x

                      If there is a forgetful functor into Type that preserves enough (co)limits, then D.ι will be jointly surjective.

                      structure CategoryTheory.GlueData' (C : Type u₁) [Category.{v, u₁} C] :
                      Type (max u₁ (v + 1))

                      This is a variant of GlueData that only requires conditions on V (i, j) when i ≠ j. See GlueData.ofGlueData'

                      Instances For
                        @[simp]
                        theorem CategoryTheory.GlueData'.cocycle_assoc {C : Type u₁} [Category.{v, u₁} C] (self : GlueData' C) (i j k : self.J) (hij : i j) (hik : i k) (hjk : j k) {Z : C} (h : Limits.pullback (self.f i j hij) (self.f i k ) Z) :
                        CategoryStruct.comp (self.t' i j k hij hik hjk) (CategoryStruct.comp (self.t' j k i hjk ) (CategoryStruct.comp (self.t' k i j hij) h)) = h
                        @[simp]
                        theorem CategoryTheory.GlueData'.t_inv_assoc {C : Type u₁} [Category.{v, u₁} C] (self : GlueData' C) (i j : self.J) (hij : i j) {Z : C} (h : self.V i j Z) :
                        CategoryStruct.comp (self.t i j hij) (CategoryStruct.comp (self.t j i ) h) = h
                        @[reducible, inline]
                        abbrev CategoryTheory.GlueData'.f' {C : Type u₁} [Category.{v, u₁} C] (D : GlueData' C) (i j : D.J) :
                        (if h : i = j then D.U i else D.V i j h) D.U i

                        (Implementation detail) the constructed GlueData.f from a GlueData'.

                        Equations
                        Instances For
                          instance CategoryTheory.instMonoF' {C : Type u₁} [Category.{v, u₁} C] (D : GlueData' C) (i j : D.J) :
                          Mono (D.f' i j)
                          instance CategoryTheory.instIsIsoF' {C : Type u₁} [Category.{v, u₁} C] (D : GlueData' C) (i : D.J) :
                          IsIso (D.f' i i)
                          instance CategoryTheory.instHasPullbackF' {C : Type u₁} [Category.{v, u₁} C] (D : GlueData' C) (i j k : D.J) :
                          Limits.HasPullback (D.f' i j) (D.f' i k)
                          def CategoryTheory.GlueData'.t'' {C : Type u₁} [Category.{v, u₁} C] (D : GlueData' C) (i j k : D.J) :
                          Limits.pullback (D.f' i j) (D.f' i k) Limits.pullback (D.f' j k) (D.f' j i)

                          (Implementation detail) the constructed GlueData.t' from a GlueData'.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For

                            The constructed GlueData of a GlueData', where GlueData' is a variant of GlueData that only requires conditions on V (i, j) when i ≠ j.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For