Documentation

Atlas.AlgebraicCombinatorics.code.YoungTableaux

Young's Lattice: Raising and Lowering Operators (Lemma 8.2) #

This file formalizes Lemma 8.2 from the textbook: the commutation relation D_{i+1} U_i - U_{i-1} D_i = I_i for raising/lowering operators on Young's lattice.

Definitions from the Book (Section 8) #

Young's lattice Y is a graded poset where level Y_i consists of all partitions of i, represented as YoungDiagrams with card = i. The covering relation holds iff the larger diagram is obtained from the smaller by adding exactly one cell.

The raising operator U_i : ℤ[Y_i] → ℤ[Y_{i+1}] maps a partition λ to the formal sum of all partitions covering it: U_i(λ) = ∑_{μ : λ ⋖ μ} μ.

The lowering operator D_i : ℤ[Y_i] → ℤ[Y_{i-1}] maps a partition λ to the formal sum of all partitions it covers: D_i(λ) = ∑_{ν : ν ⋖ λ} ν.

Main results #

References #

Row length basic lemmas #

theorem YoungDiagram.rowLen_pos_of_lt_colLen (μ : YoungDiagram) {i : } (hi : i < μ.colLen 0) :
0 < μ.rowLen i

Row lengths of a Young diagram form an antitone sequence.

theorem YoungDiagram.rowLen_gt_of_lt_addable (μ : YoungDiagram) {i : } (hadd : i = 0 μ.rowLen (i - 1) > μ.rowLen i) {c : } (hc : c < i) :
μ.rowLen c > μ.rowLen i

For an addable row i, every row c < i has strictly larger row length.

Addable rows and removable rows #

The addable rows of a Young diagram μ are the row indices where a cell can be added to produce a valid Young diagram. The removable rows are the row indices where a cell can be removed.

If r is the number of distinct parts of μ, then μ has r + 1 addable rows and r removable rows.

Addable rows: indices i ∈ {0, ..., colLen 0} where i = 0 or rowLen drops.

