Documentation

Mathlib.RingTheory.Binomial

Binomial rings #

In this file we introduce the binomial property as a mixin, and define the multichoose and choose functions generalizing binomial coefficients.

According to our main reference [elliott2006binomial] (which lists many equivalent conditions), a binomial ring is a torsion-free commutative ring R such that for any x ∈ R and any k ∈ ℕ, the product x(x-1)⋯(x-k+1) is divisible by k!. The torsion-free condition lets us divide by k! unambiguously, so we get uniquely defined binomial coefficients.

The defining condition doesn't require commutativity (or associativity), and we get a theory with essentially the same power by replacing subtraction with addition. Thus, we consider a semiring R in which multiplication by factorials is injective, and demand that the evaluation of the ascending Pochhammer polynomial X(X+1)⋯(X+(k-1)) at any element is divisible by k!. The quotient is called multichoose r k, following the convention given for natural numbers.

References #

TODO #

class BinomialRing (R : Type u_1) [Semiring R] :
Type u_1

A binomial ring is a ring for which ascending Pochhammer evaluations are uniquely divisible by suitable factorials. We define this notion for semirings, but retain the ring name. We introduce Ring.multichoose as the uniquely defined quotient.

Instances
    theorem Ring.nsmul_right_injective {R : Type u_1} [Semiring R] [BinomialRing R] (n : ) (h : n 0) :
    Function.Injective fun (x : R) => n x
    def Ring.multichoose {R : Type u_1} [Semiring R] [BinomialRing R] (r : R) (n : ) :
    R

    The multichoose function is the quotient of ascending Pochhammer evaluation by the corresponding factorial. When applied to natural numbers, multichoose k n describes choosing a multiset of n items from a group of k, i.e., choosing with replacement.

    Equations
    Instances For
      Equations
      def Int.multichoose (n : ) (k : ) :

      The multichoose function for integers.

      Equations
      Instances For
        Equations
        def Ring.choose {R : Type u_1} [Ring R] [BinomialRing R] (r : R) (n : ) :
        R

        The binomial coefficient choose r n generalizes the natural number choose function, interpreted in terms of choosing without replacement.

        Equations
        Instances For
          theorem Ring.choose_natCast {R : Type u_1} [Ring R] [BinomialRing R] (n : ) (k : ) :
          Ring.choose (n) k = (Nat.choose n k)