# How to make pairs of Young diagrams appear?

I have the following Young diagrams

{{{0}, {2}}, {{0}, {1, 1}}, {{1}, {1}}, {{2}, {0}}, {{1, 1}, {0}}}


where you can interpret each pair as following: For example we have the pair {{{0}, {2}} which says Young diagram with zero boxes $\oplus$ Young diagram with 2 boxes sitting on top of each other. Another example is {{0}, {1, 1}} which gives the pair Young diagram with zero boxes $\oplus$ Young diagram with 2 boxes, 1 sitting to the right of the other. So in {{0},{2}} it would be better to actually write {{0,0},{2,0}} actually.

So how can I make each of these pairs appear in my screen (the tensor sum is not really needed, I just want to be able to see them).

• what do mean by "Young diagram with zero boxes". There is at-least one box always right. It would be better if you can provide a rough sketch of your example. – Hubble07 Dec 14 '15 at 15:00
• @Hubble07: The "trivial" Young tableau (with no boxes) is often used. For example, if we're looking at irreducible representations of a group on tensor products of a vector space, the "trivial" Young tableau represents the trivial representation of the group. – Michael Seifert Dec 14 '15 at 15:10
• @MichaelSeifert The trivial representation seems to be the symmetric representation as in SU(n) groups were it is always shown horizontally. Anyway my confusion is regarding the visual difference expected by the OP between {{0}, {2}} and {{2}, {0}}. – Hubble07 Dec 14 '15 at 15:44
• Exactly. Zero box means empty partition. – Marion Dec 14 '15 at 16:04

This was a fun little exercise:

sqrow[x_, n_] := Table[Rectangle[{x, -i}, {x + 1, -(i + 1)}], {i, n}];
showtableau[tab_] := If[tab == {0},
Graphics[Text[Style["\[EmptySet]", FontSize -> 16]], ImageSize -> 16],
Graphics[{White, EdgeForm[Thin], Table[sqrow[i, tab[[i]]], {i, Length[tab]}]}, ImageSize -> 16*Length[tab]]];
tensorsum[tablist_] := CirclePlus @@ (showtableau /@ tablist);

tensorsum[{{1},{1}}]


tensorsum[{{0},{2}}]


As noted by @Hubble07 in the comments, your nomenclature for the Young tableaux is non-standard; normally, the Young tableau {2} would have one row of two boxes, while the tableau {1, 1} would consist of one column containing two boxes. I've written the above code using the convention in the question as asked, but it wouldn't be too hard to modify it to use the normal convention.

• Hi! In your second command it seems a bracket is missing according to my Mathematica. I get this message "Expression "sqrow[x_,n_]:=Table[Rectangle[{x,-i},{x+1,-(i+1)}],{i,n}]; showtableau[tab_]:=If[tab=={0},<<1>>],Graphics[{White,<<1>>,<<1>>},<<1>>]]" has no opening "["." – Marion Dec 14 '15 at 16:06
• Corrected. Thanks for the heads-up. – Michael Seifert Dec 14 '15 at 16:30
• Thanks a lot. It works really nicely now. My question is how I can make all diagrams of a given pair of partitions appear at the same time. Because if I have partitions of big numbers the thing is to easily and quickly visualise them all. So for example, how could I tell Mathematica to give me all {{{0}, {2}}, {{0}, {1, 1}}, {{1}, {1}}, {{2}, {0}}, {{1, 1}, {0}}} diagrams at once? Sorry I am really knew with Mathematica. – Marion Dec 14 '15 at 19:27
• After defining the above code, run the command tensorsum /@ list. This takes the function tensorsum and applies it item-by-item to the elements of list. (This works for any other function too, not just user-defined ones.) – Michael Seifert Dec 15 '15 at 16:54
• tensorsum /@ {{{0}, {2}}, {{0}, {1, 1}}, {{1}, {1}}, {{2}, {0}}, {{1, 1}, {0}}} works just fine for me. (Note the extra curly brackets encasing the whole list; lists in Mathematica are always encased in curly brackets.) – Michael Seifert Dec 16 '15 at 18:00

Don't know if this is of any use to you, doesn't answer your question directly, but thought you might find it useful:

hookLengths[list_] := With[{bb = Range@# & /@ list},
Table[Table[Length@bb[[j]] - (i - 1) + Count[Flatten@Drop[bb, j - 1],
bb[[j, i]]] - 1, {i, Length@bb[[j]]}], {j, Length@bb}]]

youngTabHL[list_] := Text@Grid[hookLengths[list], Frame ->
Join[{None}, {None}, {Flatten[With[{cc = Range@# & /@ list},
Table[Flatten[{nn, #} -> True & /@ cc[[nn]], 1], {nn, Length@cc}]], 1]}],
ItemSize -> {1.5, 1.5}, Alignment -> Center]

numberOfTab[list_] := Total[Flatten[ConstantArray[1, #] & /@ list]]!/
Times @@ Flatten@hookLengths[list]

list = {4, 3, 1, 1};
youngTabHL[list]
numberOfTab[list]


(*216*)


To answer the OP, you could use

youngTabHLW[list_] := Grid[ConstantArray["", #] & /@ list,
Frame -> Join[{None}, {None}, {Flatten[With[{cc = Range@# & /@ list},
Table[Flatten[{nn, #} -> True & /@ cc[[nn]], 1],
{nn, Length@cc}]], 1]}], ItemSize -> {1.5, 1.5}]

cpYT[list_] := Grid[{Rest@ Flatten[Transpose@{ConstantArray[
Style["\[CirclePlus]", 20], Length@list], youngTabHLW@# & /@ list}]}]

cpYT@{{5}, {4, 1}, {3, 2}, {3, 1, 1}, {2, 2, 1}, {2, 1, 1, 1},
{1, 1, 1, 1, 1}}


• I will check it out. Though I only see one diagram in your example while I want pairs and also if possible triplets. – Marion Dec 14 '15 at 19:28
• @Marion now added – martin Dec 14 '15 at 20:41
• Hi, thanks a lot! This is not what I meant though. I apologise for not being clear, don't get me wrong I will study your code to understand it better but if you see my original question it is kinda different. Your nice answer gives me all the possible partitions (which is something I also do want). But then I can have pair of Young diagrams, as in Prof. Seifert's answer, and even more I can have triplets of them (and so on). So the question is how to directly get these pairs or triplets (the pairs are given in Prof. Seifert's answer) and also how to get leg and arm functions. – Marion Dec 14 '15 at 21:20
• @Marion Probably best to accept MichaelSeifert 's A as is better suited to your needs, I think :) – martin Dec 14 '15 at 22:03
• Your help is highly appreciated. Thanks a lot. – Marion Dec 14 '15 at 23:00

Not exactly following the convention of yours, but I once wrote a paclet that does this, and many more things: https://github.com/JEM-Mosig/Multiplets

For example:

<< "Multiplets"
Tableau[{3, 2}]


TableauProduct[Tableau[{3, 2}], Tableau[{1, 1}]] // TraditionalForm


The good thing is that the tableaux are still usable expressions, i.e. you can copy-paste them as input. Here is the code-block that generates the diagram. The paclet also provides much more functionality, s.a.

Tableau[{3, 2}, TableauHooks]


Names["Tableau*"]
(* {"Tableau", "TableauAppend", "TableauClear", "TableauDimension", \
"TableauDistances", "TableauExpand", "TableauFirst", \
"TableauFirstRow", "TableauFromMultiplet", "TableauHooks", \
"TableauLetters", "TableauProduct", "TableauQ", "TableauReduce", \
"TableauRest", "TableauRestRows", "TableauSimplify", "TableauSum", \
"TableauToMatrix", "TableauToMultiplet"} *)


With

arg = {{{}, {2}}, {{}, {1, 1}}, {{1}, {1}}, {{2}, {}}, {{1, 1}, {}},
{{3, 2, 1}, {4, 2, 2, 1}}}


and the function

tableauxForm[yt_List] := (TableForm[#1, TableSpacing -> {1, 1}] & ) /@
yt (* /.  q : {__Integer} :> StringJoin @@ ToString /@ q *);


I use

Map[tableauxForm[0*FirstLexicographicTableau /@ #] &, arg, {1}]


to produce the desired output. Extension to 3 or more Tableaux is self-evident.

(Note that you need Combinatorica loaded.)