The free locus of a module #
Main definitions and results #
Let M be a finitely presented R-module.
Module.freeLocus: The set of pointsxinSpec Rsuch thatMₓis free overRₓ.Module.freeLocus_eq_univ_iff: The free locus is the wholeSpec Rif and only ifMis projective.Module.basicOpen_subset_freeLocus_iff:D(f)is contained in the free locus if and only ifM_fis projective overR_f.Module.rankAtStalk: The functionSpec R → ℕsendingxtorank_{Rₓ} Mₓ.Module.isLocallyConstant_rankAtStalk: IfMis flat overR, thenrankAtStalkis 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.