Language reference
Sixty-one reserved words.
Sixty-one reserved words.
The only other words allowed are the names you make up yourself and the values you write — like numbers and text.
No other words are part of the base language except user-provided names and literal values.
| Category | Words |
|---|---|
| Verbs | remember, show, filter, keep, count, gather, sum, each, choose, finish, add, remove, weakens, require, forbid, permit, assign, expect, sort, compare, transform |
| Connectives | where, and, or, from, with, called, to, how, as, of, if, otherwise, when, unless, includes, within, over, then, by, because, starting, until |
| Operators | is, above, below, not, plus, minus, reverse, inherited, highest, lowest, plus equal/multiplied/divided for the equal to, multiplied by, and divided by phrases |
| Declarations | about, define |
| Articles | the, a, an |
| Syntax marker | : |
The newest three words describe the program itself rather than running: about names the topic, because records why a line exists, and inherited marks a line as carried over from a prior context. They show up when the program is read back, but never change what it does.
The Meta-Structural Era added three inert self-describing words — about (program topic declaration), because (statement-terminal quoted rationale), and inherited (statement-initial provenance modifier, with optional from <agent> attribution). All three are visible to rendering and inspect but never executed.
Four more words round out rules. forbid blocks something the way require demands it; permit simply records that something is allowed. starting and until give a rule a start date and an end date. The dates are just written down — the language stores them, a separate tool decides whether a rule is currently in force.
The Deontic Era added forbid (halts with PROHIBITION_VIOLATED on a true condition — the mirror of require) and permit (emits an informational line on a true condition, never halts), completing the require/forbid/permit triangle. The Temporal-Boundary Era added starting/until, statement-initial connectives attaching quoted ISO 8601 effective dates and sunset clauses as inert metadata; temporal evaluation is a product-layer concern, not interpreter runtime.
sum replaced an older word, combine, for adding up a list of numbers — same job, clearer name. The old word still exists, but only to tell you to use the new one. Two more words, highest and lowest, pick the biggest or smallest value out of a list.
combine was renamed sum; the old name is tombstoned — reserved but inactive, rejected with a rename-specific error rather than a generic one, and excluded from the word count. highest/lowest are value-position list-extrema selectors (flat-list and record-field grammar modes), numeric- and date-only, erroring on an empty list.
require, forbid, permit, and expect can each take an exception: "forbid X unless Y" means the rule holds except when Y is true. No new word — unless just learned a new place to stand.
The condition-bearing deontic family (require/forbid/permit/expect) each additionally accept an unless <exception> clause after the main condition, evaluated as main AND NOT exception (polarity-appropriate per verb). Zero new words — a new grammatical position for the existing unless connective.
The newest word is define. It names a rule so you can reuse it: define overdue: due-date is below cutoff lets you write is overdue anywhere a comparison would go.
The Definitional Era added define, the second declaration alongside about. Unlike about, it is not first-line-only — it's a normal statement dispatched through the standard parse pipeline anywhere in the program, registering a named predicate in the symbol table. Predicates compose (a body may reference another predicate; forward-declaration rules out recursion), are redefinable, and are evaluated live — re-resolving referenced names against the current symbol table every time they run, not just at definition time.
If you load a domain pack (an optional add-on), it can add more words — but only while it is loaded.
Domain packs may contribute additional words only while the pack is loaded.