proposition: Theorem Schutzenberger_shuffle_plact u1 v1 w1 w2 : is_std u1 -> is_std v1 -> w1 \in shsh u1 v1 -> (w1 =Pl w2) -> exists u2 v2, [/\ u1 =Pl u2, v1 =Pl v2 & w2 \in shsh u2 v2].
proof: Proof. move=> Hstdu1 Hstdv1 Hsh Hpl. have Hstdw1 : is_std w1 by exact: (allP (std_shsh Hstdu1 Hstdv1)). have:= Hsh; rewrite (mem_shsh _ _ Hstdu1) => /andP[/eqP Hu1 /eqP Hv1]. have HgtnE : (fun x => (x < size u1)%O) =1 gtn (size u1). by move=> x /=; rewrite ltEnat. have HleqE : (fun x => (x >= size u1)%O) =1 leq (size u1). by move=> x /=; rewrite leEnat. pose u2 := (sfiltergtn (size u1) w2); pose v2 := (sfilterleq (size u1) w2). have {Hu1} Hplu : u1 =Pl u2. rewrite -Hu1 /u2 /sfiltergtn /= -!(eq_filter HgtnE). exact: plactic_filter_gt. have {Hv1} Hplv : v1 =Pl v2. rewrite -Hv1 /v2 /sfilterleq /= -!(eq_filter HleqE). apply: plact_map_in_incr; last exact: plactic_filter_le. move=> /= x y. rewrite !mem_filter !leEnat !ltEnat /= => /andP[Hx _] /andP[Hy _] Hxy. by rewrite -(ltn_add2r (size u1)) ?subnK. exists u2, v2; split => //. rewrite mem_shsh; first last. by apply (perm_std Hstdu1); rewrite perm_sym; exact: plact_homog. by rewrite -(perm_size (plact_homog Hplu)) !eq_refl. Qed.
imports: mathcomp.ssreflect.ssreflect mathcomp(ssrbool ssrfun ssrnat eqtype finfun fintype choice) mathcomp(order seq tuple finset perm binomial bigop) tools vectNK subseq partition Yamanouchi ordtype std tableau stdtab Schensted plactic Greene_inv stdplact