Hilbert series of simple polyominoes

In the paper Hilbert series of Parallelogram Polyominoes by Ayesha Asloob Qureshi, Giancarlo Rinaldo and Francesco Romeo, (section 3), we present the following


Let \(P\) be a simple polyomino with rank \(P \leq 11\) and let \(\widetilde{r}_{P}(t)\) be the polynomial defined in Definition 3.1 of the article. Then \(h(t)=\widetilde{r}_{P}(t)\).

We provide the implementation in Java of the algorithm computing the simple polyominoes of a given rank, Moreover we provide the scripst in Macaulay 2 for computing the 2 polynomials \(\widetilde{r}_{P}(t)\) and \(h(t)\) of the theorem downloadable from here.

We refer to the article for an in-depth description of the notation and results. In this page you will find an implementation with an example of computation.

Implementation and one example

In this section we give the results of our computation by the routines that we implemented in Java (version 8) and Macaulay 2 whose sources are downloadable from here.

Therefore to use the routines you need to install Java SDK and Macaulay 2. We tested the routines on Linux (Ubuntu 18.04) and Mac. To use it you have to download, and extract by

tar -xzvf hilbertsimple.tgz

move to the folder

cd hilbertsimple

and then compile the java program by

 javac Main.java

This Java program generates all the simple polyominoes of a given rank. Now we can test the conjecture for all the polyominoes of rank 7. From now on we show the input and the output in the console

./ConjectureRookPolynomial.sh 7

After few seconds we have that the conjecture holds for all the 107 simple polyominoes of rank 7. The file containing all the polyominoes computed is simple.m2.


If you want to show all the simple polyominoes of rank 7 use the following

 java Main --generateSimple --rank 7

In particular the polyomino in position 30 is

{(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (2, 1), (2, 2)}
+---+   +---+
|///|   |///|
+   +---+   +
|/// /// ///|
+       +---+
|/// ///|    

whose Hilbert series is the one you find in the article. We describe how to do the computation to verify this case. First of all we need to start a Macaulay 2 session. Then we load the library we provide.

load "Polyominoes.m2"

Now we define the polyomino in the picture by the list of its the maximal inner interval through the following two commands

P=PMaker Q

By this we can compute the rook polynomial, namely \(r(t)\),

rookPolynomial P

whose output is

        3      2
oo5 = 5T  + 12T  + 7T + 1

To compute \(h(t)\) we input

ht=htPol Q

The output is

        3      2
oo7 = 4T  + 11T  + 7T + 1

We observe that the polyomino is not thin, in fact \(h(t)\neq r(t)\). Hence we need to compute \(\widetilde{r}_{P}(t)\). That is

rt=EqRookPolynomial P

whose related output is

        3      2
oo6 = 4T  + 11T  + 7T + 1

And \(h(t)=\widetilde{r}_{P}(t)\), as expected.