algebraic_geometry.function_field
⟷
Mathlib.AlgebraicGeometry.FunctionField
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -55,7 +55,7 @@ noncomputable instance [IrreducibleSpace X.carrier] (U : Opens X.carrier) [Nonem
noncomputable instance [IsIntegral X] : Field X.functionField :=
by
- apply fieldOfIsUnitOrEqZero
+ apply Field.ofIsUnitOrEqZero
intro a
obtain ⟨U, m, s, rfl⟩ := TopCat.Presheaf.germ_exist _ _ a
rw [Classical.or_iff_not_imp_right, ← (X.presheaf.germ ⟨_, m⟩).map_zero]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -68,7 +68,7 @@ noncomputable instance [IsIntegral X] : Field X.functionField :=
erw [basic_open_eq_bot_iff]
exacts [ha, (RingedSpace.basic_open _ _).IsOpen]
have := (X.presheaf.germ ⟨_, hs⟩).isUnit_map (RingedSpace.is_unit_res_basic_open _ s)
- rwa [TopCat.Presheaf.germ_res_apply] at this
+ rwa [TopCat.Presheaf.germ_res_apply] at this
#print AlgebraicGeometry.germ_injective_of_isIntegral /-
theorem germ_injective_of_isIntegral [IsIntegral X] {U : Opens X.carrier} (x : U) :
@@ -76,7 +76,7 @@ theorem germ_injective_of_isIntegral [IsIntegral X] {U : Opens X.carrier} (x : U
by
rw [injective_iff_map_eq_zero]
intro y hy
- rw [← (X.presheaf.germ x).map_zero] at hy
+ rw [← (X.presheaf.germ x).map_zero] at hy
obtain ⟨W, hW, iU, iV, e⟩ := X.presheaf.germ_eq _ x.prop x.prop _ _ hy
cases show iU = iV from Subsingleton.elim _ _
haveI : Nonempty W := ⟨⟨_, hW⟩⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -58,7 +58,7 @@ noncomputable instance [IsIntegral X] : Field X.functionField :=
apply fieldOfIsUnitOrEqZero
intro a
obtain ⟨U, m, s, rfl⟩ := TopCat.Presheaf.germ_exist _ _ a
- rw [or_iff_not_imp_right, ← (X.presheaf.germ ⟨_, m⟩).map_zero]
+ rw [Classical.or_iff_not_imp_right, ← (X.presheaf.germ ⟨_, m⟩).map_zero]
intro ha
replace ha := ne_of_apply_ne _ ha
have hs : genericPoint X.carrier ∈ RingedSpace.basic_open _ s :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,7 +3,7 @@ Copyright (c) 2022 Andrew Yang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-/
-import Mathbin.AlgebraicGeometry.Properties
+import AlgebraicGeometry.Properties
#align_import algebraic_geometry.function_field from "leanprover-community/mathlib"@"728ef9dbb281241906f25cbeb30f90d83e0bb451"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,14 +2,11 @@
Copyright (c) 2022 Andrew Yang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module algebraic_geometry.function_field
-! leanprover-community/mathlib commit 728ef9dbb281241906f25cbeb30f90d83e0bb451
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.AlgebraicGeometry.Properties
+#align_import algebraic_geometry.function_field from "leanprover-community/mathlib"@"728ef9dbb281241906f25cbeb30f90d83e0bb451"
+
/-!
# Function field of integral schemes
mathlib commit https://github.com/leanprover-community/mathlib/commit/728ef9dbb281241906f25cbeb30f90d83e0bb451
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
! This file was ported from Lean 3 source module algebraic_geometry.function_field
-! leanprover-community/mathlib commit d39590fc8728fbf6743249802486f8c91ffe07bc
+! leanprover-community/mathlib commit 728ef9dbb281241906f25cbeb30f90d83e0bb451
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,6 +13,9 @@ import Mathbin.AlgebraicGeometry.Properties
/-!
# Function field of integral schemes
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We define the function field of an irreducible scheme as the stalk of the generic point.
This is a field when the scheme is integral.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9240e8be927a0955b9a82c6c85ef499ee3a626b8
@@ -31,12 +31,15 @@ namespace AlgebraicGeometry
variable (X : Scheme)
+#print AlgebraicGeometry.Scheme.functionField /-
/-- The function field of an irreducible scheme is the local ring at its generic point.
Despite the name, this is a field only when the scheme is integral. -/
noncomputable abbrev Scheme.functionField [IrreducibleSpace X.carrier] : CommRingCat :=
X.Presheaf.stalk (genericPoint X.carrier)
#align algebraic_geometry.Scheme.function_field AlgebraicGeometry.Scheme.functionField
+-/
+#print AlgebraicGeometry.Scheme.germToFunctionField /-
/-- The restriction map from a component to the function field. -/
noncomputable abbrev Scheme.germToFunctionField [IrreducibleSpace X.carrier] (U : Opens X.carrier)
[h : Nonempty U] : X.Presheaf.obj (op U) ⟶ X.functionField :=
@@ -44,6 +47,7 @@ noncomputable abbrev Scheme.germToFunctionField [IrreducibleSpace X.carrier] (U
⟨genericPoint X.carrier,
((genericPoint_spec X.carrier).mem_open_set_iff U.IsOpen).mpr (by simpa using h)⟩
#align algebraic_geometry.Scheme.germ_to_function_field AlgebraicGeometry.Scheme.germToFunctionField
+-/
noncomputable instance [IrreducibleSpace X.carrier] (U : Opens X.carrier) [Nonempty U] :
Algebra (X.Presheaf.obj (op U)) X.functionField :=
@@ -66,6 +70,7 @@ noncomputable instance [IsIntegral X] : Field X.functionField :=
have := (X.presheaf.germ ⟨_, hs⟩).isUnit_map (RingedSpace.is_unit_res_basic_open _ s)
rwa [TopCat.Presheaf.germ_res_apply] at this
+#print AlgebraicGeometry.germ_injective_of_isIntegral /-
theorem germ_injective_of_isIntegral [IsIntegral X] {U : Opens X.carrier} (x : U) :
Function.Injective (X.Presheaf.germ x) :=
by
@@ -77,13 +82,17 @@ theorem germ_injective_of_isIntegral [IsIntegral X] {U : Opens X.carrier} (x : U
haveI : Nonempty W := ⟨⟨_, hW⟩⟩
exact map_injective_of_is_integral X iU e
#align algebraic_geometry.germ_injective_of_is_integral AlgebraicGeometry.germ_injective_of_isIntegral
+-/
+#print AlgebraicGeometry.Scheme.germToFunctionField_injective /-
theorem Scheme.germToFunctionField_injective [IsIntegral X] (U : Opens X.carrier) [Nonempty U] :
Function.Injective (X.germToFunctionField U) :=
germ_injective_of_isIntegral _ _
#align algebraic_geometry.Scheme.germ_to_function_field_injective AlgebraicGeometry.Scheme.germToFunctionField_injective
+-/
-theorem genericPoint_eq_of_isOpenImmersionCat {X Y : Scheme} (f : X ⟶ Y) [H : IsOpenImmersionCat f]
+#print AlgebraicGeometry.genericPoint_eq_of_isOpenImmersion /-
+theorem genericPoint_eq_of_isOpenImmersion {X Y : Scheme} (f : X ⟶ Y) [H : IsOpenImmersionCat f]
[hX : IrreducibleSpace X.carrier] [IrreducibleSpace Y.carrier] :
f.1.base (genericPoint X.carrier : _) = (genericPoint Y.carrier : _) :=
by
@@ -97,15 +106,19 @@ theorem genericPoint_eq_of_isOpenImmersionCat {X Y : Scheme} (f : X ⟶ Y) [H :
apply (config := { instances := false }) PreirreducibleSpace.isPreirreducible_univ
show PreirreducibleSpace Y.carrier; · infer_instance
exact ⟨_, trivial, Set.mem_range_self hX.2.some⟩
-#align algebraic_geometry.generic_point_eq_of_is_open_immersion AlgebraicGeometry.genericPoint_eq_of_isOpenImmersionCat
+#align algebraic_geometry.generic_point_eq_of_is_open_immersion AlgebraicGeometry.genericPoint_eq_of_isOpenImmersion
+-/
+#print AlgebraicGeometry.stalkFunctionFieldAlgebra /-
noncomputable instance stalkFunctionFieldAlgebra [IrreducibleSpace X.carrier] (x : X.carrier) :
Algebra (X.Presheaf.stalk x) X.functionField :=
by
apply RingHom.toAlgebra
exact X.presheaf.stalk_specializes ((genericPoint_spec X.carrier).Specializes trivial)
#align algebraic_geometry.stalk_function_field_algebra AlgebraicGeometry.stalkFunctionFieldAlgebra
+-/
+#print AlgebraicGeometry.functionField_isScalarTower /-
instance functionField_isScalarTower [IrreducibleSpace X.carrier] (U : Opens X.carrier) (x : U)
[Nonempty U] : IsScalarTower (X.Presheaf.obj <| op U) (X.Presheaf.stalk x) X.functionField :=
by
@@ -115,11 +128,13 @@ instance functionField_isScalarTower [IrreducibleSpace X.carrier] (U : Opens X.c
rw [X.presheaf.germ_stalk_specializes]
rfl
#align algebraic_geometry.function_field_is_scalar_tower AlgebraicGeometry.functionField_isScalarTower
+-/
noncomputable instance (R : CommRingCat) [IsDomain R] :
Algebra R (Scheme.Spec.obj <| op R).functionField :=
RingHom.toAlgebra <| by change CommRingCat.of R ⟶ _; apply structure_sheaf.to_stalk
+#print AlgebraicGeometry.genericPoint_eq_bot_of_affine /-
@[simp]
theorem genericPoint_eq_bot_of_affine (R : CommRingCat) [IsDomain R] :
genericPoint (Scheme.Spec.obj <| op R).carrier = (⟨0, Ideal.bot_prime⟩ : PrimeSpectrum R) :=
@@ -127,7 +142,9 @@ theorem genericPoint_eq_bot_of_affine (R : CommRingCat) [IsDomain R] :
apply (genericPoint_spec (Scheme.Spec.obj <| op R).carrier).Eq
simp [isGenericPoint_def, ← PrimeSpectrum.zeroLocus_vanishingIdeal_eq_closure]
#align algebraic_geometry.generic_point_eq_bot_of_affine AlgebraicGeometry.genericPoint_eq_bot_of_affine
+-/
+#print AlgebraicGeometry.functionField_isFractionRing_of_affine /-
instance functionField_isFractionRing_of_affine (R : CommRingCat.{u}) [IsDomain R] :
IsFractionRing R (Scheme.Spec.obj <| op R).functionField :=
by
@@ -138,12 +155,14 @@ instance functionField_isFractionRing_of_affine (R : CommRingCat.{u}) [IsDomain
ext
exact mem_nonZeroDivisors_iff_ne_zero
#align algebraic_geometry.function_field_is_fraction_ring_of_affine AlgebraicGeometry.functionField_isFractionRing_of_affine
+-/
instance {X : Scheme} [IsIntegral X] {U : Opens X.carrier} [hU : Nonempty U] :
IsIntegral (X.restrict U.OpenEmbedding) :=
haveI : Nonempty (X.restrict U.open_embedding).carrier := hU
is_integral_of_open_immersion (X.of_restrict U.open_embedding)
+#print AlgebraicGeometry.IsAffineOpen.primeIdealOf_genericPoint /-
theorem IsAffineOpen.primeIdealOf_genericPoint {X : Scheme} [IsIntegral X] {U : Opens X.carrier}
(hU : IsAffineOpen U) [h : Nonempty U] :
hU.primeIdealOf
@@ -163,7 +182,9 @@ theorem IsAffineOpen.primeIdealOf_genericPoint {X : Scheme} [IsIntegral X] {U :
ext1
exact (generic_point_eq_of_is_open_immersion (X.of_restrict U.open_embedding)).symm
#align algebraic_geometry.is_affine_open.prime_ideal_of_generic_point AlgebraicGeometry.IsAffineOpen.primeIdealOf_genericPoint
+-/
+#print AlgebraicGeometry.functionField_isFractionRing_of_isAffineOpen /-
theorem functionField_isFractionRing_of_isAffineOpen [IsIntegral X] (U : Opens X.carrier)
(hU : IsAffineOpen U) [hU' : Nonempty U] :
IsFractionRing (X.Presheaf.obj <| op U) X.functionField :=
@@ -180,6 +201,7 @@ theorem functionField_isFractionRing_of_isAffineOpen [IsIntegral X] (U : Opens X
rw [hU.prime_ideal_of_generic_point, generic_point_eq_bot_of_affine]
ext; exact mem_nonZeroDivisors_iff_ne_zero
#align algebraic_geometry.function_field_is_fraction_ring_of_is_affine_open AlgebraicGeometry.functionField_isFractionRing_of_isAffineOpen
+-/
instance (x : X.carrier) : IsAffine (X.affineCover.obj x) :=
AlgebraicGeometry.SpecIsAffine _
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b981918a93bc45a8600de608cde7944a80d92b9
@@ -182,7 +182,7 @@ theorem functionField_isFractionRing_of_isAffineOpen [IsIntegral X] (U : Opens X
#align algebraic_geometry.function_field_is_fraction_ring_of_is_affine_open AlgebraicGeometry.functionField_isFractionRing_of_isAffineOpen
instance (x : X.carrier) : IsAffine (X.affineCover.obj x) :=
- AlgebraicGeometry.specIsAffine _
+ AlgebraicGeometry.SpecIsAffine _
instance [h : IsIntegral X] (x : X.carrier) : IsFractionRing (X.Presheaf.stalk x) X.functionField :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/6285167a053ad0990fc88e56c48ccd9fae6550eb
@@ -83,7 +83,7 @@ theorem Scheme.germToFunctionField_injective [IsIntegral X] (U : Opens X.carrier
germ_injective_of_isIntegral _ _
#align algebraic_geometry.Scheme.germ_to_function_field_injective AlgebraicGeometry.Scheme.germToFunctionField_injective
-theorem genericPoint_eq_of_isOpenImmersion {X Y : Scheme} (f : X ⟶ Y) [H : IsOpenImmersion f]
+theorem genericPoint_eq_of_isOpenImmersionCat {X Y : Scheme} (f : X ⟶ Y) [H : IsOpenImmersionCat f]
[hX : IrreducibleSpace X.carrier] [IrreducibleSpace Y.carrier] :
f.1.base (genericPoint X.carrier : _) = (genericPoint Y.carrier : _) :=
by
@@ -97,7 +97,7 @@ theorem genericPoint_eq_of_isOpenImmersion {X Y : Scheme} (f : X ⟶ Y) [H : IsO
apply (config := { instances := false }) PreirreducibleSpace.isPreirreducible_univ
show PreirreducibleSpace Y.carrier; · infer_instance
exact ⟨_, trivial, Set.mem_range_self hX.2.some⟩
-#align algebraic_geometry.generic_point_eq_of_is_open_immersion AlgebraicGeometry.genericPoint_eq_of_isOpenImmersion
+#align algebraic_geometry.generic_point_eq_of_is_open_immersion AlgebraicGeometry.genericPoint_eq_of_isOpenImmersionCat
noncomputable instance stalkFunctionFieldAlgebra [IrreducibleSpace X.carrier] (x : X.carrier) :
Algebra (X.Presheaf.stalk x) X.functionField :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -117,19 +117,19 @@ instance functionField_isScalarTower [IrreducibleSpace X.carrier] (U : Opens X.c
#align algebraic_geometry.function_field_is_scalar_tower AlgebraicGeometry.functionField_isScalarTower
noncomputable instance (R : CommRingCat) [IsDomain R] :
- Algebra R (Scheme.spec.obj <| op R).functionField :=
+ Algebra R (Scheme.Spec.obj <| op R).functionField :=
RingHom.toAlgebra <| by change CommRingCat.of R ⟶ _; apply structure_sheaf.to_stalk
@[simp]
theorem genericPoint_eq_bot_of_affine (R : CommRingCat) [IsDomain R] :
- genericPoint (Scheme.spec.obj <| op R).carrier = (⟨0, Ideal.bot_prime⟩ : PrimeSpectrum R) :=
+ genericPoint (Scheme.Spec.obj <| op R).carrier = (⟨0, Ideal.bot_prime⟩ : PrimeSpectrum R) :=
by
apply (genericPoint_spec (Scheme.Spec.obj <| op R).carrier).Eq
simp [isGenericPoint_def, ← PrimeSpectrum.zeroLocus_vanishingIdeal_eq_closure]
#align algebraic_geometry.generic_point_eq_bot_of_affine AlgebraicGeometry.genericPoint_eq_bot_of_affine
instance functionField_isFractionRing_of_affine (R : CommRingCat.{u}) [IsDomain R] :
- IsFractionRing R (Scheme.spec.obj <| op R).functionField :=
+ IsFractionRing R (Scheme.Spec.obj <| op R).functionField :=
by
convert structure_sheaf.is_localization.to_stalk R _
delta IsFractionRing IsLocalization.AtPrime
@@ -149,7 +149,7 @@ theorem IsAffineOpen.primeIdealOf_genericPoint {X : Scheme} [IsIntegral X] {U :
hU.primeIdealOf
⟨genericPoint X.carrier,
((genericPoint_spec X.carrier).mem_open_set_iff U.IsOpen).mpr (by simpa using h)⟩ =
- genericPoint (Scheme.spec.obj <| op <| X.Presheaf.obj <| op U).carrier :=
+ genericPoint (Scheme.Spec.obj <| op <| X.Presheaf.obj <| op U).carrier :=
by
haveI : is_affine _ := hU
have e : U.open_embedding.is_open_map.functor.obj ⊤ = U := by ext1;
@@ -182,7 +182,7 @@ theorem functionField_isFractionRing_of_isAffineOpen [IsIntegral X] (U : Opens X
#align algebraic_geometry.function_field_is_fraction_ring_of_is_affine_open AlgebraicGeometry.functionField_isFractionRing_of_isAffineOpen
instance (x : X.carrier) : IsAffine (X.affineCover.obj x) :=
- AlgebraicGeometry.spec_isAffine _
+ AlgebraicGeometry.specIsAffine _
instance [h : IsIntegral X] (x : X.carrier) : IsFractionRing (X.Presheaf.stalk x) X.functionField :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -89,7 +89,7 @@ theorem genericPoint_eq_of_isOpenImmersion {X Y : Scheme} (f : X ⟶ Y) [H : IsO
by
apply ((genericPoint_spec _).Eq _).symm
show T0Space Y.carrier; · infer_instance
- convert(genericPoint_spec X.carrier).image (show Continuous f.1.base by continuity)
+ convert (genericPoint_spec X.carrier).image (show Continuous f.1.base by continuity)
symm
rw [eq_top_iff, Set.top_eq_univ, Set.top_eq_univ]
convert subset_closure_inter_of_isPreirreducible_of_isOpen _ H.base_open.open_range _
@@ -156,7 +156,8 @@ theorem IsAffineOpen.primeIdealOf_genericPoint {X : Scheme} [IsIntegral X] {U :
exact set.image_univ.trans Subtype.range_coe
delta is_affine_open.prime_ideal_of
rw [← Scheme.comp_val_base_apply]
- convert generic_point_eq_of_is_open_immersion
+ convert
+ generic_point_eq_of_is_open_immersion
((X.restrict U.open_embedding).isoSpec.Hom ≫
Scheme.Spec.map (X.presheaf.map (eq_to_hom e).op).op)
ext1
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -62,16 +62,16 @@ noncomputable instance [IsIntegral X] : Field X.functionField :=
rw [← SetLike.mem_coe, (genericPoint_spec X.carrier).mem_open_set_iff, Set.top_eq_univ,
Set.univ_inter, Set.nonempty_iff_ne_empty, Ne.def, ← opens.coe_bot, ← SetLike.ext'_iff]
erw [basic_open_eq_bot_iff]
- exacts[ha, (RingedSpace.basic_open _ _).IsOpen]
+ exacts [ha, (RingedSpace.basic_open _ _).IsOpen]
have := (X.presheaf.germ ⟨_, hs⟩).isUnit_map (RingedSpace.is_unit_res_basic_open _ s)
- rwa [TopCat.Presheaf.germ_res_apply] at this
+ rwa [TopCat.Presheaf.germ_res_apply] at this
theorem germ_injective_of_isIntegral [IsIntegral X] {U : Opens X.carrier} (x : U) :
Function.Injective (X.Presheaf.germ x) :=
by
rw [injective_iff_map_eq_zero]
intro y hy
- rw [← (X.presheaf.germ x).map_zero] at hy
+ rw [← (X.presheaf.germ x).map_zero] at hy
obtain ⟨W, hW, iU, iV, e⟩ := X.presheaf.germ_eq _ x.prop x.prop _ _ hy
cases show iU = iV from Subsingleton.elim _ _
haveI : Nonempty W := ⟨⟨_, hW⟩⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -118,9 +118,7 @@ instance functionField_isScalarTower [IrreducibleSpace X.carrier] (U : Opens X.c
noncomputable instance (R : CommRingCat) [IsDomain R] :
Algebra R (Scheme.spec.obj <| op R).functionField :=
- RingHom.toAlgebra <| by
- change CommRingCat.of R ⟶ _
- apply structure_sheaf.to_stalk
+ RingHom.toAlgebra <| by change CommRingCat.of R ⟶ _; apply structure_sheaf.to_stalk
@[simp]
theorem genericPoint_eq_bot_of_affine (R : CommRingCat) [IsDomain R] :
@@ -154,9 +152,7 @@ theorem IsAffineOpen.primeIdealOf_genericPoint {X : Scheme} [IsIntegral X] {U :
genericPoint (Scheme.spec.obj <| op <| X.Presheaf.obj <| op U).carrier :=
by
haveI : is_affine _ := hU
- have e : U.open_embedding.is_open_map.functor.obj ⊤ = U :=
- by
- ext1
+ have e : U.open_embedding.is_open_map.functor.obj ⊤ = U := by ext1;
exact set.image_univ.trans Subtype.range_coe
delta is_affine_open.prime_ideal_of
rw [← Scheme.comp_val_base_apply]
@@ -175,19 +171,13 @@ theorem functionField_isFractionRing_of_isAffineOpen [IsIntegral X] (U : Opens X
haveI : Nonempty (X.restrict U.open_embedding).carrier := hU'
haveI : IsIntegral (X.restrict U.open_embedding) :=
@is_integral_of_is_affine_is_domain _ _ _
- (by
- dsimp
- rw [opens.open_embedding_obj_top]
- infer_instance)
- have e : U.open_embedding.is_open_map.functor.obj ⊤ = U :=
- by
- ext1
+ (by dsimp; rw [opens.open_embedding_obj_top]; infer_instance)
+ have e : U.open_embedding.is_open_map.functor.obj ⊤ = U := by ext1;
exact set.image_univ.trans Subtype.range_coe
delta IsFractionRing Scheme.function_field
convert hU.is_localization_stalk ⟨genericPoint X.carrier, _⟩ using 1
rw [hU.prime_ideal_of_generic_point, generic_point_eq_bot_of_affine]
- ext
- exact mem_nonZeroDivisors_iff_ne_zero
+ ext; exact mem_nonZeroDivisors_iff_ne_zero
#align algebraic_geometry.function_field_is_fraction_ring_of_is_affine_open AlgebraicGeometry.functionField_isFractionRing_of_isAffineOpen
instance (x : X.carrier) : IsAffine (X.affineCover.obj x) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/9b2b58d6b14b895b2f375108e765cb47de71aebd
@@ -191,7 +191,7 @@ theorem functionField_isFractionRing_of_isAffineOpen [IsIntegral X] (U : Opens X
#align algebraic_geometry.function_field_is_fraction_ring_of_is_affine_open AlgebraicGeometry.functionField_isFractionRing_of_isAffineOpen
instance (x : X.carrier) : IsAffine (X.affineCover.obj x) :=
- AlgebraicGeometry.specIsAffine _
+ AlgebraicGeometry.spec_isAffine _
instance [h : IsIntegral X] (x : X.carrier) : IsFractionRing (X.Presheaf.stalk x) X.functionField :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -89,7 +89,7 @@ theorem genericPoint_eq_of_isOpenImmersion {X Y : Scheme} (f : X ⟶ Y) [H : IsO
by
apply ((genericPoint_spec _).Eq _).symm
show T0Space Y.carrier; · infer_instance
- convert (genericPoint_spec X.carrier).image (show Continuous f.1.base by continuity)
+ convert(genericPoint_spec X.carrier).image (show Continuous f.1.base by continuity)
symm
rw [eq_top_iff, Set.top_eq_univ, Set.top_eq_univ]
convert subset_closure_inter_of_isPreirreducible_of_isOpen _ H.base_open.open_range _
@@ -160,8 +160,7 @@ theorem IsAffineOpen.primeIdealOf_genericPoint {X : Scheme} [IsIntegral X] {U :
exact set.image_univ.trans Subtype.range_coe
delta is_affine_open.prime_ideal_of
rw [← Scheme.comp_val_base_apply]
- convert
- generic_point_eq_of_is_open_immersion
+ convert generic_point_eq_of_is_open_immersion
((X.restrict U.open_embedding).isoSpec.Hom ≫
Scheme.Spec.map (X.presheaf.map (eq_to_hom e).op).op)
ext1
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -56,8 +56,9 @@ noncomputable instance [IsIntegral X] : Field X.functionField := by
have hs : genericPoint X.carrier ∈ RingedSpace.basicOpen _ s := by
rw [← SetLike.mem_coe, (genericPoint_spec X.carrier).mem_open_set_iff, Set.top_eq_univ,
Set.univ_inter, Set.nonempty_iff_ne_empty, Ne, ← Opens.coe_bot, ← SetLike.ext'_iff]
- erw [basicOpen_eq_bot_iff]
- exacts [ha, (RingedSpace.basicOpen _ _).isOpen]
+ · erw [basicOpen_eq_bot_iff]
+ exact ha
+ · exact (RingedSpace.basicOpen _ _).isOpen
have := (X.presheaf.germ ⟨_, hs⟩).isUnit_map (RingedSpace.isUnit_res_basicOpen _ s)
rwa [TopCat.Presheaf.germ_res_apply] at this
@@ -87,9 +88,9 @@ theorem genericPoint_eq_of_isOpenImmersion {X Y : Scheme} (f : X ⟶ Y) [H : IsO
symm
rw [eq_top_iff, Set.top_eq_univ, Set.top_eq_univ]
convert subset_closure_inter_of_isPreirreducible_of_isOpen _ H.base_open.isOpen_range _
- rw [Set.univ_inter, Set.image_univ]
- apply PreirreducibleSpace.isPreirreducible_univ (X := Y.carrier)
- exact ⟨_, trivial, Set.mem_range_self hX.2.some⟩
+ · rw [Set.univ_inter, Set.image_univ]
+ · apply PreirreducibleSpace.isPreirreducible_univ (X := Y.carrier)
+ · exact ⟨_, trivial, Set.mem_range_self hX.2.some⟩
#align algebraic_geometry.generic_point_eq_of_is_open_immersion AlgebraicGeometry.genericPoint_eq_of_isOpenImmersion
noncomputable instance stalkFunctionFieldAlgebra [IrreducibleSpace X.carrier] (x : X.carrier) :
@@ -106,7 +106,7 @@ instance functionField_isScalarTower [IrreducibleSpace X.carrier] (U : Opens X.c
rw [X.presheaf.germ_stalkSpecializes]
#align algebraic_geometry.function_field_is_scalar_tower AlgebraicGeometry.functionField_isScalarTower
-noncomputable instance (R : CommRingCat) [IsDomain R] :
+noncomputable instance (R : CommRingCat.{u}) [IsDomain R] :
Algebra R (Scheme.Spec.obj <| op R).functionField :=
RingHom.toAlgebra <| by change CommRingCat.of R ⟶ _; apply StructureSheaf.toStalk
Among other things, change the nsmul
, zsmul
, qsmul
fields to have n
/q
come before x
, because this matches the lemmas we want to write about them. It would be preferrable to perform the same changes to the AddMonoid
/AddGroup
-like typeclasses, but this is impossible with the current to_additive
framework, so instead I have inserted some Function.swap
at the interface between AddMonoid
/AddGroup
and Ring
/Field
.
Reduce the diff of #11203
@@ -48,8 +48,7 @@ noncomputable instance [IrreducibleSpace X.carrier] (U : Opens X.carrier) [Nonem
(X.germToFunctionField U).toAlgebra
noncomputable instance [IsIntegral X] : Field X.functionField := by
- apply fieldOfIsUnitOrEqZero
- intro a
+ refine .ofIsUnitOrEqZero fun a ↦ ?_
obtain ⟨U, m, s, rfl⟩ := TopCat.Presheaf.germ_exist _ _ a
rw [or_iff_not_imp_right, ← (X.presheaf.germ ⟨_, m⟩).map_zero]
intro ha
@@ -56,7 +56,7 @@ noncomputable instance [IsIntegral X] : Field X.functionField := by
replace ha := ne_of_apply_ne _ ha
have hs : genericPoint X.carrier ∈ RingedSpace.basicOpen _ s := by
rw [← SetLike.mem_coe, (genericPoint_spec X.carrier).mem_open_set_iff, Set.top_eq_univ,
- Set.univ_inter, Set.nonempty_iff_ne_empty, Ne.def, ← Opens.coe_bot, ← SetLike.ext'_iff]
+ Set.univ_inter, Set.nonempty_iff_ne_empty, Ne, ← Opens.coe_bot, ← SetLike.ext'_iff]
erw [basicOpen_eq_bot_iff]
exacts [ha, (RingedSpace.basicOpen _ _).isOpen]
have := (X.presheaf.germ ⟨_, hs⟩).isUnit_map (RingedSpace.isUnit_res_basicOpen _ s)
All these lemmas refer to the range of some function being open/range (i.e. isOpen
or isClosed
).
@@ -87,7 +87,7 @@ theorem genericPoint_eq_of_isOpenImmersion {X Y : Scheme} (f : X ⟶ Y) [H : IsO
(show Continuous f.1.base from ContinuousMap.continuous_toFun _)
symm
rw [eq_top_iff, Set.top_eq_univ, Set.top_eq_univ]
- convert subset_closure_inter_of_isPreirreducible_of_isOpen _ H.base_open.open_range _
+ convert subset_closure_inter_of_isPreirreducible_of_isOpen _ H.base_open.isOpen_range _
rw [Set.univ_inter, Set.image_univ]
apply PreirreducibleSpace.isPreirreducible_univ (X := Y.carrier)
exact ⟨_, trivial, Set.mem_range_self hX.2.some⟩
@@ -176,7 +176,7 @@ instance [IsIntegral X] (x : X.carrier) :
IsFractionRing (X.presheaf.stalk x) X.functionField :=
let U : Opens X.carrier :=
⟨Set.range (X.affineCover.map x).1.base,
- PresheafedSpace.IsOpenImmersion.base_open.open_range⟩
+ PresheafedSpace.IsOpenImmersion.base_open.isOpen_range⟩
have hU : IsAffineOpen U := rangeIsAffineOpenOfOpenImmersion (X.affineCover.map x)
let x : U := ⟨x, X.affineCover.Covers x⟩
have : Nonempty U := ⟨x⟩
X, Y, Z are standard mathematical names for topological spaces. As discussed on zulip, let us rename them.
As a drive-by commit, re-use the declared variables $\iota$, $s$ and $t$ (more) when stating theorems.
Co-authored-by: grunweg <grunweg@posteo.de>
@@ -89,7 +89,7 @@ theorem genericPoint_eq_of_isOpenImmersion {X Y : Scheme} (f : X ⟶ Y) [H : IsO
rw [eq_top_iff, Set.top_eq_univ, Set.top_eq_univ]
convert subset_closure_inter_of_isPreirreducible_of_isOpen _ H.base_open.open_range _
rw [Set.univ_inter, Set.image_univ]
- apply PreirreducibleSpace.isPreirreducible_univ (α := Y.carrier)
+ apply PreirreducibleSpace.isPreirreducible_univ (X := Y.carrier)
exact ⟨_, trivial, Set.mem_range_self hX.2.some⟩
#align algebraic_geometry.generic_point_eq_of_is_open_immersion AlgebraicGeometry.genericPoint_eq_of_isOpenImmersion
Fixed AlgebraicGeometry/AffineSchemes.lean
, AlgebraicGeometry/Morphisms/QuasiSeparated.lean
and AlgebraicGeometry/Morphisms/RingHomProperties.lean
.
Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com> Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -145,14 +145,11 @@ theorem IsAffineOpen.primeIdealOf_genericPoint {X : Scheme} [IsIntegral X] {U :
((genericPoint_spec X.carrier).mem_open_set_iff U.isOpen).mpr (by simpa using h)⟩ =
genericPoint (Scheme.Spec.obj <| op <| X.presheaf.obj <| op U).carrier := by
haveI : IsAffine _ := hU
- have e : U.openEmbedding.isOpenMap.functor.obj ⊤ = U := by
- ext1; exact Set.image_univ.trans Subtype.range_coe
delta IsAffineOpen.primeIdealOf
- erw [← Scheme.comp_val_base_apply]
convert
genericPoint_eq_of_isOpenImmersion
((X.restrict U.openEmbedding).isoSpec.hom ≫
- Scheme.Spec.map (X.presheaf.map (eqToHom e).op).op)
+ Scheme.Spec.map (X.presheaf.map (eqToHom U.openEmbedding_obj_top).op).op)
-- Porting note: this was `ext1`
apply Subtype.ext
exact (genericPoint_eq_of_isOpenImmersion (X.ofRestrict U.openEmbedding)).symm
@@ -2,14 +2,11 @@
Copyright (c) 2022 Andrew Yang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module algebraic_geometry.function_field
-! leanprover-community/mathlib commit d39590fc8728fbf6743249802486f8c91ffe07bc
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.AlgebraicGeometry.Properties
+#align_import algebraic_geometry.function_field from "leanprover-community/mathlib"@"d39590fc8728fbf6743249802486f8c91ffe07bc"
+
/-!
# Function field of integral schemes
The unported dependencies are