Skip to content

Commit eb0a213

Browse files
committed
feat(AlgebraicGeometry/OpenImmersion): Affine open covers, and refinements of open covers by affine ones (#11947)
1 parent 3469775 commit eb0a213

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

Mathlib/AlgebraicGeometry/OpenImmersion.lean

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -826,6 +826,63 @@ def Scheme.openCoverOfSuprEqTop {s : Type*} (X : Scheme) (U : s → Opens X)
826826
exact (Opens.mem_iSup.mp this).choose_spec
827827
#align algebraic_geometry.Scheme.open_cover_of_supr_eq_top AlgebraicGeometry.Scheme.openCoverOfSuprEqTop
828828

829+
namespace Scheme
830+
831+
/--
832+
An affine open cover of `X` consists of a family of open immersions into `X` from
833+
spectra of rings.
834+
-/
835+
structure AffineOpenCover (X : Scheme.{u}) where
836+
/-- index set of an affine open cover of a scheme `X` -/
837+
J : Type v
838+
/-- the ring associated to a component of an affine open cover -/
839+
obj : J → CommRingCat.{u}
840+
/-- the embedding of subschemes to `X` -/
841+
map : ∀ j : J, Spec.obj (.op <| obj j) ⟶ X
842+
/-- given a point of `x : X`, `f x` is the index of the subscheme which contains `x` -/
843+
f : X.carrier → J
844+
/-- the subschemes covers `X` -/
845+
Covers : ∀ x, x ∈ Set.range (map (f x)).1.base
846+
/-- the embedding of subschemes are open immersions -/
847+
IsOpen : ∀ x, IsOpenImmersion (map x) := by infer_instance
848+
849+
namespace AffineOpenCover
850+
851+
attribute [instance] AffineOpenCover.IsOpen
852+
853+
/-- The open cover associated to an affine open cover. -/
854+
@[simps]
855+
def openCover {X : Scheme.{u}} (𝓤 : X.AffineOpenCover) : X.OpenCover where
856+
J := 𝓤.J
857+
map := 𝓤.map
858+
f := 𝓤.f
859+
Covers := 𝓤.Covers
860+
861+
end AffineOpenCover
862+
863+
/-- A choice of an affine open cover of a scheme. -/
864+
def affineOpenCover (X : Scheme.{u}) : X.AffineOpenCover where
865+
J := X.affineCover.J
866+
map := X.affineCover.map
867+
f := X.affineCover.f
868+
Covers := X.affineCover.Covers
869+
870+
@[simp]
871+
lemma openCover_affineOpenCover (X : Scheme.{u}) : X.affineOpenCover.openCover = X.affineCover :=
872+
rfl
873+
874+
/-- Given any open cover `𝓤`, this is an affine open cover which refines it.
875+
The morphism in the category of open covers which proves that this is indeed a refinement, see
876+
`AlgebraicGeometry.Scheme.OpenCover.fromAffineRefinement`.
877+
-/
878+
def OpenCover.affineRefinement {X : Scheme.{u}} (𝓤 : X.OpenCover) : X.AffineOpenCover where
879+
J := (𝓤.bind fun j => (𝓤.obj j).affineCover).J
880+
map := (𝓤.bind fun j => (𝓤.obj j).affineCover).map
881+
f := (𝓤.bind fun j => (𝓤.obj j).affineCover).f
882+
Covers := (𝓤.bind fun j => (𝓤.obj j).affineCover).Covers
883+
884+
end Scheme
885+
829886
section category
830887

831888
/--
@@ -880,4 +937,10 @@ lemma Scheme.OpenCover.comp_app {X : Scheme.{u}} {𝓤 𝓥 𝓦 : X.OpenCover}
880937

881938
end category
882939

940+
/-- Given any open cover `𝓤`, this is an affine open cover which refines it. -/
941+
def Scheme.OpenCover.fromAffineRefinement {X : Scheme.{u}} (𝓤 : X.OpenCover) :
942+
𝓤.affineRefinement.openCover ⟶ 𝓤 where
943+
idx j := j.fst
944+
app j := (𝓤.obj j.fst).affineCover.map _
945+
883946
end AlgebraicGeometry

0 commit comments

Comments
 (0)