Open immersions of schemes #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
A morphism of Schemes is an open immersion if it is an open immersion as a morphism of LocallyRingedSpaces
To show that a locally ringed space is a scheme, it suffices to show that it has a jointly surjective family of open immersions from affine schemes.
Equations
- J : Type ?
- obj : self.J → algebraic_geometry.Scheme
- map : Π (j : self.J), self.obj j ⟶ X
- f : ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier) → self.J
- covers : ∀ (x : ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)), x ∈ set.range ⇑((self.map (self.f x)).val.base)
- is_open : (∀ (x : self.J), algebraic_geometry.is_open_immersion (self.map x)) . "apply_instance"
An open cover of X
consists of a family of open immersions into X
,
and for each x : X
an open immersion (indexed by f x
) that covers x
.
This is merely a coverage in the Zariski pretopology, and it would be optimal
if we could reuse the existing API about pretopologies, However, the definitions of sieves and
grothendieck topologies uses Prop
s, so that the actual open sets and immersions are hard to
obtain. Also, since such a coverage in the pretopology usually contains a proper class of
immersions, it is quite hard to glue them, reason about finite covers, etc.
Instances for algebraic_geometry.Scheme.open_cover
- algebraic_geometry.Scheme.open_cover.has_sizeof_inst
- algebraic_geometry.Scheme.open_cover.inhabited
The affine cover of a scheme.
Equations
- X.affine_cover = {J := ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier), obj := λ (x : ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)), algebraic_geometry.Scheme.Spec.obj (opposite.op (Exists.some _)), map := λ (x : ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)), (nonempty.some _).inv ≫ X.to_LocallyRingedSpace.of_restrict _, f := λ (x : ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)), x, covers := _, is_open := _}
Equations
Given an open cover { Uᵢ }
of X
, and for each Uᵢ
an open cover, we may combine these
open covers to form an open cover of X
.
Equations
- 𝒰.bind f = {J := Σ (i : 𝒰.J), (f i).J, obj := λ (x : Σ (i : 𝒰.J), (f i).J), (f x.fst).obj x.snd, map := λ (x : Σ (i : 𝒰.J), (f i).J), (f x.fst).map x.snd ≫ 𝒰.map x.fst, f := λ (x : ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)), ⟨𝒰.f x, (f (𝒰.f x)).f (Exists.some _)⟩, covers := _, is_open := _}
An isomorphism X ⟶ Y
is an open cover of Y
.
Equations
- algebraic_geometry.Scheme.open_cover_of_is_iso f = {J := punit, obj := λ (_x : punit), X, map := λ (_x : punit), f, f := λ (_x : ↥(Y.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)), punit.star, covers := _, is_open := _}
We construct an open cover from another, by providing the needed fields and showing that the provided fields are isomorphic with the original open cover.
The pushforward of an open cover along an isomorphism.
Equations
- 𝒰.pushforward_iso f = ((algebraic_geometry.Scheme.open_cover_of_is_iso f).bind (λ (_x : (algebraic_geometry.Scheme.open_cover_of_is_iso f).J), 𝒰)).copy 𝒰.J (λ (_x : 𝒰.J), ((algebraic_geometry.Scheme.open_cover_of_is_iso f).bind (λ (_x : (algebraic_geometry.Scheme.open_cover_of_is_iso f).J), 𝒰)).obj (⇑((equiv.punit_prod 𝒰.J).symm.trans (equiv.sigma_equiv_prod punit 𝒰.J).symm) _x)) (λ (_x : 𝒰.J), ((algebraic_geometry.Scheme.open_cover_of_is_iso f).bind (λ (_x : (algebraic_geometry.Scheme.open_cover_of_is_iso f).J), 𝒰)).map (⇑((equiv.punit_prod 𝒰.J).symm.trans (equiv.sigma_equiv_prod punit 𝒰.J).symm) _x)) ((equiv.punit_prod 𝒰.J).symm.trans (equiv.sigma_equiv_prod punit 𝒰.J).symm) (λ (_x : 𝒰.J), category_theory.iso.refl (((algebraic_geometry.Scheme.open_cover_of_is_iso f).bind (λ (_x : (algebraic_geometry.Scheme.open_cover_of_is_iso f).J), 𝒰)).obj (⇑((equiv.punit_prod 𝒰.J).symm.trans (equiv.sigma_equiv_prod punit 𝒰.J).symm) _x))) _
Adding an open immersion into an open cover gives another open cover.
The basic open sets form an affine open cover of Spec R
.
Equations
- algebraic_geometry.Scheme.affine_basis_cover_of_affine R = {J := ↥R, obj := λ (r : ↥R), algebraic_geometry.Scheme.Spec.obj (opposite.op (CommRing.of (localization.away r))), map := λ (r : ↥R), algebraic_geometry.Scheme.Spec.map (quiver.hom.op (algebra_map ↥R (localization.away r))), f := λ (x : ↥((algebraic_geometry.Scheme.Spec.obj (opposite.op R)).to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)), 1, covers := _, is_open := _}
We may bind the basic open sets of an open affine cover to form a affine cover that is also a basis.
Equations
The coordinate ring of a component in the affine_basis_cover
.
Equations
Every open cover of a quasi-compact scheme can be refined into a finite subcover.
Equations
- 𝒰.finite_subcover = let t : finset ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier) := _.some in {J := ↥t, obj := λ (x : ↥t), 𝒰.obj (𝒰.f x.val), map := λ (x : ↥t), 𝒰.map (𝒰.f x.val), f := λ (x : ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)), Exists.some _, covers := _, is_open := _}
Equations
If X ⟶ Y
is an open immersion, and Y
is a scheme, then so is X
.
If X ⟶ Y
is an open immersion of PresheafedSpaces, and Y
is a Scheme, we can
upgrade it into a morphism of Schemes.
The restriction of a Scheme along an open embedding.
Equations
- X.restrict h = {to_LocallyRingedSpace := {to_SheafedSpace := {to_PresheafedSpace := X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.restrict h, is_sheaf := _}, local_ring := _}, local_affine := _}
Instances for algebraic_geometry.Scheme.restrict
The canonical map from the restriction to the supspace.
Equations
- X.of_restrict h = X.to_LocallyRingedSpace.of_restrict h
A open immersion induces an isomorphism from the domain onto the image
Equations
- algebraic_geometry.is_open_immersion.forget_creates_pullback_of_left f g = category_theory.creates_limit_of_fully_faithful_of_iso (algebraic_geometry.PresheafedSpace.is_open_immersion.to_Scheme Y category_theory.limits.pullback.snd.val) (category_theory.eq_to_iso _ ≪≫ category_theory.limits.has_limit.iso_of_nat_iso (category_theory.limits.diagram_iso_cospan (category_theory.limits.cospan f g ⋙ algebraic_geometry.Scheme.forget_to_LocallyRingedSpace)).symm)
Equations
- algebraic_geometry.is_open_immersion.forget_creates_pullback_of_right f g = category_theory.creates_limit_of_fully_faithful_of_iso (algebraic_geometry.PresheafedSpace.is_open_immersion.to_Scheme Y category_theory.limits.pullback.fst.val) (category_theory.eq_to_iso _ ≪≫ category_theory.limits.has_limit.iso_of_nat_iso (category_theory.limits.diagram_iso_cospan (category_theory.limits.cospan g f ⋙ algebraic_geometry.Scheme.forget_to_LocallyRingedSpace)).symm)
The universal property of open immersions:
For an open immersion f : X ⟶ Z
, given any morphism of schemes g : Y ⟶ Z
whose topological
image is contained in the image of f
, we can lift this morphism to a unique Y ⟶ X
that
commutes with these maps.
Equations
Two open immersions with equal range are isomorphic.
Equations
- algebraic_geometry.is_open_immersion.iso_of_range_eq f g e = {hom := algebraic_geometry.is_open_immersion.lift g f _, inv := algebraic_geometry.is_open_immersion.lift f g _, hom_inv_id' := _, inv_hom_id' := _}
The functor opens X ⥤ opens Y
associated with an open immersion f : X ⟶ Y
.
The isomorphism Γ(X, U) ⟶ Γ(Y, f(U))
induced by an open immersion f : X ⟶ Y
.
The fg
argument is to avoid nasty stuff about dependent types.
The image of an open immersion as an open set.
The functor taking open subsets of X
to open subschemes of X
.
Equations
- X.restrict_functor = {obj := λ (U : topological_space.opens ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)), category_theory.over.mk (X.of_restrict _), map := λ (U V : topological_space.opens ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)) (i : U ⟶ V), category_theory.over.hom_mk (algebraic_geometry.is_open_immersion.lift (X.of_restrict _) (X.of_restrict _) _) _, map_id' := _, map_comp' := _}
The functor that restricts to open subschemes and then takes global section is isomorphic to the structure sheaf.
Equations
- X.restrict_functor_Γ = category_theory.nat_iso.of_components (λ (U : (topological_space.opens ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier))ᵒᵖ), category_theory.functor.map_iso X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.presheaf (category_theory.eq_to_iso _).symm.op) _
The restriction of an isomorphism onto an open set.
Given an open cover on X
, we may pull them back along a morphism W ⟶ X
to obtain
an open cover of W
.
Equations
- 𝒰.pullback_cover f = {J := 𝒰.J, obj := λ (x : 𝒰.J), category_theory.limits.pullback f (𝒰.map x), map := λ (x : 𝒰.J), category_theory.limits.pullback.fst, f := λ (x : ↥(W.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)), 𝒰.f (⇑(f.val.base) x), covers := _, is_open := _}
Given open covers { Uᵢ }
and { Uⱼ }
, we may form the open cover { Uᵢ ∩ Uⱼ }
.
Equations
- 𝒰₁.inter 𝒰₂ = {J := 𝒰₁.J × 𝒰₂.J, obj := λ (ij : 𝒰₁.J × 𝒰₂.J), category_theory.limits.pullback (𝒰₁.map ij.fst) (𝒰₂.map ij.snd), map := λ (ij : 𝒰₁.J × 𝒰₂.J), category_theory.limits.pullback.fst ≫ 𝒰₁.map ij.fst, f := λ (x : ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)), (𝒰₁.f x, 𝒰₂.f x), covers := _, is_open := _}
If U
is a family of open sets that covers X
, then X.restrict U
forms an X.open_cover
.
Equations
- X.open_cover_of_supr_eq_top U hU = {J := s, obj := λ (i : s), X.restrict _, map := λ (i : s), X.of_restrict _, f := λ (x : ↥(X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier)), _.some, covers := _, is_open := _}
Given a morphism f : X ⟶ Y
and an open set U ⊆ Y
, we have X ×[Y] U ≅ X |_{f ⁻¹ U}
The restriction of a morphism X ⟶ Y
onto X |_{f ⁻¹ U} ⟶ Y |_ U
.
Equations
Instances for algebraic_geometry.morphism_restrict
Restricting a morphism onto the the image of an open immersion is isomorphic to the base change along the immersion.
Equations
- algebraic_geometry.morphism_restrict_opens_range f g = let V : topological_space.opens ↥(Y.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.carrier) := algebraic_geometry.Scheme.hom.opens_range g, e : U ≅ Y.restrict _ := algebraic_geometry.is_open_immersion.iso_of_range_eq g (Y.of_restrict _) _, t : category_theory.limits.pullback f g ⟶ category_theory.limits.pullback f (Y.of_restrict _) := category_theory.limits.pullback.map f g f (Y.of_restrict _) (𝟙 X) e.hom (𝟙 Y) _ _ in (category_theory.arrow.iso_mk (category_theory.as_iso t ≪≫ algebraic_geometry.pullback_restrict_iso_restrict f V) e _).symm
The restrictions onto two equal open sets are isomorphic. This currently has bad defeqs when unfolded, but it should not matter for now. Replace this definition if better defeqs are needed.
Equations
Restricting a morphism twice is isomorpic to one restriction.
Equations
- algebraic_geometry.morphism_restrict_restrict f U V = category_theory.arrow.iso_mk' (f ∣_ U ∣_ V) category_theory.limits.pullback.snd (category_theory.as_iso ((algebraic_geometry.pullback_restrict_iso_restrict (f ∣_ U) V).inv ≫ (category_theory.limits.pullback_symmetry (f ∣_ U) ((Y.restrict _).of_restrict _)).hom ≫ category_theory.limits.pullback.map ((Y.restrict _).of_restrict _) (f ∣_ U) ((Y.restrict _).of_restrict _) category_theory.limits.pullback.fst (𝟙 ((Y.restrict _).restrict _)) ((algebraic_geometry.pullback_restrict_iso_restrict f U).inv ≫ (category_theory.limits.pullback_symmetry f (Y.of_restrict _)).hom) (𝟙 (Y.restrict _)) _ _ ≫ (category_theory.limits.pullback_right_pullback_fst_iso (Y.of_restrict _) f ((Y.restrict _).of_restrict _)).hom ≫ (category_theory.limits.pullback_symmetry ((Y.restrict _).of_restrict _ ≫ Y.of_restrict _) f).hom)) (category_theory.iso.refl ((Y.restrict _).restrict _)) _ ≪≫ (algebraic_geometry.morphism_restrict_opens_range f ((Y.restrict _).of_restrict _ ≫ Y.of_restrict _)).symm ≪≫ algebraic_geometry.morphism_restrict_eq f _
Restricting a morphism twice onto a basic open set is isomorphic to one restriction.
Equations
- algebraic_geometry.morphism_restrict_restrict_basic_open f U r = algebraic_geometry.morphism_restrict_restrict f U ((Y.restrict _).basic_open (⇑(Y.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.presheaf.map (category_theory.eq_to_hom _).op) r)) ≪≫ algebraic_geometry.morphism_restrict_eq f _
The stalk map of a restriction of a morphism is isomorphic to the stalk map of the original map.
Equations
- algebraic_geometry.morphism_restrict_stalk_map f U x = category_theory.arrow.iso_mk' (algebraic_geometry.PresheafedSpace.stalk_map (f ∣_ U).val x) (algebraic_geometry.PresheafedSpace.stalk_map f.val x.val) (Y.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.restrict_stalk_iso _ (⇑((f ∣_ U).val) x) ≪≫ Y.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.presheaf.stalk_congr _) (X.to_LocallyRingedSpace.to_SheafedSpace.to_PresheafedSpace.restrict_stalk_iso _ x) _