Two Bars at a Time: My First Math Paper

Sep 5, 2026

I published my first mathematical preprint today. It presents a proof of Conjecture 5.10 of Gajdzica, Visser, and Zakarczemny, a statement about counting restricted rectangle partitions. The manuscript, source, and verification code are now public. It has not yet undergone independent peer review. (zenodo.org)

The title is a mouthful: Rationality and Quasipolynomiality of Restricted Rectangle Partitions.

The idea behind the proof is considerably easier to explain.

Take a rectangle that you can already tile. Add two identical bars to its right, one above the other. You now have a larger rectangle that you can also tile.

That is the starting point. The interesting part is what this simple operation tells you about an infinite counting problem.

What Is Being Counted?

Imagine a rectangle two units high and nn units wide. You have bars of sizes 1×11\times1, 1×21\times2, and so on, up to 1×k1\times k. You can rotate them.

The question is not how many different ways you can arrange the bars.

It is how many different collections of bars can fill the rectangle at all.

That distinction matters. If the same collection can be arranged in ten different ways, it still counts once. Think of counting valid inventories rather than layouts. The function fk(n)f_k(n) counts those inventories for a fixed maximum bar length kk. (zenodo.org)

An inventory can be written as a vector:

m=(m1,m2,,mk),m=(m_1,m_2,\ldots,m_k),

where mjm_j is the number of bars of length jj.

The bars must have the right total area:

m1+2m2++kmk=2n.m_1+2m_2+\cdots+km_k=2n.

But the right area is not enough. The bars must actually fit.

For example, a unit square and a 1×31\times3 bar have total area four. They cannot tile a 2×22\times2 rectangle. The long bar does not fit in either direction.

This is where the geometry enters the problem.

The Operation That Always Works

Suppose an inventory is feasible: there is some arrangement of its bars that fills a 2×n2\times n rectangle.

Pick any allowed length jj. Put two new 1×j1\times j bars horizontally, one in each row, immediately to the right of the existing rectangle.

Together they form a 2×j2\times j slab. The enlarged rectangle has width n+jn+j, and nothing in the original tiling has to move.

In vector notation,

m feasiblem+2ej feasible,m\text{ feasible}\quad\Longrightarrow\quad m+2e_j\text{ feasible},

where eje_j adds one to the jj-th coordinate.

The important word is adds.

There is no corresponding promise that removing two identical bars preserves feasibility. In fact, it does not.

Three unit squares and one length-three bar can tile a 2×32\times3 rectangle: put the long bar in one row and the squares in the other. Remove two squares, and you are left with the impossible 2×22\times2 inventory from earlier.

The proof only needs the direction that works. Slab addition, combined with parity classes, is the mechanism used in the manuscript. (zenodo.org)

Separate the Odd Part From the Pairs

Every multiplicity vector has a unique decomposition:

m=ε+2u,m=\varepsilon+2u,

where each coordinate of ε\varepsilon is either zero or one, and every coordinate of uu is a nonnegative integer.

The vector ε\varepsilon records which bar counts are odd. The vector uu records the remaining pairs.

Now fix ε\varepsilon.

If one value of uu gives a feasible inventory, increasing any of its coordinates also gives a feasible inventory. Each increase is just another two-bar slab.

So within each parity class, the feasible vectors form what is called an upward-closed set.

This is the useful change of representation. Instead of trying to describe every possible tiling, the argument studies a set of integer vectors with a simple closure property.

Dickson's lemma supplies the next step: such a set has finitely many coordinatewise minimal elements. Every feasible vector in that parity class lies above at least one of these finitely many starting vectors.

Those starting vectors need not correspond to tilings from which slabs can physically be removed. They describe the order structure of the inventories. That is a different statement.

Where the Formula Comes From

Starting from one minimal vector, extra pairs of length-jj bars contribute widths

0,j,2j,3j,0,j,2j,3j,\ldots

Their generating series is

1+xj+x2j+=11xj.1+x^j+x^{2j}+\cdots=\frac{1}{1-x^j}.

Allowing extra pairs of every permitted length produces the denominator

j=1k(1xj).\prod_{j=1}^{k}(1-x^j).

Different starting vectors can generate overlapping sets of inventories. Finite inclusion–exclusion corrects that double-counting. There are also only finitely many parity classes.

The result is

n0fk(n)xn=Pk(x)j=1k(1xj),Pk(x)Z[x].\sum_{n\ge0}f_k(n)x^n=\frac{P_k(x)}{\prod_{j=1}^{k}(1-x^j)},\qquad P_k(x)\in\mathbb{Z}[x].

That is the generating-function statement established in the preprint. The reduced denominator may be smaller if factors cancel; the claim is divisibility, not that cancellation never happens. (zenodo.org)

It follows that the counting function is eventually quasipolynomial.

Despite the name, the idea is straightforward. Beyond some initial range, one polynomial handles one residue class, another handles the next, and so on in a repeating cycle.

The manuscript establishes degree exactly k1k-1, with a period dividing

lcm(1,,k).\operatorname{lcm}(1,\ldots,k).

It does not require knowing the smallest possible period or the earliest point where those polynomial formulas begin.

What the Tests Can Tell You

The supplementary Python script checks small instances using literal cell tilings and a separate row-allocation method. It also checks slab extensions and finite inclusion–exclusion identities.

These checks are useful for catching the wrong counting convention, missed rotations, or a broken implementation.

They cannot establish the theorem for every kk and every sufficiently large nn. The universal argument has to do that work. The published package explicitly separates the finite checks from the proof. (zenodo.org)

That distinction is worth keeping visible. A test can expose a mistake in a proof's implementation or examples. A passing test cannot fill a missing logical step.

The Paper Is Public

What I like about this argument is how little of the geometry it ultimately needs.

It does not classify all tilings. It does not find an explicit formula for every numerator. It uses one operation that preserves feasibility, then follows the consequences of that operation carefully.

The result is now available for others to read, check, and challenge. Publication on a repository is not the same as independent validation, and I am inviting specialist feedback rather than treating the upload as the end of the process.

Preprint: Rationality and Quasipolynomiality of Restricted Rectangle Partitions. DOI: 10.5281/zenodo.22349886. The record includes the PDF, LaTeX source, Python verifier, and instructions. (zenodo.org)

If you work on partitions, generating functions, or enumerative combinatorics, I would appreciate a careful reading. Specific objections are especially welcome.