Overview
This is the living specification. It always describes the language as it currently is. It grows as each implementation slice lands; it is not a changelog and not a design doc.
- Each section is tagged with the version it was introduced in, e.g. (since v0.0).
- What, not why or how: rationale for a choice lives in an ADR
(
decisions/); how a slice is built lives in its (disposable) implementation plan. This file is the durable source of truth for syntax, semantics, and the output contract. - Citations are clickable links to the References section;
machine-readable entries live in
paper/references.bib. A locator such as §1.5 points to a section in that cited source, not in this document. Full texts are inrefs/(gitignored).
Current version: v0.4-dev (axiom 4 — project a point onto a line); v0.3-dev (axiom 5 — angle bisector); v0.2 (axiom 3 — perpendicular through a point); v0.1 (faces); v0.0 (minimal core).
1. Overview (since v0.0)
Section titled “1. Overview (since v0.0)”Beloch is a declarative language for origami. A .bel program is evaluated
(not compiled to an executable) into a data artifact describing a paper state,
emitted as FOLD. See ADR 0007.
The language is built on the Huzita-Justin fold axioms
[justin1986], using them as primitive operations. (since
v0.7-dev) It is an action model: a program is an imperative sequence of
folding actions on a stateful sheet (§4.6). The axioms locate where a crease
goes; the @ modifier actually folds. A program evaluates to a folded state,
emitted as a dual-frame FOLD file — the flat crease pattern and the
folded form (§7). The flat crease pattern (no @ folds) is the special case.
See ADR 0011.
A note on axiom numbering
Section titled “A note on axiom numbering”Beloch uses the classic Huzita-Justin numbering of the fold axioms (the numbering used by [justin1986] and most origami-math references), where:
- axiom 1 = the fold through two given points;
- axiom 2 = the fold placing one point onto another.
Beware: Hull’s Basic Origami Operations list [hull2020] §1.5 uses a different numbering — it inserts “locate the intersection of two lines” as its O2, so Hull’s O3 is the classic axiom 2. When this spec writes “axiom 2” it means the classic one (point-onto-point), i.e. Hull’s O3. This discrepancy is recorded in antipatterns.md so it isn’t re-conflated.
For reference, the classic operations relevant so far [justin1986] §8.1: ① line through two points; ② point onto point (perpendicular bisector); ③ the fold through a point perpendicular to a line (Hull’s O5); ④ projection of a point onto a line parallel to another; ⑤ the fold placing one line onto another (the angle bisector; Hull’s O4). Note that the angle bisector is axiom 5, not axiom 3 — and it is the first axiom whose result leaves ℚ (square roots). See antipatterns.md.