The free locus of a module #
Main definitions and results #
Let M
be a finitely presented R
-module.
Module.freeLocus
: The set of pointsx
inSpec R
such thatMₓ
is free overRₓ
.Module.freeLocus_eq_univ_iff
: The free locus is the wholeSpec R
if and only ifM
is projective.Module.basicOpen_subset_freeLocus_iff
:D(f)
is contained in the free locus if and only ifM_f
is projective overR_f
.Module.rankAtStalk
: The functionSpec R → ℕ
sendingx
torank_{Rₓ} Mₓ
.Module.isLocallyConstant_rankAtStalk
: IfM
is flat overR
, thenrankAtStalk
is locally constant.
def
Module.freeLocus
(R : Type uR)
(M : Type uM)
[CommRing R]
[AddCommGroup M]
[Module R M]
:
Set (PrimeSpectrum R)
The free locus of a module, i.e. the set of primes p
such that Mₚ
is free over Rₚ
.
Equations
- Module.freeLocus R M = {p : PrimeSpectrum R | Module.Free (Localization.AtPrime p.asIdeal) (LocalizedModule p.asIdeal.primeCompl M)}
Instances For
theorem
Module.mem_freeLocus
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
{p : PrimeSpectrum R}
:
theorem
Module.mem_freeLocus_of_isLocalization
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
(p : PrimeSpectrum R)
(Rₚ : Type u_1)
(Mₚ : Type u_2)
[CommRing Rₚ]
[Algebra R Rₚ]
[IsLocalization.AtPrime Rₚ p.asIdeal]
[AddCommGroup Mₚ]
[Module R Mₚ]
(f : M →ₗ[R] Mₚ)
[IsLocalizedModule p.asIdeal.primeCompl f]
[Module Rₚ Mₚ]
[IsScalarTower R Rₚ Mₚ]
:
theorem
Module.mem_freeLocus_iff_tensor
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
(p : PrimeSpectrum R)
(Rₚ : Type u_1)
[CommRing Rₚ]
[Algebra R Rₚ]
[IsLocalization.AtPrime Rₚ p.asIdeal]
:
theorem
Module.freeLocus_congr
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
{M' : Type u_1}
[AddCommGroup M']
[Module R M']
(e : M ≃ₗ[R] M')
:
theorem
Module.comap_freeLocus_le
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
{A : Type u_1}
[CommRing A]
[Algebra R A]
:
theorem
Module.freeLocus_localization
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
(S : Submonoid R)
:
freeLocus (Localization S) (LocalizedModule S M) = ⇑(PrimeSpectrum.comap (algebraMap R (Localization S))) ⁻¹' freeLocus R M
theorem
Module.freeLocus_eq_univ_iff
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[FinitePresentation R M]
:
theorem
Module.freeLocus_eq_univ
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[FinitePresentation R M]
[Flat R M]
:
theorem
Module.basicOpen_subset_freeLocus_iff
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[FinitePresentation R M]
{f : R}
:
↑(PrimeSpectrum.basicOpen f) ⊆ freeLocus R M ↔ Projective (Localization.Away f) (LocalizedModule (Submonoid.powers f) M)
theorem
Module.isOpen_freeLocus
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[FinitePresentation R M]
:
noncomputable def
Module.rankAtStalk
{R : Type uR}
(M : Type uM)
[CommRing R]
[AddCommGroup M]
[Module R M]
(p : PrimeSpectrum R)
:
The rank of M
at the stalk of p
is the rank of Mₚ
as a Rₚ
-module.
Equations
Instances For
theorem
Module.isLocallyConstant_rankAtStalk_freeLocus
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[FinitePresentation R M]
:
IsLocallyConstant fun (x : ↑(freeLocus R M)) => rankAtStalk M ↑x
theorem
Module.isLocallyConstant_rankAtStalk
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[FinitePresentation R M]
[Flat R M]
:
@[simp]
theorem
Module.rankAtStalk_eq_zero_of_subsingleton
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[Subsingleton M]
:
theorem
Module.nontrivial_of_rankAtStalk_pos
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
(h : 0 < rankAtStalk M)
:
theorem
Module.rankAtStalk_eq_of_equiv
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
{N : Type u_1}
[AddCommGroup N]
[Module R N]
(e : M ≃ₗ[R] N)
:
@[simp]
theorem
Module.rankAtStalk_eq_finrank_of_free
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[Free R M]
:
If M
is R
-free, its rank at stalks is constant and agrees with the R
-rank of M
.
theorem
Module.rankAtStalk_pi
{R : Type uR}
[CommRing R]
{ι : Type u_1}
[Finite ι]
(M : ι → Type u_2)
[(i : ι) → AddCommGroup (M i)]
[(i : ι) → Module R (M i)]
[∀ (i : ι), Flat R (M i)]
[∀ (i : ι), Module.Finite R (M i)]
(p : PrimeSpectrum R)
:
The rank of Π i, M i
at a prime p
is the sum of the ranks of M i
at p
.
theorem
Module.rankAtStalk_eq_finrank_tensorProduct
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
(p : PrimeSpectrum R)
:
rankAtStalk M p = finrank (Localization.AtPrime p.asIdeal) (TensorProduct R (Localization.AtPrime p.asIdeal) M)
theorem
Module.rankAtStalk_eq_zero_iff_notMem_support
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[Flat R M]
[Module.Finite R M]
(p : PrimeSpectrum R)
:
theorem
Module.rankAtStalk_pos_iff_mem_support
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[Flat R M]
[Module.Finite R M]
(p : PrimeSpectrum R)
:
theorem
Module.rankAtStalk_eq_zero_iff_subsingleton
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[Flat R M]
[Module.Finite R M]
:
theorem
Module.rankAtStalk_prod
{R : Type uR}
(M : Type uM)
[CommRing R]
[AddCommGroup M]
[Module R M]
[Flat R M]
[Module.Finite R M]
(N : Type u_1)
[AddCommGroup N]
[Module R N]
[Flat R N]
[Module.Finite R N]
:
The rank of M × N
at p
is equal to the sum of the ranks.
theorem
Module.rankAtStalk_baseChange
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[Flat R M]
[Module.Finite R M]
{S : Type u_1}
[CommRing S]
[Algebra R S]
(p : PrimeSpectrum S)
:
theorem
Module.rankAtStalk_tensorProduct
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[Flat R M]
[Module.Finite R M]
(N : Type u_1)
[AddCommGroup N]
[Module R N]
[Module.Finite R N]
[Flat R N]
:
See rankAtStalk_tensorProduct_of_isScalarTower
for a hetero-basic version.
theorem
Module.rankAtStalk_tensorProduct_of_isScalarTower
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[Flat R M]
[Module.Finite R M]
{S : Type u_1}
[CommRing S]
[Algebra R S]
(N : Type u_2)
[AddCommGroup N]
[Module R N]
[Module S N]
[IsScalarTower R S N]
[Module.Finite S N]
[Flat S N]
(p : PrimeSpectrum S)
:
rankAtStalk (TensorProduct R N M) p = rankAtStalk N p * rankAtStalk M ((algebraMap R S).specComap p)
theorem
Module.rankAtStalk_eq
{R : Type uR}
{M : Type uM}
[CommRing R]
[AddCommGroup M]
[Module R M]
[Flat R M]
[Module.Finite R M]
(p : PrimeSpectrum R)
:
The rank of a module M
at a prime p
is equal to the dimension
of κ(p) ⊗[R] M
as a κ(p)
-module.