Documentation

HexRealRootsTheory.SturmChainDefs

noncomputable def Sturm.sturmVar (chain : List (Polynomial ℝ)) (x : ℝ) :

Zero-skipping sign variations of the chain chain evaluated at x: the sign variations of the list of evaluations chain.map (·.eval x).

Equations
Instances For
    @[simp]
    theorem Sturm.sturmVar_nil (x : ℝ) :
    theorem Sturm.sturmVar_cons_zero {q : Polynomial ℝ} {x : ℝ} (h : Polynomial.eval x q = 0) (chain : List (Polynomial ℝ)) :
    sturmVar (q :: chain) x = sturmVar chain x

    A chain element that vanishes at x contributes no variation at x: sturmVar ignores it.

    noncomputable def Sturm.firstSign (l : List ℝ) :

    The sign of the first nonzero entry of a real list, or 0 if every entry is zero.

    Equations
    Instances For
      @[simp]
      theorem Sturm.firstSign_cons_ne {a : ℝ} (l : List ℝ) (ha : a ≠ 0) :

      Prepending a nonzero entry a adds one variation exactly when its sign is opposite the sign of the next surviving entry.

      noncomputable def Sturm.sturmVarPosInf (chain : List (Polynomial ℝ)) :

      Sign variations of the chain at +∞: the sign of each element there is the sign of its leading coefficient, so this is the zero-skipping variation count of the leading coefficients. The zero polynomial contributes leading coefficient 0, which the zero-skipping convention drops.

      Equations
      Instances For
        noncomputable def Sturm.sturmVarNegInf (chain : List (Polynomial ℝ)) :

        Sign variations of the chain at −∞: the sign of an element there is the sign of its leading coefficient times (-1) ^ degree, so this is the zero-skipping variation count of leadingCoeff · (-1) ^ natDegree.

        Equations
        Instances For
          structure Sturm.IsSturmChain (p : Polynomial ℝ) (chain : List (Polynomial ℝ)) :

          A generalized Sturm chain for a real polynomial.

          At a root of the first polynomial, the product of the first two entries changes from negative to positive. At a root of an interior entry, its neighbors have opposite signs. The last entry has no real roots, and every entry is nonzero.

          These conditions allow the one-element chain of a nonzero constant polynomial.

          Instances For
            theorem Sturm.IsSturmChain.nonempty {p : Polynomial ℝ} {chain : List (Polynomial ℝ)} (h : IsSturmChain p chain) :
            chain ≠ []

            A Sturm chain is nonempty.

            theorem Sturm.IsSturmChain.head_mem {p : Polynomial ℝ} {chain : List (Polynomial ℝ)} (h : IsSturmChain p chain) :
            p ∈ chain

            The polynomial counted by a Sturm chain is its first entry.

            theorem Sturm.IsSturmChain.ne_zero {p : Polynomial ℝ} {chain : List (Polynomial ℝ)} (h : IsSturmChain p chain) :
            p ≠ 0

            A polynomial admitting a Sturm chain is nonzero.