Documentation

Mathlib.NumberTheory.Height.Basic

Basic theory of heights #

This is an attempt at formalizing some basic properties of height functions.

We aim at a level of generality that allows to apply the theory to algebraic number fields and to function fields (and possibly beyond).

The general set-up for heights is the following. Let K be a field.

We realize this implementation via the class Height.AdmissibleAbsValues K.

Main definitions #

We define multiplicative heights and logarithmic heights (which are just defined to be the (real) logarithm of the corresponding multiplicative height). This leads to some duplication (in the definitions and statements; the proofs are reduced to those for the multiplicative height), which is justified, as both versions are frequently used.

We define the following variants.

TODO #

Tags #

Height, absolute value

Families of admissible absolute values #

We define the class AdmissibleAbsValues K for a field K, which captures the notion of a family of absolute values on K satisfying a product formula.

class Height.AdmissibleAbsValues (K : Type u_1) [Field K] :
Type u_1

A type class capturing an admissible family of absolute values.

Instances

    The totalWeight of a field with AdmissibleAbsValues is the sum of the multiplicities of the archimedean places.

    Equations
      Instances For

        Heights of field elements #

        We use the subscipt to denote multiplicative and logarithmic heights of field elements (this is because we are in the one-dimensional case of (affine) heights).

        def Height.mulHeight₁ {K : Type u_1} [Field K] [AdmissibleAbsValues K] (x : K) :

        The multiplicative height of an element of K.

        Equations
          Instances For

            The mutliplicative height of a field element is always at least 1.

            def Height.logHeight₁ {K : Type u_1} [Field K] [AdmissibleAbsValues K] (x : K) :

            The logarithmic height of an element of K.

            Equations
              Instances For

                Positivity extension for mulHeight₁, logHeight₁ #

                Extension for the positivity tactic: Height.mulHeight₁ is always positive.

                Equations
                  Instances For

                    Extension for the positivity tactic: Height.logHeight₁ is always nonnegative.

                    Equations
                      Instances For

                        Heights of tuples and finitely supported maps #

                        We define the multiplicative height of a nonzero tuple x : ι → K as the product of the maxima of v on x, as v runs through the relevant absolute values of K. As usual, the logarithmic height is the logarithm of the multiplicative height. When x = 0, we define the multiplicative height to be 1; this is a convenient "junk value", which allows to avoid the condition x ≠ 0 in most of the results.

                        For a finitely supported function x : ι →₀ K, we define the height as the height of x restricted to its support.

                        def Height.mulHeight {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} (x : ιK) :

                        The multiplicative height of a tuple of elements of K. For the zero tuple we take the junk value 1.

                        Equations
                          Instances For
                            theorem Height.mulHeight_eq {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} {x : ιK} (hx : x 0) :
                            mulHeight x = (Multiset.map (fun (v : AbsoluteValue K ) => ⨆ (i : ι), v (x i)) AdmissibleAbsValues.archAbsVal).prod * ∏ᶠ (v : AdmissibleAbsValues.nonarchAbsVal), ⨆ (i : ι), v (x i)
                            @[simp]
                            theorem Height.mulHeight_zero {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} :
                            @[simp]
                            theorem Height.fun_mulHeight_zero {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} :
                            (mulHeight fun (x : ι) => 0) = 1

                            Eta-expanded form of Height.mulHeight_zero

                            @[simp]
                            theorem Height.mulHeight_one {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} :
                            @[simp]
                            theorem Height.fun_mulHeight_one {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} :
                            (mulHeight fun (x : ι) => 1) = 1

                            Eta-expanded form of Height.mulHeight_one

                            theorem Height.mulHeight_comp_equiv {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} {ι' : Type u_3} (e : ι ι') (x : ι'K) :

                            The multiplicative height does not change under re-indexing.

                            def Height.logHeight {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} (x : ιK) :

                            The logarithmic height of a tuple of elements of K.

                            Equations
                              Instances For
                                @[simp]
                                theorem Height.logHeight_zero {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_3} :
                                @[simp]
                                theorem Height.fun_logHeight_zero {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_3} :
                                (logHeight fun (x : ι) => 0) = 0

                                Eta-expanded form of Height.logHeight_zero

                                @[simp]
                                theorem Height.logHeight_one {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_3} :
                                @[simp]
                                theorem Height.fun_logHeight_one {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_3} :
                                (logHeight fun (x : ι) => 1) = 0

                                Eta-expanded form of Height.logHeight_one

                                def Finsupp.mulHeight {K : Type u_1} [Field K] [Height.AdmissibleAbsValues K] {α : Type u_3} (x : α →₀ K) :

                                The multiplicative height of a finitely supported function.

                                Equations
                                  Instances For
                                    def Finsupp.logHeight {K : Type u_1} [Field K] [Height.AdmissibleAbsValues K] {α : Type u_3} (x : α →₀ K) :

                                    The logarithmic height of a finitely supported function.

                                    Equations
                                      Instances For

                                        First properties of heights #

                                        theorem Height.mulHeight_smul_eq_mulHeight {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} [Finite ι] (x : ιK) {c : K} (hc : c 0) :

                                        The multiplicative height of a tuple does not change under scaling.

                                        theorem Height.one_le_mulHeight {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} [Finite ι] (x : ιK) :
                                        theorem Height.mulHeight_pos {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} [Finite ι] (x : ιK) :
                                        theorem Height.mulHeight_ne_zero {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} [Finite ι] (x : ιK) :
                                        theorem Height.logHeight_nonneg {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} [Finite ι] (x : ιK) :

                                        Positivity extension for mulHeight, logHeight #

                                        Extension for the positivity tactic: Height.mulHeight is always positive.

                                        Equations
                                          Instances For

                                            Extension for the positivity tactic: Height.logHeight is always nonnegative.

                                            Equations
                                              Instances For

                                                Further properties of heights #

                                                theorem Height.logHeight_smul_eq_logHeight {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} [Finite ι] (x : ιK) {c : K} (hc : c 0) :

                                                The logarithmic height of a tuple does not change under scaling.

                                                theorem Height.mulHeight_pow {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} [Finite ι] (x : ιK) (n : ) :
                                                mulHeight (x ^ n) = mulHeight x ^ n

                                                The multiplicative height of the coordinate-wise nth power of a tuple is the nth power of its multiplicative height.

                                                theorem Height.logHeight_pow {K : Type u_1} [Field K] [AdmissibleAbsValues K] {ι : Type u_2} [Finite ι] (x : ιK) (n : ) :
                                                logHeight (x ^ n) = n * logHeight x

                                                The logarithmic height of the coordinate-wise nth power of a tuple is n times its logarithmic height.

                                                The multiplicative height of the inverse of a field element x is the same as the multiplicative height of x.

                                                The logarithmic height of the inverse of a field element x is the same as the logarithmic height of x.

                                                theorem Height.mulHeight₁_pow {K : Type u_1} [Field K] [AdmissibleAbsValues K] (x : K) (n : ) :

                                                The multiplicative height of the nth power of a field element x (with n : ℕ) is the nth power of the multiplicative height of x.

                                                theorem Height.logHeight₁_pow {K : Type u_1} [Field K] [AdmissibleAbsValues K] (x : K) (n : ) :

                                                The logarithmic height of the nth power of a field element x (with n : ℕ) is n times the logaritmic height of x.

                                                theorem Height.mulHeight₁_zpow {K : Type u_1} [Field K] [AdmissibleAbsValues K] (x : K) (n : ) :

                                                The multiplicative height of the nth power of a field element x (with n : ℤ) is the |n|th power of the multiplicative height of x.

                                                theorem Height.logHeight₁_zpow {K : Type u_1} [Field K] [AdmissibleAbsValues K] (x : K) (n : ) :

                                                The logarithmic height of the nth power of a field element x (with n : ℤ) is |n| times the logarithmic height of x.

                                                Bounds for the height of sums of field elements #

                                                We prove the general case (finite sums of arbitrary length) first and deduce the result for sums of two elements from it.

                                                theorem Finset.max_abv_sum_one_le {R : Type u_1} {S : Type u_2} [Semiring R] [CommSemiring S] [LinearOrder S] [IsOrderedRing S] [CharZero S] (v : AbsoluteValue R S) {ι : Type u_3} {s : Finset ι} (hs : s.Nonempty) (x : ιR) :
                                                max (v (∑ is, x i)) 1 s.card * is, max (v (x i)) 1

                                                The "local" version of the height bound for arbitrary sums for general (possibly archimedean) absolute values.

                                                theorem Finset.max_abv_sum_one_le_of_isNonarchimedean {R : Type u_1} {S : Type u_2} [Semiring R] [CommSemiring S] [LinearOrder S] [IsOrderedRing S] {v : AbsoluteValue R S} (hv : IsNonarchimedean v) {ι : Type u_3} (s : Finset ι) (x : ιR) :
                                                max (v (∑ is, x i)) 1 is, max (v (x i)) 1

                                                The "local" version of the height bound for arbitrary sums for nonarchimedean absolute values.

                                                theorem Height.mulHeight₁_sum_le {K : Type u_1} [Field K] [AdmissibleAbsValues K] {α : Type u_2} {s : Finset α} (hs : s.Nonempty) (x : αK) :
                                                mulHeight₁ (∑ as, x a) s.card ^ totalWeight K * as, mulHeight₁ (x a)

                                                The multiplicative height of a nonempty finite sum of field elements is at most n ^ (totalWeight K) times the product of the individual multiplicative heights, where n is the number of terms.

                                                theorem Height.logHeight₁_sum_le {K : Type u_1} [Field K] [AdmissibleAbsValues K] {α : Type u_2} (s : Finset α) (x : αK) :
                                                logHeight₁ (∑ as, x a) (totalWeight K) * Real.log s.card + as, logHeight₁ (x a)

                                                The logarithmic height of a finite sum of field elements is at most totalWeight K * log n plus the sum of the individual logarithmic heights, where n is the number of terms.

                                                (Note that here we do not need to assume that s is nonempty, due to the convenient junk value log 0 = 0.)

                                                @[simp]

                                                The multiplicative height of -x is the same as that of x.

                                                @[simp]

                                                The logarithmic height of -x is the same as that of x.

                                                The multiplicative height of x + y is at most 2 ^ totalWeight K times the product of the multiplicative heights of x and y.

                                                The logarithmic height of x + y is at most totalWeight K * log 2 plus the sum of the logarithmic heights of x and y.

                                                The multiplicative height of x - y is at most 2 ^ totalWeight K times the product of the multiplicative heights of x and y.

                                                The logarithmic height of x - y is at most totalWeight K * log 2 plus the sum of the logarithmic heights of x and y.