Documentation

LeanPool.Biswal.Theorem1

Positivity of generating-function coefficients (Theorem 1) #

This file formalizes Theorem 1 of the Chebyshev-quotient / Demazure-multiplicity paper: the coefficients of the generating function attached to a partition are eventually positive, built from a Chebyshev-type polynomial recurrence and a Dyck-path model.

Core Definitions #

noncomputable def Biswal.Theorem1.polyP (R : Type u_1) [CommRing R] :

The Chebyshev-type polynomial sequence P n over a commutative ring, defined by P 0 = P 1 = 1 and P (n + 2) = P (n + 1) - X * P n.

Equations
Instances For
    theorem Biswal.Theorem1.polyP_one (R : Type u_1) [CommRing R] :
    polyP R 1 = 1
    theorem Biswal.Theorem1.polyP_succ_succ (R : Type u_1) [CommRing R] (n : ) :
    polyP R (n + 2) = polyP R (n + 1) - Polynomial.X * polyP R n
    noncomputable def Biswal.Theorem1.partitionPoly (R : Type u_1) [CommRing R] {s : } (ξ : s.Partition) :

    The partition polynomial of ξ: the product of polyP R over the parts of ξ.

    Equations
    Instances For

      The number of parts of ξ equal to m.

      Equations
      Instances For
        noncomputable def Biswal.Theorem1.genFun (K : Type u_1) [Field K] (m n : ) {s : } (ξ : s.Partition) :

        The generating function attached to ξ with parameters m and n, as a power series.

        Equations
        Instances For
          noncomputable def Biswal.Theorem1.genFunCoeff (K : Type u_1) [Field K] (m n r : ) {s : } (ξ : s.Partition) :
          K

          The r-th coefficient of the generating function genFun K m n ξ.

          Equations
          Instances For

            Basic Properties of polyP #

            theorem Biswal.Theorem1.polyP_constantCoeff (R : Type u_1) [CommRing R] (n : ) :
            (polyP R n).coeff 0 = 1
            theorem Biswal.Theorem1.partitionPoly_eq_one_of_parts_le_one (K : Type u_1) [Field K] {s : } (ξ : s.Partition) (h : iξ.parts, i 1) :
            theorem Biswal.Theorem1.partitionPoly_split (K : Type u_1) [CommRing K] (m : ) {s : } (ξ : s.Partition) :
            ∃ (Q : Polynomial K), partitionPoly K ξ = polyP K m ^ countMaxParts m ξ * Q
            theorem Biswal.Theorem1.genFun_is_poly_coe (K : Type u_1) [Field K] (m n : ) {s : } (ξ : s.Partition) (_hm : 2 m) (_h_parts : iξ.parts, i m) (h_t : n / m + 1 countMaxParts m ξ) :
            ∃ (P : Polynomial K), genFun K m n ξ = P
            theorem Biswal.Theorem1.poly_coe_eventually_zero (K : Type u_1) [Field K] (P : Polynomial K) (r : ) :
            P.natDegree < r(PowerSeries.coeff r) P = 0
            noncomputable def Biswal.Theorem1.nonMaxPartsPoly (K : Type u_1) [CommRing K] (m : ) {s : } (ξ : s.Partition) :

            The product of polyP K over the parts of ξ that are not equal to m.

            Equations
            Instances For
              theorem Biswal.Theorem1.polyP_map {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] (f : R →+* S) (n : ) :
              theorem Biswal.Theorem1.genFun_as_rational_fraction_with_pos_numerator (m n : ) {s : } (ξ : s.Partition) (hm : 2 m) (h_parts : iξ.parts, i m) (h_t : countMaxParts m ξ n / m) :
              ∃ (A : Polynomial ) (k : ), 0 < k genFun m n ξ = A * ((polyP m) ^ k)⁻¹ ∀ (ρ : ), 0 < ρPolynomial.eval ρ (Polynomial.map (algebraMap ) (polyP m)) = 0(∀ j < m, 0 < Polynomial.eval ρ (Polynomial.map (algebraMap ) (polyP j)))0 < Polynomial.eval ρ (Polynomial.map (algebraMap ) A)
              theorem Biswal.Theorem1.coeff_rational_fraction_eq_proper_part (A D : Polynomial ) (_hD : PowerSeries.constantCoeff D 0) :
              ∃ (S : Polynomial ) (R : Polynomial ) (N : ), A * (↑D)⁻¹ = S + R * (↑D)⁻¹ ∀ (r : ), N < r(PowerSeries.coeff r) (A * (↑D)⁻¹) = (PowerSeries.coeff r) (R * (↑D)⁻¹)

              Trigonometric and Chebyshev Lemmas #

              Root Analysis #

              theorem Biswal.Theorem1.pos_coeff_transfer_R_to_Q (f : PowerSeries ) (N : ) (h : ∀ (r : ), N < r0 < (PowerSeries.coeff r) ((PowerSeries.map (algebraMap )) f)) (r : ) :
              N < r0 < (PowerSeries.coeff r) f
              theorem Biswal.Theorem1.angle_lt_pi_div_two (m k : ) (_hm : 2 m) (hk_bound : 2 * k < m + 1) :
              k * Real.pi / (m + 1) < Real.pi / 2
              theorem Biswal.Theorem1.cos_angle_pos (m : ) (hm : 2 m) (j : Fin (m / 2)) :
              0 < Real.cos ((j + 1) * Real.pi / (m + 1))
              theorem Biswal.Theorem1.angle_pos (m : ) (_hm : 2 m) (j : Fin (m / 2)) :
              0 < (j + 1) * Real.pi / (m + 1)
              theorem Biswal.Theorem1.angle_lt_pi (m : ) (hm : 2 m) (j : Fin (m / 2)) :
              (j + 1) * Real.pi / (m + 1) < Real.pi
              theorem Biswal.Theorem1.candidate_is_root (m : ) (hm : 2 m) (j : Fin (m / 2)) :
              (polyP m).IsRoot (1 / (4 * Real.cos ((j + 1) * Real.pi / (m + 1)) ^ 2))
              theorem Biswal.Theorem1.angle_strict_mono (m k_ρ k_x : ) (_hm : 2 m) (hk_lt : k_ρ < k_x) :
              k_ρ * Real.pi / (m + 1) < k_x * Real.pi / (m + 1)
              theorem Biswal.Theorem1.candidate_strictMono (m : ) (hm : 2 m) :
              StrictMono fun (j : Fin (m / 2)) => 1 / (4 * Real.cos ((j + 1) * Real.pi / (m + 1)) ^ 2)

              Coprimality and Splitting #

              theorem Biswal.Theorem1.bezout_core (ρ : ) (hρ_pos : 0 < ρ) (s : ) (hs_pos : 0 < s) (Q : Polynomial ) :
              theorem Biswal.Theorem1.isCoprime_of_eval_pos (ρ : ) (hρ_pos : 0 < ρ) (S : Polynomial ) (hS_pos : 0 < Polynomial.eval ρ S) :
              theorem Biswal.Theorem1.prod_linear_factors_dvd {p : Polynomial } {d : } (_hp : p 0) (r : Fin d) (hr_pos : ∀ (j : Fin d), 0 < r j) (hr_mono : StrictMono r) (hr_root : ∀ (j : Fin d), p.IsRoot (r j)) (h_dvd : ∀ (j : Fin d), Polynomial.X - Polynomial.C (r j) p) :
              j : Fin d, (Polynomial.X - Polynomial.C (r j)) p
              theorem Biswal.Theorem1.splits_of_distinct_pos_roots_and_deg_le {p : Polynomial } {d : } (hp : p 0) (hdeg : p.natDegree d) (r : Fin d) (hr_pos : ∀ (j : Fin d), 0 < r j) (hr_mono : StrictMono r) (hr_root : ∀ (j : Fin d), p.IsRoot (r j)) :
              theorem Biswal.Theorem1.polyP_root_to_chebyshev_root (m : ) (r : ) (hr_pos : 0 < r) (hr_root : Polynomial.eval r (polyP m) = 0) :
              have z := 1 / (2 * r); 0 < z Polynomial.eval z (Polynomial.Chebyshev.U m) = 0
              theorem Biswal.Theorem1.cos_pos_angle_bound (m : ) (hm : 2 m) (j : ) (hj : j < m) (hcos_pos : 0 < Real.cos ((j + 1) * Real.pi / (m + 1))) :
              2 * (j + 1) < m + 1
              theorem Biswal.Theorem1.chebyshev_root_parametrize (m : ) (hm : 2 m) (z : ) (hz_pos : 0 < z) (hz_root : Polynomial.eval z (Polynomial.Chebyshev.U m) = 0) :
              ∃ (k : ), 1 k 2 * k < m + 1 z = Real.cos (k * Real.pi / (m + 1))
              theorem Biswal.Theorem1.polyP_root_parametrize (m : ) (hm : 2 m) (r : ) (hr_pos : 0 < r) (hr_root : Polynomial.eval r (polyP m) = 0) :
              ∃ (k : ), 1 k 2 * k < m + 1 1 / (2 * r) = Real.cos (k * Real.pi / (m + 1))
              theorem Biswal.Theorem1.candidate_lt_m (m k : ) (_hm : 2 m) (hk : 2 k) (hk_bound : 2 * k < m + 1) :
              (m + 1) / k < m
              theorem Biswal.Theorem1.nat_ineq_div_mul (m k : ) (hk : 2 k) :
              m + 1 < ((m + 1) / k + 1) * k
              theorem Biswal.Theorem1.angle_gt_pi (m k : ) (hm : 2 m) (hk : 2 k) (_hk_bound : 2 * k < m + 1) :
              Real.pi < (↑((m + 1) / k) + 1) * (k * Real.pi / (m + 1))
              theorem Biswal.Theorem1.angle_lt_two_pi (m k : ) (hm : 2 m) (hk : 2 k) (hk_bound : 2 * k < m + 1) :
              (↑((m + 1) / k) + 1) * (k * Real.pi / (m + 1)) < 2 * Real.pi
              theorem Biswal.Theorem1.polyP_eval_nonpos_at_bad_index (m k j₀ : ) (hm : 2 m) (hk : 2 k) (hk_bound : 2 * k < m + 1) (_hj₀ : j₀ < m) (r : ) (hr_pos : 0 < r) (hr_param : 1 / (2 * r) = Real.cos (k * Real.pi / (m + 1))) (h_sin : Real.sin ((j₀ + 1) * (k * Real.pi / (m + 1))) 0) :
              theorem Biswal.Theorem1.polyP_roots_pos (m : ) (_hm : 2 m) (x : ) (hx : Polynomial.eval x (polyP m) = 0) :
              0 < x
              theorem Biswal.Theorem1.root_index_eq_one (m : ) (hm : 2 m) (ρ : ) (hρ_pos : 0 < ρ) (hρ_lower : j < m, 0 < Polynomial.eval ρ (polyP j)) (k : ) (hk_pos : 1 k) (hk_bound : 2 * k < m + 1) (hρ_param : 1 / (2 * ρ) = Real.cos (k * Real.pi / (m + 1))) :
              k = 1
              theorem Biswal.Theorem1.sqrt_from_param (ρ c : ) (_hρ : 0 < ρ) (hc : 0 < c) (h : 1 / (2 * ρ) = c) :
              ρ = 1 / (2 * c)
              theorem Biswal.Theorem1.cos_pos_from_param (ρ c : ) ( : 0 < ρ) (h : 1 / (2 * ρ) = c) :
              0 < c
              theorem Biswal.Theorem1.root_comparison (m : ) (hm : 2 m) (ρ x : ) (hρ_pos : 0 < ρ) (hx_pos : 0 < x) (k_ρ k_x : ) (hk_ρ_pos : 1 k_ρ) (_hk_ρ_bound : 2 * k_ρ < m + 1) (_hk_x_pos : 1 k_x) (hk_x_bound : 2 * k_x < m + 1) (hρ_param : 1 / (2 * ρ) = Real.cos (k_ρ * Real.pi / (m + 1))) (hx_param : 1 / (2 * x) = Real.cos (k_x * Real.pi / (m + 1))) (hk_lt : k_ρ < k_x) :
              ρ < x
              theorem Biswal.Theorem1.root_is_smallest (m : ) (hm : 2 m) (ρ : ) (hρ_pos : 0 < ρ) (hρ_root : Polynomial.eval ρ (polyP m) = 0) (hρ_lower : j < m, 0 < Polynomial.eval ρ (polyP j)) (x : ) (hx_root : Polynomial.eval x (polyP m) = 0) (hx_ne : x ρ) :
              ρ < x

              Derivative Convolution Identity #

              theorem Biswal.Theorem1.inner_sum_recurrence (R : Type u_1) [CommRing R] (n : ) :
              jFinset.range (n + 1), polyP R j * polyP R (n + 2 - j) = jFinset.range (n + 1), polyP R j * polyP R (n + 1 - j) - Polynomial.X * jFinset.range (n + 1), polyP R j * polyP R (n - j)
              theorem Biswal.Theorem1.convolution_sum_step (R : Type u_1) [CommRing R] (n : ) :
              jFinset.range (n + 3), polyP R j * polyP R (n + 2 - j) = jFinset.range (n + 2), polyP R j * polyP R (n + 1 - j) + polyP R (n + 2) - Polynomial.X * jFinset.range (n + 1), polyP R j * polyP R (n - j)
              theorem Biswal.Theorem1.polyP_neg_deriv_eq_convolution (R : Type u_1) [CommRing R] (n : ) (hn : 2 n) :
              -Polynomial.derivative (polyP R n) = jFinset.range (n - 1), polyP R j * polyP R (n - 2 - j)
              theorem Biswal.Theorem1.eval_deriv_polyP_neg (m : ) (hm : 2 m) (ρ : ) (_hρ_pos : 0 < ρ) (hρ_lower : j < m, 0 < Polynomial.eval ρ (polyP j)) :
              theorem Biswal.Theorem1.rho_not_root_of_S (m : ) (hm : 2 m) (ρ : ) (hρ_pos : 0 < ρ) (_hρ_root : Polynomial.eval ρ (polyP m) = 0) (hρ_lower : j < m, 0 < Polynomial.eval ρ (polyP j)) (S : Polynomial ) (hfact : polyP m = (1 - Polynomial.C (1 / ρ) * Polynomial.X) * S) :
              theorem Biswal.Theorem1.S_constantCoeff_from_fact (m : ) (ρ : ) (S : Polynomial ) (hfact : polyP m = (1 - Polynomial.C (1 / ρ) * Polynomial.X) * S) :
              S.coeff 0 = 1
              theorem Biswal.Theorem1.S_splits (m : ) (hm : 2 m) (ρ : ) (S : Polynomial ) (hfact : polyP m = (1 - Polynomial.C (1 / ρ) * Polynomial.X) * S) :
              theorem Biswal.Theorem1.eval_pos_from_splits_and_roots_gt (S : Polynomial ) (ρ : ) (hρ_pos : 0 < ρ) (_hS_ne : S 0) (_hS_splits : S.Splits) (hS_eval_zero : Polynomial.eval 0 S = 1) (hS_roots_gt : ∀ (x : ), Polynomial.eval x S = 0ρ < x) :
              theorem Biswal.Theorem1.roots_of_S_gt_rho_v2 (m : ) (hm : 2 m) (ρ : ) (hρ_pos : 0 < ρ) (hρ_root : Polynomial.eval ρ (polyP m) = 0) (hρ_lower : j < m, 0 < Polynomial.eval ρ (polyP j)) (S : Polynomial ) (hfact : polyP m = (1 - Polynomial.C (1 / ρ) * Polynomial.X) * S) (x : ) (hx : Polynomial.eval x S = 0) :
              ρ < x
              theorem Biswal.Theorem1.S_eval_pos (m : ) (hm : 2 m) (ρ : ) (hρ_pos : 0 < ρ) (hρ_root : Polynomial.eval ρ (polyP m) = 0) (hρ_lower : j < m, 0 < Polynomial.eval ρ (polyP j)) (S : Polynomial ) (hfact : polyP m = (1 - Polynomial.C (1 / ρ) * Polynomial.X) * S) :

              Factorization and Power Series Decomposition #

              theorem Biswal.Theorem1.polyP_factor_at_root (m : ) (hm : 2 m) (ρ : ) (hρ_pos : 0 < ρ) (hρ_root : Polynomial.eval ρ (polyP m) = 0) (hρ_lower : j < m, 0 < Polynomial.eval ρ (polyP j)) :
              ∃ (S : Polynomial ), polyP m = (1 - Polynomial.C (1 / ρ) * Polynomial.X) * S 0 < Polynomial.eval ρ S IsCoprime (1 - Polynomial.C (1 / ρ) * Polynomial.X) S Polynomial.eval 0 S = 1 (∀ (x : ), Polynomial.eval x S = 0ρ < x) S.Splits
              theorem Biswal.Theorem1.bezout_lift_to_ps (L S a b : Polynomial ) (k : ) (hbez : a * L ^ k + b * S ^ k = 1) :
              a * L ^ k + b * S ^ k = 1
              theorem Biswal.Theorem1.ps_decomp_core (R_rem Lk Sk : PowerSeries ) (hLk : PowerSeries.constantCoeff Lk 0) (hSk : PowerSeries.constantCoeff Sk 0) (a_ps b_ps : PowerSeries ) (hbez : a_ps * Lk + b_ps * Sk = 1) :
              R_rem * (Lk * Sk)⁻¹ = R_rem * b_ps * Lk⁻¹ + R_rem * a_ps * Sk⁻¹
              theorem Biswal.Theorem1.ps_decomp (R_rem : Polynomial ) (k : ) (_hk : 0 < k) (L S : Polynomial ) (hL_const : L.coeff 0 = 1) (hS_const : S.coeff 0 = 1) (a b : Polynomial ) (hbez : a * L ^ k + b * S ^ k = 1) (P : Polynomial ) (hP : P = L * S) :
              R_rem * (P ^ k)⁻¹ = ↑(R_rem * b) * (L ^ k)⁻¹ + ↑(R_rem * a) * (S ^ k)⁻¹
              theorem Biswal.Theorem1.bezout_eval_at_root (L S a b : Polynomial ) (k : ) (hk : 0 < k) (ρ : ) (hL_zero : Polynomial.eval ρ L = 0) (hbez : a * L ^ k + b * S ^ k = 1) :
              theorem Biswal.Theorem1.bezout_fraction_split (m : ) (_hm : 2 m) (R_rem : Polynomial ) (k : ) (hk : 0 < k) (ρ : ) (hρ_pos : 0 < ρ) (hR_pos : 0 < Polynomial.eval ρ R_rem) (S : Polynomial ) (hfact : polyP m = (1 - Polynomial.C (1 / ρ) * Polynomial.X) * S) (hS_pos : 0 < Polynomial.eval ρ S) (hCop : IsCoprime (1 - Polynomial.C (1 / ρ) * Polynomial.X) S) :
              ∃ (N_poly : Polynomial ) (M_poly : Polynomial ), have L := 1 - Polynomial.C (1 / ρ) * Polynomial.X; R_rem * ((polyP m) ^ k)⁻¹ = N_poly * (L ^ k)⁻¹ + M_poly * (S ^ k)⁻¹ 0 < Polynomial.eval ρ N_poly
              theorem Biswal.Theorem1.inv_L_pow_coeff (ρ : ) (hρ_pos : 0 < ρ) (k : ) (hk : 0 < k) (r : ) :
              have L := 1 - Polynomial.C (1 / ρ) * Polynomial.X; (PowerSeries.coeff r) (L ^ k)⁻¹ = ((k - 1 + r).choose (k - 1)) * (1 / ρ) ^ r
              theorem Biswal.Theorem1.sum_le_pow_mul_sum (q : Polynomial ) (hd : 1 q.natDegree) (x : ) (hx : 1 x) :
              iFinset.range q.natDegree, |q.coeff i| * x ^ i x ^ (q.natDegree - 1) * iFinset.range q.natDegree, |q.coeff i|
              theorem Biswal.Theorem1.abs_sum_le_pow_mul_sum_abs (q : Polynomial ) (hd : 1 q.natDegree) (x : ) (hx : 1 x) :
              |iFinset.range q.natDegree, q.coeff i * x ^ i| x ^ (q.natDegree - 1) * iFinset.range q.natDegree, |q.coeff i|
              theorem Biswal.Theorem1.poly_eventually_pos_nat (q : Polynomial ) (hq : 0 < q.leadingCoeff) :
              ∃ (N : ), ∀ (r : ), N < r0 < Polynomial.eval (↑r) q

              Hilbert Polynomial and Eventual Positivity #

              noncomputable def Biswal.Theorem1.nScaled (ρ : ) (N_poly : Polynomial ) :

              The polynomial N_poly rescaled by ρ, i.e. N_poly.comp (C ρ * X).

              Equations
              Instances For
                theorem Biswal.Theorem1.N_scaled_coe_eq_rescale (ρ : ) (N_poly : Polynomial ) :
                (nScaled ρ N_poly) = (PowerSeries.rescale ρ) N_poly
                theorem Biswal.Theorem1.hilbertPoly_succ_leadingCoeff_sum (p : Polynomial ) (d : ) (h_nonzero : ip.support, p.coeff i 0) :
                (∑ ip.support, p.coeff i Polynomial.preHilbertPoly d i).leadingCoeff = ip.support, p.coeff i * (↑d.factorial)⁻¹
                theorem Biswal.Theorem1.hilbertPoly_pos_leadingCoeff (ρ : ) (_hρ : 0 < ρ) (k : ) (hk : 0 < k) (N_poly : Polynomial ) (hN_pos : 0 < Polynomial.eval ρ N_poly) :
                0 < ((nScaled ρ N_poly).hilbertPoly k).leadingCoeff
                theorem Biswal.Theorem1.scaled_coeff_is_eventually_poly (ρ : ) (hρ_pos : 0 < ρ) (k : ) (hk : 0 < k) (N_poly : Polynomial ) (hN_pos : 0 < Polynomial.eval ρ N_poly) :
                have L := 1 - Polynomial.C (1 / ρ) * Polynomial.X; ∃ (q : Polynomial ) (N₀ : ), 0 < q.leadingCoeff ∀ (r : ), N₀ < rρ ^ r * (PowerSeries.coeff r) (N_poly * (L ^ k)⁻¹) = Polynomial.eval (↑r) q
                theorem Biswal.Theorem1.L_part_eventually_pos (ρ : ) (hρ_pos : 0 < ρ) (k : ) (hk : 0 < k) (N_poly : Polynomial ) (hN_pos : 0 < Polynomial.eval ρ N_poly) :
                have L := 1 - Polynomial.C (1 / ρ) * Polynomial.X; ∃ (N : ), ∀ (r : ), N < r0 < (PowerSeries.coeff r) (N_poly * (L ^ k)⁻¹)

                Coefficient Bounds and Asymptotic Analysis #

                theorem Biswal.Theorem1.S_eq_one_of_deg_zero_const_one (S : Polynomial ) (hS_const_coeff : Polynomial.eval 0 S = 1) (hS_deg : S.natDegree = 0) :
                S = 1
                theorem Biswal.Theorem1.S_part_eventually_zero_of_const (M_poly S : Polynomial ) (k : ) (_hk : 0 < k) (hS_const_coeff : Polynomial.eval 0 S = 1) (hS_deg : S.natDegree = 0) :
                ∃ (N : ), ∀ (r : ), N < r(PowerSeries.coeff r) (M_poly * (S ^ k)⁻¹) = 0
                theorem Biswal.Theorem1.inv_one_pow_coeff_bound (k : ) (_hk : 0 < k) (ρ₁ : ) (hρ₁_pos : 0 < ρ₁) :
                ∃ (C : ) (D : ), 0 < C ∀ (r : ), |(PowerSeries.coeff r) (1 ^ k)⁻¹| C * (r + 1) ^ D * (1 / ρ₁) ^ r
                theorem Biswal.Theorem1.coeff_bound_strengthened (f : PowerSeries ) (C : ) (D : ) (q : ) (hC : 0 < C) (hq : 0 < q) (hbound : ∀ (r : ), |(PowerSeries.coeff r) f| C * (r + 1) ^ D * q ^ r) (r i j : ) (hij : i + j = r) :
                |(PowerSeries.coeff j) f| C * (r + 1) ^ D * q ^ r * q⁻¹ ^ i
                theorem Biswal.Theorem1.antidiag_term_bound (P : Polynomial ) (f : PowerSeries ) (C : ) (D : ) (q : ) (hC : 0 < C) (hq : 0 < q) (hbound : ∀ (r : ), |(PowerSeries.coeff r) f| C * (r + 1) ^ D * q ^ r) (r i j : ) (hij : i + j = r) :
                |P.coeff i| * |(PowerSeries.coeff j) f| |P.coeff i| * (C * (r + 1) ^ D * q ^ r * q⁻¹ ^ i)
                theorem Biswal.Theorem1.antidiag_sum_eq_range_sum (P : Polynomial ) (C : ) (D : ) (q : ) (r : ) :
                pFinset.antidiagonal r, |P.coeff p.1| * (C * (r + 1) ^ D * q ^ r * q⁻¹ ^ p.1) = C * (r + 1) ^ D * q ^ r * iFinset.range (r + 1), |P.coeff i| * q⁻¹ ^ i
                theorem Biswal.Theorem1.sum_eq_of_natDegree_lt (P : Polynomial ) (q : ) (r : ) (h : P.natDegree + 1 < r + 1) :
                iFinset.range (r + 1), |P.coeff i| * q⁻¹ ^ i = iFinset.range (P.natDegree + 1), |P.coeff i| * q⁻¹ ^ i
                theorem Biswal.Theorem1.antidiag_sum_bound (P : Polynomial ) (f : PowerSeries ) (C : ) (D : ) (q : ) (hC : 0 < C) (hq : 0 < q) (hbound : ∀ (r : ), |(PowerSeries.coeff r) f| C * (r + 1) ^ D * q ^ r) (r : ) :
                pFinset.antidiagonal r, |P.coeff p.1| * |(PowerSeries.coeff p.2) f| (C * iFinset.range (P.natDegree + 1), |P.coeff i| * q⁻¹ ^ i) * (r + 1) ^ D * q ^ r
                theorem Biswal.Theorem1.poly_mul_coeff_bound (P : Polynomial ) (f : PowerSeries ) (C : ) (D : ) (q : ) (hC : 0 < C) (hq : 0 < q) (hbound : ∀ (r : ), |(PowerSeries.coeff r) f| C * (r + 1) ^ D * q ^ r) (r : ) :
                |(PowerSeries.coeff r) (P * f)| (C * iFinset.range (P.natDegree + 1), |P.coeff i| * q⁻¹ ^ i) * (r + 1) ^ D * q ^ r
                theorem Biswal.Theorem1.poly_mul_preserves_bound (P : Polynomial ) (f : PowerSeries ) (C : ) (D : ) (q : ) (hC : 0 < C) (hq : 0 < q) (hbound : ∀ (r : ), |(PowerSeries.coeff r) f| C * (r + 1) ^ D * q ^ r) :
                ∃ (C' : ) (D' : ), 0 < C' ∀ (r : ), |(PowerSeries.coeff r) (P * f)| C' * (r + 1) ^ D' * q ^ r
                theorem Biswal.Theorem1.choose_le_pow_succ_core (n r : ) :
                ((n + r).choose n) (r + 1) ^ n
                theorem Biswal.Theorem1.cauchy_summand_bound (C₁ C₂ : ) (D₁ D₂ : ) (q : ) (hC₁ : 0 C₁) (hC₂ : 0 C₂) (hq : 0 q) (r r₁ r₂ : ) (hr : r₁ + r₂ = r) (b₁ b₂ : ) (hb₁ : |b₁| C₁ * (r₁ + 1) ^ D₁ * q ^ r₁) (hb₂ : |b₂| C₂ * (r₂ + 1) ^ D₂ * q ^ r₂) :
                |b₁ * b₂| C₁ * C₂ * (r + 1) ^ (D₁ + D₂) * q ^ r
                theorem Biswal.Theorem1.cauchy_product_bound (f₁ f₂ : PowerSeries ) (C₁ C₂ : ) (D₁ D₂ : ) (q : ) (hC₁ : 0 < C₁) (hC₂ : 0 < C₂) (hq : 0 < q) (hf₁ : ∀ (r : ), |(PowerSeries.coeff r) f₁| C₁ * (r + 1) ^ D₁ * q ^ r) (hf₂ : ∀ (r : ), |(PowerSeries.coeff r) f₂| C₂ * (r + 1) ^ D₂ * q ^ r) (r : ) :
                |(PowerSeries.coeff r) (f₁ * f₂)| C₁ * C₂ * (r + 1) ^ (D₁ + D₂ + 1) * q ^ r
                theorem Biswal.Theorem1.ps_mul_coeff_bound (f₁ f₂ : PowerSeries ) (C₁ C₂ : ) (D₁ D₂ : ) (q : ) (hC₁ : 0 < C₁) (hC₂ : 0 < C₂) (hq : 0 < q) (hf₁ : ∀ (r : ), |(PowerSeries.coeff r) f₁| C₁ * (r + 1) ^ D₁ * q ^ r) (hf₂ : ∀ (r : ), |(PowerSeries.coeff r) f₂| C₂ * (r + 1) ^ D₂ * q ^ r) :
                ∃ (C' : ) (D' : ), 0 < C' ∀ (r : ), |(PowerSeries.coeff r) (f₁ * f₂)| C' * (r + 1) ^ D' * q ^ r
                theorem Biswal.Theorem1.single_factor_inv_pow_bound (α ρ₁ : ) (k : ) (hα_pos : 0 < α) (hρ₁_pos : 0 < ρ₁) (hk : 0 < k) (hα_ge : ρ₁ α) :
                have L := 1 - Polynomial.C (1 / α) * Polynomial.X; ∀ (r : ), |(PowerSeries.coeff r) (L ^ k)⁻¹| (r + 1) ^ (k - 1) * (1 / ρ₁) ^ r
                theorem Biswal.Theorem1.base_case_bound (k : ) (ρ₁ : ) (_hk : 0 < k) (hρ₁_pos : 0 < ρ₁) :
                ∃ (C : ) (D : ), 0 < C ∀ (r : ), |(PowerSeries.coeff r) (Multiset.map (fun (α : ) => (↑(1 - Polynomial.C (1 / α) * Polynomial.X) ^ k)⁻¹) 0).prod| C * (r + 1) ^ D * (1 / ρ₁) ^ r
                theorem Biswal.Theorem1.multiset_prod_inv_bound (roots : Multiset ) (k : ) (ρ₁ : ) (hk : 0 < k) (hρ₁_pos : 0 < ρ₁) (hroots_pos : αroots, 0 < α) (hroots_ge : αroots, ρ₁ α) :
                have F := (Multiset.map (fun (α : ) => (↑(1 - Polynomial.C (1 / α) * Polynomial.X) ^ k)⁻¹) roots).prod; ∃ (C : ) (D : ), 0 < C ∀ (r : ), |(PowerSeries.coeff r) F| C * (r + 1) ^ D * (1 / ρ₁) ^ r
                theorem Biswal.Theorem1.prod_X_sub_C_eq_scalar_mul_prod_L (roots : Multiset ) (hroots : αroots, 0 < α) :
                (Multiset.map (fun (α : ) => Polynomial.X - Polynomial.C α) roots).prod = (Multiset.map (fun (α : ) => -Polynomial.C α) roots).prod * (Multiset.map (fun (α : ) => 1 - Polynomial.C (1 / α) * Polynomial.X) roots).prod
                theorem Biswal.Theorem1.splits_poly_eq_prod_L (S : Polynomial ) (hS_ne : S 0) (hS_splits : S.Splits) (hS_const : Polynomial.eval 0 S = 1) (hroots_pos : xS.roots, 0 < x) :
                S = (Multiset.map (fun (α : ) => 1 - Polynomial.C (1 / α) * Polynomial.X) S.roots).prod
                theorem Biswal.Theorem1.coe_pow_eq_prod_coe_pow (S : Polynomial ) (hS_eq : S = (Multiset.map (fun (α : ) => 1 - Polynomial.C (1 / α) * Polynomial.X) S.roots).prod) (k : ) :
                S ^ k = (Multiset.map (fun (α : ) => ↑(1 - Polynomial.C (1 / α) * Polynomial.X) ^ k) S.roots).prod
                theorem Biswal.Theorem1.inv_prod_eq_prod_inv_of_roots (roots : Multiset ) (k : ) :
                (Multiset.map (fun (α : ) => ↑(1 - Polynomial.C (1 / α) * Polynomial.X) ^ k) roots).prod⁻¹ = (Multiset.map (fun (α : ) => (↑(1 - Polynomial.C (1 / α) * Polynomial.X) ^ k)⁻¹) roots).prod
                theorem Biswal.Theorem1.splits_inv_pow_eq_multiset_prod (S : Polynomial ) (k : ) (_hk : 0 < k) (hS_ne : S 0) (hS_splits : S.Splits) (hS_const : Polynomial.eval 0 S = 1) (hroots_pos : xS.roots, 0 < x) :
                0 < S.natDegree∃ (P : Polynomial ), (S ^ k)⁻¹ = P * (Multiset.map (fun (α : ) => (↑(1 - Polynomial.C (1 / α) * Polynomial.X) ^ k)⁻¹) S.roots).prod
                theorem Biswal.Theorem1.inv_splits_pow_coeff_bound (S : Polynomial ) (k : ) (hk : 0 < k) (hS_ne : S 0) (hS_splits : S.Splits) (hS_const : Polynomial.eval 0 S = 1) (ρ₁ : ) (hρ₁_pos : 0 < ρ₁) (hρ₁_le : ∀ (x : ), Polynomial.eval x S = 0ρ₁ x) :
                ∃ (C : ) (D : ), 0 < C ∀ (r : ), |(PowerSeries.coeff r) (S ^ k)⁻¹| C * (r + 1) ^ D * (1 / ρ₁) ^ r
                theorem Biswal.Theorem1.exists_min_root_gt (S : Polynomial ) (ρ : ) (hρ_pos : 0 < ρ) (hS_ne : S 0) (hS_splits : S.Splits) (hS_nconst : 0 < S.natDegree) (hS_roots_larger : ∀ (x : ), Polynomial.eval x S = 0ρ < x) :
                ∃ (ρ₁ : ), ρ < ρ₁ 0 < ρ₁ ∀ (x : ), Polynomial.eval x S = 0ρ₁ x
                theorem Biswal.Theorem1.S_part_coeff_bound (ρ : ) (hρ_pos : 0 < ρ) (k : ) (hk : 0 < k) (M_poly S : Polynomial ) (hS_pos : 0 < Polynomial.eval ρ S) (hS_const : Polynomial.eval 0 S = 1) (hS_roots_larger : ∀ (x : ), Polynomial.eval x S = 0ρ < x) (hS_splits : S.Splits) (hS_nconst : 0 < S.natDegree) :
                ∃ (C : ) (D : ) (ρ₂ : ), 0 < C ρ < ρ₂ ∀ (r : ), |(PowerSeries.coeff r) (M_poly * (S ^ k)⁻¹)| C * (r + 1) ^ D * (1 / ρ₂) ^ r
                theorem Biswal.Theorem1.poly_eq_of_eventually_eq (q₁ q₂ : Polynomial ) (N : ) (h : ∀ (r : ), N < rPolynomial.eval (↑r) q₁ = Polynomial.eval (↑r) q₂) :
                q₁ = q₂
                theorem Biswal.Theorem1.scaled_coeff_poly_degree_ge (ρ : ) (hρ_pos : 0 < ρ) (k : ) (hk : 0 < k) (N_poly : Polynomial ) (hN_pos : 0 < Polynomial.eval ρ N_poly) (q : Polynomial ) (N₀ : ) (_hq_lc : 0 < q.leadingCoeff) (hq_eq : ∀ (r : ), N₀ < rρ ^ r * (PowerSeries.coeff r) (N_poly * (↑(1 - Polynomial.C (1 / ρ) * Polynomial.X) ^ k)⁻¹) = Polynomial.eval (↑r) q) :
                theorem Biswal.Theorem1.divide_by_rho_pow (ρ : ) ( : 0 < ρ) (c : ) (d r : ) (x : ) (h : c * r ^ d ρ ^ r * x) :
                c * r ^ d * (1 / ρ) ^ r x
                theorem Biswal.Theorem1.poly_lower_bound_at_point (q : Polynomial ) (hq : 0 < q.leadingCoeff) (hdeg : 1 q.natDegree) (d : ) (hd : d q.natDegree) (x : ) (hx : 1 x) (hxS : (2 * iFinset.range q.natDegree, |q.coeff i|) / q.leadingCoeff < x) :
                theorem Biswal.Theorem1.poly_eventually_lower_bound_of_deg_ge_one (q : Polynomial ) (hq : 0 < q.leadingCoeff) (hdeg : 1 q.natDegree) (d : ) (hd : d q.natDegree) :
                ∃ (c : ) (N : ), 0 < c ∀ (r : ), N < rc * r ^ d Polynomial.eval (↑r) q
                theorem Biswal.Theorem1.poly_eventually_lower_bound (q : Polynomial ) (hq : 0 < q.leadingCoeff) (d : ) (hd : d q.natDegree) :
                ∃ (c : ) (N : ), 0 < c ∀ (r : ), N < rc * r ^ d Polynomial.eval (↑r) q
                theorem Biswal.Theorem1.L_part_coeff_lower_bound (ρ : ) (hρ_pos : 0 < ρ) (k : ) (hk : 0 < k) (N_poly : Polynomial ) (hN_pos : 0 < Polynomial.eval ρ N_poly) :
                have L := 1 - Polynomial.C (1 / ρ) * Polynomial.X; ∃ (c : ) (N : ), 0 < c ∀ (r : ), N < rc * r ^ (k - 1) * (1 / ρ) ^ r (PowerSeries.coeff r) (N_poly * (L ^ k)⁻¹)
                theorem Biswal.Theorem1.bound_transfer (C c : ) (D E r : ) (ρ ρ₂ : ) (hρ_pos : 0 < ρ) (hρ₂_pos : 0 < ρ₂) (h : C * (r + 1) ^ D * (ρ / ρ₂) ^ r < c * r ^ E) :
                C * (r + 1) ^ D * (1 / ρ₂) ^ r < c * r ^ E * (1 / ρ) ^ r
                theorem Biswal.Theorem1.tendsto_add_one_pow_mul_geometric (D : ) (q : ) (hq_pos : 0 q) (hq_lt : q < 1) :
                Filter.Tendsto (fun (r : ) => (r + 1) ^ D * q ^ r) Filter.atTop (nhds 0)
                theorem Biswal.Theorem1.poly_geometric_eventually_lt (C c : ) (_hC : 0 < C) (hc : 0 < c) (D E : ) (q : ) (hq_pos : 0 < q) (hq_lt : q < 1) :
                ∃ (N : ), ∀ (r : ), N < rC * (r + 1) ^ D * q ^ r < c * r ^ E
                theorem Biswal.Theorem1.S_part_eventually_dominated (ρ : ) (hρ_pos : 0 < ρ) (k : ) (hk : 0 < k) (N_poly M_poly S : Polynomial ) (hN_pos : 0 < Polynomial.eval ρ N_poly) (hS_pos : 0 < Polynomial.eval ρ S) (hS_const : Polynomial.eval 0 S = 1) (hS_roots_larger : ∀ (x : ), Polynomial.eval x S = 0ρ < x) (hS_splits : S.Splits) :
                have L := 1 - Polynomial.C (1 / ρ) * Polynomial.X; ∃ (N : ), ∀ (r : ), N < r|(PowerSeries.coeff r) (M_poly * (S ^ k)⁻¹)| < (PowerSeries.coeff r) (N_poly * (L ^ k)⁻¹)
                theorem Biswal.Theorem1.sum_parts_eventually_pos (ρ : ) (hρ_pos : 0 < ρ) (k : ) (hk : 0 < k) (N_poly M_poly S : Polynomial ) (hN_pos : 0 < Polynomial.eval ρ N_poly) (hS_pos : 0 < Polynomial.eval ρ S) (hS_const : Polynomial.eval 0 S = 1) (hS_roots_larger : ∀ (x : ), Polynomial.eval x S = 0ρ < x) (hS_splits : S.Splits) :
                have L := 1 - Polynomial.C (1 / ρ) * Polynomial.X; ∃ (N : ), ∀ (r : ), N < r0 < (PowerSeries.coeff r) (N_poly * (L ^ k)⁻¹ + M_poly * (S ^ k)⁻¹)
                theorem Biswal.Theorem1.proper_fraction_coeff_pos_over_R (m : ) (hm : 2 m) (R_rem : Polynomial ) (k : ) (hk : 0 < k) (ρ : ) (hρ_pos : 0 < ρ) (hρ_root : Polynomial.eval ρ (polyP m) = 0) (hρ_lower : j < m, 0 < Polynomial.eval ρ (polyP j)) (hR_pos : 0 < Polynomial.eval ρ R_rem) :
                ∃ (N : ), ∀ (r : ), N < r0 < (PowerSeries.coeff r) (R_rem * ((polyP m) ^ k)⁻¹)
                theorem Biswal.Theorem1.map_genFun_comm (R_poly : Polynomial ) (m k : ) :
                (PowerSeries.map (algebraMap )) (R_poly * ((polyP m) ^ k)⁻¹) = (Polynomial.map (algebraMap ) R_poly) * ((polyP m) ^ k)⁻¹
                theorem Biswal.Theorem1.proper_fraction_coeff_eventually_pos (m : ) (hm : 2 m) (R_poly : Polynomial ) (k : ) (hk : 0 < k) (hR_pos_at_root : ∀ (ρ : ), 0 < ρPolynomial.eval ρ (Polynomial.map (algebraMap ) (polyP m)) = 0(∀ j < m, 0 < Polynomial.eval ρ (Polynomial.map (algebraMap ) (polyP j)))0 < Polynomial.eval ρ (Polynomial.map (algebraMap ) R_poly)) :
                ∃ (N : ), ∀ (r : ), N < r0 < (PowerSeries.coeff r) (R_poly * ((polyP m) ^ k)⁻¹)

                Main Theorems #

                theorem Biswal.Theorem1.genFun_eq_one_of_m_eq_one (K : Type u_1) [Field K] (n : ) {s : } (ξ : s.Partition) (h_parts : iξ.parts, i 1) :
                genFun K 1 n ξ = 1
                theorem Biswal.Theorem1.genFun_is_polynomial (K : Type u_1) [Field K] (m n : ) {s : } (ξ : s.Partition) (hm : 2 m) (h_parts : iξ.parts, i m) (h_t : n / m + 1 countMaxParts m ξ) :
                ∃ (N : ), ∀ (r : ), N < rgenFunCoeff K m n r ξ = 0
                theorem Biswal.Theorem1.genFun_coeff_eventually_pos (m n : ) {s : } (ξ : s.Partition) (hm : 2 m) (h_parts : iξ.parts, i m) (h_t : countMaxParts m ξ n / m) :
                ∃ (N : ), ∀ (r : ), N < r0 < genFunCoeff m n r ξ