research/caustics-to-groups/; the figure is drawn
from its output, not hand-placed. Part 3 runs the inverse.
One engine, four groups. A sub-Riemannian group is a rule for moving: at each point only certain directions are allowed, and length is measured under that restriction. The allowed directions plus the group’s bracket structure1 fully determine its geodesics — the shortest paths — through one set of equations (the Lie–Poisson normal flow2). We implemented that engine once and fed it four groups:
- Heisenberg — the simplest: move forward/back and left/right in a plane, but every move also winds a third “height” coordinate by the area you sweep. It is the flat model, the reference every other group is measured against.
- SE(2) — the visual cortex group, and the Dubins car: drive forward and steer, never slide sideways.
- Engel — a car towing one trailer: the trailer angle is a fourth coordinate you can only change indirectly.
- Cartan — the exotic $(2,3,5)$ case Élie Cartan singled out in 1910: think a car with two trailers, the richest of the small models.
The Heisenberg caustic, exactly
Start with the flat model, because there we can compute everything by hand and check the code against it. A Heisenberg geodesic launched from the origin projects to a circle in the plane; as it goes around, the height coordinate climbs. Two facts, both proven and both regression-locked by a golden-file test in the repo:
- every geodesic with vertical momentum $w$ refocuses at time $t_c = 2\pi/|w|$ — exactly when its circle closes;
- at that instant every geodesic in the family lands on the same point of the central axis, at height $|z| = \pi/w^2$.
So the Heisenberg caustic — the set where geodesics refocus — is just the vertical axis. It is maximally degenerate: a whole circle of geodesics collapses onto one point. That degeneracy is the signature of flatness, and it is the yardstick for everything else. (The curved groups do not collapse so cleanly — their refocusing time drifts away from $2\pi/|w|$, and that drift is the subject of Part 3.)
The obstruction, in the flesh
Part 1 stated it as a theorem; here it is as a fact about these four groups. Zoom far enough into the caustic of any of them and you see the same short list of shapes — a fold, a cusp3 — the universal ADE germs. Hand someone a single cusp and ask which group it came from and they cannot answer: the four are locally identical. A detector that keys on “there is a cusp here” is reading noise. The information that separates the groups is not in any one local shape; it is in how the whole geometry is organised. The first and coarsest piece of that organisation is the growth vector.
The growth vector: how fast the hidden dimensions fill in
Here is the idea that turns the obstruction into a measurement. In all four groups you may only drive along two directions. Everything else — height in Heisenberg, the trailer angles in Engel and Cartan — you reach indirectly, by combining allowed moves (drive a little loop and you gain height without ever “moving up”). The question that separates the groups is: how hard is each hidden dimension to reach?
Measure it by geodesic spreading. Shoot the allowed moves out to a length $r$ and watch how far each coordinate ranges. A directly-drivable coordinate spreads in proportion to $r$. A coordinate you reach through one combination of moves spreads like $r^2$ — much slower. One that needs two nested combinations spreads like $r^3$, slower still. The exponents — how many coordinates fill in at rate $r$, at $r^2$, at $r^3$ — are the growth vector4. The figure shows the real measured curves.
research/caustics-to-groups/artifacts/e0_results.json.
What the growth vector does and doesn’t settle
The measurement is clean. From noisy geodesic samples the exponents come back at $0.97, 1.95, 2.8$ — round them and you read off the growth vector directly: Heisenberg $(2,3)$, SE(2) $(2,3)$, Engel $(2,3,4)$, Cartan $(2,3,5)$. That already splits the four into three classes, and it does so from data, respecting the obstruction — we never named a local cusp.
Two honest limits, both measured rather than asserted:
- Heisenberg and SE(2) are identical here. Both are $(2,3)$; the growth vector cannot tell them apart, because it only sees the tangent cone5 — the infinitely-zoomed-in model — and both zoom down to the same flat Heisenberg. Splitting them needs the shape of the caustic at finite scale, which is Part 3.
- The steeper the coordinate, the more fragile. A slope-3 coordinate reaches only $\sim r^3$ — a hair above zero at small $r$ (look how the green line hugs the floor). So it is the first thing noise erases: recovering Cartan’s $(2,3,5)$ needs more samples and tolerates less noise than recovering Heisenberg’s $(2,3)$. In the experiments, clean data gives every growth vector exactly; at one-percent position noise the contact groups still come back perfectly while Cartan’s success rate falls — the price of reading a faint, high-order dimension.
That second point is not a defect to hide; it is the sample-complexity-versus-noise tradeoff the program set out to map, and it falls straight out of the geometry: higher-step structure is intrinsically harder to see.
What’s next
We now have four groups, their caustics, and a measurable coarse fingerprint that sorts them into three classes. What remains is the hard and interesting half: telling Heisenberg from SE(2) — the two the growth vector declares identical — by how far each one’s caustic deviates from the flat model. That deviation is the nilpotent-deviation statistic, and turning it into a working classifier with an honest confusion matrix is Part 3.
Glossary
- Sub-Riemannian group — a group with a set of allowed directions of motion and a length measured only along them.
- Geodesic — a shortest path under that restricted notion of length.
- Caustic / conjugate locus — the set of points where a family of geodesics refocuses; the singular set of the “shoot geodesics in all directions” map.
- Bracket — the net new direction obtained by combining two allowed moves; what makes otherwise-unreachable coordinates reachable.
- Growth vector $(n_1,n_2,\dots)$ — how many coordinates fill in at rate $r, r^2, r^3, \dots$; the coarse fingerprint measured in this post.
- Tangent cone — the infinitely-zoomed-in model of the geometry at a point; sets the growth vector and can be shared by different groups.
- ADE germs — the universal local caustic shapes (fold, cusp, …); the same for every group, hence group-blind.
References
- A. Agrachev, D. Barilari & U. Boscain (2019). A Comprehensive Introduction to Sub-Riemannian Geometry. Cambridge University Press.
- É. Cartan (1910). "Les systèmes de Pfaff à cinq variables et les équations aux dérivées partielles du second ordre." Ann. Sci. ÉNS 27, 109–192.
- Yu. L. Sachkov (2010). "Conjugate and cut time in the sub-Riemannian problem on the group of motions of a plane." ESAIM: COCV 16, 1018–1039. arXiv:0903.0727.
- A. A. Ardentov & Yu. L. Sachkov (2017). "Maxwell strata and cut locus in the sub-Riemannian problem on the Engel group." Regul. Chaotic Dyn. 22, 909–936. arXiv:1710.00216.
- A. A. Ardentov & E. Hakavuori (2022). "Cut time in the sub-Riemannian problem on the Cartan group." ESAIM: COCV 28, 12. arXiv:2107.06730.
-
The “bracket” of two allowed directions is the net displacement you get by moving along one, then the other, then back — a new direction reachable only in combination. It is what lets a car parallel-park into a spot it can’t slide into directly. ↩
-
The equations of motion for the geodesics of a left-invariant structure, written in the group’s own moving frame; one compact system that specialises to each group by plugging in its bracket structure. ↩
-
A cusp is the pointed singularity you see on the bright edge of light focused in a coffee cup — the generic caustic shape, and the same one every one of these groups shows locally. ↩
-
Written $(n_1, n_2, \dots)$: $n_1$ directions fill in at rate $r$, then $n_2$ total by rate $r^2$, and so on. Heisenberg and SE(2) are $(2,3)$; Engel is $(2,3,4)$; Cartan is $(2,3,5)$. ↩
-
The shape a sub-Riemannian geometry approaches when you zoom infinitely far in at a point — always a “Carnot group”, the model whose growth vector we are measuring. Two different groups can share one tangent cone, which is exactly why the growth vector cannot always tell them apart. ↩