Documentation

Mathlib.Geometry.RingedSpace.PresheafedSpace.Gluing

Gluing Structured spaces #

Given a family of gluing data of structured spaces (presheafed spaces, sheafed spaces, or locally ringed spaces), we may glue them together.

The construction should be "sealed" and considered as a black box, while only using the API provided.

Main definitions #

Main results #

Analogous results are also provided for SheafedSpace and LocallyRingedSpace.

Implementation details #

Almost the whole file is dedicated to showing tht ι i is an open immersion. The fact that this is an open embedding of topological spaces follows from Mathlib/Topology/Gluing.lean, and it remains to construct Γ(𝒪_{U_i}, U) ⟶ Γ(𝒪_X, ι i '' U) for each U ⊆ U i. Since Γ(𝒪_X, ι i '' U) is the limit of diagram_over_open, the components of the structure sheafs of the spaces in the gluing diagram, we need to construct a map ιInvApp_π_app : Γ(𝒪_{U_i}, U) ⟶ Γ(𝒪_V, U_V) for each V in the gluing diagram.

We will refer to this diagram in the following doc strings. The X is the glued space, and the dotted arrow is a partial inverse guaranteed by the fact that it is an open immersion. The map Γ(𝒪_{U_i}, U) ⟶ Γ(𝒪_{U_j}, _) is given by the composition of the red arrows, and the map Γ(𝒪_{U_i}, U) ⟶ Γ(𝒪_{V_{jk}}, _) is given by the composition of the blue arrows. To lift this into a map from Γ(𝒪_X, ι i '' U), we also need to show that these commute with the maps in the diagram (the green arrows), which is just a lengthy diagram-chasing.

A family of gluing data consists of

  1. An index type J
  2. A presheafed space U i for each i : J.
  3. A presheafed space V i j for each i j : J. (Note that this is J × J → PresheafedSpace C rather than J → J → PresheafedSpace C to connect to the limits library easier.)
  4. An open immersion f i j : V i j ⟶ U i for each i j : ι.
  5. A transition map t i j : V i j ⟶ V j i for each i j : ι. such that
  6. f i i is an isomorphism.
  7. t i i is the identity.
  8. 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.
  9. t' i j k ≫ t' j k i ≫ t' k i j = 𝟙 _.

We can then glue the spaces U i together by identifying V i j with V j i, such that the U i's are open subspaces of the glued space.

