Documentation

LeanPool.PolynomialMethodRestrictedSums.VandermondeCoefficientFormula

The Vandermonde coefficient formula #

Lemma 3.1 of Alon-Nathanson-Ruzsa: a closed form for the coefficient of ∏ i, X i ^ c i in (X 0 + ⋯ + X k) ^ m * ∏_{i > j} (X i - X j), culminating in Vandermonde_coefficient_formula.

def fallingFactorial (s r : ) :

Falling factorial (s)_r = s(s-1)...(s-r + 1)

Equations
Instances For
    def vandermondeMatrix {k : } (c : Fin (k + 1)) :
    Matrix (Fin (k + 1)) (Fin (k + 1))

    Vandermonde matrix (c^j)

    Equations
    Instances For
      def fallingFactorialMatrix {k : } (c : Fin (k + 1)) :
      Matrix (Fin (k + 1)) (Fin (k + 1))

      Falling factorial matrix ((c)_j)

      Equations
      Instances For
        def expectedValue {k : } (c : Fin (k + 1)) (m : ) :

        Expected value: m! / (∏ c!) * ∏_{i>j} (c - c)

        Equations
        Instances For
          def toFinsupp {k : } (c : Fin (k + 1)) :
          Fin (k + 1) →₀

          Convert a function c : Fin (k + 1) → ℕ to Finsupp

          Equations
          • toFinsupp c = { support := {i : Fin (k + 1) | c i 0}, toFun := c, mem_support_toFun := }
          Instances For
            def symmetricSumFixed {k : } (c : Fin (k + 1)) (m : ) :

            Symmetric group sum expression C = ∑{σ∈S{k + 1}} (-1)^{sign(σ)} * m! / ∏ᵢ (cᵢ - σ(i))! Corrected to use proper sign and handle 0 case.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              theorem coeff_term {k : } (c : Fin (k + 1)) (m : ) (σ : Equiv.Perm (Fin (k + 1))) (h_sum : i : Fin (k + 1), c i = m + (k + 1).choose 2) :
              MvPolynomial.coeff (toFinsupp c) ((∑ i : Fin (k + 1), MvPolynomial.X i) ^ m * i : Fin (k + 1), MvPolynomial.X i ^ (σ i)) = if ∀ (i : Fin (k + 1)), (σ i) c i then m.factorial / i : Fin (k + 1), (c i - (σ i)).factorial else 0
              theorem Vandermonde_coefficient_formula {k : } (c : Fin (k + 1)) (m : ) (h_sum : i : Fin (k + 1), c i = m + (k + 1).choose 2) :
              MvPolynomial.coeff (toFinsupp c) ((∑ i : Fin (k + 1), MvPolynomial.X i) ^ m * i : Fin (k + 1), j : Fin (k + 1), if j < i then MvPolynomial.X i - MvPolynomial.X j else 1) = expectedValue c m