Documentation

Atlas.AlgebraicCombinatorics.code.HasseWalkFormula

Hasse Walk Length Formula (Theorem 8.6) #

This file formalizes Theorem 8.6 from Stanley's Algebraic Combinatorics: the formula for the number of Hasse walks of length from to a partition λ ⊢ n in Young's lattice.

Main results #

References #

Definitions #

noncomputable def HasseWalkFormula.numSYT (lam : YoungDiagram) :

The number of standard Young tableaux of shape λ, denoted f^λ in the book. This equals the number of saturated chains from to λ in Young's lattice.

Instances For
    noncomputable def HasseWalkFormula.hasseWalkCount (ell : ) (lam : YoungDiagram) :

    The number of Hasse walks of length from to λ in Young's lattice, denoted β(ℓ, λ) in the book. Each consecutive pair in the walk is related by a covering relation (either up or down).

    Instances For
      theorem HasseWalkFormula.hasseWalk_card_parity {ell : } (walk : Fin (ell + 1)YoungDiagram) (hstart : walk 0, = ) (hstep : ∀ (i : Fin ell), walk i, walk i + 1, walk i + 1, walk i, ) (k : ) (hk : k ell) :
      (walk k, ).card % 2 = k % 2

      Helper: in a Hasse walk from ⊥, the cardinality at position k has parity k. Each step changes cardinality by ±1 (via card_covBy_succ), so starting from card 0, the parity of walk(k).card equals the parity of k.

      theorem HasseWalkFormula.hasseWalkCount_parity (ell : ) (lam : YoungDiagram) (h : ell % 2 lam.card % 2) :
      hasseWalkCount ell lam = 0

      (F1) β(ℓ, λ) = 0 unless ℓ ≡ |λ| (mod 2). Each Hasse walk step changes the diagram's cardinality by ±1, so after ℓ steps from ∅ (card 0) the endpoint must have the same parity as ℓ.

      noncomputable def HasseWalkFormula.upWalkCount (n : ) (lam : YoungDiagram) :

      The number of Hasse walks of length n from to λ that use only up-steps (i.e., each step is a cover relation going up in Young's lattice). Unlike numSYT, this is parameterized by an explicit walk length n and target λ, so it counts up-walks of any specified length. When n = |λ| the count coincides with numSYT λ.

      Instances For
        theorem HasseWalkFormula.upWalk_card_eq {n : } (walk : Fin (n + 1)YoungDiagram) (hstart : walk 0, = ) (hstep : ∀ (j : Fin n), walk j, walk j + 1, ) (k : ) (hk : k n) :
        (walk k, ).card = k

        In an up-walk from , the diagram at position k has cardinality k.

        An up-walk of length i from reaches a diagram of card i. If i ≠ λ.card, there are no such walks, so upWalkCount i λ = 0.

        upWalkCount lam.card lam and numSYT lam count the same set: saturated chains from to lam in Young's lattice. The definitions are identical when the walk length parameter n equals lam.card.

        The walk type for hasseWalkCount n lam.

        Instances For
          theorem HasseWalkFormula.hasseWalk_card_le {m : } (walk : Fin (m + 1)YoungDiagram) (hstart : walk 0, = ) (hstep : ∀ (i : Fin m), walk i, walk i + 1, walk i + 1, walk i, ) (k : ) (hk : k m) :
          (walk k, ).card k

          In a Hasse walk from ⊥, the diagram at position k has card ≤ k.

          theorem HasseWalkFormula.yd_cell_bounded (yd : YoungDiagram) (i j : ) (h : (i, j) yd.cells) :
          i < yd.card j < yd.card

          Cells of a YoungDiagram are bounded by its card.

          Cells of a bounded-card diagram lie in a bounded grid.

          Young diagrams with bounded card form a finite type.

          theorem HasseWalkFormula.hasseWalkType_cells_bounded {m : } (w : Fin (m + 1)YoungDiagram) (h0 : w 0, = ) (hs : ∀ (i : Fin m), w i, w i + 1, w i + 1, w i, ) (k : Fin (m + 1)) :

          In a Hasse walk from ⊥ to lam of length m, every position has cells ⊆ grid of size m.

          The walk type HasseWalkType m lam is finite for every m and lam.

          (F2): β(ℓ, λ) is the coefficient of λ in (D+U)^ℓ(∅).

          theorem YoungDiagram.covBy_of_mem_coversUp {μ ν : YoungDiagram} (h : ν μ.coversUp) :
          μ ν

          If ν ∈ μ.coversUp then μ ⋖ ν in Young's lattice. Each element of coversUp is obtained by adding one cell, which produces a covering.

          theorem YoungDiagram.mem_coversUp_of_covBy {μ ν : YoungDiagram} (hcov : μ ν) :

          If μ ⋖ ν in Young's lattice then ν ∈ μ.coversUp. A covering in the poset must correspond to adding a single cell.

          μ ⋖ ν ↔ ν ∈ μ.coversUp in Young's lattice.

          If μ ∈ ν.coversDown then μ ⋖ ν in Young's lattice. Each element of coversDown is obtained by removing one cell, which produces a covering from below.

          theorem YoungDiagram.mem_coversDown_of_covBy {μ ν : YoungDiagram} (hcov : μ ν) :

          If μ ⋖ ν in Young's lattice then μ ∈ ν.coversDown. A covering from below corresponds to removing a single cell.

          μ ⋖ ν ↔ μ ∈ ν.coversDown in Young's lattice.

          theorem WalkCountFormula.iterU_emptyBasis_support_card (i : ) (lam : YoungDiagram) (hlam : lam.card i) :
          ((iterU i) emptyBasis) lam = 0

          iterU i emptyBasis is supported on diagrams of cardinality i.

          Walk decomposition by penultimate step #

          Walks of length n+2 from ⊥ to lam biject with pairs (μ, walk of length n+1 from ⊥ to μ) where μ ⋖ lam. The book treats this as immediate from the definition of up-walks.

          The walk type for upWalkCount n lam.

          Instances For
            theorem HasseWalkFormula.upWalkType_cells_subset {m : } {mu : YoungDiagram} (w : Fin (m + 1)YoungDiagram) (_h0 : w 0, = ) (hs : ∀ (i : Fin m), w i, w i + 1, ) (he : w m, = mu) (k : Fin (m + 1)) :
            (w k).cells mu.cells

            In an up-walk from ⊥ to mu, every position has cells ⊆ mu.cells.

            The walk type UpWalkType m mu is finite for every m and mu.

            Normal ordering decomposition: β(ℓ,λ) = b_{n,0}(ℓ) · (up-walks of length n to λ). The book's proof applies equation (44) (normal ordering of (D+U)^ℓ) to ∅, uses fact (F2) (β(ℓ,λ) is the coefficient of λ in (D+U)^ℓ(∅)), and the identity D^j(∅) = 0 for j > 0.

            theorem HasseWalkFormula.walk_card_upper_bound {n : } (walk : Fin (n + 1)YoungDiagram) (hstep : ∀ (i : Fin n), walk i, walk i + 1, walk i + 1, walk i, ) (base : ) (hbase : base < n) (j : ) (hj : j n) (hge : base + 1 j) :
            (walk j, ).card (walk base + 1, ).card + (j - (base + 1))

            In a walk from where each step is a covering relation (up or down), the cardinality at any position is bounded above by the position index plus the cardinality at the starting position offset. This upper bound is used to derive a contradiction when a down-step occurs in a length-n walk to a diagram of cardinality n.

            When ℓ = |λ|, every Hasse walk from to λ of length |λ| is an up-walk: there is no room for any down-step. This is because each step changes cardinality by ±1, and starting at 0, with n steps to reach n, every step must be +1.

            Formally, the set of Hasse walks (allowing both up and down steps) of length n from to λ with |λ| = n is in bijection with the set of up-walks.

            Specialization of Lemma 8.5 at j = 0 #

            theorem HasseWalkFormula.bijCoeff_n_0_eq {n ell : } (hn : n ell) (heven : (ell - n) % 2 = 0) :
            NormalOrderCoeff.bijCoeff n 0 ell = (ell.choose n) * (ell - n - 1).doubleFactorial

            Specialization of Lemma 8.5 at j = 0: when n ≤ ℓ and ℓ - n is even, b_{n,0}(ℓ) = C(ℓ, n) · (2m-1)!! where m = (ℓ - n) / 2. The product (2m-1)!! = 1·3·5·⋯·(ℓ-n-1) appears in Theorem 8.6.

            When ℓ = n, b_{n,0}(n) = 1.

            Theorem 8.6: The Hasse walk formula #

            theorem HasseWalkFormula.hasseWalkCount_formula {ell n : } (lam : YoungDiagram) (hn : lam.card = n) (hle : n ell) (heven : (ell - n) % 2 = 0) :
            (hasseWalkCount ell lam) = (ell.choose n) * (ell - n - 1).doubleFactorial * (numSYT lam)

            Theorem 8.6. Let ℓ ≥ n and λ ⊢ n, with ℓ - n even. Then β(ℓ, λ) = C(ℓ, n) · (1 · 3 · 5 · ⋯ · (ℓ - n - 1)) · f^λ.

            Proof (from the book): Apply (D+U)^ℓ to . Since U^i D^j(∅) = 0 unless j = 0, we get (D+U)^ℓ(∅) = ∑_i b_{i,0}(ℓ) U^i(∅). Since U^n(∅) = ∑_{λ ⊢ n} f^λ · λ, by (F2) the coefficient of λ in (D+U)^ℓ(∅) is b_{n,0}(ℓ) · f^λ. By Lemma 8.5, b_{n,0}(ℓ) = C(ℓ, n) · (1 · 3 · 5 · ⋯ · (ℓ-n-1)), giving the result.

            theorem HasseWalkFormula.hasseWalkCount_formula_nat {ell n : } (lam : YoungDiagram) (hn : lam.card = n) (hle : n ell) (heven : (ell - n) % 2 = 0) :
            hasseWalkCount ell lam = ell.choose n * (ell - n - 1).doubleFactorial * numSYT lam

            Theorem 8.6 (ℕ version). Let ℓ ≥ n and λ ⊢ n, with ℓ - n even. Then β(ℓ, λ) = C(ℓ, n) · (1 · 3 · 5 · ⋯ · (ℓ - n - 1)) · f^λ as natural numbers.

            When ℓ = n, β(n, λ) = f^λ.

            theorem HasseWalkFormula.hasseWalkCount_zero_of_lt {ell : } (lam : YoungDiagram) (hlt : ell < lam.card) :
            (hasseWalkCount ell lam) = 0

            β(ℓ, λ) = 0 when ℓ < |λ|.

            theorem HasseWalkFormula.hasseWalkCount_zero_of_odd_diff {ell : } (lam : YoungDiagram) (hodd : (ell - lam.card) % 2 = 1) :
            (hasseWalkCount ell lam) = 0

            β(ℓ, λ) = 0 when ℓ - |λ| is odd (algebraic version of F1).

            Corollary 8.7: Closed walks counted by double factorial #

            The empty Young diagram has card 0.

            The number of standard Young tableaux of the empty shape is 1. There is exactly one saturated chain from ∅ to ∅: the trivial chain of length 0.

            Corollary 8.7. The total number of Hasse walks in Young's lattice of length 2m from to is given by β(2m, ∅) = 1 · 3 · 5 · ⋯ · (2m-1) = (2m-1)!!.

            Proof (from the book): Simply substitute λ = ∅ (so n = 0) and ℓ = 2m in Theorem 8.6. Then C(2m, 0) = 1, f^∅ = 1 (numSYT_bot), and the double factorial product gives 1 · 3 · 5 · ⋯ · (2m-1).

            Dependency chain: closedWalkCount_eq_doubleFactorialhasseWalkCount_formula (Theorem 8.6) → bijCoeff_n_0_eq (Lemma 8.5 at j=0) → bijCoeff_of_valid (fully proved in NormalOrderCoeff).

            Corollary 8.7 (ℕ version). The total number of Hasse walks in Young's lattice of length 2m from to equals (2m-1)!! as natural numbers: β(2m, ∅) = 1 · 3 · 5 · ⋯ · (2m-1).

            β(0, λ) = if λ = ⊥ then 1 else 0. A walk of length 0 from is just the constant sequence at , so it exists iff λ = ⊥, and there is exactly one such walk.