Library Combi.LRrule.Yam_plact: Plactic classes and Yamanouchi words
Plactic classes and Yamanouchi words
- yamtab sh == the uniq Yamanouchi tableau of shape sh: the i-th line contains only i's as in: 33 2222 11111 0000000.
Require Import mathcomp.ssreflect.ssreflect.
From mathcomp Require Import ssrfun ssrbool eqtype ssrnat seq fintype.
From mathcomp Require Import tuple finfun finset path bigop order.
Require Import tools partition Yamanouchi ordtype std tableau stdtab.
Require Import Schensted congr plactic Greene_inv stdplact.
Set Implicit Arguments.
Import Order.TTheory.
Open Scope N.
Lemma is_part_incr_nthE sh i j :
i.+1 < j -> is_part sh -> is_part (incr_nth (incr_nth sh j) i) ->
is_part (incr_nth sh i) = is_part (incr_nth sh j).
Lemma is_part_incr_nth1E sh i :
is_part sh ->
is_part (incr_nth (incr_nth sh i.+1) i) = is_part (incr_nth sh i).
Lemma is_yam_plactic y : is_yam y -> forall w, y =Pl w -> is_yam w.
Fixpoint yamtab_rec i sh :=
if sh is s0 :: s then
nseq s0 i :: yamtab_rec (i.+1) s
else [::].
Definition yamtab := yamtab_rec 0.
Lemma shape_yamtab sh : shape (yamtab sh) = sh.
Lemma to_word_yamtab sh : to_word (yamtab sh) = hyper_yam sh.
Lemma yamtabP sh : is_part sh -> is_tableau (yamtab sh).
Lemma yamtab_rcons sh sn :
yamtab (rcons sh sn) = rcons (yamtab sh) (nseq sn (size sh)).
Lemma yamtab_unique t :
is_tableau t -> is_yam (to_word t) -> t = yamtab (shape t).
Corollary RS_yam_RS y : is_yam y -> RS y = yamtab (shape (RS y)).
Lemma shape_RS_yam y : is_yam y -> shape (RS y) = evalseq y.
Lemma RS_yam y : is_yam y -> RS y = yamtab (evalseq y).
Theorem yam_plactic_hyper y : is_yam y -> y =Pl hyper_yam (evalseq y).
Corollary yam_plactic_shape y z :
is_yam y -> ( y =Pl z <-> (is_yam z /\ evalseq y = evalseq z)).
if sh is s0 :: s then
nseq s0 i :: yamtab_rec (i.+1) s
else [::].
Definition yamtab := yamtab_rec 0.
Lemma shape_yamtab sh : shape (yamtab sh) = sh.
Lemma to_word_yamtab sh : to_word (yamtab sh) = hyper_yam sh.
Lemma yamtabP sh : is_part sh -> is_tableau (yamtab sh).
Lemma yamtab_rcons sh sn :
yamtab (rcons sh sn) = rcons (yamtab sh) (nseq sn (size sh)).
Lemma yamtab_unique t :
is_tableau t -> is_yam (to_word t) -> t = yamtab (shape t).
Corollary RS_yam_RS y : is_yam y -> RS y = yamtab (shape (RS y)).
Lemma shape_RS_yam y : is_yam y -> shape (RS y) = evalseq y.
Lemma RS_yam y : is_yam y -> RS y = yamtab (evalseq y).
Theorem yam_plactic_hyper y : is_yam y -> y =Pl hyper_yam (evalseq y).
Corollary yam_plactic_shape y z :
is_yam y -> ( y =Pl z <-> (is_yam z /\ evalseq y = evalseq z)).
Lemma yam_std_inj : {in is_yam &, injective std}.
Lemma auxbijP p (y : yameval p) : is_yam_of_eval p ((RSmap y).2).
#[local] Definition auxbij (p : intpart) (y : yameval p) : yameval p :=
YamEval (auxbijP y).
Lemma auxbij_inj (p : intpart) : injective (@auxbij p).
#[local] Definition auxbij_inv (p : intpart) := invF (@auxbij_inj p).
Theorem plact_from_yam sh w :
is_part sh ->
w =Pl std (hyper_yam sh) ->
{ y | is_yam_of_eval sh y & std y = w }.
Lemma auxbijP p (y : yameval p) : is_yam_of_eval p ((RSmap y).2).
#[local] Definition auxbij (p : intpart) (y : yameval p) : yameval p :=
YamEval (auxbijP y).
Lemma auxbij_inj (p : intpart) : injective (@auxbij p).
#[local] Definition auxbij_inv (p : intpart) := invF (@auxbij_inj p).
Theorem plact_from_yam sh w :
is_part sh ->
w =Pl std (hyper_yam sh) ->
{ y | is_yam_of_eval sh y & std y = w }.