Library Combi.LRrule.stdplact: Plactic congruences and standardization
Plactic congruences and standardization
- the insertion tableau have the same shape: Theorem shape_RS_std;
- the recording tableau are equal: Theorem RSmap_std and RStabmap_std.
From mathcomp Require Import all_ssreflect.
From mathcomp Require Import perm fingroup.
Require Import tools combclass ordcast partition Yamanouchi ordtype std tableau.
Require Import stdtab sorted Schensted congr plactic Greene Greene_inv.
Set Implicit Arguments.
Import Order.TTheory.
From mathcomp Require Import perm fingroup.
Require Import tools combclass ordcast partition Yamanouchi ordtype std tableau.
Require Import stdtab sorted Schensted congr plactic Greene Greene_inv.
Set Implicit Arguments.
Import Order.TTheory.
Section StdRS.
Context {disp : unit} {Alph : inhOrderType disp}.
Implicit Type s u v w : seq Alph.
Implicit Type p : seq nat.
Implicit Type t : seq (seq Alph).
Lemma std_plact1 (u v1 w v2 : seq Alph) :
v2 \in plact1 v1 -> std (u ++ v1 ++ w) =Pl std (u ++ v2 ++ w).
Lemma std_plact2 (u v1 w v2 : seq Alph) :
v2 \in plact2 v1 -> std (u ++ v1 ++ w) =Pl std (u ++ v2 ++ w).
Theorem std_plact u v : u =Pl v -> std u =Pl std v.
Context {disp : unit} {Alph : inhOrderType disp}.
Implicit Type s u v w : seq Alph.
Implicit Type p : seq nat.
Implicit Type t : seq (seq Alph).
Lemma std_plact1 (u v1 w v2 : seq Alph) :
v2 \in plact1 v1 -> std (u ++ v1 ++ w) =Pl std (u ++ v2 ++ w).
Lemma std_plact2 (u v1 w v2 : seq Alph) :
v2 \in plact2 v1 -> std (u ++ v1 ++ w) =Pl std (u ++ v2 ++ w).
Theorem std_plact u v : u =Pl v -> std u =Pl std v.
Lemma cast_enum u (S : {set 'I_(size u)}) :
enum (mem (cast_set (esym (size_std u)) S)) =
map (cast_ord (esym (size_std u))) (enum (mem S)).
Lemma sorted_std_extract u (S : {set 'I_(size u)}) :
sorted <=%O (extractpred (in_tuple u) (mem S)) =
sorted <=%O (extractpred (in_tuple (std u))
(mem (cast_set (esym (size_std u)) S))).
Lemma ksupp_inj_std u k : ksupp_inj <=%O <=%O k u (std u).
Lemma ksupp_inj_stdI u k : ksupp_inj <=%O <=%O k (std u) u.
Lemma Greene_std u k : Greene_row (std u) k = Greene_row u k.
Theorem shape_RS_std u : shape (RS (std u)) = shape (RS u).
End StdRS.
Theorem RSmap_std (d : unit) (T : inhOrderType d) (w : seq T) :
(RSmap (std w)).2 = (RSmap w).2.
Corollary RStabmap_std (d : unit) (T : inhOrderType d) (w : seq T) :
(RStabmap (std w)).2 = (RStabmap w).2.
enum (mem (cast_set (esym (size_std u)) S)) =
map (cast_ord (esym (size_std u))) (enum (mem S)).
Lemma sorted_std_extract u (S : {set 'I_(size u)}) :
sorted <=%O (extractpred (in_tuple u) (mem S)) =
sorted <=%O (extractpred (in_tuple (std u))
(mem (cast_set (esym (size_std u)) S))).
Lemma ksupp_inj_std u k : ksupp_inj <=%O <=%O k u (std u).
Lemma ksupp_inj_stdI u k : ksupp_inj <=%O <=%O k (std u) u.
Lemma Greene_std u k : Greene_row (std u) k = Greene_row u k.
Theorem shape_RS_std u : shape (RS (std u)) = shape (RS u).
End StdRS.
Theorem RSmap_std (d : unit) (T : inhOrderType d) (w : seq T) :
(RSmap (std w)).2 = (RSmap w).2.
Corollary RStabmap_std (d : unit) (T : inhOrderType d) (w : seq T) :
(RStabmap (std w)).2 = (RStabmap w).2.
Section KsuppInj.
Variable s t : seq nat.
Hypothesis Hinv : invseq s t.
#[local] Lemma Hinvst : linvseq s t.
#[local] Lemma Hinvts : linvseq t s.
#[local] Definition val2pos :=
fun (i : 'I_(size s)) => Ordinal (linvseq_ltn_szt Hinvst (ltn_ord i)).
Lemma val2posE : val \o val2pos =1 nth (size t) s.
Lemma val2pos_inj : injective val2pos.
Lemma val2pos_enum (p : {set 'I_(size s)}) :
sorted <=%O [seq tnth (in_tuple s) i | i <- enum (mem p)] ->
enum (mem [set val2pos x | x in p]) = [seq val2pos x | x <- enum p].
Lemma ksupp_inj_invseq k : ksupp_inj <=%O <=%O k s t.
End KsuppInj.
Lemma Greene_invseq s t k : invseq s t -> Greene_row s k = Greene_row t k.
Lemma shape_invseq s t : invseq s t -> shape (RS s) = shape (RS t).
Lemma std_rcons_shiftinv t tn :
is_std (rcons t tn) -> std t = map (shiftinv_pos tn) t.
Lemma posbig_invseq s0 s t tn :
invseq (s0 :: s) (rcons t tn) -> posbig (s0 :: s) = tn.
Lemma nth_std_pos s i x :
is_std s -> i < size s -> i != posbig s -> nth x s i < (size s).-1.
Lemma linvseqK s0 s t tn :
invseq (s0 :: s) (rcons t tn) -> linvseq (rembig (s0 :: s)) (std t).
Lemma invseqK s0 s t tn :
invseq (s0 :: s) (rcons t tn) -> invseq (rembig (s0 :: s)) (std t).
Theorem invseqRSPQE s t :
invseq s t -> (RStabmap s).1 = (RStabmap t).2.
Corollary invseqRSE s t :
invseq s t -> RStabmap s = ((RStabmap t).2, (RStabmap t).1).
Corollary invstdRSE s :
is_std s -> let (P, Q) := RStabmap (invstd s) in RStabmap s = (Q, P).
Corollary RSTabmapstdE (disp : unit) (T : inhOrderType disp) (w : seq T) :
(RStabmap (invstd (std w))).1 = (RStabmap (std w)).2.
Corollary RSinvstdE (disp : unit) (T : inhOrderType disp) (w : seq T) :
RS (invstd (std w)) = (RStabmap w).2.
Variable s t : seq nat.
Hypothesis Hinv : invseq s t.
#[local] Lemma Hinvst : linvseq s t.
#[local] Lemma Hinvts : linvseq t s.
#[local] Definition val2pos :=
fun (i : 'I_(size s)) => Ordinal (linvseq_ltn_szt Hinvst (ltn_ord i)).
Lemma val2posE : val \o val2pos =1 nth (size t) s.
Lemma val2pos_inj : injective val2pos.
Lemma val2pos_enum (p : {set 'I_(size s)}) :
sorted <=%O [seq tnth (in_tuple s) i | i <- enum (mem p)] ->
enum (mem [set val2pos x | x in p]) = [seq val2pos x | x <- enum p].
Lemma ksupp_inj_invseq k : ksupp_inj <=%O <=%O k s t.
End KsuppInj.
Lemma Greene_invseq s t k : invseq s t -> Greene_row s k = Greene_row t k.
Lemma shape_invseq s t : invseq s t -> shape (RS s) = shape (RS t).
Lemma std_rcons_shiftinv t tn :
is_std (rcons t tn) -> std t = map (shiftinv_pos tn) t.
Lemma posbig_invseq s0 s t tn :
invseq (s0 :: s) (rcons t tn) -> posbig (s0 :: s) = tn.
Lemma nth_std_pos s i x :
is_std s -> i < size s -> i != posbig s -> nth x s i < (size s).-1.
Lemma linvseqK s0 s t tn :
invseq (s0 :: s) (rcons t tn) -> linvseq (rembig (s0 :: s)) (std t).
Lemma invseqK s0 s t tn :
invseq (s0 :: s) (rcons t tn) -> invseq (rembig (s0 :: s)) (std t).
Theorem invseqRSPQE s t :
invseq s t -> (RStabmap s).1 = (RStabmap t).2.
Corollary invseqRSE s t :
invseq s t -> RStabmap s = ((RStabmap t).2, (RStabmap t).1).
Corollary invstdRSE s :
is_std s -> let (P, Q) := RStabmap (invstd s) in RStabmap s = (Q, P).
Corollary RSTabmapstdE (disp : unit) (T : inhOrderType disp) (w : seq T) :
(RStabmap (invstd (std w))).1 = (RStabmap (std w)).2.
Corollary RSinvstdE (disp : unit) (T : inhOrderType disp) (w : seq T) :
RS (invstd (std w)) = (RStabmap w).2.