Documentation

Mathlib.Analysis.Polynomial.MahlerMeasure

Mahler measure of complex polynomials #

In this file we define the Mahler measure of a polynomial over ℂ[X] and prove some basic properties.

Main definitions #

Main results #

The logarithmic Mahler measure of a polynomial p defined as (2 * π)⁻¹ * ∫ x ∈ (0, 2 * π), log ‖p (e ^ (i * x))‖

Equations
Instances For
    noncomputable def Polynomial.mahlerMeasure (p : Polynomial ) :

    The Mahler measure of a polynomial p defined as e ^ (logMahlerMeasure p) if p is nonzero and 0 otherwise

    Equations
    Instances For

      The Mahler measure of the product of two polynomials is the product of their Mahler measures

      @[deprecated Polynomial.logMahlerMeasure_mul_eq_add_logMahlerMeasure (since := "2025-11-17")]

      Alias of Polynomial.logMahlerMeasure_mul_eq_add_logMahlerMeasure.

      @[simp]

      The logarithmic Mahler measure of X - C z is the log⁺ of the absolute value of z.

      @[simp]

      The Mahler measure of X - C z equals max 1 ‖z‖.

      @[simp]

      The logarithmic Mahler measure of a polynomial is the log of the absolute value of its leading coefficient plus the sum of the logs of the absolute values of its roots lying outside the unit disk.

      The Mahler measure of a polynomial is the absolute value of its leading coefficient times the product of the absolute values of its roots lying outside the unit disk.

      Estimates for the Mahler measure #

      @[deprecated Polynomial.leadingCoeff_le_mahlerMeasure (since := "2026-01-02")]

      Alias of Polynomial.leadingCoeff_le_mahlerMeasure.

      If the leading coefficient of a polynomial has norm at least 1, then its Mahler measure is at least 1. This holds in particular for nonzero polynomials with integer coefficients, since their leading coefficient is a nonzero integer.

      The Mahler measure of a polynomial is bounded above by the sum of the norms of its coefficients.

      Landau's inequality: the Mahler measure of a polynomial is at most the ℓ² norm of its coefficient vector, √(∑ ‖coeff i‖²).

      This is the classical inequality due to Landau (1905). Combined with the multiplicativity of the Mahler measure (mahlerMeasure_mul), it gives the Mignotte bound on coefficients of polynomial factors.

      TODO: restate using a dedicated polynomial ℓ² norm once one is defined (see the TODO in Mathlib.Analysis.Polynomial.Norm).

      The Mahler measure of a polynomial is at most the sup norm of the polynomial times the square root of its degree plus one.

      The Mignotte bound #

      Mignotte's coefficient bound: if f = g * h and h has Mahler measure at least 1 (which holds in particular when h has integer coefficients with nonzero leading coefficient), then the coefficients of g are bounded by a binomial coefficient times the Mahler measure of g * h.

      Combined with mahlerMeasure_le_sqrt_sum_sq_norm_coeff (Landau's inequality), this gives the classical Mignotte bound ‖g.coeff n‖ ≤ C(deg g, n) · √(∑ i ∈ f.support, ‖f.coeff i‖ ^ 2) used in polynomial factorization algorithms (Berlekamp–Zassenhaus).

      Mahler Measure on Other Rings #

      While the Mahler measure is an inherently Complex concept, we often want to work with it for polynomials with coefficients in subrings of . To do so, we introduce mapMahlerMeasure. This takes a RingHom A ℂ which takes the polynomial from A[X] to ℂ[X].

      Some lemmas require the RingHom to also preserve the norm on the base ring, e.g., leadingCoeff_le_mapMahlerMeasure. Those will come below.

      noncomputable def Polynomial.mapMahlerMeasure {A : Type u_1} [Semiring A] (p : Polynomial A) (v : A →+* ) :

      The Mahler measure for polynomials on rings other than . Most theorems will require A to be a NormedRing and v to be an isometry. See, e.g., mapMahlerMeasure_const

      Equations
      Instances For
        @[simp]
        @[simp]
        theorem Polynomial.mapMahlerMeasure_const {A : Type u_2} [NormedRing A] (v : A →+* ) (hv : Isometry v) (z : A) :
        theorem Polynomial.mapMahlerMeasure_pos_of_ne_zero {A : Type u_2} [NormedRing A] {p : Polynomial A} (v : A →+* ) (hv : Isometry v) (hp : p 0) :
        theorem Polynomial.mapMahlerMeasure_le_sum_norm_coeff {A : Type u_2} [NormedRing A] (p : Polynomial A) (v : A →+* ) (hv : Isometry v) :
        p.mapMahlerMeasure v p.sum fun (x : ) (a : A) => a