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.

    • cond' (a b : A) : โˆƒ (c : A), a * c = b โˆจ b * c = a
    Instances
      theorem ValuationRing.cond {A : Type u} [Mul A] [PreValuationRing A] (a b : A) :
      โˆƒ (c : A), a * c = b โˆจ b * c = a

      An abbreviation for PreValuationRing.cond which should save some writing.

      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.

      Instances For
        @[implicit_reducible]
        instance ValuationRing.instInhabitedValueGroup (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] :
        Inhabited (ValueGroup A K)
        @[implicit_reducible]
        instance ValuationRing.instLEValueGroup (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] :
        LE (ValueGroup A K)
        @[implicit_reducible]
        instance ValuationRing.instZeroValueGroup (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] :
        Zero (ValueGroup A K)
        @[implicit_reducible]
        instance ValuationRing.instOneValueGroup (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] :
        One (ValueGroup A K)
        @[implicit_reducible]
        instance ValuationRing.instMulValueGroup (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] :
        Mul (ValueGroup A K)
        @[implicit_reducible]
        instance ValuationRing.instInvValueGroup (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] :
        Inv (ValueGroup A K)
        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 : ValueGroup A K) :
        a โ‰ค b โˆจ b โ‰ค a
        @[implicit_reducible]
        noncomputable instance ValuationRing.linearOrder (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] [IsDomain A] [ValuationRing A] [IsFractionRing A K] :
        @[implicit_reducible]
        noncomputable def ValuationRing.valuation (A : Type u) [CommRing A] (K : Type v) [Field K] [Algebra A K] [IsDomain A] [ValuationRing A] [IsFractionRing A K] :

        Any valuation ring induces a valuation on its fraction field.

        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 โˆˆ (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 โ‰ƒ+* โ†ฅ(valuation A K).integer

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

          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) :
            โ†‘((equivInteger A K) a) = (algebraMap A K) a
            instance ValuationRing.le_total_ideal (A : Type u) [CommRing A] [PreValuationRing A] :
            Std.Total fun (x1 x2 : Ideal A) => x1 โ‰ค x2
            @[implicit_reducible]
            noncomputable instance ValuationRing.instLinearOrderIdealOfDecidableLE (A : Type u) [CommRing A] [PreValuationRing A] [DecidableLE (Ideal A)] :
            theorem PreValuationRing.iff_dvd_total {R : Type u_1} [Semigroup R] :
            PreValuationRing R โ†” Std.Total fun (x1 x2 : R) => x1 โˆฃ x2
            theorem PreValuationRing.iff_ideal_total {R : Type u_1} [CommRing R] :
            PreValuationRing R โ†” Std.Total fun (x1 x2 : Ideal R) => x1 โ‰ค x2
            theorem ValuationRing.dvd_total {R : Type u_1} [Semigroup 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 โ†” Std.Total fun (x1 x2 : R) => x1 โˆฃ x2
            theorem ValuationRing.iff_ideal_total {R : Type u_1} [CommRing R] [IsDomain R] :
            ValuationRing R โ†” Std.Total fun (x1 x2 : Ideal R) => x1 โ‰ค x2
            theorem ValuationRing.unique_irreducible {R : Type u_1} [CommRing R] [IsDomain R] [PreValuationRing R] โฆƒp q : Rโฆ„ (hp : Irreducible p) (hq : Irreducible q) :
            theorem ValuationRing.TFAE (R : Type u) [CommRing R] [IsDomain R] :
            [ValuationRing R, โˆ€ (x : FractionRing R), IsLocalization.IsInteger R x โˆจ IsLocalization.IsInteger R xโปยน, Std.Total fun (x1 x2 : R) => x1 โˆฃ x2, Std.Total fun (x1 x2 : Ideal R) => x1 โ‰ค x2, IsLocalRing R โˆง IsBezout R].TFAE
            theorem Function.Surjective.preValuationRing {R : Type u_1} {S : Type u_2} [Mul R] [PreValuationRing R] [Mul S] (f : R โ†’โ‚™* S) (hf : Surjective โ‡‘f) :
            theorem Function.Surjective.valuationRing {R : Type u_1} {S : Type u_2} [NonAssocSemiring R] [PreValuationRing R] [CommRing S] [IsDomain S] (f : R โ†’+* S) (hf : Surjective โ‡‘f) :
            theorem isFractionRing_of_exists_eq_algebraMap_or_inv_eq_algebraMap_of_injective {๐’ช : Type u} {K : Type v} [CommRing ๐’ช] [Field K] [Algebra ๐’ช K] (h : โˆ€ (x : K), โˆƒ (a : ๐’ช), x = (algebraMap ๐’ช K) a โˆจ xโปยน = (algebraMap ๐’ช K) a) (hinj : Function.Injective โ‡‘(algebraMap ๐’ช K)) :
            IsFractionRing ๐’ช K
            theorem Valuation.Integers.isFractionRing {๐’ช : Type u} {K : Type v} {ฮ“ : Type w} [CommRing ๐’ช] [Field K] [Algebra ๐’ช K] [LinearOrderedCommGroupWithZero ฮ“] {v : Valuation K ฮ“} (hv : v.Integers ๐’ช) :
            IsFractionRing ๐’ช K
            theorem ValuationRing.of_integers {๐’ช : Type u} {K : Type v} {ฮ“ : Type w} [CommRing ๐’ช] [Field K] [Algebra ๐’ช K] [LinearOrderedCommGroupWithZero ฮ“] (v : Valuation K ฮ“) (hh : v.Integers ๐’ช) :
            ValuationRing ๐’ช

            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 ๐’ช] [Field K] [Algebra ๐’ช K] [IsDomain ๐’ช] [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.