Documentation

Atlas.AlgebraicCombinatorics.code.HasseWalks

Hasse Walks in Young's Lattice #

This file formalizes Lemma 8.1 from Stanley's Algebraic Combinatorics, which characterizes when a word w = D^{s_k} U^{r_k} ⋯ D^{s_1} U^{r_1} admits a Hasse walk from to a partition λ ⊢ n in Young's lattice.

A step in a Hasse walk: Up (adding a cell) or Down (removing a cell).

Instances For
    @[implicit_reducible]

    The integer value of a step: U ↦ +1, D ↦ -1.

    Instances For

      Expand a block (r, s) into the step list U^r ++ D^s.

      Instances For

        Expand a word (list of blocks) into a flat list of steps.

        Instances For

          Total displacement of a word: ∑(r_i - s_i).

          Instances For

            Partial displacement after the first j blocks.

            Instances For

              A word w is valid for n if ∑(r_i - s_i) = n and all partial sums ≥ 0.

              Instances For
                structure HasseWalks.HasseWalk (steps : List HStep) (start target : YoungDiagram) :

                A Hasse walk of given step-type in Young's lattice.

                Instances For

                  Covering changes cardinality by 1 #

                  theorem HasseWalks.isLowerSet_insert_minimal {μ ν : YoungDiagram} (m : × ) (hm_ν : m ν.cells) (hm_nμ : mμ.cells) (h_below : cν.cells, c.1 m.1c.2 m.2c mc μ.cells) :
                  IsLowerSet (Finset.cons m μ.cells hm_nμ)
                  theorem HasseWalks.card_covBy_succ {μ ν : YoungDiagram} (h : μ ν) :
                  ν.card = μ.card + 1

                  Covering in Young's lattice changes cardinality by exactly 1.

                  Expansion lemmas #

                  Walk card tracking #

                  theorem HasseWalks.walk_card_step {steps : List HStep} {start target : YoungDiagram} (walk : HasseWalk steps start target) (i : Fin steps.length) :
                  (walk.diagram i + 1, ).card = (walk.diagram i, ).card + steps[i].toInt
                  theorem HasseWalks.walk_card_eq {steps : List HStep} {start target : YoungDiagram} (walk : HasseWalk steps start target) (k : ) (hk : k steps.length) :
                  (walk.diagram k, ).card = start.card + (List.map HStep.toInt (List.take k steps)).sum

                  Main theorem: Lemma 8.1 #

                  theorem HasseWalks.walk_exists_necessity (w : List ( × )) (lam : YoungDiagram) (n : ) (hn : lam.card = n) (walk : HasseWalk (expandBlocks w) lam) :

                  Lemma 8.1 (necessity).

                  Helpers for sufficiency #

                  theorem HasseWalks.exists_covBy_below {ν : YoungDiagram} ( : 0 < ν.card) :
                  ∃ (μ : YoungDiagram), μ ν
                  theorem HasseWalks.nonempty_walk_extend {s : List HStep} {a : HStep} {mid target : YoungDiagram} (hw : Nonempty (HasseWalk s mid)) (hU : a = HStep.Umid target) (hD : a = HStep.Dtarget mid) :
                  Nonempty (HasseWalk (s ++ [a]) target)
                  theorem HasseWalks.walk_from_bot_exists (s : List HStep) (target : YoungDiagram) (hcard : target.card = (List.map HStep.toInt s).sum) (hpartial : ks.length, 0 (List.map HStep.toInt (List.take k s)).sum) :

                  For any step list with non-negative partial sums from 0, and any target of the right size, there exists a Hasse walk from ⊥ to target.

                  theorem HasseWalks.expandBlocks_partial_nonneg_aux (w : List ( × )) (base : ) (hbase : 0 base) (hpartial : ∀ (j : ), 1 jj w.length0 base + partialDisplacement w j) (k : ) (hk : k (expandBlocks w).length) :
                  theorem HasseWalks.walk_exists_sufficiency (w : List ( × )) (lam : YoungDiagram) (n : ) (hn : lam.card = n) (hvalid : IsValidWord w n) :

                  Lemma 8.1 (sufficiency).

                  Lemma 8.1 (Stanley). Walk exists iff word is valid.