Remove the middle third, then do it again, forever. What is left has no length and uncountably many points.
Remove the middle third
Start with the interval [0, 1]. Take out the open middle third, (1/3, 2/3),
leaving two closed intervals. Take the middle third out of each of those. Keep
going.
var third = (x1 - x0) / 3.0;
next.Add((x0, x0 + third));
next.Add((x1 - third, x1));
That is the entire piece: a list of intervals, built into a row of bar rectangles,
then replaced by a list twice as long with intervals a third as wide. Each row of
the drawing is one application of the rule, so the picture is its own diagram of
how it was made.
Level zero. One bar, the whole interval, nothing removed yet.
What survives
One removal, two bars. The gap between them is the piece of the line that has just
been deleted and will never come back.
Two removals, four bars. It is worth being precise about what is being drawn here:
the bars are not an approximation converging on the Cantor set from outside — they
are supersets of it. Every point of the set is in every row. The rows only ever
throw things away.
The two contradictions
The Cantor set is the intersection of all those rows, and it has two properties that
are hard to hold at the same time.
It has no length. At level n there are 2ⁿ intervals of width 3⁻ⁿ, so the
total is (2/3)ⁿ, which goes to zero. Sum the removed pieces instead and they add
to exactly 1: one interval of length 1/3, two of 1/9, four of 1/27, and so on.
Everything is removed, by measure.
It has as many points as the line did. Write each survivor in base 3. Removing
the middle third removes exactly the numbers that need a 1 in the first digit, and
the next removal removes those that need a 1 in the second. What is left is every
number expressible with only 0s and 2s. Map 0 → 0 and 2 → 1 and you have
every binary expansion — the whole of [0, 1] again. The set is uncountable.
Nothing was left over, and everything was left over.
The bars are now narrower than the gaps around them, and there are dozens of them.
The count is 2ⁿ and the width is 3⁻ⁿ, which is where the dimension comes from:
log 2 / log 3 ≈ 0.6309. Less than a line, more than a scatter of points.
Where the page runs out
The last row that fits. In the folio rendering that is level 6, with 64 bars each
1/729 of the width — about a pixel across on a 900-pixel canvas. One more level
and the bars would be sub-pixel; two more and the row would be a grey smear that
lied about what was there.
The construction is not finished at this row. It is not finished at any row. What
the drawing shows is the first seven or nine steps of something that has to be taken
to a limit before it becomes the object it is named after.
Six renderings
| Rendering | Levels | Canvas | Treatment |
|---|
| Folio | 7 | 900×600 | indigo ink on warm paper |
| Loom | 7 | 900×900 | the comb crossed with its own quarter-turn copy, two inks |
| Strata | 7 | 900×600 | every generation overlaid in one band, translucent |
| Cinder | 7 | 900×600 | the deleted thirds — the piece as its own negative |
| Ember | 7 | 900×600 | a crimson-to-amber ramp across the levels |
| Drift | 9 | 1200×700 | a cold blue ramp, thinner rows on a wider canvas |
Each rendering changes how the rule is drawn, not just which colours it wears.
Loom draws the comb twice — once as rows, once rotated a quarter turn about
the canvas centre, in a second ink. The horizontal rows and their vertical image
cross one another, so the piece reads as a woven lattice rather than a stack.
Strata compresses the stack into one band: every generation is drawn into the
same centred strip at a fixed translucency. Where a point survives another
deletion it gains another layer of ink, so the band is a density map of the
construction — a faint wash in the middle, where the rule deletes first, and
deep ink at the extreme edges, where it deletes last.
Cinder draws the negative: the open middle thirds being thrown away at each
step, instead of the intervals that survive them. The rows are the removal
history — one wide bar, then two, four, eight, tapering down the page — the
same construction told through what it discards.
Ember and Drift sweep curated gradients across the levels, so the
doubling is countable by colour rather than by squinting — a deliberate
crimson-to-amber ramp, and a cold blue one. Drift buys two more levels with a
wider canvas and thinner rows: at level 8 the bars are 1/6561 of the width,
which on 1200 pixels is under a fifth of a pixel, so the last row is drawn by
the rasteriser’s rounding as much as by the rule.
The bars and gaps are sized so each stack fills its canvas: the folio, loom,
strata, cinder and ember rows run 40 px against a 40 px margin above and below,
the drift rows 36 px against 44 px, and every stack spans the full width between
4% side margins. What surrounds the drawing is a deliberate frame of background,
not leftover canvas.
One presentation
The gallery holds a seventh plate, museum-frame: the folio rendering hung on
a gallery wall, with an ivory mat and a near-black frame around it. It is a
presentation of the piece rather than a seventh rendering — the framed artwork
is the same folio drawing, enlarged to fill the wall, and no other variant
gets a framed copy.
Determinism
There is nothing random here. Intervals are stored as double pairs and split by
exact division into thirds, in list order; the rows of bar rectangles built from
them are painted top to bottom, left to right. Thirds are not exactly representable in binary
floating point, so the interval endpoints carry a rounding error — but the same
error, in the same place, on every machine.