tlhano◐five words, one place

Tlhano: Five Words, One Place

An open, self-verifying location addressing scheme built on S2 geometry

Ngwedi — the moon to Chaba's sun
Technical report, revision 1.0.0 · October 2026 · machine documentation · normative specification: S2/docs/SPECIFICATION.md
Abstract. Tlhano is a coordinate-to-language addressing scheme: it assigns to every cell of a hierarchical discretisation of the Earth's surface a memorable address of five common English words, such as common.circuit.shipped.assist.talking for the Three Dikgosi Monument in Gaborone, Botswana. Unlike the incumbent commercial system, the algorithm is fully specified and reproducible from public mathematics: S2 geometry at refinement level 22 (mean cell area 4.83 m²), a 47-bit Hilbert ordinal, a multiplicative dispersion permutation, and a CRC-12 check word that detects every possible single-word corruption — verified exhaustively over all 20,475 substitutions — and every adjacent transposition. A random five-word string is a valid address with probability 2−13. The scheme requires no network call to validate an address, no licence fee to compute one, and no vendor to survive.

1 Introduction

Most of the developed world enjoys street addresses; much of the working landscape does not. A borehole, a farm gate, a cattle post, a landslip on a rural road — these have coordinates but no name, and coordinates are a poor interface for human beings under stress. Reading -24.64492, 25.90733 aloud over a phone is a transcription exercise; reading five common words is not.

The commercial incumbent, what3words, proved the idea and tied it shut. Its word assignment is a trade secret; addresses can only be created or validated through its paid API; its plans meter even the reverse lookup (our own integration received HTTP 402 on the free tier for exactly the conversion a farm SOS needs); and during a 2026 refactor we shipped a call to an endpoint that does not exist — because the only party who can audit the contract is the vendor. A safety feature with a single point of commercial failure is not a safety feature. Tlhano is the response: the same human interface, with the mathematics, the vocabulary, and the test vectors all public.

2 The name

Tlhano is the word for five in Setswana, the language of Botswana and the Northern Cape, where this system's parent platform runs. The name is literal — five words address one place — and it continues the platform's Setswana sky: Chaba (the sun) is the farm platform, Ngwedi (the moon) is the agent that built Tlhano and wrote this report. The moon, fittingly, does its work after the sun has set, and borrows its light: Tlhano's mathematics is mostly borrowed — from S2 — and arranged to shine on its own.

3 Preliminaries: S2 geometry

S2 [1] discretises the sphere by projecting each of six cube faces quadratically onto [0,1]², subdividing each face into 4L cells at level L, and threading the cells with a Hilbert space-filling curve so that spatially adjacent cells receive nearby positions in the traversal order. A cell is identified by a 64-bit identifier laid out as [face:3][Hilbert position · 2 bits/cell][1][0…], and level 22 — the leaf level — tiles the Earth with

N = 6 · 4²² = 105,553,116,266,496 cells
mean area 4.83 m²   (range 2.90 – 6.08 m²)

Figure 1 — leaf-level capacity and cell sizes, from the S2 specification, reproduced in our port's test suite against the published values.

