From 958113e4901c856933a2bb7391cbf285408a17da Mon Sep 17 00:00:00 2001 From: Matthew Ballard Date: Tue, 7 May 2024 15:29:28 -0400 Subject: [PATCH 1/3] add universe annotation --- Mathlib/AlgebraicGeometry/AffineScheme.lean | 2 + Mathlib/AlgebraicGeometry/FunctionField.lean | 2 + .../GammaSpecAdjunction.lean | 2 + .../Morphisms/RingHomProperties.lean | 6 +- Mathlib/AlgebraicGeometry/OpenImmersion.lean | 86 ++++++++++--------- Mathlib/AlgebraicGeometry/Properties.lean | 4 +- Mathlib/AlgebraicGeometry/Restrict.lean | 74 ++++++++-------- Mathlib/AlgebraicGeometry/Scheme.lean | 5 ++ Mathlib/AlgebraicGeometry/Spec.lean | 3 + .../RingedSpace/LocallyRingedSpace.lean | 70 ++++++++------- 10 files changed, 140 insertions(+), 114 deletions(-) diff --git a/Mathlib/AlgebraicGeometry/AffineScheme.lean b/Mathlib/AlgebraicGeometry/AffineScheme.lean index 41a0a48d36758..07c578db76020 100644 --- a/Mathlib/AlgebraicGeometry/AffineScheme.lean +++ b/Mathlib/AlgebraicGeometry/AffineScheme.lean @@ -32,6 +32,8 @@ We also define predicates about affine schemes and affine open sets. -/ +-- Explicit universe annotations were used in this file to improve perfomance #12737 + set_option linter.uppercaseLean3 false noncomputable section diff --git a/Mathlib/AlgebraicGeometry/FunctionField.lean b/Mathlib/AlgebraicGeometry/FunctionField.lean index fe71ea653ff30..6a2b7d31d81d7 100644 --- a/Mathlib/AlgebraicGeometry/FunctionField.lean +++ b/Mathlib/AlgebraicGeometry/FunctionField.lean @@ -19,6 +19,8 @@ This is a field when the scheme is integral. field. This map is injective. -/ +-- Explicit universe annotations were used in this file to improve perfomance #12737 + set_option linter.uppercaseLean3 false universe u v diff --git a/Mathlib/AlgebraicGeometry/GammaSpecAdjunction.lean b/Mathlib/AlgebraicGeometry/GammaSpecAdjunction.lean index ce9ac08db3925..23558e2471aa4 100644 --- a/Mathlib/AlgebraicGeometry/GammaSpecAdjunction.lean +++ b/Mathlib/AlgebraicGeometry/GammaSpecAdjunction.lean @@ -32,6 +32,8 @@ case the unit and the counit would switch to each other. -/ +-- Explicit universe annotations were used in this file to improve perfomance #12737 + set_option linter.uppercaseLean3 false noncomputable section diff --git a/Mathlib/AlgebraicGeometry/Morphisms/RingHomProperties.lean b/Mathlib/AlgebraicGeometry/Morphisms/RingHomProperties.lean index 18e434329b42b..6b5eb8f6e83fd 100644 --- a/Mathlib/AlgebraicGeometry/Morphisms/RingHomProperties.lean +++ b/Mathlib/AlgebraicGeometry/Morphisms/RingHomProperties.lean @@ -34,6 +34,8 @@ Further more, these properties are stable under compositions (resp. base change) -/ +-- Explicit universe annotations were used in this file to improve perfomance #12737 + universe u open CategoryTheory Opposite TopologicalSpace CategoryTheory.Limits AlgebraicGeometry @@ -68,7 +70,7 @@ theorem RespectsIso.basicOpen_iff (hP : RespectsIso @P) {X Y : Scheme.{u}} [IsAf congr 1 #align ring_hom.respects_iso.basic_open_iff RingHom.RespectsIso.basicOpen_iff -theorem RespectsIso.basicOpen_iff_localization (hP : RespectsIso @P) {X Y : Scheme} [IsAffine X] +theorem RespectsIso.basicOpen_iff_localization (hP : RespectsIso @P) {X Y : Scheme.{u}} [IsAffine X] [IsAffine Y] (f : X ⟶ Y) (r : Y.presheaf.obj (Opposite.op ⊤)) : P (Scheme.Γ.map (f ∣_ Y.basicOpen r).op) ↔ P (Localization.awayMap (Scheme.Γ.map f.op) r) := by refine (hP.basicOpen_iff _ _).trans ?_ @@ -134,7 +136,7 @@ def sourceAffineLocally : AffineTargetMorphismProperty := fun X _ f _ => /-- For `P` a property of ring homomorphisms, `affineLocally P` holds for `f : X ⟶ Y` if for each affine open `U = Spec A ⊆ Y` and `V = Spec B ⊆ f ⁻¹' U`, the ring hom `A ⟶ B` satisfies `P`. Also see `affineLocally_iff_affineOpens_le`. -/ -abbrev affineLocally : MorphismProperty Scheme := +abbrev affineLocally : MorphismProperty Scheme.{u} := targetAffineLocally (sourceAffineLocally @P) #align algebraic_geometry.affine_locally AlgebraicGeometry.affineLocally diff --git a/Mathlib/AlgebraicGeometry/OpenImmersion.lean b/Mathlib/AlgebraicGeometry/OpenImmersion.lean index b8ad8ecb9f967..3b3b601890457 100644 --- a/Mathlib/AlgebraicGeometry/OpenImmersion.lean +++ b/Mathlib/AlgebraicGeometry/OpenImmersion.lean @@ -14,6 +14,8 @@ import Mathlib.CategoryTheory.Limits.Shapes.CommSq -/ +-- Explicit universe annotations were used in this file to improve perfomance #12737 + set_option linter.uppercaseLean3 false noncomputable section @@ -31,11 +33,11 @@ variable {C : Type u} [Category.{v} C] /-- A morphism of Schemes is an open immersion if it is an open immersion as a morphism of LocallyRingedSpaces -/ -abbrev IsOpenImmersion {X Y : Scheme} (f : X ⟶ Y) : Prop := +abbrev IsOpenImmersion {X Y : Scheme.{u}} (f : X ⟶ Y) : Prop := LocallyRingedSpace.IsOpenImmersion f #align algebraic_geometry.IsOpenImmersion AlgebraicGeometry.IsOpenImmersion -instance IsOpenImmersion.comp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) +instance IsOpenImmersion.comp {X Y Z : Scheme.{u}} (f : X ⟶ Y) (g : Y ⟶ Z) [IsOpenImmersion f] [IsOpenImmersion g] : IsOpenImmersion (f ≫ g) := LocallyRingedSpace.IsOpenImmersion.comp f g @@ -43,7 +45,7 @@ namespace LocallyRingedSpace.IsOpenImmersion /-- 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. -/ -protected def scheme (X : LocallyRingedSpace) +protected def scheme (X : LocallyRingedSpace.{u}) (h : ∀ x : X, ∃ (R : CommRingCat) (f : Spec.toLocallyRingedSpace.obj (op R) ⟶ X), @@ -63,7 +65,7 @@ protected def scheme (X : LocallyRingedSpace) end LocallyRingedSpace.IsOpenImmersion -theorem IsOpenImmersion.isOpen_range {X Y : Scheme} (f : X ⟶ Y) [H : IsOpenImmersion f] : +theorem IsOpenImmersion.isOpen_range {X Y : Scheme.{u}} (f : X ⟶ Y) [H : IsOpenImmersion f] : IsOpen (Set.range f.1.base) := H.base_open.isOpen_range #align algebraic_geometry.IsOpenImmersion.open_range AlgebraicGeometry.IsOpenImmersion.isOpen_range @@ -105,7 +107,7 @@ variable {X Y Z : Scheme.{u}} (𝒰 : OpenCover X) (f : X ⟶ Z) (g : Y ⟶ Z) variable [∀ x, HasPullback (𝒰.map x ≫ f) g] /-- The affine cover of a scheme. -/ -def affineCover (X : Scheme) : OpenCover X where +def affineCover (X : Scheme.{u}) : OpenCover X where J := X.carrier obj x := Spec.obj <| Opposite.op (X.local_affine x).choose_spec.choose map x := @@ -166,7 +168,7 @@ def openCoverOfIsIso {X Y : Scheme.{u}} (f : X ⟶ Y) [IsIso f] : OpenCover Y wh /-- 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. -/ @[simps J obj map] -def OpenCover.copy {X : Scheme} (𝒰 : OpenCover X) (J : Type*) (obj : J → Scheme) +def OpenCover.copy {X : Scheme.{u}} (𝒰 : OpenCover X) (J : Type*) (obj : J → Scheme) (map : ∀ i, obj i ⟶ X) (e₁ : J ≃ 𝒰.J) (e₂ : ∀ i, obj i ≅ 𝒰.obj (e₁ i)) (e₂ : ∀ i, map i = (e₂ i).hom ≫ 𝒰.map (e₁ i)) : OpenCover X := { J, obj, map @@ -193,7 +195,7 @@ def OpenCover.pushforwardIso {X Y : Scheme.{u}} (𝒰 : OpenCover.{v} X) (f : X /-- Adding an open immersion into an open cover gives another open cover. -/ @[simps] -def OpenCover.add {X : Scheme} (𝒰 : X.OpenCover) {Y : Scheme} (f : Y ⟶ X) [IsOpenImmersion f] : +def OpenCover.add {X Y : Scheme.{u}} (𝒰 : X.OpenCover) (f : Y ⟶ X) [IsOpenImmersion f] : X.OpenCover where J := Option 𝒰.J obj i := Option.rec Y 𝒰.obj i @@ -208,11 +210,11 @@ def OpenCover.add {X : Scheme} (𝒰 : X.OpenCover) {Y : Scheme} (f : Y ⟶ X) [ -- about open immersion (which in turn needs the open cover API). -- attribute [local reducible] CommRingCat.of CommRingCat.ofHom -instance val_base_isIso {X Y : Scheme} (f : X ⟶ Y) [IsIso f] : IsIso f.1.base := +instance val_base_isIso {X Y : Scheme.{u}} (f : X ⟶ Y) [IsIso f] : IsIso f.1.base := Scheme.forgetToTop.map_isIso f #align algebraic_geometry.Scheme.val_base_is_iso AlgebraicGeometry.Scheme.val_base_isIso -instance basic_open_isOpenImmersion {R : CommRingCat} (f : R) : +instance basic_open_isOpenImmersion {R : CommRingCat.{u}} (f : R) : AlgebraicGeometry.IsOpenImmersion (Scheme.Spec.map (CommRingCat.ofHom (algebraMap R (Localization.Away f))).op) := by apply SheafedSpace.IsOpenImmersion.of_stalk_iso (H := ?_) @@ -222,7 +224,7 @@ instance basic_open_isOpenImmersion {R : CommRingCat} (f : R) : #align algebraic_geometry.Scheme.basic_open_IsOpenImmersion AlgebraicGeometry.Scheme.basic_open_isOpenImmersion /-- The basic open sets form an affine open cover of `Spec R`. -/ -def affineBasisCoverOfAffine (R : CommRingCat) : OpenCover (Spec.obj (Opposite.op R)) where +def affineBasisCoverOfAffine (R : CommRingCat.{u}) : OpenCover (Spec.obj (Opposite.op R)) where J := R obj r := Spec.obj (Opposite.op <| CommRingCat.of <| Localization.Away r) map r := Spec.map (Quiver.Hom.op (algebraMap R (Localization.Away r) : _)) @@ -239,21 +241,21 @@ def affineBasisCoverOfAffine (R : CommRingCat) : OpenCover (Spec.obj (Opposite.o /-- We may bind the basic open sets of an open affine cover to form an affine cover that is also a basis. -/ -def affineBasisCover (X : Scheme) : OpenCover X := +def affineBasisCover (X : Scheme.{u}) : OpenCover X := X.affineCover.bind fun _ => affineBasisCoverOfAffine _ #align algebraic_geometry.Scheme.affine_basis_cover AlgebraicGeometry.Scheme.affineBasisCover /-- The coordinate ring of a component in the `affine_basis_cover`. -/ -def affineBasisCoverRing (X : Scheme) (i : X.affineBasisCover.J) : CommRingCat := +def affineBasisCoverRing (X : Scheme.{u}) (i : X.affineBasisCover.J) : CommRingCat := CommRingCat.of <| @Localization.Away (X.local_affine i.1).choose_spec.choose _ i.2 #align algebraic_geometry.Scheme.affine_basis_cover_ring AlgebraicGeometry.Scheme.affineBasisCoverRing -theorem affineBasisCover_obj (X : Scheme) (i : X.affineBasisCover.J) : +theorem affineBasisCover_obj (X : Scheme.{u}) (i : X.affineBasisCover.J) : X.affineBasisCover.obj i = Spec.obj (op <| X.affineBasisCoverRing i) := rfl #align algebraic_geometry.Scheme.affine_basis_cover_obj AlgebraicGeometry.Scheme.affineBasisCover_obj -theorem affineBasisCover_map_range (X : Scheme) (x : X) +theorem affineBasisCover_map_range (X : Scheme.{u}) (x : X) (r : (X.local_affine x).choose_spec.choose) : Set.range (X.affineBasisCover.map ⟨x, r⟩).1.base = (X.affineCover.map x).1.base '' (PrimeSpectrum.basicOpen r).1 := by @@ -263,7 +265,7 @@ theorem affineBasisCover_map_range (X : Scheme) (x : X) exact (PrimeSpectrum.localization_away_comap_range (Localization.Away r) r : _) #align algebraic_geometry.Scheme.affine_basis_cover_map_range AlgebraicGeometry.Scheme.affineBasisCover_map_range -theorem affineBasisCover_is_basis (X : Scheme) : +theorem affineBasisCover_is_basis (X : Scheme.{u}) : TopologicalSpace.IsTopologicalBasis {x : Set X | ∃ a : X.affineBasisCover.J, x = Set.range (X.affineBasisCover.map a).1.base} := by @@ -286,7 +288,7 @@ theorem affineBasisCover_is_basis (X : Scheme) : /-- Every open cover of a quasi-compact scheme can be refined into a finite subcover. -/ @[simps! obj map] -def OpenCover.finiteSubcover {X : Scheme} (𝒰 : OpenCover X) [H : CompactSpace X] : +def OpenCover.finiteSubcover {X : Scheme.{u}} (𝒰 : OpenCover X) [H : CompactSpace X] : OpenCover X := by have := @CompactSpace.elim_nhds_subcover _ _ H (fun x : X => Set.range (𝒰.map (𝒰.f x)).1.base) @@ -356,12 +358,12 @@ instance toSchemeHom_isOpenImmersion : AlgebraicGeometry.IsOpenImmersion (toSche H #align algebraic_geometry.PresheafedSpace.IsOpenImmersion.to_Scheme_hom_IsOpenImmersion AlgebraicGeometry.PresheafedSpace.IsOpenImmersionₓ.toSchemeHom_isOpenImmersionₓ -theorem scheme_eq_of_locallyRingedSpace_eq {X Y : Scheme} +theorem scheme_eq_of_locallyRingedSpace_eq {X Y : Scheme.{u}} (H : X.toLocallyRingedSpace = Y.toLocallyRingedSpace) : X = Y := by cases X; cases Y; congr #align algebraic_geometry.PresheafedSpace.IsOpenImmersion.Scheme_eq_of_LocallyRingedSpace_eq AlgebraicGeometry.PresheafedSpace.IsOpenImmersionₓ.scheme_eq_of_locallyRingedSpace_eq -theorem scheme_toScheme {X Y : Scheme} (f : X ⟶ Y) [AlgebraicGeometry.IsOpenImmersion f] : +theorem scheme_toScheme {X Y : Scheme.{u}} (f : X ⟶ Y) [AlgebraicGeometry.IsOpenImmersion f] : toScheme Y f.1 = X := by apply scheme_eq_of_locallyRingedSpace_eq exact locallyRingedSpace_toLocallyRingedSpace f @@ -373,24 +375,24 @@ end PresheafedSpace.IsOpenImmersion /-- The restriction of a Scheme along an open embedding. -/ @[simps! (config := .lemmasOnly) carrier, simps! presheaf_map presheaf_obj] -def Scheme.restrict {U : TopCat} (X : Scheme) {f : U ⟶ TopCat.of X} (h : OpenEmbedding f) : +def Scheme.restrict {U : TopCat.{u}} (X : Scheme.{u}) {f : U ⟶ TopCat.of X} (h : OpenEmbedding f) : Scheme := { PresheafedSpace.IsOpenImmersion.toScheme X (X.toPresheafedSpace.ofRestrict h) with toPresheafedSpace := X.toPresheafedSpace.restrict h } #align algebraic_geometry.Scheme.restrict AlgebraicGeometry.Scheme.restrict lemma Scheme.restrict_toPresheafedSpace - {U : TopCat} (X : Scheme) {f : U ⟶ TopCat.of X} (h : OpenEmbedding f) : + {U : TopCat.{u}} (X : Scheme.{u}) {f : U ⟶ TopCat.of X} (h : OpenEmbedding f) : (X.restrict h).toPresheafedSpace = X.toPresheafedSpace.restrict h := rfl /-- The canonical map from the restriction to the subspace. -/ @[simps!] -def Scheme.ofRestrict {U : TopCat} (X : Scheme) {f : U ⟶ TopCat.of X} +def Scheme.ofRestrict {U : TopCat.{u}} (X : Scheme.{u}) {f : U ⟶ TopCat.of X} (h : OpenEmbedding f) : X.restrict h ⟶ X := X.toLocallyRingedSpace.ofRestrict h #align algebraic_geometry.Scheme.ofRestrict AlgebraicGeometry.Scheme.ofRestrict -instance IsOpenImmersion.ofRestrict {U : TopCat} (X : Scheme) {f : U ⟶ TopCat.of X} +instance IsOpenImmersion.ofRestrict {U : TopCat.{u}} (X : Scheme.{u}) {f : U ⟶ TopCat.of X} (h : OpenEmbedding f) : IsOpenImmersion (X.ofRestrict h) := show PresheafedSpace.IsOpenImmersion (X.toPresheafedSpace.ofRestrict h) by infer_instance #align algebraic_geometry.IsOpenImmersion.ofRestrict AlgebraicGeometry.IsOpenImmersion.ofRestrict @@ -405,29 +407,29 @@ instance (priority := 100) of_isIso [IsIso g] : IsOpenImmersion g := (show IsIso ((inducedFunctor _).map g) by infer_instance) #align algebraic_geometry.IsOpenImmersion.of_is_iso AlgebraicGeometry.IsOpenImmersion.of_isIso -theorem to_iso {X Y : Scheme} (f : X ⟶ Y) [h : IsOpenImmersion f] [Epi f.1.base] : IsIso f := +theorem to_iso {X Y : Scheme.{u}} (f : X ⟶ Y) [h : IsOpenImmersion f] [Epi f.1.base] : IsIso f := @isIso_of_reflects_iso _ _ _ _ _ _ f (Scheme.forgetToLocallyRingedSpace ⋙ LocallyRingedSpace.forgetToSheafedSpace ⋙ SheafedSpace.forgetToPresheafedSpace) (@PresheafedSpace.IsOpenImmersion.to_iso _ _ _ _ f.1 h _) _ #align algebraic_geometry.IsOpenImmersion.to_iso AlgebraicGeometry.IsOpenImmersion.to_iso -theorem of_stalk_iso {X Y : Scheme} (f : X ⟶ Y) (hf : OpenEmbedding f.1.base) +theorem of_stalk_iso {X Y : Scheme.{u}} (f : X ⟶ Y) (hf : OpenEmbedding f.1.base) [∀ x, IsIso (PresheafedSpace.stalkMap f.1 x)] : IsOpenImmersion f := SheafedSpace.IsOpenImmersion.of_stalk_iso f.1 hf #align algebraic_geometry.IsOpenImmersion.of_stalk_iso AlgebraicGeometry.IsOpenImmersion.of_stalk_iso -theorem iff_stalk_iso {X Y : Scheme} (f : X ⟶ Y) : +theorem iff_stalk_iso {X Y : Scheme.{u}} (f : X ⟶ Y) : IsOpenImmersion f ↔ OpenEmbedding f.1.base ∧ ∀ x, IsIso (PresheafedSpace.stalkMap f.1 x) := ⟨fun H => ⟨H.1, inferInstance⟩, fun ⟨h₁, h₂⟩ => @IsOpenImmersion.of_stalk_iso _ _ f h₁ h₂⟩ #align algebraic_geometry.IsOpenImmersion.iff_stalk_iso AlgebraicGeometry.IsOpenImmersion.iff_stalk_iso -theorem _root_.AlgebraicGeometry.isIso_iff_isOpenImmersion {X Y : Scheme} (f : X ⟶ Y) : +theorem _root_.AlgebraicGeometry.isIso_iff_isOpenImmersion {X Y : Scheme.{u}} (f : X ⟶ Y) : IsIso f ↔ IsOpenImmersion f ∧ Epi f.1.base := ⟨fun _ => ⟨inferInstance, inferInstance⟩, fun ⟨h₁, h₂⟩ => @IsOpenImmersion.to_iso _ _ f h₁ h₂⟩ #align algebraic_geometry.is_iso_iff_IsOpenImmersion AlgebraicGeometry.isIso_iff_isOpenImmersion -theorem _root_.AlgebraicGeometry.isIso_iff_stalk_iso {X Y : Scheme} (f : X ⟶ Y) : +theorem _root_.AlgebraicGeometry.isIso_iff_stalk_iso {X Y : Scheme.{u}} (f : X ⟶ Y) : IsIso f ↔ IsIso f.1.base ∧ ∀ x, IsIso (PresheafedSpace.stalkMap f.1 x) := by rw [isIso_iff_isOpenImmersion, IsOpenImmersion.iff_stalk_iso, and_comm, ← and_assoc] refine' and_congr ⟨_, _⟩ Iff.rfl @@ -628,31 +630,31 @@ def isoOfRangeEq [IsOpenImmersion g] (e : Set.range f.1.base = Set.range g.1.bas #align algebraic_geometry.IsOpenImmersion.iso_of_range_eq AlgebraicGeometry.IsOpenImmersion.isoOfRangeEq @[simp, reassoc] -lemma isoOfRangeEq_hom_fac {X Y Z : Scheme} (f : X ⟶ Z) (g : Y ⟶ Z) +lemma isoOfRangeEq_hom_fac {X Y Z : Scheme.{u}} (f : X ⟶ Z) (g : Y ⟶ Z) [IsOpenImmersion f] [IsOpenImmersion g] (e : Set.range f.1.base = Set.range g.1.base) : (isoOfRangeEq f g e).hom ≫ g = f := lift_fac _ _ (le_of_eq e) @[simp, reassoc] -lemma isoOfRangeEq_inv_fac {X Y Z : Scheme} (f : X ⟶ Z) (g : Y ⟶ Z) +lemma isoOfRangeEq_inv_fac {X Y Z : Scheme.{u}} (f : X ⟶ Z) (g : Y ⟶ Z) [IsOpenImmersion f] [IsOpenImmersion g] (e : Set.range f.1.base = Set.range g.1.base) : (isoOfRangeEq f g e).inv ≫ f = g := lift_fac _ _ (le_of_eq e.symm) /-- The functor `opens X ⥤ opens Y` associated with an open immersion `f : X ⟶ Y`. -/ -abbrev _root_.AlgebraicGeometry.Scheme.Hom.opensFunctor {X Y : Scheme} (f : X ⟶ Y) +abbrev _root_.AlgebraicGeometry.Scheme.Hom.opensFunctor {X Y : Scheme.{u}} (f : X ⟶ Y) [H : IsOpenImmersion f] : Opens X ⥤ Opens Y := H.openFunctor #align algebraic_geometry.Scheme.hom.opens_functor AlgebraicGeometry.Scheme.Hom.opensFunctor /-- The isomorphism `Γ(X, U) ⟶ Γ(Y, f(U))` induced by an open immersion `f : X ⟶ Y`. -/ -def _root_.AlgebraicGeometry.Scheme.Hom.invApp {X Y : Scheme} (f : X ⟶ Y) +def _root_.AlgebraicGeometry.Scheme.Hom.invApp {X Y : Scheme.{u}} (f : X ⟶ Y) [H : IsOpenImmersion f] (U) : X.presheaf.obj (op U) ⟶ Y.presheaf.obj (op (f.opensFunctor.obj U)) := H.invApp U #align algebraic_geometry.Scheme.hom.inv_app AlgebraicGeometry.Scheme.Hom.invApp -theorem app_eq_inv_app_app_of_comp_eq_aux {X Y U : Scheme} (f : Y ⟶ U) (g : U ⟶ X) (fg : Y ⟶ X) +theorem app_eq_inv_app_app_of_comp_eq_aux {X Y U : Scheme.{u}} (f : Y ⟶ U) (g : U ⟶ X) (fg : Y ⟶ X) (H : fg = f ≫ g) [h : IsOpenImmersion g] (V : Opens U) : (Opens.map f.1.base).obj V = (Opens.map fg.1.base).obj (g.opensFunctor.obj V) := by subst H @@ -663,7 +665,7 @@ theorem app_eq_inv_app_app_of_comp_eq_aux {X Y U : Scheme} (f : Y ⟶ U) (g : U #align algebraic_geometry.IsOpenImmersion.app_eq_inv_app_app_of_comp_eq_aux AlgebraicGeometry.IsOpenImmersion.app_eq_inv_app_app_of_comp_eq_aux /-- The `fg` argument is to avoid nasty stuff about dependent types. -/ -theorem app_eq_invApp_app_of_comp_eq {X Y U : Scheme} (f : Y ⟶ U) (g : U ⟶ X) (fg : Y ⟶ X) +theorem app_eq_invApp_app_of_comp_eq {X Y U : Scheme.{u}} (f : Y ⟶ U) (g : U ⟶ X) (fg : Y ⟶ X) (H : fg = f ≫ g) [h : IsOpenImmersion g] (V : Opens U) : f.1.c.app (op V) = Scheme.Hom.invApp g _ ≫ @@ -678,7 +680,7 @@ theorem app_eq_invApp_app_of_comp_eq {X Y U : Scheme} (f : Y ⟶ U) (g : U ⟶ X convert Y.presheaf.map_id _ #align algebraic_geometry.IsOpenImmersion.app_eq_inv_app_app_of_comp_eq AlgebraicGeometry.IsOpenImmersion.app_eq_invApp_app_of_comp_eq -theorem lift_app {X Y U : Scheme} (f : U ⟶ Y) (g : X ⟶ Y) [IsOpenImmersion f] (H) +theorem lift_app {X Y U : Scheme.{u}} (f : U ⟶ Y) (g : X ⟶ Y) [IsOpenImmersion f] (H) (V : Opens U) : (IsOpenImmersion.lift f g H).1.c.app (op V) = Scheme.Hom.invApp f _ ≫ @@ -695,7 +697,7 @@ end IsOpenImmersion namespace Scheme -theorem image_basicOpen {X Y : Scheme} (f : X ⟶ Y) [H : IsOpenImmersion f] {U : Opens X} +theorem image_basicOpen {X Y : Scheme.{u}} (f : X ⟶ Y) [H : IsOpenImmersion f] {U : Opens X} (r : X.presheaf.obj (op U)) : f.opensFunctor.obj (X.basicOpen r) = Y.basicOpen (Scheme.Hom.invApp f U r) := by have e := Scheme.preimage_basicOpen f (Scheme.Hom.invApp f U r) @@ -717,7 +719,7 @@ theorem image_basicOpen {X Y : Scheme} (f : X ⟶ Y) [H : IsOpenImmersion f] {U /-- The image of an open immersion as an open set. -/ @[simps] -def Hom.opensRange {X Y : Scheme} (f : X ⟶ Y) [H : IsOpenImmersion f] : Opens Y := +def Hom.opensRange {X Y : Scheme.{u}} (f : X ⟶ Y) [H : IsOpenImmersion f] : Opens Y := ⟨_, H.base_open.isOpen_range⟩ #align algebraic_geometry.Scheme.hom.opens_range AlgebraicGeometry.Scheme.Hom.opensRange @@ -726,7 +728,7 @@ end Scheme /-- Given an open cover on `X`, we may pull them back along a morphism `W ⟶ X` to obtain an open cover of `W`. -/ @[simps] -def Scheme.OpenCover.pullbackCover {X : Scheme} (𝒰 : X.OpenCover) {W : Scheme} (f : W ⟶ X) : +def Scheme.OpenCover.pullbackCover {X W : Scheme.{u}} (𝒰 : X.OpenCover) (f : W ⟶ X) : W.OpenCover where J := 𝒰.J obj x := pullback f (𝒰.map x) @@ -749,7 +751,7 @@ def Scheme.OpenCover.pullbackCover {X : Scheme} (𝒰 : X.OpenCover) {W : Scheme an open cover of `W`. This is similar to `Scheme.OpenCover.pullbackCover`, but here we take `pullback (𝒰.map x) f` instead of `pullback f (𝒰.map x)`. -/ @[simps] -def Scheme.OpenCover.pullbackCover' {X : Scheme} (𝒰 : X.OpenCover) {W : Scheme} (f : W ⟶ X) : +def Scheme.OpenCover.pullbackCover' {X W : Scheme.{u}} (𝒰 : X.OpenCover) (f : W ⟶ X) : W.OpenCover where J := 𝒰.J obj x := pullback (𝒰.map x) f @@ -767,7 +769,7 @@ def Scheme.OpenCover.pullbackCover' {X : Scheme} (𝒰 : X.OpenCover) {W : Schem exact ⟨y, h⟩ · rw [← TopCat.epi_iff_surjective]; infer_instance -theorem Scheme.OpenCover.iUnion_range {X : Scheme} (𝒰 : X.OpenCover) : +theorem Scheme.OpenCover.iUnion_range {X : Scheme.{u}} (𝒰 : X.OpenCover) : ⋃ i, Set.range (𝒰.map i).1.base = Set.univ := by rw [Set.eq_univ_iff_forall] intro x @@ -775,12 +777,12 @@ theorem Scheme.OpenCover.iUnion_range {X : Scheme} (𝒰 : X.OpenCover) : exact ⟨𝒰.f x, 𝒰.Covers x⟩ #align algebraic_geometry.Scheme.open_cover.Union_range AlgebraicGeometry.Scheme.OpenCover.iUnion_range -theorem Scheme.OpenCover.iSup_opensRange {X : Scheme} (𝒰 : X.OpenCover) : +theorem Scheme.OpenCover.iSup_opensRange {X : Scheme.{u}} (𝒰 : X.OpenCover) : ⨆ i, Scheme.Hom.opensRange (𝒰.map i) = ⊤ := Opens.ext <| by rw [Opens.coe_iSup]; exact 𝒰.iUnion_range #align algebraic_geometry.Scheme.open_cover.supr_opens_range AlgebraicGeometry.Scheme.OpenCover.iSup_opensRange -theorem Scheme.OpenCover.compactSpace {X : Scheme} (𝒰 : X.OpenCover) [Finite 𝒰.J] +theorem Scheme.OpenCover.compactSpace {X : Scheme.{u}} (𝒰 : X.OpenCover) [Finite 𝒰.J] [H : ∀ i, CompactSpace (𝒰.obj i)] : CompactSpace X := by cases nonempty_fintype 𝒰.J rw [← isCompact_univ_iff, ← 𝒰.iUnion_range] @@ -812,7 +814,7 @@ def Scheme.OpenCover.inter {X : Scheme.{u}} (𝒰₁ : Scheme.OpenCover.{v₁} X /-- If `U` is a family of open sets that covers `X`, then `X.restrict U` forms an `X.open_cover`. -/ @[simps! J obj map] -def Scheme.openCoverOfSuprEqTop {s : Type*} (X : Scheme) (U : s → Opens X) +def Scheme.openCoverOfSuprEqTop {s : Type*} (X : Scheme.{u}) (U : s → Opens X) (hU : ⨆ i, U i = ⊤) : X.OpenCover where J := s obj i := X.restrict (U i).openEmbedding diff --git a/Mathlib/AlgebraicGeometry/Properties.lean b/Mathlib/AlgebraicGeometry/Properties.lean index 2f9fa60070005..d40b69c1a2e3f 100644 --- a/Mathlib/AlgebraicGeometry/Properties.lean +++ b/Mathlib/AlgebraicGeometry/Properties.lean @@ -23,8 +23,10 @@ We provide some basic properties of schemes are reduced. -/ -universe u +-- Explicit universe annotations were used in this file to improve perfomance #12737 + +universe u open TopologicalSpace Opposite CategoryTheory CategoryTheory.Limits TopCat diff --git a/Mathlib/AlgebraicGeometry/Restrict.lean b/Mathlib/AlgebraicGeometry/Restrict.lean index 11aecab1ec778..8a48ce1552e23 100644 --- a/Mathlib/AlgebraicGeometry/Restrict.lean +++ b/Mathlib/AlgebraicGeometry/Restrict.lean @@ -17,6 +17,8 @@ import Mathlib.AlgebraicGeometry.OpenImmersion -/ +-- Explicit universe annotations were used in this file to improve perfomance #12737 + set_option linter.uppercaseLean3 false noncomputable section @@ -27,13 +29,13 @@ open CategoryTheory.Limits namespace AlgebraicGeometry -universe v v₁ v₂ u +universe v v₁ v₂ u u₁ -variable {C : Type u} [Category.{v} C] +variable {C : Type u₁} [Category.{v} C] section -variable (X : Scheme) +variable (X : Scheme.{u}) /-- `f ⁻¹ᵁ U` is notation for `(Opens.map f.1.base).obj U`, the preimage of an open set `U` under `f`. -/ @@ -44,22 +46,22 @@ notation3:90 f:91 "⁻¹ᵁ " U:90 => (Opens.map (f : LocallyRingedSpace.Hom _ _ notation3:60 X:60 " ∣_ᵤ " U:61 => Scheme.restrict X (U : Opens X).openEmbedding /-- The restriction of a scheme to an open subset. -/ -abbrev Scheme.ιOpens {X : Scheme} (U : Opens X.carrier) : X ∣_ᵤ U ⟶ X := X.ofRestrict _ +abbrev Scheme.ιOpens {X : Scheme.{u}} (U : Opens X.carrier) : X ∣_ᵤ U ⟶ X := X.ofRestrict _ -lemma Scheme.ofRestrict_val_c_app_self {X : Scheme} (U : Opens X) : +lemma Scheme.ofRestrict_val_c_app_self {X : Scheme.{u}} (U : Opens X) : (X.ofRestrict U.openEmbedding).1.c.app (op U) = X.presheaf.map (eqToHom (by simp)).op := rfl -lemma Scheme.eq_restrict_presheaf_map_eqToHom {X : Scheme} (U : Opens X) {V W : Opens U} +lemma Scheme.eq_restrict_presheaf_map_eqToHom {X : Scheme.{u}} (U : Opens X) {V W : Opens U} (e : U.openEmbedding.isOpenMap.functor.obj V = U.openEmbedding.isOpenMap.functor.obj W) : X.presheaf.map (eqToHom e).op = (X ∣_ᵤ U).presheaf.map (eqToHom <| U.openEmbedding.functor_obj_injective e).op := rfl -instance ΓRestrictAlgebra {X : Scheme} {Y : TopCat} {f : Y ⟶ X} (hf : OpenEmbedding f) : +instance ΓRestrictAlgebra {X : Scheme.{u}} {Y : TopCat.{u}} {f : Y ⟶ X} (hf : OpenEmbedding f) : Algebra (Scheme.Γ.obj (op X)) (Scheme.Γ.obj (op <| X.restrict hf)) := (Scheme.Γ.map (X.ofRestrict hf).op).toAlgebra #align algebraic_geometry.Γ_restrict_algebra AlgebraicGeometry.ΓRestrictAlgebra -lemma Scheme.map_basicOpen' (X : Scheme) (U : Opens X) (r : Scheme.Γ.obj (op <| X ∣_ᵤ U)) : +lemma Scheme.map_basicOpen' (X : Scheme.{u}) (U : Opens X) (r : Scheme.Γ.obj (op <| X ∣_ᵤ U)) : U.openEmbedding.isOpenMap.functor.obj ((X ∣_ᵤ U).basicOpen r) = X.basicOpen (X.presheaf.map (eqToHom U.openEmbedding_obj_top.symm).op r) := by refine' (Scheme.image_basicOpen (X.ofRestrict U.openEmbedding) r).trans _ @@ -69,11 +71,11 @@ lemma Scheme.map_basicOpen' (X : Scheme) (U : Opens X) (r : Scheme.Γ.obj (op <| congr exact PresheafedSpace.IsOpenImmersion.ofRestrict_invApp _ _ _ -lemma Scheme.map_basicOpen (X : Scheme) (U : Opens X) (r : Scheme.Γ.obj (op <| X ∣_ᵤ U)) : +lemma Scheme.map_basicOpen (X : Scheme.{u}) (U : Opens X) (r : Scheme.Γ.obj (op <| X ∣_ᵤ U)) : U.openEmbedding.isOpenMap.functor.obj ((X ∣_ᵤ U).basicOpen r) = X.basicOpen r := by rw [Scheme.map_basicOpen', Scheme.basicOpen_res_eq] -lemma Scheme.map_basicOpen_map (X : Scheme) (U : Opens X) (r : X.presheaf.obj (op U)) : +lemma Scheme.map_basicOpen_map (X : Scheme.{u}) (U : Opens X) (r : X.presheaf.obj (op U)) : U.openEmbedding.isOpenMap.functor.obj ((X ∣_ᵤ U).basicOpen <| X.presheaf.map (eqToHom U.openEmbedding_obj_top).op r) = X.basicOpen r := by rw [Scheme.map_basicOpen', Scheme.basicOpen_res_eq, Scheme.basicOpen_res_eq] @@ -176,7 +178,7 @@ def Scheme.restrictFunctorΓ : X.restrictFunctor.op ⋙ (Over.forget X).op ⋙ S /-- `X ∣_ U ∣_ V` is isomorphic to `X ∣_ V ∣_ U` -/ noncomputable -def Scheme.restrictRestrictComm (X : Scheme) (U V : Opens X.carrier) : +def Scheme.restrictRestrictComm (X : Scheme.{u}) (U V : Opens X.carrier) : X ∣_ᵤ U ∣_ᵤ ιOpens U ⁻¹ᵁ V ≅ X ∣_ᵤ V ∣_ᵤ ιOpens V ⁻¹ᵁ U := by refine IsOpenImmersion.isoOfRangeEq (ιOpens _ ≫ ιOpens U) (ιOpens _ ≫ ιOpens V) ?_ simp only [Scheme.restrict_carrier, Scheme.ofRestrict_val_base, Scheme.comp_coeBase, @@ -188,7 +190,7 @@ def Scheme.restrictRestrictComm (X : Scheme) (U V : Opens X.carrier) : /-- If `V` is an open subset of `U`, then `X ∣_ U ∣_ V` is isomorphic to `X ∣_ V`. -/ noncomputable -def Scheme.restrictRestrict (X : Scheme) (U : Opens X.carrier) (V : Opens (X ∣_ᵤ U).carrier) : +def Scheme.restrictRestrict (X : Scheme.{u}) (U : Opens X.carrier) (V : Opens (X ∣_ᵤ U).carrier) : X ∣_ᵤ U ∣_ᵤ V ≅ X ∣_ᵤ U.openEmbedding.isOpenMap.functor.obj V := by refine IsOpenImmersion.isoOfRangeEq (ιOpens _ ≫ ιOpens U) (ιOpens _) ?_ simp only [Scheme.restrict_carrier, Scheme.ofRestrict_val_base, Scheme.comp_coeBase, @@ -197,27 +199,27 @@ def Scheme.restrictRestrict (X : Scheme) (U : Opens X.carrier) (V : Opens (X ∣ rfl @[simp, reassoc] -lemma Scheme.restrictRestrict_hom_restrict (X : Scheme) (U : Opens X.carrier) +lemma Scheme.restrictRestrict_hom_restrict (X : Scheme.{u}) (U : Opens X.carrier) (V : Opens (X ∣_ᵤ U).carrier) : (X.restrictRestrict U V).hom ≫ ιOpens _ = ιOpens V ≫ ιOpens U := IsOpenImmersion.isoOfRangeEq_hom_fac _ _ _ @[simp, reassoc] -lemma Scheme.restrictRestrict_inv_restrict_restrict (X : Scheme) (U : Opens X.carrier) +lemma Scheme.restrictRestrict_inv_restrict_restrict (X : Scheme.{u}) (U : Opens X.carrier) (V : Opens (X ∣_ᵤ U).carrier) : (X.restrictRestrict U V).inv ≫ ιOpens V ≫ ιOpens U = ιOpens _ := IsOpenImmersion.isoOfRangeEq_inv_fac _ _ _ /-- If `U = V`, then `X ∣_ U` is isomorphic to `X ∣_ V`. -/ noncomputable -def Scheme.restrictIsoOfEq (X : Scheme) {U V : Opens X.carrier} (e : U = V) : +def Scheme.restrictIsoOfEq (X : Scheme.{u}) {U V : Opens X.carrier} (e : U = V) : X ∣_ᵤ U ≅ X ∣_ᵤ V := by exact IsOpenImmersion.isoOfRangeEq (ιOpens U) (ιOpens V) (by rw [e]) end /-- The restriction of an isomorphism onto an open set. -/ -noncomputable abbrev Scheme.restrictMapIso {X Y : Scheme} (f : X ⟶ Y) [IsIso f] +noncomputable abbrev Scheme.restrictMapIso {X Y : Scheme.{u}} (f : X ⟶ Y) [IsIso f] (U : Opens Y) : X ∣_ᵤ f ⁻¹ᵁ U ≅ Y ∣_ᵤ U := by apply IsOpenImmersion.isoOfRangeEq (f := X.ofRestrict _ ≫ f) (H := PresheafedSpace.IsOpenImmersion.comp (hf := inferInstance) (hg := inferInstance)) @@ -232,7 +234,7 @@ noncomputable abbrev Scheme.restrictMapIso {X Y : Scheme} (f : X ⟶ Y) [IsIso f section MorphismRestrict /-- Given a morphism `f : X ⟶ Y` and an open set `U ⊆ Y`, we have `X ×[Y] U ≅ X |_{f ⁻¹ U}` -/ -def pullbackRestrictIsoRestrict {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) : +def pullbackRestrictIsoRestrict {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) : pullback f (Scheme.ιOpens U) ≅ X ∣_ᵤ f ⁻¹ᵁ U := by refine' IsOpenImmersion.isoOfRangeEq pullback.fst (X.ofRestrict _) _ rw [IsOpenImmersion.range_pullback_fst_of_right] @@ -242,19 +244,19 @@ def pullbackRestrictIsoRestrict {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) : #align algebraic_geometry.pullback_restrict_iso_restrict AlgebraicGeometry.pullbackRestrictIsoRestrict @[simp, reassoc] -theorem pullbackRestrictIsoRestrict_inv_fst {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) : +theorem pullbackRestrictIsoRestrict_inv_fst {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) : (pullbackRestrictIsoRestrict f U).inv ≫ pullback.fst = X.ofRestrict _ := by delta pullbackRestrictIsoRestrict; simp #align algebraic_geometry.pullback_restrict_iso_restrict_inv_fst AlgebraicGeometry.pullbackRestrictIsoRestrict_inv_fst @[simp, reassoc] -theorem pullbackRestrictIsoRestrict_hom_restrict {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) : +theorem pullbackRestrictIsoRestrict_hom_restrict {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) : (pullbackRestrictIsoRestrict f U).hom ≫ Scheme.ιOpens (f ⁻¹ᵁ U) = pullback.fst := by delta pullbackRestrictIsoRestrict; simp #align algebraic_geometry.pullback_restrict_iso_restrict_hom_restrict AlgebraicGeometry.pullbackRestrictIsoRestrict_hom_restrict /-- The restriction of a morphism `X ⟶ Y` onto `X |_{f ⁻¹ U} ⟶ Y |_ U`. -/ -def morphismRestrict {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) : X ∣_ᵤ f ⁻¹ᵁ U ⟶ Y ∣_ᵤ U := +def morphismRestrict {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) : X ∣_ᵤ f ⁻¹ᵁ U ⟶ Y ∣_ᵤ U := (pullbackRestrictIsoRestrict f U).inv ≫ pullback.snd #align algebraic_geometry.morphism_restrict AlgebraicGeometry.morphismRestrict @@ -262,19 +264,19 @@ def morphismRestrict {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) : X ∣_ᵤ f infixl:85 " ∣_ " => morphismRestrict @[simp, reassoc] -theorem pullbackRestrictIsoRestrict_hom_morphismRestrict {X Y : Scheme} (f : X ⟶ Y) +theorem pullbackRestrictIsoRestrict_hom_morphismRestrict {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) : (pullbackRestrictIsoRestrict f U).hom ≫ f ∣_ U = pullback.snd := Iso.hom_inv_id_assoc _ _ #align algebraic_geometry.pullback_restrict_iso_restrict_hom_morphism_restrict AlgebraicGeometry.pullbackRestrictIsoRestrict_hom_morphismRestrict @[simp, reassoc] -theorem morphismRestrict_ι {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) : +theorem morphismRestrict_ι {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) : (f ∣_ U) ≫ Scheme.ιOpens U = Scheme.ιOpens (f ⁻¹ᵁ U) ≫ f := by delta morphismRestrict rw [Category.assoc, pullback.condition.symm, pullbackRestrictIsoRestrict_inv_fst_assoc] #align algebraic_geometry.morphism_restrict_ι AlgebraicGeometry.morphismRestrict_ι -theorem isPullback_morphismRestrict {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) : +theorem isPullback_morphismRestrict {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) : IsPullback (f ∣_ U) (Scheme.ιOpens (f ⁻¹ᵁ U)) (Scheme.ιOpens U) f := by delta morphismRestrict rw [← Category.id_comp f] @@ -285,7 +287,7 @@ theorem isPullback_morphismRestrict {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) : erw [pullbackRestrictIsoRestrict_inv_fst]; rw [Category.comp_id] #align algebraic_geometry.is_pullback_morphism_restrict AlgebraicGeometry.isPullback_morphismRestrict -theorem morphismRestrict_comp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) (U : Opens Z) : +theorem morphismRestrict_comp {X Y Z : Scheme.{u}} (f : X ⟶ Y) (g : Y ⟶ Z) (U : Opens Z) : (f ≫ g) ∣_ U = f ∣_ g ⁻¹ᵁ U ≫ g ∣_ U := by delta morphismRestrict rw [← pullbackRightPullbackFstIso_inv_snd_snd] @@ -298,21 +300,21 @@ theorem morphismRestrict_comp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) (U : pullbackRestrictIsoRestrict_inv_fst_assoc] #align algebraic_geometry.morphism_restrict_comp AlgebraicGeometry.morphismRestrict_comp -instance {X Y : Scheme} (f : X ⟶ Y) [IsIso f] (U : Opens Y) : IsIso (f ∣_ U) := by +instance {X Y : Scheme.{u}} (f : X ⟶ Y) [IsIso f] (U : Opens Y) : IsIso (f ∣_ U) := by delta morphismRestrict; infer_instance -theorem morphismRestrict_base_coe {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) (x) : +theorem morphismRestrict_base_coe {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) (x) : @Coe.coe U Y (⟨fun x => x.1⟩) ((f ∣_ U).1.base x) = f.1.base x.1 := congr_arg (fun f => PresheafedSpace.Hom.base (LocallyRingedSpace.Hom.val f) x) (morphismRestrict_ι f U) #align algebraic_geometry.morphism_restrict_base_coe AlgebraicGeometry.morphismRestrict_base_coe -theorem morphismRestrict_val_base {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) : +theorem morphismRestrict_val_base {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) : ⇑(f ∣_ U).1.base = U.1.restrictPreimage f.1.base := funext fun x => Subtype.ext (morphismRestrict_base_coe f U x) #align algebraic_geometry.morphism_restrict_val_base AlgebraicGeometry.morphismRestrict_val_base -theorem image_morphismRestrict_preimage {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) (V : Opens U) : +theorem image_morphismRestrict_preimage {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) (V : Opens U) : (f ⁻¹ᵁ U).openEmbedding.isOpenMap.functor.obj ((f ∣_ U) ⁻¹ᵁ V) = f ⁻¹ᵁ (U.openEmbedding.isOpenMap.functor.obj V) := by ext1 @@ -334,7 +336,7 @@ theorem image_morphismRestrict_preimage {X Y : Scheme} (f : X ⟶ Y) (U : Opens exact morphismRestrict_base_coe f U ⟨x, hx⟩ #align algebraic_geometry.image_morphism_restrict_preimage AlgebraicGeometry.image_morphismRestrict_preimage -theorem morphismRestrict_c_app {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) (V : Opens U) : +theorem morphismRestrict_c_app {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) (V : Opens U) : (f ∣_ U).1.c.app (op V) = f.1.c.app (op (U.openEmbedding.isOpenMap.functor.obj V)) ≫ X.presheaf.map (eqToHom (image_morphismRestrict_preimage f U V)).op := by @@ -354,7 +356,7 @@ theorem morphismRestrict_c_app {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) (V : O congr 1 #align algebraic_geometry.morphism_restrict_c_app AlgebraicGeometry.morphismRestrict_c_app -theorem Γ_map_morphismRestrict {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) : +theorem Γ_map_morphismRestrict {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) : Scheme.Γ.map (f ∣_ U).op = Y.presheaf.map (eqToHom <| U.openEmbedding_obj_top.symm).op ≫ f.1.c.app (op U) ≫ X.presheaf.map (eqToHom <| (f ⁻¹ᵁ U).openEmbedding_obj_top).op := by @@ -365,7 +367,7 @@ theorem Γ_map_morphismRestrict {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) : /-- Restricting a morphism onto the image of an open immersion is isomorphic to the base change along the immersion. -/ -def morphismRestrictOpensRange {X Y U : Scheme} (f : X ⟶ Y) (g : U ⟶ Y) [hg : IsOpenImmersion g] : +def morphismRestrictOpensRange {X Y U : Scheme.{u}} (f : X ⟶ Y) (g : U ⟶ Y) [hg : IsOpenImmersion g] : Arrow.mk (f ∣_ Scheme.Hom.opensRange g) ≅ Arrow.mk (pullback.snd : pullback f g ⟶ _) := by let V : Opens Y := Scheme.Hom.opensRange g let e := @@ -383,13 +385,13 @@ def morphismRestrictOpensRange {X Y U : Scheme} (f : X ⟶ Y) (g : U ⟶ Y) [hg /-- 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. -/ -def morphismRestrictEq {X Y : Scheme} (f : X ⟶ Y) {U V : Opens Y} (e : U = V) : +def morphismRestrictEq {X Y : Scheme.{u}} (f : X ⟶ Y) {U V : Opens Y} (e : U = V) : Arrow.mk (f ∣_ U) ≅ Arrow.mk (f ∣_ V) := eqToIso (by subst e; rfl) #align algebraic_geometry.morphism_restrict_eq AlgebraicGeometry.morphismRestrictEq /-- Restricting a morphism twice is isomorphic to one restriction. -/ -def morphismRestrictRestrict {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) (V : Opens (Y ∣_ᵤ U)) : +def morphismRestrictRestrict {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) (V : Opens (Y ∣_ᵤ U)) : Arrow.mk (f ∣_ U ∣_ V) ≅ Arrow.mk (f ∣_ U.openEmbedding.isOpenMap.functor.obj V) := by refine Arrow.isoMk' _ _ (Scheme.restrictRestrict _ _ _ ≪≫ Scheme.restrictIsoOfEq _ ?_) (Scheme.restrictRestrict _ _ _) ?_ @@ -410,7 +412,7 @@ def morphismRestrictRestrict {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) (V : Ope #align algebraic_geometry.morphism_restrict_restrict AlgebraicGeometry.morphismRestrictRestrict /-- Restricting a morphism twice onto a basic open set is isomorphic to one restriction. -/ -def morphismRestrictRestrictBasicOpen {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) +def morphismRestrictRestrictBasicOpen {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) (r : Y.presheaf.obj (op U)) : Arrow.mk (f ∣_ U ∣_ @@ -432,7 +434,7 @@ def morphismRestrictRestrictBasicOpen {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) /-- The stalk map of a restriction of a morphism is isomorphic to the stalk map of the original map. -/ -def morphismRestrictStalkMap {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) (x) : +def morphismRestrictStalkMap {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) (x) : Arrow.mk (PresheafedSpace.stalkMap (f ∣_ U).1 x) ≅ Arrow.mk (PresheafedSpace.stalkMap f.1 x.1) := by fapply Arrow.isoMk' @@ -453,7 +455,7 @@ def morphismRestrictStalkMap {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) (x) : #align algebraic_geometry.morphism_restrict_stalk_map AlgebraicGeometry.morphismRestrictStalkMap -instance {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y) [IsOpenImmersion f] : +instance {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) [IsOpenImmersion f] : IsOpenImmersion (f ∣_ U) := by delta morphismRestrict exact PresheafedSpace.IsOpenImmersion.comp _ _ diff --git a/Mathlib/AlgebraicGeometry/Scheme.lean b/Mathlib/AlgebraicGeometry/Scheme.lean index 74322e4e06714..a4eb654488f6b 100644 --- a/Mathlib/AlgebraicGeometry/Scheme.lean +++ b/Mathlib/AlgebraicGeometry/Scheme.lean @@ -19,7 +19,12 @@ A morphism of schemes is just a morphism of the underlying locally ringed spaces -/ +-- Explicit universe annotations were used in this file to improve perfomance #12737 + set_option linter.uppercaseLean3 false + +universe u + noncomputable section open TopologicalSpace diff --git a/Mathlib/AlgebraicGeometry/Spec.lean b/Mathlib/AlgebraicGeometry/Spec.lean index 500cf63dc52aa..70a5a65c987ef 100644 --- a/Mathlib/AlgebraicGeometry/Spec.lean +++ b/Mathlib/AlgebraicGeometry/Spec.lean @@ -34,6 +34,9 @@ The adjunction `Γ ⊣ Spec` is constructed in `Mathlib/AlgebraicGeometry/GammaS -/ + +-- Explicit universe annotations were used in this file to improve perfomance #12737 + noncomputable section universe u v diff --git a/Mathlib/Geometry/RingedSpace/LocallyRingedSpace.lean b/Mathlib/Geometry/RingedSpace/LocallyRingedSpace.lean index e3bccbe776aa3..2f08cf85bfcaa 100644 --- a/Mathlib/Geometry/RingedSpace/LocallyRingedSpace.lean +++ b/Mathlib/Geometry/RingedSpace/LocallyRingedSpace.lean @@ -16,6 +16,10 @@ stalks are local rings), and morphisms between these (morphisms in `SheafedSpace `is_local_ring_hom` on the stalk maps). -/ +-- Explicit universe annotations were used in this file to improve perfomance #12737 + +universe u + open CategoryTheory open TopCat @@ -33,7 +37,7 @@ such that all the stalks are local rings. A morphism of locally ringed spaces is a morphism of ringed spaces such that the morphisms induced on stalks are local ring homomorphisms. -/ -structure LocallyRingedSpace extends SheafedSpace CommRingCat where +structure LocallyRingedSpace extends SheafedSpace CommRingCat.{u} where /-- Stalks of a locally ringed space are local rings. -/ localRing : ∀ x, LocalRing (presheaf.stalk x) set_option linter.uppercaseLean3 false in @@ -43,7 +47,7 @@ attribute [instance] LocallyRingedSpace.localRing namespace LocallyRingedSpace -variable (X : LocallyRingedSpace) +variable (X : LocallyRingedSpace.{u}) /-- An alias for `to_SheafedSpace`, where the result type is a `RingedSpace`. This allows us to use dot-notation for the `RingedSpace` namespace. @@ -59,7 +63,7 @@ def toTopCat : TopCat := set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.to_Top AlgebraicGeometry.LocallyRingedSpace.toTopCat -instance : CoeSort LocallyRingedSpace (Type*) := +instance : CoeSort LocallyRingedSpace (Type u) := ⟨fun X : LocallyRingedSpace => (X.toTopCat : Type _)⟩ instance (x : X) : LocalRing (X.stalk x) := @@ -76,7 +80,7 @@ set_option linter.uppercaseLean3 false in /-- A morphism of locally ringed spaces is a morphism of ringed spaces such that the morphisms induced on stalks are local ring homomorphisms. -/ @[ext] -structure Hom (X Y : LocallyRingedSpace) : Type _ where +structure Hom (X Y : LocallyRingedSpace.{u}) : Type _ where /-- the underlying morphism between ringed spaces -/ val : X.toSheafedSpace ⟶ Y.toSheafedSpace /-- the underlying morphism induces a local ring homomorphism on stalks -/ @@ -87,14 +91,14 @@ set_option linter.uppercaseLean3 false in instance : Quiver LocallyRingedSpace := ⟨Hom⟩ -@[ext] lemma Hom.ext' (X Y : LocallyRingedSpace) {f g : X ⟶ Y} (h : f.val = g.val) : f = g := +@[ext] lemma Hom.ext' (X Y : LocallyRingedSpace.{u}) {f g : X ⟶ Y} (h : f.val = g.val) : f = g := Hom.ext _ _ h -- TODO perhaps we should make a bundled `LocalRing` and return one here? -- TODO define `sheaf.stalk` so we can write `X.𝒪.stalk` here? /-- The stalk of a locally ringed space, just as a `CommRing`. -/ -noncomputable def stalk (X : LocallyRingedSpace) (x : X) : CommRingCat := +noncomputable def stalk (X : LocallyRingedSpace.{u}) (x : X) : CommRingCat := X.presheaf.stalk x set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.stalk AlgebraicGeometry.LocallyRingedSpace.stalk @@ -106,31 +110,31 @@ instance stalkLocal (x : X) : LocalRing <| X.stalk x := X.localRing x /-- A morphism of locally ringed spaces `f : X ⟶ Y` induces a local ring homomorphism from `Y.stalk (f x)` to `X.stalk x` for any `x : X`. -/ -noncomputable def stalkMap {X Y : LocallyRingedSpace} (f : X ⟶ Y) (x : X) : +noncomputable def stalkMap {X Y : LocallyRingedSpace.{u}} (f : X ⟶ Y) (x : X) : Y.stalk (f.1.1 x) ⟶ X.stalk x := PresheafedSpace.stalkMap f.1 x set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.stalk_map AlgebraicGeometry.LocallyRingedSpace.stalkMap -instance {X Y : LocallyRingedSpace} (f : X ⟶ Y) (x : X) : IsLocalRingHom (stalkMap f x) := +instance {X Y : LocallyRingedSpace.{u}} (f : X ⟶ Y) (x : X) : IsLocalRingHom (stalkMap f x) := f.2 x -instance {X Y : LocallyRingedSpace} (f : X ⟶ Y) (x : X) : +instance {X Y : LocallyRingedSpace.{u}} (f : X ⟶ Y) (x : X) : IsLocalRingHom (PresheafedSpace.stalkMap f.1 x) := f.2 x /-- The identity morphism on a locally ringed space. -/ @[simps] -def id (X : LocallyRingedSpace) : Hom X X := +def id (X : LocallyRingedSpace.{u}) : Hom X X := ⟨𝟙 _, fun x => by erw [PresheafedSpace.stalkMap.id]; apply isLocalRingHom_id⟩ set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.id AlgebraicGeometry.LocallyRingedSpace.id -instance (X : LocallyRingedSpace) : Inhabited (Hom X X) := +instance (X : LocallyRingedSpace.{u}) : Inhabited (Hom X X) := ⟨id X⟩ /-- Composition of morphisms of locally ringed spaces. -/ -def comp {X Y Z : LocallyRingedSpace} (f : Hom X Y) (g : Hom Y Z) : Hom X Z := +def comp {X Y Z : LocallyRingedSpace.{u}} (f : Hom X Y) (g : Hom Y Z) : Hom X Z := ⟨f.val ≫ g.val, fun x => by erw [PresheafedSpace.stalkMap.comp] exact @isLocalRingHom_comp _ _ _ _ _ _ _ _ (f.2 _) (g.2 _)⟩ @@ -138,7 +142,7 @@ set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.comp AlgebraicGeometry.LocallyRingedSpace.comp /-- The category of locally ringed spaces. -/ -instance : Category LocallyRingedSpace where +instance : Category LocallyRingedSpace.{u} where Hom := Hom id := id comp {X Y Z} f g := comp f g @@ -148,7 +152,7 @@ instance : Category LocallyRingedSpace where /-- The forgetful functor from `LocallyRingedSpace` to `SheafedSpace CommRing`. -/ @[simps] -def forgetToSheafedSpace : LocallyRingedSpace ⥤ SheafedSpace CommRingCat where +def forgetToSheafedSpace : LocallyRingedSpace.{u} ⥤ SheafedSpace CommRingCat.{u} where obj X := X.toSheafedSpace map {X Y} f := f.1 set_option linter.uppercaseLean3 false in @@ -159,13 +163,13 @@ instance : forgetToSheafedSpace.Faithful where /-- The forgetful functor from `LocallyRingedSpace` to `Top`. -/ @[simps!] -def forgetToTop : LocallyRingedSpace ⥤ TopCat := +def forgetToTop : LocallyRingedSpace.{u} ⥤ TopCat.{u} := forgetToSheafedSpace ⋙ SheafedSpace.forget _ set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.forget_to_Top AlgebraicGeometry.LocallyRingedSpace.forgetToTop @[simp] -theorem comp_val {X Y Z : LocallyRingedSpace} (f : X ⟶ Y) (g : Y ⟶ Z) : +theorem comp_val {X Y Z : LocallyRingedSpace.{u}} (f : X ⟶ Y) (g : Y ⟶ Z) : (f ≫ g).val = f.val ≫ g.val := rfl set_option linter.uppercaseLean3 false in @@ -174,13 +178,13 @@ set_option linter.uppercaseLean3 false in -- Porting note: complains that `(f ≫ g).val.c` can be further simplified -- so changed to its simp normal form `(f.val ≫ g.val).c` @[simp] -theorem comp_val_c {X Y Z : LocallyRingedSpace} (f : X ⟶ Y) (g : Y ⟶ Z) : +theorem comp_val_c {X Y Z : LocallyRingedSpace.{u}} (f : X ⟶ Y) (g : Y ⟶ Z) : (f.1 ≫ g.1).c = g.val.c ≫ (Presheaf.pushforward _ g.val.base).map f.val.c := rfl set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.comp_val_c AlgebraicGeometry.LocallyRingedSpace.comp_val_c -theorem comp_val_c_app {X Y Z : LocallyRingedSpace} (f : X ⟶ Y) (g : Y ⟶ Z) (U : (Opens Z)ᵒᵖ) : +theorem comp_val_c_app {X Y Z : LocallyRingedSpace.{u}} (f : X ⟶ Y) (g : Y ⟶ Z) (U : (Opens Z)ᵒᵖ) : (f ≫ g).val.c.app U = g.val.c.app U ≫ f.val.c.app (op <| (Opens.map g.val.base).obj U.unop) := rfl set_option linter.uppercaseLean3 false in @@ -192,8 +196,8 @@ spaces can be lifted to a morphism `X ⟶ Y` as locally ringed spaces. See also `iso_of_SheafedSpace_iso`. -/ @[simps] -def homOfSheafedSpaceHomOfIsIso {X Y : LocallyRingedSpace} (f : X.toSheafedSpace ⟶ Y.toSheafedSpace) - [IsIso f] : X ⟶ Y := +def homOfSheafedSpaceHomOfIsIso {X Y : LocallyRingedSpace.{u}} + (f : X.toSheafedSpace ⟶ Y.toSheafedSpace) [IsIso f] : X ⟶ Y := Hom.mk f fun x => -- Here we need to see that the stalk maps are really local ring homomorphisms. -- This can be solved by type class inference, because stalk maps of isomorphisms @@ -210,7 +214,7 @@ This is related to the property that the functor `forget_to_SheafedSpace` reflec In fact, it is slightly stronger as we do not require `f` to come from a morphism between _locally_ ringed spaces. -/ -def isoOfSheafedSpaceIso {X Y : LocallyRingedSpace} (f : X.toSheafedSpace ≅ Y.toSheafedSpace) : +def isoOfSheafedSpaceIso {X Y : LocallyRingedSpace.{u}} (f : X.toSheafedSpace ≅ Y.toSheafedSpace) : X ≅ Y where hom := homOfSheafedSpaceHomOfIsIso f.hom inv := homOfSheafedSpaceHomOfIsIso f.inv @@ -224,7 +228,7 @@ instance : forgetToSheafedSpace.ReflectsIsomorphisms where reflects {_ _} f i := ⟨homOfSheafedSpaceHomOfIsIso (CategoryTheory.inv (forgetToSheafedSpace.map f)), Hom.ext _ _ (IsIso.hom_inv_id (I := i)), Hom.ext _ _ (IsIso.inv_hom_id (I := i))⟩ } -instance is_sheafedSpace_iso {X Y : LocallyRingedSpace} (f : X ⟶ Y) [IsIso f] : IsIso f.1 := +instance is_sheafedSpace_iso {X Y : LocallyRingedSpace.{u}} (f : X ⟶ Y) [IsIso f] : IsIso f.1 := LocallyRingedSpace.forgetToSheafedSpace.map_isIso f set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.is_SheafedSpace_iso AlgebraicGeometry.LocallyRingedSpace.is_sheafedSpace_iso @@ -232,7 +236,7 @@ set_option linter.uppercaseLean3 false in /-- The restriction of a locally ringed space along an open embedding. -/ @[simps!] -def restrict {U : TopCat} (X : LocallyRingedSpace) {f : U ⟶ X.toTopCat} (h : OpenEmbedding f) : +def restrict {U : TopCat} (X : LocallyRingedSpace.{u}) {f : U ⟶ X.toTopCat} (h : OpenEmbedding f) : LocallyRingedSpace where localRing := by intro x @@ -244,7 +248,7 @@ set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.restrict AlgebraicGeometry.LocallyRingedSpace.restrict /-- The canonical map from the restriction to the subspace. -/ -def ofRestrict {U : TopCat} (X : LocallyRingedSpace) {f : U ⟶ X.toTopCat} (h : OpenEmbedding f) : +def ofRestrict {U : TopCat} (X : LocallyRingedSpace.{u}) {f : U ⟶ X.toTopCat} (h : OpenEmbedding f) : X.restrict h ⟶ X := ⟨X.toPresheafedSpace.ofRestrict h, fun _ => inferInstance⟩ set_option linter.uppercaseLean3 false in @@ -252,7 +256,7 @@ set_option linter.uppercaseLean3 false in /-- The restriction of a locally ringed space `X` to the top subspace is isomorphic to `X` itself. -/ -def restrictTopIso (X : LocallyRingedSpace) : +def restrictTopIso (X : LocallyRingedSpace.{u}) : X.restrict (Opens.openEmbedding ⊤) ≅ X := isoOfSheafedSpaceIso X.toSheafedSpace.restrictTopIso set_option linter.uppercaseLean3 false in @@ -260,7 +264,7 @@ set_option linter.uppercaseLean3 false in /-- The global sections, notated Gamma. -/ -def Γ : LocallyRingedSpaceᵒᵖ ⥤ CommRingCat := +def Γ : LocallyRingedSpace.{u}ᵒᵖ ⥤ CommRingCat.{u} := forgetToSheafedSpace.op ⋙ SheafedSpace.Γ set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.Γ AlgebraicGeometry.LocallyRingedSpace.Γ @@ -271,28 +275,28 @@ set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.Γ_def AlgebraicGeometry.LocallyRingedSpace.Γ_def @[simp] -theorem Γ_obj (X : LocallyRingedSpaceᵒᵖ) : Γ.obj X = X.unop.presheaf.obj (op ⊤) := +theorem Γ_obj (X : LocallyRingedSpace.{u}ᵒᵖ) : Γ.obj X = X.unop.presheaf.obj (op ⊤) := rfl set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.Γ_obj AlgebraicGeometry.LocallyRingedSpace.Γ_obj -theorem Γ_obj_op (X : LocallyRingedSpace) : Γ.obj (op X) = X.presheaf.obj (op ⊤) := +theorem Γ_obj_op (X : LocallyRingedSpace.{u}) : Γ.obj (op X) = X.presheaf.obj (op ⊤) := rfl set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.Γ_obj_op AlgebraicGeometry.LocallyRingedSpace.Γ_obj_op @[simp] -theorem Γ_map {X Y : LocallyRingedSpaceᵒᵖ} (f : X ⟶ Y) : Γ.map f = f.unop.1.c.app (op ⊤) := +theorem Γ_map {X Y : LocallyRingedSpace.{u}ᵒᵖ} (f : X ⟶ Y) : Γ.map f = f.unop.1.c.app (op ⊤) := rfl set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.Γ_map AlgebraicGeometry.LocallyRingedSpace.Γ_map -theorem Γ_map_op {X Y : LocallyRingedSpace} (f : X ⟶ Y) : Γ.map f.op = f.1.c.app (op ⊤) := +theorem Γ_map_op {X Y : LocallyRingedSpace.{u}} (f : X ⟶ Y) : Γ.map f.op = f.1.c.app (op ⊤) := rfl set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.Γ_map_op AlgebraicGeometry.LocallyRingedSpace.Γ_map_op -theorem preimage_basicOpen {X Y : LocallyRingedSpace} (f : X ⟶ Y) {U : Opens Y} +theorem preimage_basicOpen {X Y : LocallyRingedSpace.{u}} (f : X ⟶ Y) {U : Opens Y} (s : Y.presheaf.obj (op U)) : (Opens.map f.1.base).obj (Y.toRingedSpace.basicOpen s) = @RingedSpace.basicOpen X.toRingedSpace ((Opens.map f.1.base).obj U) (f.1.c.app _ s) := by @@ -311,7 +315,7 @@ set_option linter.uppercaseLean3 false in -- This actually holds for all ringed spaces with nontrivial stalks. @[simp] -theorem basicOpen_zero (X : LocallyRingedSpace) (U : Opens X.carrier) : +theorem basicOpen_zero (X : LocallyRingedSpace.{u}) (U : Opens X.carrier) : X.toRingedSpace.basicOpen (0 : X.presheaf.obj <| op U) = ⊥ := by ext x simp only [RingedSpace.basicOpen, Opens.coe_mk, Set.mem_image, Set.mem_setOf_eq, Subtype.exists, @@ -324,7 +328,7 @@ theorem basicOpen_zero (X : LocallyRingedSpace) (U : Opens X.carrier) : set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.basic_open_zero AlgebraicGeometry.LocallyRingedSpace.basicOpen_zero -instance component_nontrivial (X : LocallyRingedSpace) (U : Opens X.carrier) [hU : Nonempty U] : +instance component_nontrivial (X : LocallyRingedSpace.{u}) (U : Opens X.carrier) [hU : Nonempty U] : Nontrivial (X.presheaf.obj <| op U) := (X.presheaf.germ hU.some).domain_nontrivial set_option linter.uppercaseLean3 false in From 705b6a671dba14cf9d96f739bd71695945f81003 Mon Sep 17 00:00:00 2001 From: Matthew Ballard Date: Tue, 7 May 2024 15:33:18 -0400 Subject: [PATCH 2/3] fix --- Mathlib/AlgebraicGeometry/Scheme.lean | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mathlib/AlgebraicGeometry/Scheme.lean b/Mathlib/AlgebraicGeometry/Scheme.lean index a4eb654488f6b..472756f673465 100644 --- a/Mathlib/AlgebraicGeometry/Scheme.lean +++ b/Mathlib/AlgebraicGeometry/Scheme.lean @@ -250,7 +250,7 @@ def Spec : CommRingCatᵒᵖ ⥤ Scheme where /-- The empty scheme. -/ @[simps] -def empty.{u} : Scheme.{u} where +def empty : Scheme where carrier := TopCat.of PEmpty presheaf := (CategoryTheory.Functor.const _).obj (CommRingCat.of PUnit) IsSheaf := Presheaf.isSheaf_of_isTerminal _ CommRingCat.punitIsTerminal From c71bf9200d12ff1c9316f1f95c990a2a455705df Mon Sep 17 00:00:00 2001 From: Matthew Ballard Date: Tue, 7 May 2024 16:05:07 -0400 Subject: [PATCH 3/3] lint --- Mathlib/AlgebraicGeometry/Restrict.lean | 3 ++- Mathlib/Geometry/RingedSpace/LocallyRingedSpace.lean | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Mathlib/AlgebraicGeometry/Restrict.lean b/Mathlib/AlgebraicGeometry/Restrict.lean index 8a48ce1552e23..f16df212bbb70 100644 --- a/Mathlib/AlgebraicGeometry/Restrict.lean +++ b/Mathlib/AlgebraicGeometry/Restrict.lean @@ -367,7 +367,8 @@ theorem Γ_map_morphismRestrict {X Y : Scheme.{u}} (f : X ⟶ Y) (U : Opens Y) : /-- Restricting a morphism onto the image of an open immersion is isomorphic to the base change along the immersion. -/ -def morphismRestrictOpensRange {X Y U : Scheme.{u}} (f : X ⟶ Y) (g : U ⟶ Y) [hg : IsOpenImmersion g] : +def morphismRestrictOpensRange + {X Y U : Scheme.{u}} (f : X ⟶ Y) (g : U ⟶ Y) [hg : IsOpenImmersion g] : Arrow.mk (f ∣_ Scheme.Hom.opensRange g) ≅ Arrow.mk (pullback.snd : pullback f g ⟶ _) := by let V : Opens Y := Scheme.Hom.opensRange g let e := diff --git a/Mathlib/Geometry/RingedSpace/LocallyRingedSpace.lean b/Mathlib/Geometry/RingedSpace/LocallyRingedSpace.lean index 2f08cf85bfcaa..dfac00c93d8ff 100644 --- a/Mathlib/Geometry/RingedSpace/LocallyRingedSpace.lean +++ b/Mathlib/Geometry/RingedSpace/LocallyRingedSpace.lean @@ -248,8 +248,8 @@ set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.restrict AlgebraicGeometry.LocallyRingedSpace.restrict /-- The canonical map from the restriction to the subspace. -/ -def ofRestrict {U : TopCat} (X : LocallyRingedSpace.{u}) {f : U ⟶ X.toTopCat} (h : OpenEmbedding f) : - X.restrict h ⟶ X := +def ofRestrict {U : TopCat} (X : LocallyRingedSpace.{u}) + {f : U ⟶ X.toTopCat} (h : OpenEmbedding f) : X.restrict h ⟶ X := ⟨X.toPresheafedSpace.ofRestrict h, fun _ => inferInstance⟩ set_option linter.uppercaseLean3 false in #align algebraic_geometry.LocallyRingedSpace.of_restrict AlgebraicGeometry.LocallyRingedSpace.ofRestrict