A symmetric chain decomposition of L(5, n)

Xiangdong Wen
Wolfram Research

Young’s lattice L(m,n)

Young Diagram

In[]:=
IntegerPartitions[5]
Out[]=
{{5},{4,1},{3,2},{3,1,1},{2,2,1},{2,1,1,1},{1,1,1,1,1}}
In[]:=
Options[youngDiagram]={ItemSize->20};​​youngDiagram[a_List,OptionsPattern[]]:=If[Length[a]>0&&a[[1]]>0,Graphics[{EdgeForm[Black],FaceForm[Yellow],Table[Table[Rectangle[{j,-i},{(j+1),(-i-1)}],{j,1,a[[i]]}],{i,1,Length[a]}]},ImageSize->OptionValue[ItemSize]*a[[1]]],​​Graphics[{EdgeForm[Black],FaceForm[White],Disk[],Line[{{-1,-1},{1,1}}]},ImageSize->OptionValue[ItemSize]]];
In[]:=
Map[youngDiagram,%1]
Out[]=

,
,
,
,
,
,


Young’s lattice

In[]:=
expand[a_]:=Table[{i,Sequence@@a},{i,0,a[[1]]}];​​L[1,n_]:=Table[{i},{i,0,n}];​​L[m_,n_]:=Sort[Join@@Map[expand,L[m-1,n]]];​​edgesR[sa_]:=Module[{r,im,t=1,s},s=Map[First,sa];​​im=IdentityMatrix[Length[s[[1]]]];​​r=Table[Null,Length[s]*Length[s[[1]]]];​​Do[r[[t++]]=If[MemberQ[s,e+i]&&Union[((e+i)/.sa)-(e/.sa),{0}]=={0,1},{e,e+i},Nothing],{e,s},{i,im}];r];edges[s_]:=edgesR[Map[#->#&,s]];​​coords[a_,p_]:=Module[{l},l=Length[a];Table[{i*50-25*l,p*30},{i,1,l}]];​​Options[youngLattice]={ItemSize->10,GraphLayout->Left};​​data[m_,n_]:=Module[{v,e,p,v2i,i2v},​​p=If[n==0,Table[IntegerPartitions[i],{i,0,m}],​​Table[Select[IntegerPartitions[i],Length[#]<=m&&(Length[#]==0||First[#]<=n)&],{i,0,m*n}]​​]/.{}->{0};​​v=Map[PadRight[#,m]&,Apply[Join,p]];​​e=edges[v];​​v2i=MapIndexed[#1->First[#2]&,v];​​i2v=MapIndexed[First[#2]->#1&,v];​​{p,v,e,v2i,i2v}​​];​​youngLattice[m_,n_Integer:0,OptionsPattern[]]:=Module[{v,e,vl,c,p,vc,v2i,i2v},​​{p,v,e,v2i,i2v}=data[m,n];​​c=Apply[Join,MapIndexed[coords[#1,First[#2]]&,p]];​​vl=Table[Evaluate[t/.v2i]->Placed[youngDiagram[t/.{0->Nothing},ItemSize->OptionValue[ItemSize]],Center],{t,v}];​​vc=Switch[OptionValue[GraphLayout],​​Up,Map[{#[[1]],-#[[2]]}&,c],​​Down,Map[{#[[1]],#[[2]]}&,c],​​Left,Map[{#[[2]],#[[1]]}&,c],​​Right,Map[{-#[[2]],#[[1]]}&,c]​​];​​Graph[Map[#[[1]]->#[[2]]&,e]/.v2i,VertexLabels->vl,VertexCoordinates->vc]​​];
In[]:=
youngLattice[5,GraphLayout->Up]
Out[]=
In[]:=
youngLattice[2,3]
Out[]=
In[]:=
youngLattice[3,2]
Out[]=

Symetric Chain Decomposition

Chain
v
1
<
v
2
<
v
3
< ⋯ <
v
t
,
v
i
∈ L(m,n)
saturated: rank(
v
s
) - rank
(
v
s-1
)
= 1, s=2,3,⋯,t
symmetric: rank(
v
1
) + rand(
v
t
) = m n
SCD: Partition a poset into disjoint symmetric chains.
Poset with a SCD is called symmeric chain order.
In[]:=
rank[v_]:=Total[v];​​Options[scdL]={ItemSize->10,GraphLayout->Left};​​scdL[m_,n_,OptionsPattern[]]:=Module[{v,e,vl,c,p,vc,v2i,i2v,edges,from,to,rest,flow={},singles,g},​​{p,v,e,v2i,i2v}=data[m,n];​​edges=Map[#[[1]]->#[[2]]&,e]/.v2i;​​c=Apply[Join,MapIndexed[coords[#1,First[#2]]&,p]];​​vl=Table[Evaluate[t/.v2i]->Placed[youngDiagram[t/.{0->Nothing},ItemSize->OptionValue[ItemSize]],Center],{t,v}];​​vc=Switch[OptionValue[GraphLayout],​​Up,Map[{#[[1]],-#[[2]]}&,c],​​Down,Map[{#[[1]],#[[2]]}&,c],​​Left,Map[{#[[2]],#[[1]]}&,c],​​Right,Map[{-#[[2]],#[[1]]}&,c]​​];​​Do[​​from=Select[v,Total[#]==Floor[(mn/2)]-i&]/.v2i;​​to=Select[v,Total[#]==Ceiling[(mn/2)]+i&]/.v2i;​​rest=Select[Map[{#[[1]],#[[2]]}&,edges],MemberQ[Map[First,flow],#[[1]]]==False&];​​g=Sort[Map[#[[1]]->#[[2]]&,Join[flow,rest]]];​​flow=Join[flow,Select[Map[First,Select[ArrayRules@FindMaximumFlow[g,from,to,"OptimumFlowData",VertexCapacity->Table[1,{j,1Length[v]}]]["FlowMatrix"],#[[2]]==1&]],Length[Intersection[#,Join[from,to]]]>0&]],{i,0,Floor[(mn/2)]}];​​singles=Complement[Range[Length[v]],Apply[Union,flow]];​​Graph[Join[Map[#[[1]]->#[[2]]&,flow],Map[#->#&,singles]],VertexCoordinates->MapIndexed[First[#2]->#1&,vc],VertexLabels->vl]​​]
In[]:=
scdL[2,3]
Out[]=

O’hara subposets L(m,n,s) and L(m,n,s,d)

spread, degree

https://sites.math.rutgers.edu/~zeilberg/mamarim/mamarimPDF/ohara.pdfspread(a) := max{
a
i
-
a
i-2
, 2 ⩽i ⩽ m+1},
a
0
=0;
a
m+1
=n
​M(a):={2⩽i⩽m+1;
a
i
-
a
i-2
=spread(a)}M(a) = ⋃
D
j
,
D
j
are maximally connected intervalsdegree(a):=
∑
j
[

D
j
+1
2
]
In[]:=
spread[a_,n_]:=Max[Join[Rest[a],{n}]-Join[{0},Most[a]]]
In[]:=
degree[a_,n_]:=Total[Map[Floor[(Total[#]+1)/2]&,Split[BinCounts[Flatten@Position[Join[Rest[a],{n}]-Join[{0},Most[a]],spread[a,n]],1]]]]

L(m,n,s), L(m,n,s,d), U(m,n,s)

L(m,n,s) := {v ∈ L(m,n), spread[v]=s}
L(m,n,s,d):= {v ∈ L(m,n), spread[v]=s, degree[v]=d }
U(m,n,s) := {v ∈ L(m,n), spread[v] ⩽ s}

Visualization Tools

Tools

Examples

Are all L(5,n,s,1) symmetric chain orders?

It is still an open problem.

Are all L(5,n,s,2) symmetric chain orders?

Yes.

Are all L(5,n,s,3) symmetric chain orders?

Yes.

SCDL5n(n)

Visualize Chains of L(5,n)

L(6,n)