Interactive companion · page 1

How the nets are built

Figures for Low-discrepancy quasi-uniform digital nets in every dimension. The page starts from the standard frame, which puts one point in every box but lets some points nearly touch, and then repairs it in two steps: keep the frame's deeper digits, and move the lattice inside each cell. Every point is computed in your browser from the generator matrices in the paper, with exact integer arithmetic.

x = 0.d1 d2 … dkdk+1dk+2 dk+3 …(base q)
Digits 1 to k: the cubeFor N = qsk points, the first k digits of every coordinate select one of N cubes of side q−k. A (0, sk, s)-net has exactly one point in each cube.
Digit k+1: the latticeBecause the net is digital, this digit is a linear function, modulo q, of the cell digits of all coordinates. The construction re-chooses it to depend only on the last cell digit of each coordinate (plus carries): r = M̃ℓ mod q. Between the planes where it wraps around modulo q, the points then lie on a lattice. At those planes the pattern slips, and no cube is skipped.
Digits k+2 onward: the jitterThese digits are kept from the frame. They fill every thin box, and they move a point by less than 1/q of the cube side: they cost at most one unit of 1/q per coordinate, the summand 1 in the first-order deficit (lem:Ss, rem:K).
1

The standard frame

Everything starts from a frame: a digital net whose coordinates read one polynomial at different places. In two dimensions it is the Hammersley net. Write the index i in base q; the coordinate x reads its digits from the most significant one down, and y reads them in reverse order, which is the van der Corput sequence. So the point with index i is (i, rev(i))/N.

An elementary box of shape (dx, dy) with dx + dy = m fixes the first dx digits of x and the first dy digits of y. For the Hammersley net these are the top dx and the bottom dy digits of i, which together are all of them: each box holds exactly one point, for every shape, including the long thin ones. The cells of the later sections are just the shape (k, k). In matrix terms, the box matrix stacks the first dx rows of Cx and the first dy rows of Cy; every box holds one point exactly when its determinant is a unit modulo q. For a frame every such determinant is ±1, in every base.

In the paper: sec:frameslem:niebox criterionlem:Tsbox minors of a framelem:hermite
5
Cell digits kq^k ≤ 64

Box matrix of this shape

2

The problem: the closest pair

The frame fills every box, but some of its points nearly touch. Its geometric digit, the digit after the cell digits, is r = M̃ℓ mod q with the layer M̃ = [0 1; 1 0]: the digit of x is the last cell digit of y and vice versa. Away from carries this is harmless: the local lattice (I + M̃/q)ℤ2 has its shortest vector close to one cell (see the table). The trouble sits at the carries.

Step diagonally across a carry: from a cell whose last digits are both q − 1 to the next cell in both directions, where both last digits roll over to 0. Both geometric digits wrap from q − 1 to 0, and each wrap pulls the second point back by almost a whole cell, nearly cancelling the step: the two points end up about 1/q of a cell apart in each coordinate. A coordinate of the frame does not see its own step (the diagonal of M̃ is 0), so nothing stops the wraps from cancelling it; in the paper's words this step has two moving axes and no backward coordinate (rem:K). With one cell digit the only such carry is the corner of the torus. With more cell digits it happens at every corner of a block of q × q cells, and the separation falls with every added digit (in base 2 the closest difference on the torus is one unit in each coordinate at every size shown). These values are computed; the paper proves no separation value for the unscrambled frame.

In the paper: def:geomlem:Rsfirst offset rows of the framerem:Kbackward coordinates

For the base and cell digits chosen in section 1:

3

What can change without breaking t = 0

A lower-triangular scramble of a coordinate adds to each of its digits a combination of that coordinate's earlier digits, and may multiply the digit by a unit. Two points that share the first d digits of x still share them afterwards, so every box goes to a box of the same shape, and one point per box survives for free. In matrices: the first d rows of LC are the leading block of L times the first d rows of C, so every box minor is multiplied by a unit. This is why linear scrambling (Matoušek) and Tezuka's generalized Faure sequences keep t; Owen's nested scrambles are a larger, nonlinear family that also keeps it.

The construction uses this freedom on one digit only. It rewrites the geometric digit of each coordinate by subtracting the coordinate's own last cell digit (and, for x, flipping its sign), so that the layer becomes the turned layer of section 4. The deeper digits, the jitter, are borrowed from the frame unchanged up to a sign; they are what keeps every thin box filled. The table compares the two nets matrix by matrix.

In the paper: lem:boxgauge moveseq:scrprop:Gscor:tsk

4

The fix: move the lattice in each cell