Instances For

    Removable rows: indices i ∈ {0, ..., colLen 0 - 1} where rowLen drops after i.

    Instances For

      Bijection between removable rows and non-zero addable rows #

      theorem YoungDiagram.addableRow_pos_of_removable (μ : YoungDiagram) {i : } (hi : i μ.addableRows) (hpos : 0 < i) :

      Addable rows = {0} ∪ (removable rows shifted by +1).

      Key lemma: A Young diagram has exactly one more addable row than removable row. If r is the number of distinct parts, there are r + 1 addable and r removable rows.

      Constructing Young diagrams by adding/removing cells #

      noncomputable def YoungDiagram.addCell (μ : YoungDiagram) (i : ) (hadd : i = 0 μ.rowLen (i - 1) > μ.rowLen i) :

      Add a cell at position (i, μ.rowLen i) to a Young diagram μ, given that i is an addable row (either i = 0 or μ.rowLen (i-1) > μ.rowLen i).

      Instances For
        noncomputable def YoungDiagram.removeCell (μ : YoungDiagram) (i : ) (hrem : i + 1 = μ.colLen 0 μ.rowLen i > μ.rowLen (i + 1)) :

        Remove the last cell in row i from μ, given that i is a removable row.

        Instances For

          Covering sets in Young's lattice #

          The finset of Young diagrams covering μ (obtained by adding one cell). These are the diagrams σ with μ ⋖ σ in Young's lattice.

          Instances For

            The finset of Young diagrams covered by μ (obtained by removing one cell). These are the diagrams ν with ν ⋖ μ in Young's lattice.

            Instances For

              Raising and lowering operators #

              The raising operator U sends a Young diagram λ to the formal ℤ-linear combination ∑_{σ : λ ⋖ σ} σYoungDiagram →₀ ℤ, where the sum is over all diagrams covering λ.

              The lowering operator D sends λ to ∑_{ν : ν ⋖ λ} ν.

              The book defines U_i : ℝ[Y_i] → ℝ[Y_{i+1}] and D_i : ℝ[Y_i] → ℝ[Y_{i-1}] by extending these maps linearly. Here we define them on basis elements using Finsupp (formal linear combinations with integer coefficients).

              The raising operator U on a basis element: U(lam) = ∑_{σ ∈ coversUp(lam)} σ.

              Instances For

                The lowering operator D on a basis element: D(lam) = ∑_{ν ∈ coversDown(lam)} ν.

                Instances For
                  noncomputable def YoungDiagram.DU_apply (lam mu : YoungDiagram) :

                  The coefficient of mu in (D ∘ U)(lam): Apply U to lam to get a formal sum of covering diagrams σ, then apply D to each σ and read off the coefficient of mu. This equals the number of intermediate diagrams σ ⊢ (i+1) with lam ⋖ σ and σ ⋗ mu.

                  Instances For
                    noncomputable def YoungDiagram.UD_apply (lam mu : YoungDiagram) :

                    The coefficient of mu in (U ∘ D)(lam): Apply D to lam to get a formal sum of covered diagrams ν, then apply U to each ν and read off the coefficient of mu. This equals the number of intermediate diagrams ν ⊢ (i-1) with lam ⋗ ν and ν ⋖ mu.

                    Instances For

                      Closed-form coefficient formulas #

                      The textbook proof of Lemma 8.2 establishes that the composition coefficients DU_apply and UD_apply take specific values depending on the relationship between lam and mu:

                      The following definitions capture these closed forms. The main theorem is proved using these formulas, which encode the combinatorial content of the textbook's case analysis.

                      Semantic DU and UD coefficients #

                      DUCoeff lam mu counts the number of σ ∈ coversUp(lam) such that mu ∈ coversDown(σ), and UDCoeff lam mu counts the number of ρ ∈ coversDown(lam) such that mu ∈ coversUp(ρ). These are the true operator-composition coefficients.

                      noncomputable def YoungDiagram.DUCoeff (lam mu : YoungDiagram) :

                      DUCoeff lam mu is the coefficient of mu in D_{i+1}(U_i(lam)): the number of diagrams σ in coversUp(lam) such that mu ∈ coversDown(σ).

                      Instances For
                        noncomputable def YoungDiagram.UDCoeff (lam mu : YoungDiagram) :

                        UDCoeff lam mu is the coefficient of mu in U_{i-1}(D_i(lam)): the number of diagrams ρ in coversDown(lam) such that mu ∈ coversUp(ρ).

                        Instances For

                          Case-split characterizations #

                          The book proves by case analysis that the semantic definitions equal these closed forms.

                          noncomputable def YoungDiagram.DUCoeff_cases (lam mu : YoungDiagram) :

                          Case-split formula for DUCoeff.

                          Instances For
                            noncomputable def YoungDiagram.UDCoeff_cases (lam mu : YoungDiagram) :

                            Case-split formula for UDCoeff.

                            Instances For
                              theorem YoungDiagram.addCell_cells (μ : YoungDiagram) (i : ) (h : i = 0 μ.rowLen (i - 1) > μ.rowLen i) :
                              (μ.addCell i h).cells = μ.cells {(i, μ.rowLen i)}
                              theorem YoungDiagram.mem_addableRows_of_mem (μ : YoungDiagram) {i : } (hi : i μ.addableRows) :
                              i = 0 μ.rowLen (i - 1) > μ.rowLen i
                              theorem YoungDiagram.mem_addCell_iff (μ : YoungDiagram) (i : ) (h : i = 0 μ.rowLen (i - 1) > μ.rowLen i) (a b : ) :
                              (a, b) μ.addCell i h (a, b) μ a = i b = μ.rowLen i
                              theorem YoungDiagram.rowLen_addCell_same (μ : YoungDiagram) (i : ) (h : i = 0 μ.rowLen (i - 1) > μ.rowLen i) :
                              (μ.addCell i h).rowLen i = μ.rowLen i + 1
                              theorem YoungDiagram.rowLen_addCell_ne (μ : YoungDiagram) (i j : ) (h : i = 0 μ.rowLen (i - 1) > μ.rowLen i) (hne : j i) :
                              (μ.addCell i h).rowLen j = μ.rowLen j
                              theorem YoungDiagram.removeCell_addCell_same (μ : YoungDiagram) (i : ) (hadd : i = 0 μ.rowLen (i - 1) > μ.rowLen i) (hrem : i + 1 = (μ.addCell i hadd).colLen 0 (μ.addCell i hadd).rowLen i > (μ.addCell i hadd).rowLen (i + 1)) :
                              (μ.addCell i hadd).removeCell i hrem = μ
                              theorem YoungDiagram.removableRow_of_addCell (μ : YoungDiagram) (i : ) (hadd : i = 0 μ.rowLen (i - 1) > μ.rowLen i) :
                              i (μ.addCell i hadd).removableRows
                              theorem YoungDiagram.mem_removableRows_of_mem (μ : YoungDiagram) {i : } (hi : i μ.removableRows) :
                              i + 1 = μ.colLen 0 μ.rowLen i > μ.rowLen (i + 1)
                              theorem YoungDiagram.self_mem_coversDown_addCell (μ : YoungDiagram) (i : ) (hadd : i = 0 μ.rowLen (i - 1) > μ.rowLen i) :
                              μ (μ.addCell i hadd).coversDown
                              theorem YoungDiagram.addCell_injective (μ : YoungDiagram) {i j : } (hi : i = 0 μ.rowLen (i - 1) > μ.rowLen i) (hj : j = 0 μ.rowLen (j - 1) > μ.rowLen j) (heq : μ.addCell i hi = μ.addCell j hj) :
                              i = j
                              theorem YoungDiagram.removeCell_cells_eq (μ : YoungDiagram) (i : ) (h : i + 1 = μ.colLen 0 μ.rowLen i > μ.rowLen (i + 1)) :
                              (μ.removeCell i h).cells = μ.cells.erase (i, μ.rowLen i - 1)
                              theorem YoungDiagram.mem_removeCell_iff (μ : YoungDiagram) (i : ) (h : i + 1 = μ.colLen 0 μ.rowLen i > μ.rowLen (i + 1)) (a b : ) :
                              (a, b) μ.removeCell i h (a, b) μ (a, b) (i, μ.rowLen i - 1)
                              theorem YoungDiagram.rowLen_removeCell_same (μ : YoungDiagram) (i : ) (h : i + 1 = μ.colLen 0 μ.rowLen i > μ.rowLen (i + 1)) :
                              (μ.removeCell i h).rowLen i = μ.rowLen i - 1
                              theorem YoungDiagram.rowLen_removeCell_ne (μ : YoungDiagram) (i j : ) (h : i + 1 = μ.colLen 0 μ.rowLen i > μ.rowLen (i + 1)) (hne : j i) :
                              (μ.removeCell i h).rowLen j = μ.rowLen j
                              theorem YoungDiagram.addCell_removeCell_same (μ : YoungDiagram) (i : ) (hrem : i + 1 = μ.colLen 0 μ.rowLen i > μ.rowLen (i + 1)) (hadd : i = 0 (μ.removeCell i hrem).rowLen (i - 1) > (μ.removeCell i hrem).rowLen i) :
                              (μ.removeCell i hrem).addCell i hadd = μ
                              theorem YoungDiagram.addableRow_of_removeCell (μ : YoungDiagram) (i : ) (hrem : i + 1 = μ.colLen 0 μ.rowLen i > μ.rowLen (i + 1)) :
                              i (μ.removeCell i hrem).addableRows
                              theorem YoungDiagram.self_mem_coversUp_removeCell (μ : YoungDiagram) (i : ) (hrem : i + 1 = μ.colLen 0 μ.rowLen i > μ.rowLen (i + 1)) :
                              μ (μ.removeCell i hrem).coversUp
                              theorem YoungDiagram.removeCell_injective (μ : YoungDiagram) {i j : } (hi : i + 1 = μ.colLen 0 μ.rowLen i > μ.rowLen (i + 1)) (hj : j + 1 = μ.colLen 0 μ.rowLen j > μ.rowLen (j + 1)) (heq : μ.removeCell i hi = μ.removeCell j hj) :
                              i = j
                              theorem YoungDiagram.symm_diff_of_intermediate (lam mu : YoungDiagram) (hne : lam mu) (σ : YoungDiagram) (hσ_up : σ lam.coversUp) (hmu_down : mu σ.coversDown) :
                              (mu.cells \ lam.cells).card = 1 (lam.cells \ mu.cells).card = 1

                              Helper lemmas for intermediate_unique_of_symm_diff #

                              theorem YoungDiagram.sdiff_singleton_of_card_one (lam mu : YoungDiagram) (h : (mu.cells \ lam.cells).card = 1) :
                              ∃ (j : ), mu.cells \ lam.cells = {(j, lam.rowLen j)} j lam.addableRows

                              If mu.cells \ lam.cells has cardinality 1, extract the unique cell (j, lam.rowLen j) and show j ∈ lam.addableRows.

                              theorem YoungDiagram.addCell_mem_intermediate_filter (lam mu : YoungDiagram) (hne : lam mu) (hsymm : (mu.cells \ lam.cells).card = 1 (lam.cells \ mu.cells).card = 1) (j : ) (hj : mu.cells \ lam.cells = {(j, lam.rowLen j)}) (hjadd : j lam.addableRows) :
                              lam.addCell j {σlam.coversUp | mu σ.coversDown}

                              Given the sdiff singletons, lam.addCell j hadd is in the intermediate filter.

                              theorem YoungDiagram.intermediate_filter_unique (lam mu : YoungDiagram) (hne : lam mu) (hsymm : (mu.cells \ lam.cells).card = 1 (lam.cells \ mu.cells).card = 1) (j : ) (hj : mu.cells \ lam.cells = {(j, lam.rowLen j)}) (hjadd : j lam.addableRows) (σ : YoungDiagram) ( : σ {σlam.coversUp | mu σ.coversDown}) :
                              σ = lam.addCell j

                              Any σ in the intermediate filter must equal lam.addCell j hadd.

                              theorem YoungDiagram.intermediate_unique_of_symm_diff (lam mu : YoungDiagram) (hne : lam mu) (hsymm : (mu.cells \ lam.cells).card = 1 (lam.cells \ mu.cells).card = 1) :
                              {σlam.coversUp | mu σ.coversDown}.card = 1
                              theorem YoungDiagram.no_intermediate_of_no_symm_diff (lam mu : YoungDiagram) (hne : lam mu) (hnsymm : ¬((mu.cells \ lam.cells).card = 1 (lam.cells \ mu.cells).card = 1)) :
                              {σlam.coversUp | mu σ.coversDown}.card = 0
                              theorem YoungDiagram.symm_diff_of_intermediate_UD (lam mu : YoungDiagram) (hne : lam mu) (ρ : YoungDiagram) (hρ_down : ρ lam.coversDown) (hmu_up : mu ρ.coversUp) :
                              (mu.cells \ lam.cells).card = 1 (lam.cells \ mu.cells).card = 1
                              theorem YoungDiagram.sdiff_singleton_of_card_one_UD (lam mu : YoungDiagram) (h : (lam.cells \ mu.cells).card = 1) :
                              ∃ (k : ), lam.cells \ mu.cells = {(k, lam.rowLen k - 1)} k lam.removableRows

                              If lam.cells \ mu.cells has cardinality 1, extract the unique cell (k, lam.rowLen k - 1) and show k ∈ lam.removableRows.

                              theorem YoungDiagram.removeCell_mem_intermediate_filter_UD (lam mu : YoungDiagram) (hne : lam mu) (hsymm : (mu.cells \ lam.cells).card = 1 (lam.cells \ mu.cells).card = 1) (k : ) (hk : lam.cells \ mu.cells = {(k, lam.rowLen k - 1)}) (hkrem : k lam.removableRows) :
                              lam.removeCell k {ρlam.coversDown | mu ρ.coversUp}

                              Given the sdiff singletons, lam.removeCell k hrem is in the UD intermediate filter.

                              theorem YoungDiagram.intermediate_filter_unique_UD (lam mu : YoungDiagram) (hne : lam mu) (hsymm : (mu.cells \ lam.cells).card = 1 (lam.cells \ mu.cells).card = 1) (k : ) (hk : lam.cells \ mu.cells = {(k, lam.rowLen k - 1)}) (hkrem : k lam.removableRows) (ρ : YoungDiagram) ( : ρ {ρlam.coversDown | mu ρ.coversUp}) :
                              ρ = lam.removeCell k

                              Any ρ in the UD intermediate filter must equal lam.removeCell k hrem.

                              theorem YoungDiagram.intermediate_unique_of_symm_diff_UD (lam mu : YoungDiagram) (hne : lam mu) (hsymm : (mu.cells \ lam.cells).card = 1 (lam.cells \ mu.cells).card = 1) :
                              {ρlam.coversDown | mu ρ.coversUp}.card = 1
                              theorem YoungDiagram.no_intermediate_of_no_symm_diff_UD (lam mu : YoungDiagram) (hne : lam mu) (hnsymm : ¬((mu.cells \ lam.cells).card = 1 (lam.cells \ mu.cells).card = 1)) :
                              {ρlam.coversDown | mu ρ.coversUp}.card = 0
                              theorem YoungDiagram.DUCoeff_eq_UDCoeff_of_ne (lam mu : YoungDiagram) (hne : lam mu) :
                              lam.DUCoeff mu = lam.UDCoeff mu

                              When lam ≠ mu, DUCoeff = UDCoeff (both check the same symmetric difference condition and return the same value).

                              Lemma 8.2: The commutation relation #

                              theorem YoungDiagram.young_commutation_coeff (lam mu : YoungDiagram) :
                              (lam.DUCoeff mu) - (lam.UDCoeff mu) = if lam = mu then 1 else 0

                              Lemma 8.2. For any i ≥ 0, D_{i+1} U_i - U_{i-1} D_i = I_i, where I_i is the identity on ℤ[Y_i].

                              At the coefficient level: for any Young diagrams lam and mu, the coefficient of mu in (D_{i+1} ∘ U_i)(lam) minus the coefficient of mu in (U_{i-1} ∘ D_i)(lam) equals 1 if lam = mu, and 0 otherwise.

                              The coefficients DUCoeff and UDCoeff are defined semantically as counts of intermediate diagrams via coversUp/coversDown.

                              Proof (from the textbook):

                              • Case 1 (mu ≠ lam, obtainable): mu is obtained from lam by adding one cell s then removing a different cell t. There is exactly one such intermediate σ = lam + s, giving DU_apply = 1. Conversely, one can remove t then add s, giving UD_apply = 1. So the difference is 1 - 1 = 0.
                              • Case 2 (mu ≠ lam, not obtainable): Both coefficients are 0.
                              • Case 3 (mu = lam): There are r + 1 ways to add then remove a cell (one per addable row), and r ways to remove then add (one per removable row). The difference is (r + 1) - r = 1.