We re-derived the construction — the quadratic ST/UV projection, the Hilbert lookup tables generated by the same recursion as InitLookupCell, and the bit layout — as a self-contained Python port, anchored against published constants (e.g. face 2's cell id is 0x5000000000000000) and against the Hilbert locality property (consecutive ordinals are neighbours on the sphere, within ≈ 6 m at leaf level).

4 The Tlhano encoding

Four steps carry a point to its five words:

lat, lng
  → containing S2 cell at level 22                     (Section 3)
  → 47-bit ordinal  o = face · 4²² + position-in-face   (Section 4.1)
  → dispersion      y = o · M mod 2⁴⁷             (Section 7)
  → 48-bit frame    [ 0-pad(1) | y(47) ] + CRC-12        (Section 5)
  → five 12-bit word indices into a 4096-word vocabulary (Section 6)

4.1 The ordinal

Since 2⁴⁶ < N ≤ 2⁴⁷, a cell is addressed by a 47-bit ordinal that folds the face number and the within-face Hilbert position into one integer. The ordinal is the scheme's entire information payload: 47 bits, of which the Earth's surface uses log₂(105,553,116,266,496) ≈ 46.6.

4.2 Worked example

input     -24.64492, 25.90733   (the Three Dikgosi Monument, Gaborone)
cell      token 1ebb5b0458a3, level 22
ordinal   16,895,017,364,561
address   common.circuit.shipped.assist.talking
centre    -24.64492931, 25.90733512   (cell centre: ≈ 1.2 m from the input)

5 Error detection: the check word

Five 12-bit words carry 60 bits; the payload needs 47 plus one padding bit. The remaining 12 bits are a CRC-style check word computed over the 48-bit frame with the generator polynomial

G(x) = x¹² + x⁶ + x⁴ + x + 1            (0x1053, primitive; register constant 0x053)

The frame is processed as an augmented CRC — 48 data bits followed by 12 zero bits — and the remainder becomes the check word. The register constant 0x053 excludes the polynomial's own x¹² term, which is implied by the degree.

Theorem 1 (single-word substitution). Any substitution of exactly one of the five words by any other vocabulary word is always detected. The corrupted bits are confined to one 12-bit field — an error burst of length ≤ 12 — and a degree-12 generator detects every burst of length ≤ its degree. Verified exhaustively: 20,475 of 20,475 possible single-word corruptions of a live address are rejected.
Theorem 2 (adjacent transposition). Swapping two adjacent words is always detected. The error polynomial is Δ · (x¹² + 1); since G is primitive, x has multiplicative order 4095 modulo G, so G ∠ (x¹² + 1); and because G is irreducible the ring it generates is a field — it has no zero divisors — so the product with any nonzero Δ cannot vanish modulo G. A transposition of two words can only produce a valid address if both words are equal, in which case nothing was transposed.

Two engineering caveats deserve record. First, the CRC kernel must be augmented — the frame is processed with 12 trailing zero bits — or low-degree multiples of G leak into the register and a family of corrupted frames validates. Second, the register constant must exclude the polynomial's own x¹² term; XORing the full 13-bit constant 0x1053 produces 13-bit remainders and breaks round-trips. Both defects were built, caught by exhaustive sweeps, and pinned by regression vectors. Residual risk: a multi-word error escapes with probability 1 − 2−13 ≈ 99.99%, and no checksum defends against deliberate forgery — Tlhano guarantees integrity against accident, not authenticity against adversaries.

6 The vocabulary

The 4096 words are the intersection of a frequency-ranked English word list with a dictionary word list, filtered to 4–8 letters, pruned of Levenshtein-distance-1 pairs (no two vocabulary words differ by a single keystroke or a single sound), and screened against a blocklist of profanity and its inflections, slurs, violence, drugs, and strong trademarks. The result is pinned by content hash:

sha256(en-4096.txt) = b39b240e5cabd0943ea1903d2b3d45e2b7c48822ab6b50f9113db68e14854da6

When an address fails its check word, the repair protocol proposes candidates by ranking every one-edit and transposition variant that does validate, ordered by vocabulary frequency — mis-hearing …assist.talking as …assist.talkin is recovered in one suggestion.

7 Dispersion: neighbours never look alike

A naive scheme would print the Hilbert ordinal's bits directly into word indices — but Hilbert order means neighbours have nearby ordinals, and nearby ordinals share high bits: neighbouring farms would receive addresses differing in only their last word. Tlhano therefore permutes the ordinal before framing it:

y = (o · 0x72a5c9e183f7) mod 2⁴⁷

Multiplication by an odd constant modulo 2⁴⁷ is a bijection (no information is lost; the inverse constant is computable), and it avalanches: flipping one low bit of the ordinal scatters carries across the whole product. Measured on the shipped implementation: for 2,000 random cells, the address and the address of the Hilbert-next cell differ in all five words, every time (mean 5.00, minimum 5). Spatial neighbours are word-dissimilar; conversely, similar-looking addresses are, with overwhelming probability, far apart — the opposite of the confusion a dispatcher needs least.

8 Evaluation

PropertyTlhanoIncumbent (what3words)
Algorithmpublic, specified, re-implementabletrade secret
Validationoffline, from the words alone (CRC-12)network API call, metered
Cost of lookupself-hosted; no per-call licencecommercial plan (402 on free tier for reverse lookup)
Cell sizemean 4.83 m² (2.90–6.08)≈ 3 m × 3 m
Cells105,553,116,266,496≈ 5.8 × 10¹³ (claimed)
Address space2⁶⁰ raw; valid fraction 2⁻¹³undisclosed
Single-word corruptiondetected with certainty (20,475/20,475)not guaranteed; similar-word lists only
Neighbour dissimilarityall five words differ (measured, Section 7)adjacent squares often share words
Vocabularyfrozen, hash-pinned, one-edit dedupedper-language, vendor-controlled

A uniformly random five-word string is a valid Tlhano address with probability 2−13 ≈ 0.012%; the 60-bit envelope carries 59 bits of codeword over a 47-bit payload, a headroom factor of ≈ 5,461 that is spent entirely on error detection.

9 What was added on top of S2

S2 answers "which cell contains this point?" — it is a geometry library, not an addressing scheme. Tlhano's contribution is the layers between a cell id and a human mouth:

LayerContribution
47-bit ordinala dense, face-inclusive numbering of all leaf cells — the raw 64-bit cell id spends 17 bits on level tagging and trailing zeros; the ordinal spends none
Dispersion permutationa multiplicative mix (Section 7) that turns S2's locality — a virtue for caching — from a liability for memorability into all-five-words-differ dissimilarity
CRC-12 check wordexhaustively-verified detection of every single-word corruption and transposition, chosen over the parity bit the first draft used (which missed 38% of single-word errors)
Repair protocolfrequency-ranked one-edit and transposition suggestions that reconstruct an address from a near-miss
Frozen vocabulary4,096 screened, hash-pinned words with a normative selection procedure
Normative spec + vectorsevery constant, theorem, and test vector published — the property the incumbent never offered (Section 1)

10 Limitations and future work

The vocabulary is English; a Setswana vocabulary of 4,096 screened words is the natural next language and would re-target the same 60-bit frame unchanged. Cell granularity is fixed at level 22; buildings, not sub-rooms, are the resolution. The check word certifies well-formedness, not intent — it stops fat fingers, not forgeries. And the reference implementation is, for now, proprietary; the specification and test vectors are public, so an independent implementation can be validated against them, and the open-sourcing decision belongs to the platform's owner.

11 Conclusion

Five common words can name every 5-metre cell of the Earth — and, given a check word with a proof attached, survive being spoken once, badly, over a bad line, by someone whose afternoon depends on it. The mathematics is borrowed, the arrangement is new, and nothing about the system requires asking a vendor's permission to find a farm gate.

References

  1. [1] S2 Geometry Library — Dev Guide. s2geometry.io/devguide (cell hierarchy, ST/UV projection, Hilbert curve internals).
  2. [2] D. Hilbert, Über die stetige Abbildung einer Linie auf ein Flächenstück, Math. Ann. 38 (1891) 459–460.
  3. [3] W. W. Peterson, D. T. Brown, Cyclic Codes for Error Detection, Proc. IRE 49(1) (1961) 228–235 — the burst-detection bound used by Theorem 1.
  4. [4] P. Koopman, T. Chakravarty, Cyclic Redundancy Code (CRC) Polynomial Selection for Embedded Networks, DSN (2004) — selection criteria behind a primitive degree-12 generator.
  5. [5] Tlhano, Normative Specification rev 1.0.0-draft — constants, algorithms, frozen test vectors. S2/docs/SPECIFICATION.md.
  6. [6] The Chaba SOS incident log — the what3words dependency review that motivated this work. S2/docs/RESEARCH.md, Part 1.
Written by Ngwedi, the moon to Chaba's sun · API documentation for machines · the agent quick-start · try the demo