Instances For
    @[reducible, inline]

    The glue data of topological spaces associated to a family of glue data of PresheafedSpaces.

    Equations
    Instances For
      theorem AlgebraicGeometry.PresheafedSpace.GlueData.pullback_base {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) (i : D.J) (j : D.J) (k : D.J) (S : Set (D.V (i, j))) :
      CategoryTheory.Limits.pullback.snd.base '' (CategoryTheory.Limits.pullback.fst.base ⁻¹' S) = (D.f i k).base ⁻¹' ((D.f i j).base '' S)
      theorem AlgebraicGeometry.PresheafedSpace.GlueData.f_invApp_f_app_assoc {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) (i : D.J) (j : D.J) (k : D.J) (U : TopologicalSpace.Opens (D.V (i, j))) {Z : C} (h : ((D.f i k).base _* (D.V (i, k)).presheaf).obj { unop := (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.opensFunctor (D.f i j)).obj U } Z) :
      CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (D.f i j) U) (CategoryTheory.CategoryStruct.comp ((D.f i k).c.app { unop := (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.opensFunctor (D.f i j)).obj U }) h) = CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.pullback.fst.c.app { unop := U }) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp CategoryTheory.Limits.pullback.snd ((TopologicalSpace.Opens.map CategoryTheory.Limits.pullback.fst.base).toPrefunctor.1 U)) (CategoryTheory.CategoryStruct.comp ((D.V (i, k)).presheaf.map (CategoryTheory.eqToHom )) h))
      @[simp]
      theorem AlgebraicGeometry.PresheafedSpace.GlueData.f_invApp_f_app {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) (i : D.J) (j : D.J) (k : D.J) (U : TopologicalSpace.Opens (D.V (i, j))) :
      CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (D.f i j) U) ((D.f i k).c.app { unop := (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.opensFunctor (D.f i j)).obj U }) = CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.pullback.fst.c.app { unop := U }) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp CategoryTheory.Limits.pullback.snd { unop := (TopologicalSpace.Opens.map CategoryTheory.Limits.pullback.fst.base).toPrefunctor.1 { unop := U }.unop }.unop) ((D.V (i, k)).presheaf.map (CategoryTheory.eqToHom )))

      The red and the blue arrows in this diagram commute.

      theorem AlgebraicGeometry.PresheafedSpace.GlueData.snd_invApp_t_app' {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) (i : D.J) (j : D.J) (k : D.J) (U : TopologicalSpace.Opens (CategoryTheory.Limits.pullback (D.f i j) (D.f i k))) :
      ∃ (eq : (TopologicalSpace.Opens.map (D.t k i).base).op.obj { unop := (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.opensFunctor CategoryTheory.Limits.pullback.snd).obj U } = { unop := (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.opensFunctor CategoryTheory.Limits.pullback.fst).obj { unop := { carrier := (D.t' k i j).base ⁻¹' { unop := U }.unop, is_open' := } }.unop }), CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp CategoryTheory.Limits.pullback.snd U) (CategoryTheory.CategoryStruct.comp ((D.t k i).c.app { unop := (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.opensFunctor CategoryTheory.Limits.pullback.snd).obj U }) ((D.V (k, i)).presheaf.map (CategoryTheory.eqToHom eq))) = CategoryTheory.CategoryStruct.comp ((D.t' k i j).c.app { unop := U }) (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp CategoryTheory.Limits.pullback.fst { unop := { carrier := (D.t' k i j).base ⁻¹' { unop := U }.unop, is_open' := } }.unop)

      We can prove the eq along with the lemma. Thus this is bundled together here, and the lemma itself is separated below.

      theorem AlgebraicGeometry.PresheafedSpace.GlueData.snd_invApp_t_app_assoc {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) (i : D.J) (j : D.J) (k : D.J) (U : TopologicalSpace.Opens (CategoryTheory.Limits.pullback (D.f i j) (D.f i k))) {Z : C} (h : ((D.t k i).base _* (D.V (k, i)).presheaf).obj { unop := (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.opensFunctor CategoryTheory.Limits.pullback.snd).obj U } Z) :
      CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp CategoryTheory.Limits.pullback.snd U) (CategoryTheory.CategoryStruct.comp ((D.t k i).c.app { unop := (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.opensFunctor CategoryTheory.Limits.pullback.snd).obj U }) h) = CategoryTheory.CategoryStruct.comp ((D.t' k i j).c.app { unop := U }) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp CategoryTheory.Limits.pullback.fst { carrier := (D.t' k i j).base ⁻¹' U, is_open' := }) (CategoryTheory.CategoryStruct.comp ((D.V (k, i)).presheaf.map (CategoryTheory.eqToHom )) h))
      @[simp]
      theorem AlgebraicGeometry.PresheafedSpace.GlueData.snd_invApp_t_app {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) (i : D.J) (j : D.J) (k : D.J) (U : TopologicalSpace.Opens (CategoryTheory.Limits.pullback (D.f i j) (D.f i k))) :
      CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp CategoryTheory.Limits.pullback.snd U) ((D.t k i).c.app { unop := (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.opensFunctor CategoryTheory.Limits.pullback.snd).obj U }) = CategoryTheory.CategoryStruct.comp ((D.t' k i j).c.app { unop := U }) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp CategoryTheory.Limits.pullback.fst { unop := { carrier := (D.t' k i j).base ⁻¹' { unop := U }.unop, is_open' := } }.unop) ((D.V (k, i)).presheaf.map (CategoryTheory.eqToHom )))

      The red and the blue arrows in this diagram commute.

      def AlgebraicGeometry.PresheafedSpace.GlueData.opensImagePreimageMap {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) [CategoryTheory.Limits.HasLimits C] (i : D.J) (j : D.J) (U : TopologicalSpace.Opens (D.U i)) :
      (D.U i).presheaf.obj { unop := U } (D.U j).presheaf.obj { unop := (TopologicalSpace.Opens.map (D j).base).obj (.functor.obj U) }

      (Implementation). The map Γ(𝒪_{U_i}, U) ⟶ Γ(𝒪_{U_j}, 𝖣.ι j ⁻¹' (𝖣.ι i '' U))

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        theorem AlgebraicGeometry.PresheafedSpace.GlueData.opensImagePreimageMap_app' {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) [CategoryTheory.Limits.HasLimits C] (i : D.J) (j : D.J) (k : D.J) (U : TopologicalSpace.Opens (D.U i)) :
        ∃ (eq : { unop := (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.opensFunctor CategoryTheory.Limits.pullback.snd).obj { unop := (TopologicalSpace.Opens.map (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.t j i) (D.f i j))).base).toPrefunctor.1 { unop := U }.unop }.unop } = (TopologicalSpace.Opens.map (D.f j k).base).op.obj { unop := (TopologicalSpace.Opens.map (D j).base).obj (.functor.obj U) }), CategoryTheory.CategoryStruct.comp (D.opensImagePreimageMap i j U) ((D.f j k).c.app { unop := (TopologicalSpace.Opens.map (D j).base).obj (.functor.obj U) }) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.t j i) (D.f i j))).c.app { unop := U }) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp CategoryTheory.Limits.pullback.snd { unop := (TopologicalSpace.Opens.map (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.t j i) (D.f i j))).base).toPrefunctor.1 { unop := U }.unop }.unop) ((D.V (j, k)).presheaf.map (CategoryTheory.eqToHom eq)))
        theorem AlgebraicGeometry.PresheafedSpace.GlueData.opensImagePreimageMap_app {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) [CategoryTheory.Limits.HasLimits C] (i : D.J) (j : D.J) (k : D.J) (U : TopologicalSpace.Opens (D.U i)) :
        CategoryTheory.CategoryStruct.comp (D.opensImagePreimageMap i j U) ((D.f j k).c.app { unop := (TopologicalSpace.Opens.map (D j).base).obj (.functor.obj U) }) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.t j i) (D.f i j))).c.app { unop := U }) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp CategoryTheory.Limits.pullback.snd { unop := (TopologicalSpace.Opens.map (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.t j i) (D.f i j))).base).toPrefunctor.1 { unop := U }.unop }.unop) ((D.V (j, k)).presheaf.map (CategoryTheory.eqToHom )))

        The red and the blue arrows in this diagram commute.

        theorem AlgebraicGeometry.PresheafedSpace.GlueData.opensImagePreimageMap_app_assoc {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) [CategoryTheory.Limits.HasLimits C] (i : D.J) (j : D.J) (k : D.J) (U : TopologicalSpace.Opens (D.U i)) {X' : C} (f' : ((D.f j k).base _* (D.V (j, k)).presheaf).obj { unop := (TopologicalSpace.Opens.map (D j).base).obj (.functor.obj U) } X') :
        CategoryTheory.CategoryStruct.comp (D.opensImagePreimageMap i j U) (CategoryTheory.CategoryStruct.comp ((D.f j k).c.app { unop := (TopologicalSpace.Opens.map (D j).base).obj (.functor.obj U) }) f') = CategoryTheory.CategoryStruct.comp ((CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.t j i) (D.f i j))).c.app { unop := U }) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp CategoryTheory.Limits.pullback.snd { unop := (TopologicalSpace.Opens.map (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.t j i) (D.f i j))).base).toPrefunctor.1 { unop := U }.unop }.unop) (CategoryTheory.CategoryStruct.comp ((D.V (j, k)).presheaf.map (CategoryTheory.eqToHom )) f'))
        @[reducible, inline]

        (Implementation) Given an open subset of one of the spaces U ⊆ Uᵢ, the sheaf component of the image ι '' U in the glued space is the limit of this diagram.

        Equations
        Instances For
          @[reducible, inline]

          (Implementation) The projection from the limit of diagram_over_open to a component of D.U j.

          Equations
          Instances For
            def AlgebraicGeometry.PresheafedSpace.GlueData.ιInvAppπApp {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) [CategoryTheory.Limits.HasLimits C] {i : D.J} (U : TopologicalSpace.Opens (D.U i)) (j : CategoryTheory.Limits.WalkingMultispan D.diagram.fstFrom D.diagram.sndFrom) :
            (D.U i).presheaf.obj { unop := U } (D.diagramOverOpen U).obj { unop := j }

            (Implementation) We construct the map Γ(𝒪_{U_i}, U) ⟶ Γ(𝒪_V, U_V) for each V in the gluing diagram. We will lift these maps into ιInvApp.

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

              (Implementation) The natural map Γ(𝒪_{U_i}, U) ⟶ Γ(𝒪_X, 𝖣.ι i '' U). This forms the inverse of (𝖣.ι i).c.app (op U).

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                theorem AlgebraicGeometry.PresheafedSpace.GlueData.ιInvApp_π {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) [CategoryTheory.Limits.HasLimits C] {i : D.J} (U : TopologicalSpace.Opens (D.U i)) :
                ∃ (eq : { unop := U } = { unop := (TopologicalSpace.Opens.map (CategoryTheory.Limits.colimit.ι D.diagram.multispan { unop := CategoryTheory.Limits.WalkingMultispan.right i }.unop).base).obj (.functor.obj U) }), CategoryTheory.CategoryStruct.comp (D.ιInvApp U) (D.diagramOverOpenπ U i) = (D.U i).presheaf.map (CategoryTheory.eqToHom eq)

                ιInvApp is the left inverse of D.ι i on U.

                @[reducible, inline]
                abbrev AlgebraicGeometry.PresheafedSpace.GlueData.ιInvAppπEqMap {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) [CategoryTheory.Limits.HasLimits C] {i : D.J} (U : TopologicalSpace.Opens (D.U i)) :
                (D.U i).presheaf.obj { unop := (TopologicalSpace.Opens.map (CategoryTheory.Limits.colimit.ι D.diagram.multispan { unop := CategoryTheory.Limits.WalkingMultispan.right i }.unop).base).obj (.functor.obj U) } (D.U i).presheaf.obj { unop := U }

                The eqToHom given by ιInvApp_π.

                Equations
                Instances For
                  theorem AlgebraicGeometry.PresheafedSpace.GlueData.π_ιInvApp_π {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.PresheafedSpace.GlueData C) [CategoryTheory.Limits.HasLimits C] (i : D.J) (j : D.J) (U : TopologicalSpace.Opens (D.U i)) :
                  CategoryTheory.CategoryStruct.comp (D.diagramOverOpenπ U i) (CategoryTheory.CategoryStruct.comp (D.ιInvAppπEqMap U) (CategoryTheory.CategoryStruct.comp (D.ιInvApp U) (D.diagramOverOpenπ U j))) = D.diagramOverOpenπ U j

                  ιInvApp is the right inverse of D.ι i on U.

                  The following diagram is a pullback, i.e. Vᵢⱼ is the intersection of Uᵢ and Uⱼ in X.

                  Vᵢⱼ ⟶ Uᵢ | | ↓ ↓ Uⱼ ⟶ X

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

                    A family of gluing data consists of

                    1. An index type J
                    2. A sheafed space U i for each i : J.
                    3. A sheafed space V i j for each i j : J. (Note that this is J × J → SheafedSpace C rather than J → J → SheafedSpace C to connect to the limits library easier.)
                    4. An open immersion f i j : V i j ⟶ U i for each i j : ι.
                    5. A transition map t i j : V i j ⟶ V j i for each i j : ι. such that
                    6. f i i is an isomorphism.
                    7. t i i is the identity.
                    8. 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.
                    9. t' i j k ≫ t' j k i ≫ t' k i j = 𝟙 _.

                    We can then glue the spaces U i together by identifying V i j with V j i, such that the U i's are open subspaces of the glued space.

                    Instances For
                      @[reducible, inline]

                      The glue data of presheafed spaces associated to a family of glue data of sheafed spaces.

                      Equations
                      • D.toPresheafedSpaceGlueData = { toGlueData := D.mapGlueData AlgebraicGeometry.SheafedSpace.forgetToPresheafedSpace, f_open := }
                      Instances For
                        @[reducible, inline]

                        The gluing as sheafed spaces is isomorphic to the gluing as presheafed spaces.

                        Equations
                        • D.isoPresheafedSpace = D.gluedIso AlgebraicGeometry.SheafedSpace.forgetToPresheafedSpace
                        Instances For
                          theorem AlgebraicGeometry.SheafedSpace.GlueData.ι_jointly_surjective {C : Type u} [CategoryTheory.Category.{v, u} C] (D : AlgebraicGeometry.SheafedSpace.GlueData C) [CategoryTheory.Limits.HasLimits C] (x : D.glued.toPresheafedSpace) :
                          ∃ (i : D.J) (y : (D.U i).toPresheafedSpace), (D i).base y = x

                          The following diagram is a pullback, i.e. Vᵢⱼ is the intersection of Uᵢ and Uⱼ in X.

                          Vᵢⱼ ⟶ Uᵢ | | ↓ ↓ Uⱼ ⟶ X

                          Equations
                          • D.vPullbackConeIsLimit i j = D.vPullbackConeIsLimitOfMap AlgebraicGeometry.SheafedSpace.forgetToPresheafedSpace i j (D.toPresheafedSpaceGlueData.vPullbackConeIsLimit i j)
                          Instances For

                            A family of gluing data consists of

                            1. An index type J
                            2. A locally ringed space U i for each i : J.
                            3. A locally ringed space V i j for each i j : J. (Note that this is J × J → LocallyRingedSpace rather than J → J → LocallyRingedSpace to connect to the limits library easier.)
                            4. An open immersion f i j : V i j ⟶ U i for each i j : ι.
                            5. A transition map t i j : V i j ⟶ V j i for each i j : ι. such that
                            6. f i i is an isomorphism.
                            7. t i i is the identity.
                            8. 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.
                            9. t' i j k ≫ t' j k i ≫ t' k i j = 𝟙 _.

                            We can then glue the spaces U i together by identifying V i j with V j i, such that the U i's are open subspaces of the glued space.

                            Instances For
                              @[reducible, inline]

                              The glue data of ringed spaces associated to a family of glue data of locally ringed spaces.

                              Equations
                              Instances For
                                @[reducible, inline]

                                The gluing as locally ringed spaces is isomorphic to the gluing as ringed spaces.

                                Equations
                                Instances For
                                  theorem AlgebraicGeometry.LocallyRingedSpace.GlueData.ι_jointly_surjective (D : AlgebraicGeometry.LocallyRingedSpace.GlueData) (x : D.glued.toTopCat) :
                                  ∃ (i : D.J) (y : (D.U i).toTopCat), (D i).val.base y = x

                                  The following diagram is a pullback, i.e. Vᵢⱼ is the intersection of Uᵢ and Uⱼ in X.

                                  Vᵢⱼ ⟶ Uᵢ | | ↓ ↓ Uⱼ ⟶ X

                                  Equations
                                  Instances For