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
    @[inline, reducible]

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

    Equations
    • One or more equations did not get rendered due to their size.
    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.toGlueData.V (i, j))) :
      CategoryTheory.Limits.pullback.snd.base '' (CategoryTheory.Limits.pullback.fst.base ⁻¹' S) = (D.toGlueData.f i k).base ⁻¹' ((D.toGlueData.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.toGlueData.V (i, j))) {Z : C} (h : ((D.toGlueData.f i k).base _* (D.toGlueData.V (i, k)).presheaf).toPrefunctor.obj (Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion (D.toGlueData.f i j))).toPrefunctor.obj U)) Z) :
      CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion (D.toGlueData.f i j)) U) (CategoryTheory.CategoryStruct.comp ((D.toGlueData.f i k).c.app (Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion (D.toGlueData.f i j))).toPrefunctor.obj U))) h) = CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.pullback.fst.c.app (Opposite.op U)) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd) { carrier := CategoryTheory.Limits.pullback.fst.base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen (CategoryTheory.Limits.pullback.fst.base ⁻¹' (Opposite.op U).unop)) }) (CategoryTheory.CategoryStruct.comp ((D.toGlueData.V (i, k)).presheaf.toPrefunctor.map (CategoryTheory.eqToHom (_ : Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd)).toPrefunctor.obj { unop := { carrier := CategoryTheory.Limits.pullback.fst.base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen (CategoryTheory.Limits.pullback.fst.base ⁻¹' (Opposite.op U).unop)) } }.unop) = (TopologicalSpace.Opens.map (D.toGlueData.f i k).base).op.toPrefunctor.obj (Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion (D.toGlueData.f i j))).toPrefunctor.obj U))))) 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.toGlueData.V (i, j))) :
      CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion (D.toGlueData.f i j)) U) ((D.toGlueData.f i k).c.app (Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion (D.toGlueData.f i j))).toPrefunctor.obj U))) = CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.pullback.fst.c.app (Opposite.op U)) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd) { unop := { carrier := CategoryTheory.Limits.pullback.fst.base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen (CategoryTheory.Limits.pullback.fst.base ⁻¹' (Opposite.op U).unop)) } }.unop) ((D.toGlueData.V (i, k)).presheaf.toPrefunctor.map (CategoryTheory.eqToHom (_ : Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd)).toPrefunctor.obj { unop := { carrier := CategoryTheory.Limits.pullback.fst.base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen (CategoryTheory.Limits.pullback.fst.base ⁻¹' (Opposite.op U).unop)) } }.unop) = (TopologicalSpace.Opens.map (D.toGlueData.f i k).base).op.toPrefunctor.obj (Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion (D.toGlueData.f i j))).toPrefunctor.obj U))))))

      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.toGlueData.f i j) (D.toGlueData.f i k))) :
      ∃ (eq : (TopologicalSpace.Opens.map (D.toGlueData.t k i).base).op.toPrefunctor.obj (Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd)).toPrefunctor.obj U)) = Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.fst)).toPrefunctor.obj { unop := { carrier := (D.toGlueData.t' k i j).base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen ((D.toGlueData.t' k i j).base ⁻¹' (Opposite.op U).unop)) } }.unop)), CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd) U) (CategoryTheory.CategoryStruct.comp ((D.toGlueData.t k i).c.app (Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd)).toPrefunctor.obj U))) ((D.toGlueData.V (k, i)).presheaf.toPrefunctor.map (CategoryTheory.eqToHom eq))) = CategoryTheory.CategoryStruct.comp ((D.toGlueData.t' k i j).c.app (Opposite.op U)) (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.fst) { unop := { carrier := (D.toGlueData.t' k i j).base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen ((D.toGlueData.t' k i j).base ⁻¹' (Opposite.op U).unop)) } }.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.toGlueData.f i j) (D.toGlueData.f i k))) {Z : C} (h : ((D.toGlueData.t k i).base _* (D.toGlueData.V (k, i)).presheaf).toPrefunctor.obj (Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd)).toPrefunctor.obj U)) Z) :
      CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd) U) (CategoryTheory.CategoryStruct.comp ((D.toGlueData.t k i).c.app (Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd)).toPrefunctor.obj U))) h) = CategoryTheory.CategoryStruct.comp ((D.toGlueData.t' k i j).c.app (Opposite.op U)) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.fst) { carrier := (D.toGlueData.t' k i j).base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen ((D.toGlueData.t' k i j).base ⁻¹' (Opposite.op U).unop)) }) (CategoryTheory.CategoryStruct.comp ((D.toGlueData.V (k, i)).presheaf.toPrefunctor.map (CategoryTheory.eqToHom (_ : Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.fst)).toPrefunctor.obj { unop := { carrier := (D.toGlueData.t' k i j).base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen ((D.toGlueData.t' k i j).base ⁻¹' (Opposite.op U).unop)) } }.unop) = (TopologicalSpace.Opens.map (D.toGlueData.t k i).base).op.toPrefunctor.obj (Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd)).toPrefunctor.obj U))))) 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.toGlueData.f i j) (D.toGlueData.f i k))) :
      CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd) U) ((D.toGlueData.t k i).c.app (Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd)).toPrefunctor.obj U))) = CategoryTheory.CategoryStruct.comp ((D.toGlueData.t' k i j).c.app (Opposite.op U)) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.fst) { unop := { carrier := (D.toGlueData.t' k i j).base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen ((D.toGlueData.t' k i j).base ⁻¹' (Opposite.op U).unop)) } }.unop) ((D.toGlueData.V (k, i)).presheaf.toPrefunctor.map (CategoryTheory.eqToHom (_ : Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.fst)).toPrefunctor.obj { unop := { carrier := (D.toGlueData.t' k i j).base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen ((D.toGlueData.t' k i j).base ⁻¹' (Opposite.op U).unop)) } }.unop) = (TopologicalSpace.Opens.map (D.toGlueData.t k i).base).op.toPrefunctor.obj (Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd)).toPrefunctor.obj U))))))

      The red and the blue arrows in this diagram commute.

      theorem AlgebraicGeometry.PresheafedSpace.GlueData.ι_image_preimage_eq {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.toGlueData.U i)) :
      (TopologicalSpace.Opens.map (CategoryTheory.GlueData.ι D.toGlueData j).base).toPrefunctor.obj ((IsOpenMap.functor (_ : IsOpenMap (CategoryTheory.GlueData.ι D.toGlueData i).base)).toPrefunctor.obj U) = (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion (D.toGlueData.f j i))).toPrefunctor.obj ((TopologicalSpace.Opens.map (D.toGlueData.t j i).base).toPrefunctor.obj ((TopologicalSpace.Opens.map (D.toGlueData.f i j).base).toPrefunctor.obj U))
      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.toGlueData.U i)) :
      (D.toGlueData.U i).presheaf.toPrefunctor.obj (Opposite.op U) (D.toGlueData.U j).presheaf.toPrefunctor.obj (Opposite.op ((TopologicalSpace.Opens.map (CategoryTheory.GlueData.ι D.toGlueData j).base).toPrefunctor.obj ((IsOpenMap.functor (_ : IsOpenMap (CategoryTheory.GlueData.ι D.toGlueData i).base)).toPrefunctor.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.toGlueData.U i)) :
        ∃ (eq : Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd)).toPrefunctor.obj { unop := { carrier := (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen ((CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).base ⁻¹' (Opposite.op U).unop)) } }.unop) = (TopologicalSpace.Opens.map (D.toGlueData.f j k).base).op.toPrefunctor.obj (Opposite.op ((TopologicalSpace.Opens.map (CategoryTheory.GlueData.ι D.toGlueData j).base).toPrefunctor.obj ((IsOpenMap.functor (_ : IsOpenMap (CategoryTheory.GlueData.ι D.toGlueData i).base)).toPrefunctor.obj U)))), CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.GlueData.opensImagePreimageMap D i j U) ((D.toGlueData.f j k).c.app (Opposite.op ((TopologicalSpace.Opens.map (CategoryTheory.GlueData.ι D.toGlueData j).base).toPrefunctor.obj ((IsOpenMap.functor (_ : IsOpenMap (CategoryTheory.GlueData.ι D.toGlueData i).base)).toPrefunctor.obj U)))) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).c.app (Opposite.op U)) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd) { unop := { carrier := (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen ((CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).base ⁻¹' (Opposite.op U).unop)) } }.unop) ((D.toGlueData.V (j, k)).presheaf.toPrefunctor.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.toGlueData.U i)) :
        CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.GlueData.opensImagePreimageMap D i j U) ((D.toGlueData.f j k).c.app (Opposite.op ((TopologicalSpace.Opens.map (CategoryTheory.GlueData.ι D.toGlueData j).base).toPrefunctor.obj ((IsOpenMap.functor (_ : IsOpenMap (CategoryTheory.GlueData.ι D.toGlueData i).base)).toPrefunctor.obj U)))) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).c.app (Opposite.op U)) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd) { unop := { carrier := (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen ((CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).base ⁻¹' (Opposite.op U).unop)) } }.unop) ((D.toGlueData.V (j, k)).presheaf.toPrefunctor.map (CategoryTheory.eqToHom (_ : Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd)).toPrefunctor.obj { unop := { carrier := (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen ((CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).base ⁻¹' (Opposite.op U).unop)) } }.unop) = (TopologicalSpace.Opens.map (D.toGlueData.f j k).base).op.toPrefunctor.obj (Opposite.op ((TopologicalSpace.Opens.map (CategoryTheory.GlueData.ι D.toGlueData j).base).toPrefunctor.obj ((IsOpenMap.functor (_ : IsOpenMap (CategoryTheory.GlueData.ι D.toGlueData i).base)).toPrefunctor.obj U)))))))

        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.toGlueData.U i)) {X' : C} (f' : ((D.toGlueData.f j k).base _* (D.toGlueData.V (j, k)).presheaf).toPrefunctor.obj (Opposite.op ((TopologicalSpace.Opens.map (CategoryTheory.GlueData.ι D.toGlueData j).base).toPrefunctor.obj ((IsOpenMap.functor (_ : IsOpenMap (CategoryTheory.GlueData.ι D.toGlueData i).base)).toPrefunctor.obj U))) X') :
        CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.GlueData.opensImagePreimageMap D i j U) (CategoryTheory.CategoryStruct.comp ((D.toGlueData.f j k).c.app (Opposite.op ((TopologicalSpace.Opens.map (CategoryTheory.GlueData.ι D.toGlueData j).base).toPrefunctor.obj ((IsOpenMap.functor (_ : IsOpenMap (CategoryTheory.GlueData.ι D.toGlueData i).base)).toPrefunctor.obj U)))) f') = CategoryTheory.CategoryStruct.comp ((CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).c.app (Opposite.op U)) (CategoryTheory.CategoryStruct.comp (AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.invApp (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd) { unop := { carrier := (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen ((CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).base ⁻¹' (Opposite.op U).unop)) } }.unop) (CategoryTheory.CategoryStruct.comp ((D.toGlueData.V (j, k)).presheaf.toPrefunctor.map (CategoryTheory.eqToHom (_ : Opposite.op ((AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.openFunctor (_ : AlgebraicGeometry.PresheafedSpace.IsOpenImmersion CategoryTheory.Limits.pullback.snd)).toPrefunctor.obj { unop := { carrier := (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).base ⁻¹' (Opposite.op U).unop, is_open' := (_ : IsOpen ((CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst (CategoryTheory.CategoryStruct.comp (D.toGlueData.t j i) (D.toGlueData.f i j))).base ⁻¹' (Opposite.op U).unop)) } }.unop) = (TopologicalSpace.Opens.map (D.toGlueData.f j k).base).op.toPrefunctor.obj (Opposite.op ((TopologicalSpace.Opens.map (CategoryTheory.GlueData.ι D.toGlueData j).base).toPrefunctor.obj ((IsOpenMap.functor (_ : IsOpenMap (CategoryTheory.GlueData.ι D.toGlueData i).base)).toPrefunctor.obj U)))))) f'))
        @[inline, reducible]

        (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
        • One or more equations did not get rendered due to their size.
        Instances For
          @[inline, reducible]

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

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

            (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
                @[inline, reducible]

                The eqToHom given by ιInvApp_π.

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

                  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
                      @[inline, reducible]

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

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        @[inline, reducible]

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

                        Equations
                        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 : (CategoryTheory.GlueData.glued D.toGlueData).toPresheafedSpace) :
                          ∃ (i : D.J) (y : (D.toGlueData.U i).toPresheafedSpace), (CategoryTheory.GlueData.ι D.toGlueData 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
                          • 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 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
                              @[inline, reducible]

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

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

                                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