Skip to content

Commit 14a8b96

Browse files
committed
Done the proofs of Pieri_(elementary|complete)
1 parent 75e83ab commit 14a8b96

4 files changed

Lines changed: 190 additions & 15 deletions

File tree

LRrule/Schur.v

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,12 @@ Qed.
288288
Definition colpartn d : intpartn d := IntPartN (colpartnP d).
289289
Definition elementary d : {mpoly R[n]} := Schur (colpartn d).
290290

291+
Lemma conj_rowpartn d : conj_intpartn (rowpartn d) = colpartn d.
292+
Proof. apply val_inj => /=; rewrite /rowpart /colpart; by case: d. Qed.
293+
Lemma conj_colpartn d : conj_intpartn (colpartn d) = rowpartn d.
294+
Proof. rewrite -[RHS]conj_intpartnK; by rewrite conj_rowpartn. Qed.
295+
296+
291297
(* Noncommutative lifting of Schur *)
292298
Lemma Schur_freeSchurE d (Q : stdtabn d) :
293299
Schur (shape_deg Q) = polyset R (freeSchur Q).
@@ -702,6 +708,7 @@ End Coeffs.
702708

703709
End FinSets.
704710

711+
705712
Section Conj.
706713

707714
Variables d1 d2 : nat.

LRrule/partition.v

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,16 @@ Section SkewShape.
760760
move: Heq => /eqP; by rewrite H0 eqn_add2l => /eqP/(Hrec Hincl) ->.
761761
Qed.
762762

763+
Lemma included_conj_part inner outer :
764+
is_part inner -> is_part outer ->
765+
included inner outer -> included (conj_part inner) (conj_part outer).
766+
Proof.
767+
move=> Hinn Hout /includedP [] Hsz Hincl.
768+
apply/includedP; split; first by rewrite !size_conj_part // -!nth0; exact: Hincl.
769+
move=> i.
770+
rewrite -conj_leqE //; apply (leq_trans (Hincl _)); by rewrite conj_leqE.
771+
Qed.
772+
763773
Fixpoint diff_shape inner outer :=
764774
if inner is inn0 :: inn then
765775
if outer is out0 :: out then
@@ -877,16 +887,18 @@ Canonical intpart_countType := Eval hnf in CountType intpart intpart_countMixin.
877887
Lemma intpartP (p : intpart) : is_part p.
878888
Proof. by case: p. Qed.
879889

890+
Hint Resolve intpartP.
891+
880892
Canonical conj_intpart p := IntPart (is_part_conj (intpartP p)).
881893

882894
Lemma conj_intpartK : involutive conj_intpart.
883-
Proof. move=> p; apply: val_inj => /=; by rewrite conj_partK; last by apply: intpartP. Qed.
895+
Proof. move=> p; apply: val_inj => /=; by rewrite conj_partK. Qed.
884896

885897
Lemma intpart_sum_inj (s t : intpart) :
886898
(forall k, part_sum s k = part_sum t k) -> s = t.
887899
Proof.
888900
move=> H; apply: val_inj => /=.
889-
apply: part_sum_inj; last exact H; by apply: intpartP.
901+
by apply: part_sum_inj; last exact H.
890902
Qed.
891903

892904

@@ -1042,7 +1054,7 @@ Canonical intpartn_subFinType := Eval hnf in [subFinType of intpartn].
10421054

10431055
Lemma intpartnP (p : intpartn) : is_part p.
10441056
Proof. by case: p => /= p /andP []. Qed.
1045-
1057+
Hint Resolve intpartnP.
10461058
Definition intpart_of_intpartn (p : intpartn) := IntPart (intpartnP p).
10471059
Coercion intpart_of_intpartn : intpartn >-> intpart.
10481060

@@ -1059,6 +1071,9 @@ Proof.
10591071
Qed.
10601072
Canonical conj_intpartn (sh : intpartn) := IntPartN (conj_intpartnP sh).
10611073

1074+
Lemma conj_intpartnK : involutive conj_intpartn.
1075+
Proof. move=> p; apply: val_inj => /=; by rewrite conj_partK. Qed.
1076+
10621077
End PartOfn.
10631078

10641079
Fixpoint intpartnsk_nb sm sz mx : nat :=