The repaired net keeps the frame's cells and its deeper digits (up to a sign) and changes only the geometric digit, to r = M̃ℓ mod q with the turned layer M̃ = −I + quarter turn = [−1 −1; 1 −1]; ℓ holds the last cell digit of each coordinate. Along its own axis each coordinate's digit now moves backward (the diagonal of M̃ is −1), so on a step to a neighbouring cell, carries included, a wrap can only lengthen the coordinates that move. In higher dimensions the frame's geometric digit also depends on how far a carry reaches (lem:Rs), and the construction chooses it through a design that behaves well at every carry depth (prop:Gs); in two dimensions the last cell digits suffice. Between the dashed slip lines the points sit on the lattice (I + M̃/q)ℤ2, a copy of the square grid turned by arctan(1/(q−1)) and shrunk slightly. Click a cell to read its digits; switch the layer to compare with the plain frame.

Now turn the deeper digits off and show the boxes of a long thin shape. The points drop to their lattice images, and those boxes are no longer filled one by one: some are empty, some hold several points. The borrowed jitter is exactly what fills them. This layer is the xy-block of the three-dimensional layer in section 6.

In the paper: sec:prelimThe lattice picturedef:geomlem:boxgauge movesfig:arc
5
Cell digits k
5

From index to point

This is the implementation view of the repaired net. A digital net is computed one digit at a time. Write the index i of a point in base q, multiply its digit vector by one integer matrix per coordinate, reduce modulo q, and read the result as the base-q digits of the coordinate. The steps below do this for one point, then split the digits into cell, geometric digit and jitter, and show where the lattice comes from.

In the paper: sec:convindex conventionslem:niesec:prelimgraph formsdef:geomprop:celldef:col
Cell digits k
  1. Step 1Index digits
  2. Step 2Generator matrices
  3. Step 3The coordinates
  4. Step 4The same point in graph form
  5. Step 5Where the lattice comes from
  6. Step 6Reference implementation

    All points of the net from its generator matrices, in plain Python. It is the algorithm the page runs, and the cross-check executes this exact text. The matrices and the index below are those chosen above.

    
          
6

Cubes in three dimensions

In three dimensions the frame reads one polynomial at the places ∞, 0 and 1; it is the Hammersley net of the two-dimensional Faure sequence, and every box minor is ±1. Its closest pairs are again far too close. The net 𝒫2,q has N = q6 points in q2 × q2 × q2 cubes. One integer lower-triangular scramble of the frame of the places ∞, 0, 1 makes digit 3 of each coordinate equal to Mℓ + Jh mod q, with ℓ and h the last and second-last cell digits of all three coordinates. Its layer M turns ℤ3 slightly about (1,1,1) and shrinks it. A one-layer slab seen from above shows the lattice patches and the staircase slips, and the readout compares the exact minimum distance with the bound of the theorem.

The column net 𝒞q gives all three coordinates the same two digits after the cell digit. Each point then sits on the body diagonal of its cell, and the points form q2 lines parallel to (1,1,1). Seen down the diagonal, these columns stand over a triangular lattice.

In the paper: def:netprop:cellrem:lattice3thm:maindef:colthm:colfig:arcsmallfig:col
Drag to turn, scroll or pinch to zoom
Net
5
0
1
View
7

Columns and the holonomy defect

In a column net, a step to the neighbouring column changes the common height of the points. The ideal arrangement, the cube ℤ3 turned half a turn about (1,1,1), climbs q2/3 per step. After q steps in one direction you are back at the same column, so the heights must agree modulo q2, but q · q2/3 is not a multiple of q2 when 3 does not divide q.

The leftover, a third or two thirds of a period, has to be spread over the q steps of the cycle. The chart shows the realized heights against the ideal along the three cycles through one column. The largest excess η of a single step sets the separation, δN1/3 = 1 − η/q2 + …, and among all column nets 𝒞q spreads the leftover as evenly as possible.

In the paper: sec:driftlem:driftthm:Ocolumn optimumfig:drift
11

The third digit of a column net wraps r times per cycle; on the other steps it adds r to the excess. That ripple is the jitter. The drift is the leftover spread evenly.

8

Nets that are not frame scrambles

The column nets 𝒞q of section 6 and the nets 𝒯p and 𝒲p of page 3 do not come from a frame. They are graph forms whose second and third digits are chosen directly, and their net property is proved the plain way: every box minor is checked to be a unit (thm:col(1), prop:twocoset(1), prop:wnet(1); prop:half5(1) does the same in dimension five with 126 minors). For 𝒯p one minor vanishes exactly at p = 23, which is why that prime is excluded.

The table lists every box shape of the chosen net with its determinant modulo the base, and the number of points per box counted directly. Set the third digit to 0 to see which shapes need it: the third digit plays the part that the borrowed jitter plays for the frame nets.

In the paper: def:colthm:colprop:twocosetprop:wnetlem:box
Third digit