Open a Full Syllable Inventory (FSI) for a Bantu language and the first thing you see looks like a multiplication table: a column of beginnings down the side, the vowels across the top, every cell filled in. The instinct is to distrust it — this looks generated. Padded. Mechanical.
Good instinct. Wrong target. The grid is not a shortcut around the data — it is the shape the language actually has. Here is the rule underneath it, and why that rule lets the inventory do something a word list never could: tell you which words are borrowed.
Every Bantu syllable fits one equation.
A Bantu syllable is built from up to five sounds in a strict order. Linguists write it like this:
Read it as: a syllable is N, then C, then H, then G, then V — in that order, and only the vowel is mandatory. The subscript 0 means “can be empty” (minimum occurrence 0); V, with no subscript, is mandatory. So the smallest syllable is a bare vowel (a); a plain one is ka; add a nasal and you get mba; add a glide, mwa. Two rules never bend: the order is fixed (mb exists, bm never does), and no syllable ends in a consonant.
The H slot — the puff — is the piece that makes the equation hold across the whole family. It is the breath of air that makes Zulu kha a different sound from plain ka, and it is what lets Chichewa nkhuku (“chicken”) sit in the same five boxes as everything else — N+C+H+V, no exceptions. Languages that don’t use the puff just leave that box empty. One equation, the entire Bantu family, no special cases.
This is not a hopeful generalisation. We have now run this one equation against 700+ Bantu languages, from Cameroon to South Africa — and it still holds, with no structural change. That is the claim under the grid: not “here is a table we filled in,” but here is a law the whole family obeys.
The equation, in six languages.
You don’t have to take the equation on faith. Below is σ → N0C0H0G0V realised in six Bantu languages. Pick one, press play on any row, and hear a native speaker run the syllables while each one lights up. Same equation; different fillers in each slot.
Source: 700+ Bantu inventories curated to BTS-S100, with timestamped speaker recordings from amina.ai.
Loading speaker recording…
Every row is the same five-slot equation with different boxes filled — a bare vowel, a plain CV, a nasal+CV, a glide before the vowel. Switch languages and the fillers change; the equation does not.
Validate the parts, and every cell is real.
Here is why the inventory is a grid and not a list. A syllable is its slots. Once you have established a language’s legal fillers — which consonants it uses, whether it uses the puff, which glides, its vowels — every combination the equation allows is a real syllable of that language. You validate the parts, and the whole grid follows.
You do not go hunting for a word that happens to use nu before you’ll admit nu is a syllable. That would be a category error. These are spoken, living languages and their syllables are productive: if n is a legal consonant, then the whole row — na ne ni no nu — is legal, whether or not a dictionary happens to record a word for each one.
So the “multiplication table” reaction is exactly right — it just isn’t the criticism it feels like. The inventory is a grid because the syllable is a small, fixed multiplication: legal beginnings × legal vowels, always closing on the vowel. Enumerate the legal fillers, and you have enumerated the language. That set is the FSI.
A native core, and a borrowed layer on top.
An inventory has two layers, and naming them clears up most of the confusion:
The equation run with the language’s own native sounds — the generative core. Every native word is built from the NSI.
The extra sounds speakers reach for when they pronounce borrowed words — Arabic th, dh in Swahili; the clustered onsets of English loans. The layer that sits on top of the native one.
FSI = NSI + ASI. And here is the point people miss: borrowed does not mean invalid. A Swahili speaker absolutely pronounces a loanword — they render it the Swahili way — and the inventory’s job is to capture that rendering, accurately. The borrowed layer is every bit as real as the native one; it simply has a different origin. Sorting syllables into “native” and “borrowed” is for clarity, not a verdict on whether they count.
Ideally every language carries both layers, mapped separately. The native core tells you how the language builds itself. The augment layer tells you how it absorbs the world.
The inventory can tell you which words are borrowed.
Because the native core is closed and enumerable, foreignness falls out of it for free. Take any word, break it into syllables, and check them against the NSI:
- →every syllable is in the native core — the word is native-shape;
- →any syllable needs the augment layer — the word carries borrowed structure, detectably.
No loanword dictionary required — just the native inventory and a decomposer. That is the whole difference between a dataset and infrastructure: a dataset is something you look things up in; infrastructure computes new answers. The same closed inventory that writes the language also classifies what is foreign to it.
This detects non-native shape, not history. A loan that has been fully absorbed — Swahili kitabu, from Arabic kitāb, reshaped to obey the “end on a vowel” rule — reads as native, because by now it is native in shape. So this is a high-precision detector of borrowed structure, not a verdict on a word’s etymology. Said plainly, it is still something no flat-text system can do at all.
A system, not a spreadsheet.
The reason an FSI looks like a grid is that a Bantu syllable really is a small, fixed multiplication — five ordered slots, legal fillers, always ending on a vowel. Enumerate those fillers and you have the language’s true alphabet: the unit children learn to read in, the unit tone attaches to, the unit a frontier model needs and does not have. That enumeration, per language — native core plus borrowed layer — is the Full Syllable Inventory.
It isn’t a list we collected. It is a structure we can compute over — one tested across 700+ Bantu languages and still holding, that generates every word in each of them and knows what is foreign to them.
That is what makes it the foundation, and not a dataset. See an inventory, or read the companion piece on why FSIs are infrastructure, not data.