Documentation

Mathlib.RingTheory.Polynomial.Pochhammer

The Pochhammer polynomials #

We define and prove some basic relations about ascPochhammer S n : S[X] := X * (X + 1) * ... * (X + n - 1) which is also known as the rising factorial and about descPochhammer R n : R[X] := X * (X - 1) * ... * (X - n + 1) which is also known as the falling factorial. Versions of this definition that are focused on Nat can be found in Data.Nat.Factorial as Nat.ascFactorial and Nat.descFactorial.

Implementation #

As with many other families of polynomials, even though the coefficients are always in or , we define the polynomial with coefficients in any [Semiring S] or [Ring R]. In an integral domain S, we show that ascPochhammer S n is zero iff n is a sufficiently large non-positive integer.

TODO #

There is lots more in this direction:

noncomputable def ascPochhammer (S : Type u) [Semiring S] :

ascPochhammer S n is the polynomial X * (X + 1) * ... * (X + n - 1), with coefficients in the semiring S.

Equations
    Instances For
      @[simp]
      theorem ascPochhammer_zero (S : Type u) [Semiring S] :
      @[simp]
      theorem ascPochhammer_map {S : Type u} [Semiring S] {T : Type v} [Semiring T] (f : S →+* T) (n : ) :
      theorem ascPochhammer_eval₂ {S : Type u} [Semiring S] {T : Type v} [Semiring T] (f : S →+* T) (n : ) (t : T) :
      @[simp]
      @[simp]
      theorem ascPochhammer_ne_zero_eval_zero (S : Type u) [Semiring S] {n : } (h : n 0) :
      theorem ascPochhammer_succ_eval {S : Type u_1} [Semiring S] (n : ) (k : S) :
      theorem ascPochhammer_mul (S : Type u) [Semiring S] (n m : ) :
      theorem ascPochhammer_pos {S : Type u_1} [Semiring S] [PartialOrder S] [IsStrictOrderedRing S] (n : ) (s : S) (h : 0 < s) :
      @[simp]
      theorem factorial_mul_ascPochhammer (S : Type u_2) [Semiring S] (r n : ) :
      r.factorial * Polynomial.eval (r + 1) (ascPochhammer S n) = (r + n).factorial
      theorem ascPochhammer_eval_succ (S : Type u_1) [Semiring S] (r n : ) :
      n * Polynomial.eval (n + 1) (ascPochhammer S r) = (n + r) * Polynomial.eval (↑n) (ascPochhammer S r)
      noncomputable def descPochhammer (R : Type u) [Ring R] :

      descPochhammer R n is the polynomial X * (X - 1) * ... * (X - n + 1), with coefficients in the ring R.

      Equations
        Instances For
          @[simp]
          theorem descPochhammer_zero (R : Type u) [Ring R] :
          @[simp]
          theorem descPochhammer_map {R : Type u} [Ring R] {T : Type v} [Ring T] (f : R →+* T) (n : ) :
          @[simp]
          theorem descPochhammer_eval_cast (R : Type u) [Ring R] (n : ) (k : ) :
          @[simp]
          theorem descPochhammer_ne_zero_eval_zero (R : Type u) [Ring R] {n : } (h : n 0) :
          theorem descPochhammer_succ_eval {S : Type u_1} [Ring S] (n : ) (k : S) :
          theorem descPochhammer_mul (R : Type u) [Ring R] (n m : ) :
          theorem ascPochhammer_eval_neg_coe_nat_of_lt {R : Type u} [Ring R] {n k : } (h : k < n) :

          The Pochhammer polynomial of degree n has roots at 0, -1, ..., -(n - 1).

          @[simp]
          theorem ascPochhammer_eval_eq_zero_iff {R : Type u} [Ring R] [IsDomain R] (n : ) (r : R) :
          Polynomial.eval r (ascPochhammer R n) = 0 k < n, k = -r

          Over an integral domain, the Pochhammer polynomial of degree n has roots only at 0, -1, ..., -(n - 1).

          theorem descPochhammer_eval_coe_nat_of_lt {R : Type u} [Ring R] {k n : } (h : k < n) :

          descPochhammer R n is 0 for 0, 1, …, n-1.

          theorem descPochhammer_eval_eq_prod_range {R : Type u_1} [CommRing R] (n : ) (r : R) :
          Polynomial.eval r (descPochhammer R n) = jFinset.range n, (r - j)
          theorem descPochhammer_pos {S : Type u_1} [Ring S] [PartialOrder S] [IsStrictOrderedRing S] {n : } {s : S} (h : n - 1 < s) :

          descPochhammer S n is positive on (n-1, ∞).

          theorem descPochhammer_nonneg {S : Type u_1} [Ring S] [PartialOrder S] [IsStrictOrderedRing S] {n : } {s : S} (h : n - 1 s) :

          descPochhammer S n is nonnegative on [n-1, ∞).

          theorem pow_le_descPochhammer_eval {S : Type u_1} [Ring S] [PartialOrder S] [IsStrictOrderedRing S] {n : } {s : S} (h : n - 1 s) :
          (s - n + 1) ^ n Polynomial.eval s (descPochhammer S n)

          descPochhammer S n is at least (s-n+1)^n on [n-1, ∞).

          theorem monotoneOn_descPochhammer_eval {S : Type u_1} [Ring S] [PartialOrder S] [IsStrictOrderedRing S] (n : ) :
          MonotoneOn (fun (a : S) => Polynomial.eval a (descPochhammer S n)) (Set.Ici (n - 1))

          descPochhammer S n is monotone on [n-1, ∞).