LRrule/skewtab.v

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,13 +322,136 @@ Section Dominate.
322322
else if outer is out0 :: out then out == [::]
323323
else true.
324324

325+
Fixpoint vb_strip inner outer :=
326+
if outer is out0 :: out then
327+
if inner is inn0 :: inn then
328+
(inn0 <= out0 <= inn0.+1) && (vb_strip inn out)
329+
else (out0 == 1) && (vb_strip [::] out)
330+
else inner == [::].
331+
325332
Lemma hb_strip_included inner outer :
326333
hb_strip inner outer -> included inner outer.
327334
Proof.
328335
elim: inner outer => [| inn0 inn IHinn] [| out0 out] //=.
329336
by move=> /andP [] /andP [] _ -> /IHinn ->.
330337
Qed.
331338

339+
Lemma vb_strip_included inner outer :
340+
vb_strip inner outer -> included inner outer.
341+
Proof.
342+
elim: inner outer => [| inn0 inn IHinn] [| out0 out] //=.
343+
by move=> /andP [] /andP [] -> _ /IHinn ->.
344+
Qed.
345+
346+
Lemma hb_stripP inner outer :
347+
is_part inner -> is_part outer ->
348+
reflect
349+
(forall i, nth 0 outer i.+1 <= nth 0 inner i <= nth 0 outer i)
350+
(hb_strip inner outer).
351+
Proof.
352+
move=> Hinn Hout; apply (iffP idP).
353+
- elim: inner outer {Hinn Hout} => [| inn0 inn IHinn] /= [| out0 out] //=.
354+
move=> /eqP -> i; by rewrite leqnn /= nth_default.
355+
move=> /andP [] H0 /IHinn{IHinn}Hrec [//= | i]; exact: Hrec.
356+
- elim: inner Hinn outer Hout => [| inn0 inn IHinn] Hinn /= [| out0 out] Hout //= H.
357+
+ have:= H 0 => /andP []; rewrite nth_nil leqn0 => /eqP {H} H _.
358+
have:= part_head_non0 (is_part_tl Hout).
359+
rewrite -nth0; by case: out H {Hout} => [//=| out1 out'] /= ->.
360+
+ have:= part_head_non0 Hinn; have:= H 0.
361+
by rewrite /= leqn0 => ->.
362+
+ have := H 0; rewrite nth0 /= => -> /=.
363+
apply (IHinn (is_part_tl Hinn) _ (is_part_tl Hout)) => i.
364+
exact: H i.+1.
365+
Qed.
366+
367+
Lemma vb_stripP inner outer :
368+
is_part inner -> is_part outer ->
369+
reflect
370+
(forall i, nth 0 inner i <= nth 0 outer i <= (nth 0 inner i).+1)
371+
(vb_strip inner outer).
372+
Proof.
373+
move=> Hinn Hout; apply (iffP idP) => [Hstrip|].
374+
- elim: outer inner Hstrip Hout Hinn =>
375+
[//= | out0 out IHout] [| inn0 inn] /=.
376+
+ move=> _ _ _ i; by rewrite nth_default.
377+
+ by move => /eqP.
378+
+ move=> /andP [] /eqP -> {out0 IHout} H _ _ [|i] //=.
379+
elim: out H i => [//= | out1 out IHout] /=.
380+
move=> _ i; by rewrite nth_default.
381+
move=> /andP [] /eqP -> /IHout{IHout} Hrec; by case.
382+
+ by move=> /andP [] H0 /IHout{IHout}Hrec
383+
/andP [] Hout /Hrec{Hrec}Hrec
384+
/andP [] Hinn /Hrec{Hrec}Hrec [|i] //=.
385+
- elim: outer inner Hout Hinn => [//= | out0 out IHout].
386+
+ case => [//= | inn0 inn] _ /= /andP [] Habs Hinn H; exfalso.
387+
have {H} := H 0 => /= /andP []; rewrite leqn0 => /eqP Hinn0 _.
388+
subst inn0; move: Habs Hinn; by rewrite leqn0 => /part_head0F ->.
389+
+ move=> inner Hpart; have:= part_head_non0 Hpart => /=.
390+
rewrite -lt0n eqn_leq => H0out.
391+
case: inner => [_ | inn0 inn]/=.
392+
move=> {IHout} H; rewrite H0out.
393+
have:= H 0 => /= -> /=.
394+
have {H} /= Hout i := H i.+1.
395+
move: Hpart => /= /andP [] _.
396+
elim: out Hout => [//= | out1 out IHout] H Hpart.
397+
have:= part_head_non0 Hpart => /=.
398+
rewrite -lt0n eqn_leq => ->.
399+
have:= H 0 => /= -> /=.
400+
apply: IHout; last exact: (is_part_tl Hpart).
401+
move=> i; exact: H i.+1.
402+
+ move: Hpart => /andP [] H0 /IHout{IHout}Hrec
403+
/andP [] _ /Hrec{Hrec}Hrec H.
404+
have := H 0 => /= -> /=.
405+
apply Hrec => i.
406+
exact: H i.+1.
407+
Qed.
408+
409+
Lemma vb_strip_conj inner outer :
410+
is_part inner -> is_part outer ->
411+
vb_strip inner outer -> hb_strip (conj_part inner) (conj_part outer).
412+
Proof.
413+
move=> Hinn Hout; have Hcinn := is_part_conj Hinn; have Hcout := is_part_conj Hout.
414+
move => /(vb_stripP Hinn Hout) H.
415+
apply/(hb_stripP Hcinn Hcout) => i; rewrite -!conj_leqE //; apply/andP; split.
416+
+ have {H} := H (nth 0 (conj_part inner) i) => /andP [] _ /leq_trans; apply.
417+
by rewrite ltnS conj_leqE.
418+
+ have {H} := H (nth 0 (conj_part outer) i) => /andP [] /leq_trans H _; apply H.
419+
by rewrite conj_leqE.
420+
Qed.
421+
422+
Lemma hb_strip_conj inner outer :
423+
is_part inner -> is_part outer ->
424+
hb_strip inner outer -> vb_strip (conj_part inner) (conj_part outer).
425+
Proof.
426+
move=> Hinn Hout; have Hcinn := is_part_conj Hinn; have Hcout := is_part_conj Hout.
427+
move => /(hb_stripP Hinn Hout) H.
428+
apply/(vb_stripP Hcinn Hcout) => i; rewrite -!conj_leqE //; apply/andP; split.
429+
+ have {H} := H (nth 0 (conj_part outer) i) => /andP [] _ /leq_trans; apply.
430+
by rewrite conj_leqE.
431+
+ have {H} := H (nth 0 (conj_part inner) i) => /andP [] /leq_trans H _; apply H.
432+
by rewrite conj_leqE.
433+
Qed.
434+
435+
Lemma hb_strip_conjE inner outer :
436+
is_part inner -> is_part outer ->
437+
hb_strip (conj_part inner) (conj_part outer) = vb_strip inner outer.
438+
Proof.
439+
move=> Hinn Hout; apply (sameP idP); apply (iffP idP).
440+
- exact: vb_strip_conj.
441+
- rewrite -{2}(conj_partK Hinn) -{2}(conj_partK Hout).
442+
exact: hb_strip_conj (is_part_conj Hinn) (is_part_conj Hout).
443+
Qed.
444+
445+
Lemma vb_strip_conjE inner outer :
446+
is_part inner -> is_part outer ->
447+
vb_strip (conj_part inner) (conj_part outer) = hb_strip inner outer.
448+
Proof.
449+
move=> Hinn Hout; apply (sameP idP); apply (iffP idP).
450+
- exact: hb_strip_conj.
451+
- rewrite -{2}(conj_partK Hinn) -{2}(conj_partK Hout).
452+
exact: vb_strip_conj (is_part_conj Hinn) (is_part_conj Hout).
453+
Qed.
454+
332455
Lemma row_dominate u v :
333456
is_row (u ++ v) -> dominate u v -> u = [::].
334457
Proof.

LRrule/therule.v

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -602,21 +602,13 @@ Proof.
602602
* exfalso; by case: (evalseq y) y0 Heval => [| a [| l0 l]] [|y0].
603603
Qed.
604604

605-
Theorem Pieri_row (P1 : intpartn d1) :
606-
Schur P1 * complete d2 = \sum_(P : intpartn (d1 + d2) | hb_strip P1 P) Schur P.
605+
Theorem LRyam_coeff_Pieri_row (P1 : intpartn d1) (P : intpartn (d1 + d2)) :
606+
included P1 P -> LRyam_coeff P1 (rowpartn d2) P = hb_strip P1 P.
607607
Proof.
608-
rewrite /Schur.complete LRtab_coeffP.
609-
rewrite [LHS]big_mkcond [RHS]big_mkcond /=.
610-
apply eq_bigr => p _.
611-
case: (boolP (included P1 p)) => Hincl; first last.
612-
suff /negbTE -> : ~~ hb_strip P1 p by [].
613-
move: Hincl; apply contra; exact: hb_strip_included.
614-
suff -> : LRyam_coeff P1 (rowpartn d2) p = hb_strip P1 p.
615-
case: (hb_strip P1 p); by rewrite /= ?mulr1n ?mulr0n.
616-
rewrite /LRyam_coeff /LRyam_set.
608+
rewrite /LRyam_coeff /LRyam_set => Hincl.
617609
rewrite /is_skew_reshape_tableau.
618610
set LRset := (X in #|pred_of_set X|).
619-
case: (boolP (hb_strip P1 p)) => Hstrip /=.
611+
case: (boolP (hb_strip P1 P)) => Hstrip /=.
620612
- suff -> : LRset = [set yamrow] by rewrite cards1.
621613
rewrite -setP => y; rewrite !inE {LRset}.
622614
case: y => y Hy /=.
@@ -644,6 +636,44 @@ Proof.
644636
by rewrite Hincl Hskew.
645637
Qed.
646638

639+
Theorem Pieri_row (P1 : intpartn d1) :
640+
Schur P1 * complete d2 = \sum_(P : intpartn (d1 + d2) | hb_strip P1 P) Schur P.
641+
Proof.
642+
rewrite /Schur.complete LRtab_coeffP.
643+
rewrite [LHS]big_mkcond [RHS]big_mkcond /=.
644+
apply eq_bigr => p _.
645+
case: (boolP (included P1 p)) => Hincl; first last.
646+
suff /negbTE -> : ~~ hb_strip P1 p by [].
647+
move: Hincl; apply contra; exact: hb_strip_included.
648+
rewrite (LRyam_coeff_Pieri_row Hincl).
649+
case: (hb_strip P1 p); by rewrite /= ?mulr1n ?mulr0n.
650+
Qed.
651+
652+
Theorem LRyam_coeff_Pieri_col (P1 : intpartn d1) (P : intpartn (d1 + d2)) :
653+
included P1 P -> LRyam_coeff P1 (colpartn d2) P = vb_strip P1 P.
654+
Proof.
655+
move=> Hincl.
656+
have Hinclc : included (conj_intpartn P1) (conj_intpartn P).
657+
exact: included_conj_part.
658+
rewrite -conj_rowpartn -{1}(conj_intpartnK P1) -{1}(conj_intpartnK P).
659+
rewrite -LR_coeff_yamP; last by rewrite !conj_intpartnK.
660+
rewrite -LRtab_coeff_conj (LR_coeff_yamP _ Hinclc) (LRyam_coeff_Pieri_row Hinclc).
661+
by rewrite /= hb_strip_conjE.
662+
Qed.
663+
664+
Theorem Pieri_col (P1 : intpartn d1) :
665+
Schur P1 * elementary d2 = \sum_(P : intpartn (d1 + d2) | vb_strip P1 P) Schur P.
666+
Proof.
667+
rewrite /Schur.elementary LRtab_coeffP.
668+
rewrite [LHS]big_mkcond [RHS]big_mkcond /=.
669+
apply eq_bigr => p _.
670+
case: (boolP (included P1 p)) => Hincl; first last.
671+
suff /negbTE -> : ~~ vb_strip P1 p by [].
672+
move: Hincl; apply contra; exact: vb_strip_included.
673+
rewrite (LRyam_coeff_Pieri_col Hincl).
674+
case: (vb_strip P1 p); by rewrite /= ?mulr1n ?mulr0n.
675+
Qed.
676+
647677
End Pieri.
648678

649679
End LR.

0 commit comments

Comments
 (0)