Valuation Rings #
A valuation ring is a domain such that for every pair of elements a b
, either a
divides
b
or vice-versa.
Any valuation ring induces a natural valuation on its fraction field, as we show in this file.
Namely, given the following instances:
[CommRing A] [IsDomain A] [ValuationRing A] [Field K] [Algebra A K] [IsFractionRing A K]
,
there is a natural valuation Valuation A K
on K
with values in value_group A K
where
the image of A
under algebraMap A K
agrees with (Valuation A K).integer
.
We also provide the equivalence of the following notions for a domain R
in ValuationRing.TFAE
.
R
is a valuation ring.- For each
x : FractionRing K
, eitherx
orx⁻¹
is inR
. - "divides" is a total relation on the elements of
R
. - "contains" is a total relation on the ideals of
R
. R
is a local bezout domain.
We also show that, given a valuation v
on a field K
, the ring of valuation integers is a
valuation ring and K
is the fraction field of this ring.
Implementation details #
The Mathlib definition of a valuation ring requires IsDomain A
even though the condition
does not mention zero divisors. Thus, there is a technical PreValuationRing A
that
is defined in further generality that can be used in places where the ring cannot be a domain.
The ValuationRing
class is kept to be in sync with the literature.
An integral domain is called a ValuationRing
provided that for any pair
of elements a b : A
, either a
divides b
or vice versa.
Instances
The value group of the valuation ring A
. Note: this is actually a group with zero.
Equations
- ValuationRing.ValueGroup A K = Quotient (MulAction.orbitRel Aˣ K)
Instances For
Equations
- ValuationRing.instInhabitedValueGroup A K = { default := Quotient.mk'' 0 }
Equations
- ValuationRing.instLEValueGroup A K = { le := fun (x y : ValuationRing.ValueGroup A K) => Quotient.liftOn₂' x y (fun (a b : K) => ∃ (c : A), c • b = a) ⋯ }
Equations
- ValuationRing.instZeroValueGroup A K = { zero := Quotient.mk'' 0 }
Equations
- ValuationRing.instOneValueGroup A K = { one := Quotient.mk'' 1 }
Equations
- ValuationRing.instMulValueGroup A K = { mul := fun (x y : ValuationRing.ValueGroup A K) => Quotient.liftOn₂' x y (fun (a b : K) => Quotient.mk'' (a * b)) ⋯ }
Equations
- ValuationRing.instInvValueGroup A K = { inv := fun (x : ValuationRing.ValueGroup A K) => Quotient.liftOn' x (fun (a : K) => Quotient.mk'' a⁻¹) ⋯ }
Equations
- ValuationRing.linearOrder A K = LinearOrder.mk ⋯ inferInstance decidableEqOfDecidableLE decidableLTOfDecidableLE ⋯ ⋯ ⋯
Equations
- ValuationRing.linearOrderedCommGroupWithZero A K = LinearOrderedCommGroupWithZero.mk ⋯ zpowRec ⋯ ⋯ ⋯ ⋯ ⋯
Any valuation ring induces a valuation on its fraction field.
Equations
- ValuationRing.valuation A K = { toFun := Quotient.mk'', map_zero' := ⋯, map_one' := ⋯, map_mul' := ⋯, map_add_le_max' := ⋯ }
Instances For
The valuation ring A
is isomorphic to the ring of integers of its associated valuation.
Equations
- ValuationRing.equivInteger A K = RingEquiv.ofBijective (let_fun this := { toFun := fun (a : A) => ⟨(algebraMap A K) a, ⋯⟩, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }; this) ⋯
Instances For
If 𝒪
satisfies v.integers 𝒪
where v
is a valuation on a field, then 𝒪
is a valuation ring.
A field is a valuation ring.