Documentation

Mathlib.RingTheory.Valuation.ValuationRing

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.

  1. R is a valuation ring.
  2. For each x : FractionRing K, either x or x⁻¹ is in R.
  3. "divides" is a total relation on the elements of R.
  4. "contains" is a total relation on the ideals of R.
  5. 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.

class PreValuationRing (A : Type u) [Mul A] :

A magma is called a PreValuationRing provided that for any pair of elements a b : A, either a divides b or vice versa.

  • cond' (a b : A) : ∃ (c : A), a * c = b b * c = a
Instances
    theorem PreValuationRing.cond {A : Type u} [Mul A] [PreValuationRing A] (a b : A) :
    ∃ (c : A), a * c = b b * c = a
    class ValuationRing (A : Type u) [CommRing A] [IsDomain A] extends PreValuationRing A :

    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
      theorem ValuationRing.cond {A : Type u} [CommRing A] [IsDomain A] [ValuationRing A] (a b : A) :
      ∃ (c : A), a * c = b b * c = a
      def ValuationRing.ValueGroup (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] :

      The value group of the valuation ring A. Note: this is actually a group with zero.

      Equations
      Instances For
        Equations
        Equations
        Equations
        theorem ValuationRing.le_total (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] [IsDomain A] [ValuationRing A] [IsFractionRing A K] (a b : ValuationRing.ValueGroup A K) :
        a b b a
        noncomputable instance ValuationRing.linearOrder (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] [IsDomain A] [ValuationRing A] [IsFractionRing A K] :
        Equations

        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
          theorem ValuationRing.mem_integer_iff (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] [IsDomain A] [ValuationRing A] [IsFractionRing A K] (x : K) :
          x (ValuationRing.valuation A K).integer ∃ (a : A), (algebraMap A K) a = x
          noncomputable def ValuationRing.equivInteger (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] [IsDomain A] [ValuationRing A] [IsFractionRing A K] :
          A ≃+* (ValuationRing.valuation A K).integer

          The valuation ring A is isomorphic to the ring of integers of its associated valuation.

          Equations
          Instances For
            @[simp]
            theorem ValuationRing.coe_equivInteger_apply (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] [IsDomain A] [ValuationRing A] [IsFractionRing A K] (a : A) :
            theorem PreValuationRing.iff_dvd_total {R : Type u_1} [Monoid R] :
            PreValuationRing R IsTotal R fun (x1 x2 : R) => x1 x2
            theorem PreValuationRing.iff_ideal_total {R : Type u_1} [CommRing R] :
            PreValuationRing R IsTotal (Ideal R) fun (x1 x2 : Ideal R) => x1 x2
            theorem ValuationRing.dvd_total {R : Type u_1} [Monoid R] [h : PreValuationRing R] (x y : R) :
            x y y x
            theorem ValuationRing.iff_dvd_total {R : Type u_1} [CommRing R] [IsDomain R] :
            ValuationRing R IsTotal R fun (x1 x2 : R) => x1 x2
            theorem ValuationRing.iff_ideal_total {R : Type u_1} [CommRing R] [IsDomain R] :
            ValuationRing R IsTotal (Ideal R) fun (x1 x2 : Ideal R) => x1 x2
            theorem ValuationRing.unique_irreducible {R : Type u_1} [CommRing R] [IsDomain R] [ValuationRing R] ⦃p q : R (hp : Irreducible p) (hq : Irreducible q) :
            @[instance 100]
            theorem ValuationRing.TFAE (R : Type u) [CommRing R] [IsDomain R] :
            [ValuationRing R, ∀ (x : FractionRing R), IsLocalization.IsInteger R x IsLocalization.IsInteger R x⁻¹, IsTotal R fun (x1 x2 : R) => x1 x2, IsTotal (Ideal R) fun (x1 x2 : Ideal R) => x1 x2, IsLocalRing R IsBezout R].TFAE
            theorem ValuationRing.of_integers {𝒪 : Type u} {K : Type v} {Γ : Type w} [CommRing 𝒪] [IsDomain 𝒪] [Field K] [Algebra 𝒪 K] [LinearOrderedCommGroupWithZero Γ] (v : Valuation K Γ) (hh : v.Integers 𝒪) :

            If 𝒪 satisfies v.integers 𝒪 where v is a valuation on a field, then 𝒪 is a valuation ring.

            theorem ValuationRing.isFractionRing_iff {𝒪 : Type u} {K : Type v} [CommRing 𝒪] [IsDomain 𝒪] [Field K] [Algebra 𝒪 K] [ValuationRing 𝒪] :
            IsFractionRing 𝒪 K (∀ (x : K), ∃ (a : 𝒪), x = (algebraMap 𝒪 K) a x⁻¹ = (algebraMap 𝒪 K) a) Function.Injective (algebraMap 𝒪 K)
            @[instance 100]

            A field is a valuation ring.