Real-rooted polynomials and interlacing #
A real polynomial is real-rooted if it splits over ℝ, i.e. all its complex roots are real. This
file develops the predicate, its closure properties, and the sign-change arguments that turn
interlacing data into real-rootedness. These are the tools used for the Heilmann–Lieb theorem on
matching polynomials and, more generally, by the method of interlacing polynomials of Marcus,
Spielman and Srivastava.
Main definitions #
MSS.RealRooted p:p : ℝ[X]splits overℝ(Polynomial.Splits).MSS.BoundedBy p B:pis real-rooted and every root has absolute value at mostB.MSS.maxRoot p: the largest real root, inWithBot ℝ.MSS.Interlaces f g: every memberf + t • gof the pencil is real-rooted.MSS.Interlace f g: every real combinationa • f + b • gis real-rooted.MSS.rootsList p: the distinct real roots ofp, sorted increasingly.
Main results #
MSS.RealRooted.mul,MSS.RealRooted.prod,MSS.RealRooted.of_dvd: closure properties.MSS.realRooted_iff_card_roots:pis real-rooted iff it hasnatDegree preal roots with multiplicity.MSS.card_roots_ge_of_alternating: a polynomial that alternates in sign atn + 1increasing points has at leastndistinct real roots;MSS.realRooted_of_alternatingconcludes real-rootedness when its degree is at mostn.MSS.realRooted_comb_of_alternates: iffalternates in sign atn + 1increasing roots ofg, every nonzero combinationa • f + b • gwitha ≠ 0and degree at mostnis real-rooted.MSS.realRooted_of_root_per_gap: a nonzero polynomial of degree at mostnwith a root in each of thengaps of an increasing sequence is real-rooted.MSS.exists_strictMono_roots: the distinct roots ofp ≠ 0as a strictly increasing family.
References #
- A. W. Marcus, D. A. Spielman, N. Srivastava, Interlacing families I: Bipartite Ramanujan graphs of all degrees, Ann. of Math. 182 (2015) 307–325.
- S. Fisk, Polynomials, roots, and interlacing, arXiv:math/0612833.
A real polynomial is real-rooted if it splits into linear (and constant)
factors over ℝ — equivalently, all of its complex roots are real. Defined as
the intrinsic Polynomial.Splits, i.e. membership in the multiplicative closure
of constants C a and monic linears X + C a.
Equations
- MSS.RealRooted p = p.Splits
Instances For
Monic linear factors X - C a are real-rooted.
Real-rootedness is closed under multiplication. Immediate from Splits
being membership in a submonoid (Submonoid.mul_mem).
Real-rootedness is closed under finite products.
A (nonzero) divisor of a real-rooted polynomial is real-rooted. If p ∣ q and q splits
over ℝ (with q ≠ 0), the roots of p are a sub-multiset of those of q, hence all real.
Thin wrapper around Polynomial.Splits.of_dvd. This is the engine of the connected→real-rooted
step (T5): μ(G) ∣ μ(pathTree), and the path tree is a forest.
Root-count characterisation. A real polynomial is real-rooted iff its
multiset of (real) roots has cardinality equal to its degree — i.e. it has
exactly natDegree real roots counted with multiplicity.
A product of monic linears ∏ (X - C aᵢ) is real-rooted.
p is bounded by B if it is real-rooted and all of its (real) roots
lie in the interval [-B, B]. The Heilmann–Lieb theorem says that the matching polynomial of a
graph of maximum degree Δ ≥ 2 is bounded by 2√(Δ-1).
Equations
- MSS.BoundedBy p B = (MSS.RealRooted p ∧ ∀ (x : ℝ), p.IsRoot x → |x| ≤ B)
Instances For
A (nonzero) divisor of a BoundedBy B polynomial is BoundedBy B. Real-rootedness transfers
by RealRooted.of_dvd, and every root of the divisor q is a root of p (write p = q * c), so it
inherits the |·| ≤ B bound. This is the Heilmann–Lieb transfer step: μ(G) ∣ μ(T(G,u)), and the
path tree T(G,u) is a forest whose adjacency eigenvalues lie in [−B, B].
BoundedBy B is closed under finite products. A root of ∏ fᵢ is a root of some factor
(ℝ[X] is a domain), hence bounded by B; real-rootedness multiplies (RealRooted.prod).
Fundamental constructor / fusion lemma. A product of linears
∏ (X - C aᵢ) whose roots aᵢ all lie in [-B, B] is BoundedBy B. Both the
eigenvalue product (RH side, via IsHermitian.charpoly_eq) and the matching
polynomial (MSS side) are of exactly this shape.
Largest real root #
The largest real root of p, valued in WithBot ℝ so that the
empty case (no real roots, e.g. p = 0 or an irreducible-over-ℝ factor) is
total: maxRoot p = ⊥. For the method of interlacing polynomials this is the
quantity compared across a family — the averaging theorem says some member's
maxRoot is at most the maxRoot of the sum.
Equations
- MSS.maxRoot p = p.roots.toFinset.max
Instances For
Every real root is ≤ maxRoot.
A polynomial bounded by B has maxRoot ≤ B: the upper half of the
[-B, B] containment, packaged for the interlacing-family argument.
f and g interlace (pencil form) if every real combination f + t·g
of the pencil is real-rooted. This is the operational notion used throughout the
method of interlacing polynomials: a common interlacer of a family yields
real-rootedness of every convex combination, hence of the average.
Equations
- MSS.Interlaces f g = ∀ (t : ℝ), MSS.RealRooted (f + Polynomial.C t * g)
Instances For
An interlacing pencil's left endpoint (t = 0) is real-rooted.
If f and g interlace then their sum f + g is real-rooted
(the t = 1 point of the pencil). This is the seed of the MSS averaging
argument.
The interlacing pencil and its convex cone #
f and g form an interlacing pair if every real linear combination
a·f + b·g is real-rooted. By the Hermite–Kakeya–Obreschkoff theorem this is
equivalent to f and g having interlacing roots (a common interlacer); we take
the algebraic form as the working definition, since MSS proofs manipulate the
combinations directly. Strictly stronger than the one-sided pencil Interlaces
(take a = 1).
Equations
- MSS.Interlace f g = ∀ (a b : ℝ), MSS.RealRooted (Polynomial.C a * f + Polynomial.C b * g)
Instances For
An interlacing pair's sum is real-rooted — the seed of the convex cone.
Convex-cone / pencil structure — the algebraic heart of step 3. If f, g
interlace then any two polynomials in their linear pencil span{f, g}
interlace each other. Hence the pencil is a 2-dimensional cone all of whose
members are mutually real-rooted — the algebraic backbone of the method of
interlacing polynomials (every combination encountered in MSS stays real-rooted).
The pencil is closed under sums (a corollary of comb): f + g interlaces
f. This is the cone's additive-closure lemma at the algebraic level.
Scaling a pencil generator keeps the pair interlacing (cone closed under nonneg — indeed all — real scaling).
HKO bridge — the analytic load-bearing lemmas #
IVT atom. If a real polynomial takes values of opposite sign at x < y
then it has a root strictly between them. This is the intermediate-value theorem
specialised to polynomials (continuous), and it is the single analytic primitive
out of which the whole Hermite–Kakeya–Obreschkoff sign-change argument is built:
each sign alternation of a combination across the roots of its interlacer yields
one root via this lemma.
Counting lemma. A polynomial that has at least natDegree real roots
(counted with multiplicity) is real-rooted: combined with the always-true reverse
bound card_roots' : card ≤ natDegree, exhibiting natDegree real roots forces
equality, hence Splits. This is the lemma that converts "the IVT produced
enough sign-change roots" into RealRooted.
Ordering the roots (first step of the HKO assembly) #
The sorted list of distinct real roots of p, strictly increasing.
This is the combinatorial skeleton on which the HKO sign-change argument runs:
the gaps between consecutive entries are where exists_isRoot_of_eval_mul_neg
will deposit the roots of a combination.
Instances For
The sorted root list is strictly increasing.
The sorted root list has no duplicates.
Membership in the sorted root list is membership in the root multiset.
For p ≠ 0, the sorted root list is exactly the set of real roots.
The length of the sorted root list is the number of distinct real roots.
Completeness of the ordering. Every real root of p appears in
rootsList p; conversely every list entry is a genuine root. Packaged for the
gap argument: outside the closed span of rootsList p and between consecutive
entries, p has no roots, so a sign change there must come from the other
polynomial of the pencil — the seed of alternation.
Counting roots from sign changes #
Sign-change root count — the key lemma. If a real polynomial h takes
values of strictly alternating sign at n+1 strictly increasing points
x₀ < x₁ < … < xₙ (i.e. h(xᵢ)·h(xᵢ₊₁) < 0 for each consecutive pair), then it
has at least n distinct real roots.
This is the heart of the Hermite–Kakeya–Obreschkoff argument and is not in
Mathlib. The proof needs no list induction: each gap (xᵢ, xᵢ₊₁) independently
yields a root by the IVT atom (exists_isRoot_of_eval_mul_neg, selected with
choose), and the roots are pairwise distinct because they sit in disjoint,
linearly ordered intervals (rᵢ < xᵢ₊₁ ≤ xⱼ < rⱼ for i < j). Injectivity then
gives n ≤ #{distinct roots}.
Sign-change real-rootedness. A polynomial of degree at most n that
alternates sign at n+1 increasing points is real-rooted: the key lemma plus the
counting lemma. This is the exact shape in which HKO concludes that a combination
a·f + b·g is real-rooted — once the interlacing geometry supplies the
alternating evaluation points.
Producing the alternation (the last span) #
At a root s of the interlacer g, the combination a·f + b·g collapses to
the scalar multiple a · f(s) (since g(s) = 0). This is the algebraic hinge
that transfers f's sign pattern to the combination.
Alternation transfer. If f takes strictly alternating signs at points
sⱼ that are all roots of g, and a ≠ 0, then the combination a·f + b·g
also alternates there: at each sⱼ the combination equals a·f(sⱼ), so the
consecutive product picks up a factor a² > 0 and keeps the sign of f's. This
is "producing the alternation" for the combination.
Real-rootedness of a combination from a common interlacer's roots. If f
alternates sign at n + 1 strictly increasing roots of g, and the combination
a·f + b·g (nonzero, a ≠ 0) has degree ≤ n, then it is real-rooted. This is
the Hermite–Kakeya–Obreschkoff conclusion, assembled from the key lemma
(realRooted_of_alternating) and the alternation transfer — reducing the entire
bridge to the single geometric input below.
Sign stability — the cornerstone of alternation. A polynomial with no
root anywhere on a closed interval [u, v] keeps a constant nonzero sign there:
f(u)·f(v) > 0. This is the contrapositive of the IVT atom and the local fact
that turns "exactly one root of f per gap of g" into the sign flip that
drives the whole interlacing alternation.
Sign flip across a lone root — the analytic last lemma. If f factors as
(X - r)·q with the cofactor q having no root on [u, v] and u < r < v, then
f flips sign across r: f(u)·f(v) < 0. Combined with sign stability this is
the complete local content of interlacing alternation — f changes sign
exactly across the single root sitting in each gap of the interlacer g.
HKO assembly — the alternation, assembled. If f factors, across each gap
(xᵢ, xᵢ₊₁) of a sequence, as (X - rᵢ)·qᵢ with the root rᵢ inside the gap and
the cofactor qᵢ having no root on the closed gap — exactly the data a common
interlacer supplies (one simple root of f per gap) — then f takes strictly
alternating signs at the xᵢ. Immediate from the sign-flip lemma applied in
each gap.
Per-gap factorisation ⟹ real-rooted (the analytic heart of HKO). A
polynomial of degree ≤ n with a simple root in each of n gaps of a strictly
increasing sequence is real-rooted. Combines the assembly
(eval_alternating_of_factor_per_gap) with the sign-change key lemma
(realRooted_of_alternating). This closes the analytic content of "interlacing
⟹ real-rooted": once a common interlacer supplies the gaps and the per-gap
factorisations, real-rootedness follows — the engine of Heilmann–Lieb.
Packaging: from "unique simple root in a gap" to the per-gap factorisation #
Per-gap factorisation from a unique simple root. If r ∈ [u,v] is a simple root of
f (rootMultiplicity = 1) and the only root of f on [u,v], then f = (X − r)·q with the
cofactor q root-free on [u,v]. This is the combinatorial packaging step that feeds
realRooted_of_factor_per_gap: a root-free cofactor would force a double root at r
(contradicting simplicity) or a second root in the gap (contradicting uniqueness).
Counting: one root per gap ⟹ exactly one, simple, unique. A polynomial f ≠ 0 of degree
≤ n with at least one root in each of the n disjoint open gaps (xᵢ, xᵢ₊₁) of a strictly
increasing sequence has, in each gap, exactly one root — simple and the only root of f on the
closed gap. The n gap-roots are distinct (disjoint increasing gaps), so f has ≥ n distinct
roots; with card roots ≤ deg ≤ n they account for everything, each simple. Combined with
factor_of_unique_simple_root_on_Icc this supplies the data realRooted_of_factor_per_gap needs.
Geometric interlacing ⟹ real-rooted — the engine, assembled. A polynomial f ≠ 0 of
degree ≤ n with at least one root in each of the n gaps of a strictly increasing sequence is
real-rooted. Chains the packaging (unique_simple_root_per_gap → factor_of_unique_simple_root_on_Icc)
into the analytic engine (realRooted_of_factor_per_gap). Once a common interlacer supplies one root of f per gap,
real-rootedness follows.
The recurrence step X·p − q (Hermite–Biehler) — algebraic hinge #
The recurrence collapses at a root of p. (X·p − q)(s) = −q(s) when p(s) = 0. The
combination X·p − q is the matching/orthogonal-polynomial three-term recurrence shape; at the
roots of p it reads off −q, transferring q's sign pattern.
X·p − q inherits q's alternation at p's roots. On two roots s, t of p,
(X·p−q)(s)·(X·p−q)(t) = q(s)·q(t) (each factor is −q, the signs square out). So if q
alternates at consecutive roots of p — the geometric content of "q interlaces p" — then so
does X·p − q, which is exactly the input realRooted_of_alternating needs to conclude
X·p − q is real-rooted (the Hermite–Biehler recurrence step, modulo the ±∞ end gaps).
The ±∞ end gaps (the two outer alternation points of the recurrence step) #
A concrete point strictly above every root of f ≠ 0 (roots are finite, hence bounded).
A concrete point strictly below every root of f ≠ 0.
Right end gap. Beyond all roots, f (positive leading coeff) is positive: a concrete
x above every root with 0 < f(x). The right outer alternation point of realRooted_of_root_per_gap.
Left end gap. Below all roots, f (positive leading coeff) has sign (−1)^{deg f}: a
concrete x below every root with 0 < (−1)^{deg f}·f(x). The left outer alternation point.
Roots as a strictly increasing indexed family #
The distinct roots of p ≠ 0, indexed in increasing order. Packages rootsList p as a
StrictMono family Fin k → ℝ hitting exactly the roots — the inner points of the m+2-point
sequence in the Hermite–Biehler assembly of hl_interlacing_recurrence.
Every root is a gap root. With one root r i per gap and deg f ≤ n, the n gap roots
are all the roots of f: any root z equals some r i. (The r i are distinct and number
n = #gaps; card roots ≤ deg ≤ n forces equality of root sets.) Used to confine q's roots to
the interior, fixing its extreme signs in the Hermite–Biehler endpoint gaps.
Extend an increasing root family by two outer endpoints. Given a strictly increasing
s : Fin m → ℝ with every value in (xL, xR), the sequence xL, s_0, …, s_{m-1}, xR is strictly
increasing. The m+2-point sequence of the Hermite–Biehler assembly; strictMono reduces (via
strictMono_iff_lt_succ) to the m+1 consecutive-gap inequalities.