Sturm–Tarski with infinite endpoints #
Leading coefficients and degree parity compute the sign variations at both
infinities. Together with one-sided signs at finite endpoints, these give
half-line and whole-field Sturm–Tarski identities for signed remainder chains
and for Polynomial.sturmSeq, including root counts. Finite endpoints may be
roots of any chain entry.
Sign variations at positive infinity.
Equations
Instances For
Unfold positive-infinity variations as variations of the leading coefficients.
Matching the leading-coefficient signs realizes positive-infinity variations.
Sign variations at negative infinity.
Equations
- TauCeti.Sturm.signVariationsAtBot cs = (List.map (fun (p : Polynomial R) => p.leadingCoeff * (-1) ^ p.natDegree) cs).signVariations
Instances For
Unfold negative-infinity variations using leading coefficients and degree parity.
Matching the parity-adjusted leading signs realizes negative-infinity variations.
The variation count stabilizes at positive infinity, even for lists containing zero.
The variation count stabilizes at negative infinity, even for lists containing zero.
Far enough to the right, finite evaluation realizes the infinity signs and lies beyond every chain root. The bound belongs to the ordered field itself.
Far enough to the left, finite evaluation realizes the negative-infinity variations, and every chain root lies above the bound.
Sturm–Tarski on (a, ∞), using right-hand variations at any finite endpoint.
Sturm–Tarski on (-∞, b), using left-hand variations at any finite endpoint.
Sturm–Tarski on the whole real closed field.
Sturm–Tarski for Mathlib's sequence on (a, ∞), even when a is a root.
Sturm–Tarski for Mathlib's sequence on (-∞, b), even when b is a root.
Sturm–Tarski for Mathlib's signed remainder sequence on the whole real closed field.
Sturm counting of distinct roots in (a, ∞), with no restriction on the endpoint.
Sturm counting of distinct roots in (-∞, b), with no restriction on the endpoint.
Classical Sturm counting of all distinct roots of a nonzero polynomial. For p = 0 both
sides are zero: sturmSeq 0 _ = [] and Polynomial.roots 0 = 0 by convention.