Complements on ideals of a Dedekind domain #
This file collects general facts about ideals and height-one primes of a Dedekind domain,
complementing Mathlib/RingTheory/DedekindDomain/Ideal/Lemmas.lean. In particular, it develops
the predicate Ideal.IsPrimeTo I S, saying that I is nonzero and divisible by no prime in S,
together with its induction principle Ideal.IsPrimeTo.induction_on and its transport
Ideal.isPrimeTo_comap_iff along a ring isomorphism.
The predicate is closed under products (Ideal.isPrimeTo_mul_iff, its finite form
Ideal.isPrimeTo_prod_iff) and powers (Ideal.isPrimeTo_pow_iff), and forbidding one more
prime is Ideal.isPrimeTo_insert_iff. Complementing a set of primes
turns it into a support condition: IsPrimeTo I Sᶜ says that every prime factor of I lies in
S. The two extreme cases are Ideal.isPrimeTo_univ_iff (no prime factor at all, so I = ⊤) and
Ideal.isPrimeTo_compl_singleton_iff (a single allowed prime, so I is a prime power), and
Ideal.IsPrimeTo.exists_eq_pow_mul splits off one allowed prime at a time. The file also records
the prime-power factorization Ideal.exists_eq_prod_pow of an arbitrary nonzero ideal. Together
with the uniqueness statement Ideal.eq_and_eq_of_pow_mul_eq_pow_mul and the relative primality
Ideal.IsPrimeTo.isRelPrime of ideals supported on complementary sets, these are what turn a
finite set of primes into a finite Euler product in
TauCeti/NumberTheory/ArithmeticDirichletSeries/EulerProduct/Basic.lean.
It also collects how an isomorphism e : R ≃+* R' moves ideals: Ideal.map e preserves
divisibility (Ideal.map_dvd_map_iff_of_ringEquiv, Ideal.map_pow_dvd_map_iff_of_ringEquiv,
stated over commutative semirings, since the proofs use only that Ideal.map e and
Ideal.map e.symm are mutually inverse) and factorisation multiplicities
(Ideal.count_factors_map_of_ringEquiv), and Mathlib's transport equivOfRingEquiv e of height
one primes is Ideal.map e on underlying ideals
(IsDedekindDomain.HeightOneSpectrum.asIdeal_equivOfRingEquiv). Those four are the ideal-level
input to the adic-valuation transport in
TauCeti/RingTheory/DedekindDomain/AdicValuation/Transport.lean; they are adapted from
AINTLIB (Apache-2.0), commit 513e83879e2f,
projects/HasseWeil/HasseWeil/WeilPairing/DivisorGalois.lean. The inverse transport
(equivOfRingEquiv e).symm is Ideal.comap e on underlying ideals
(IsDedekindDomain.HeightOneSpectrum.asIdeal_equivOfRingEquiv_symm).
Ideal.IsPrimeTo generalizes the IsGood predicate of
TauCetiRoadmap/ArithmeticDirichletSeries/Suggested.lean, where it is stated for the bad primes
of an ideal weight on a number field; the design of the predicate — nonzeroness included, so that
⊥ is prime to no set at all — is taken from there, while nothing in it is specific to a number
field.
The file also identifies any height-one prime of a discrete valuation ring with its maximal ideal
(IsDedekindDomain.HeightOneSpectrum.eq_maximalIdeal), which is what lets a condition stated at
the height-one primes of such a ring be read as a condition on its valuation. It was split out of
material adapted from Michael Stoll's elliptic-curves formalisation
(EllipticCurves/Mathlib/AdicCompletionExtension.lean at the roadmap's pin 66889eada51a,
Apache 2.0, by Michael Stoll), where it is the step behind valuation_adicCompletion_algebraMap.
The theorem IsDedekindDomain.HeightOneSpectrum.exists_mem_notMem was split out of material
adapted from Michael Stoll's elliptic-curves formalisation
(github.com/MichaelStollBayreuth/EllipticCurves, EllipticCurves/Mathlib/SIntegers.lean at the
roadmap's pin 66889eada51a, Apache 2.0, by Michael Stoll); following this repository's
convention for adapted material, the upstream authorship is credited here rather than in the
copyright header.
IsDedekindDomain.HeightOneSpectrum.comapOfNeBot and its projection are likewise adapted from that
formalisation (github.com/MichaelStollBayreuth/EllipticCurves, EllipticCurves/Mathlib/Basic.lean
line 539, at the roadmap's pin 66889eada51a74c2f5dfb7fb5909b0b5a0a2d96e, Apache 2.0, by Michael
Stoll). The construction is the source's; what changed is the hypothesis — the source and this
version take the nonvanishing of the contraction as a hypothesis, where Mathlib's
HeightOneSpectrum.comap instead derives it from surjectivity of the map.
Ideal.ne_bot_of_comap_ne_bot plays the role of the source's
comap_ne_bot_of_comap_comap_ne_bot (EllipticCurves/Mathlib/Basic.lean line 270): it is what
discharges that nonvanishing hypothesis when a prime is contracted through an intermediate ring.
It is stated here in the general form — an arbitrary ideal and an injective ring homomorphism,
with the map producing the ideal dropped, since it plays no role — and proved from Mathlib's
Ideal.comap_bot_of_injective.
Divisibility of ideals is unchanged by pushing forward along a ring isomorphism: Ideal.map e
and Ideal.map e.symm are mutually inverse homomorphisms of the semirings of ideals.
Multiplicities in the factorisation of an ideal are unchanged by pushing forward along a ring
isomorphism: the number of times Ideal.map e p divides Ideal.map e I is the number of times
p divides I.
Distinct nonzero primes have zero multiplicity in one another. In a Dedekind domain a
nonzero prime is maximal, so Q ∣ P would force Q = P.
This is the coefficient-level form of "a prime power is supported at one prime": in a weighted sum over the primes above a fixed ideal, every term but the matching one vanishes.
If the contraction of J along an injective ring homomorphism is nonzero, so is J itself.
This is the eliminator that discharges the nonvanishing hypothesis of
IsDedekindDomain.HeightOneSpectrum.comapOfNeBot when a prime is contracted through an
intermediate ring: contract all the way down to a base where nonvanishing is already known, and
read the intermediate step off from that. Only injectivity of the lower map is needed; the map
producing J plays no role, so it does not appear.
The height-one prime of B obtained by contracting a height-one prime of C along a ring
homomorphism ψ : B →+* C, given that the contraction is nonzero.
Mathlib's IsDedekindDomain.HeightOneSpectrum.comap is the same construction, but it asks for ψ
to be surjective and derives the ne_bot field from that. comapOfNeBot generalises it:
the surjective case is recovered by supplying (Ideal.eq_bot_of_comap_eq_bot' hf).mt w.ne_bot, and
only the converse fails.
The generality is needed because the maps contracted along here are embeddings into completions —
R → v.adicCompletionIntegers K — which are neither surjective, so Mathlib's comap does not
apply, nor integral Algebra maps, so HeightOneSpectrum.under does not either. (ℤ → ℤ_p is
flat, not integral.) The ne_bot hypothesis has to be supplied by hand.
Adapted from Michael Stoll's EllipticCurves (EllipticCurves/Mathlib/Basic.lean line 539, Apache
2.0, at the roadmap's pin 66889eada51a74c2f5dfb7fb5909b0b5a0a2d96e); the ne_bot-as-hypothesis
formulation is the source's.
Equations
- IsDedekindDomain.HeightOneSpectrum.comapOfNeBot ψ w hne = { asIdeal := Ideal.comap ψ w.asIdeal, isPrime := ⋯, ne_bot := hne }
Instances For
The underlying ideal of comapOfNeBot is the contracted ideal.
Mathlib's transport equivOfRingEquiv e of height one primes along a ring isomorphism e
pushes the underlying ideal forward: (equivOfRingEquiv e v).asIdeal = Ideal.map e v.asIdeal.
The inverse transport (equivOfRingEquiv e).symm pulls the underlying ideal back along e:
((equivOfRingEquiv e).symm w).asIdeal = Ideal.comap e w.asIdeal.
Distinct height one primes are incomparable: a height one prime is not contained in any other one, since both are maximal.
An ideal of a Dedekind domain is prime to a set S of height-one primes when it is
nonzero and no prime of S divides it. Nonzeroness is part of the definition, so ⊥ is prime
to no set at all — not even to ∅.
Instances For
The zero ideal is prime to no set of primes, not even to the empty set.
Enlarging the set of forbidden primes by one. An ideal is prime to insert 𝔭 S exactly
when it is prime to S and not divisible by 𝔭.
Being prime to S is multiplicative. A product of ideals is prime to S exactly when
both factors are: neither factor may vanish, and a prime of S divides the product exactly when
it divides one of the factors.
A height-one prime ideal is prime to S exactly when its spectrum point is not in S.
Being prime to a set of primes transports along a ring isomorphism. An ideal pulled back
along e : R ≃+* A is prime to T exactly when the ideal itself is prime to the image of T
under the induced bijection of height-one spectra.
Induction on ideals prime to S. Such an ideal is a finite product of height-one
primes outside S, so a property holding at ⊤ and stable under multiplication by a
height-one prime outside S holds for all of them.
Powers of an ideal prime to S are again prime to S.
A nonzero power of an ideal is prime to S exactly when the ideal is.
Being prime to S passes to finite products. A finite product of ideals is prime to S
exactly when every factor is; the empty product is ⊤, which is prime to everything.
Ideals supported on complementary sets of primes are relatively prime.
Every nonzero ideal is a finite product of prime powers. This produces the prime-power
factorizations consumed by multiplicativity statements such as
TauCeti.IdealArithmeticFunction.IsMultiplicative.map_prod_pow.
Splitting off one allowed prime. An ideal all of whose prime factors lie in insert 𝔭 S
is a power of 𝔭 times an ideal all of whose prime factors lie in S.
Uniqueness of the splitting. The exponent and the prime-to-p cofactor of a nonzero
ideal are determined by it. Only nonzeroness of p is used, not primality.
The maximal ideal is the only height-one prime of a discrete valuation ring.
Mathlib has IsDiscreteValuationRing.maximalIdeal as a HeightOneSpectrum and
IsLocalRing.eq_maximalIdeal for ideals, but not that the two agree at the level of
HeightOneSpectrum. That identification is what lets a statement about the height-one primes of a
discrete valuation ring be read as a statement about its valuation.