Concept

L-systems — where it appears

A rewriting grammar that generates a branching form from a small set of production rules. It describes plant architecture compactly and predicts nothing about which pattern appears, which is the distinction between a description and a mechanism.

Named by 10 essays across 2 fields — each of them below, with the objects they name alongside it.

A head of 200 primordia at a divergence of 137.51°. Nothing is placed by hand: the nth point sits at n·137.51° and radius √n. The closest any two points come is 1.60 of the mean spacing.

A head is a set of points

The nth primordium at n times an angle, and a radius of root n. Two lines of arithmetic produce a sunflower head, which is either remarkable or suspicious depending on how carefully the claim is stated — and stating it carefully is most of the work.

lattices · Lattice
The exponent fitted from the junctions, rather than assumed. Sweeping k and asking where r₀ᵏ = Σ rᵢᵏ holds best gives 3.000 — Murray's 3, recovered rather than imposed.

Fitting the exponent

Assuming the exponent is three and reporting the error says how far the data is from that assumption. Fitting the exponent and reporting what it comes out as says what the network is doing — and an estimator has to be shown returning something other than three, or it is not a fit.

branching · Exponent
An L-system after 4 rewrites of two rules. X → F[+X]F[-X]+X and F → FF, walked by a turtle turning 22.5°. 130 segments, and not one of them knows anything about light, water or auxin.

L-systems describe, they do not explain

Two rewriting rules and a turtle produce something indistinguishable from a plant, and there is no plant in it — no light, no water, no auxin, no mechanics. That is worth demonstrating precisely because the output is so convincing.

branching · Lsystem
The two trees this site draws, at 30° and 32° to a side, against the cost's 37.47° and 37.47°. Two trees of 63 segments each, 5 generations deep and 31 junctions apiece, with every junction's radii taken from r₀³ = r₁³ + r₂³ exactly and every junction's angle taken from a constant. Read as an exponent through cos(θ/2) = 2^(2/p − 1), the drawn angles say 2.5237 and 2.6239, in pictures whose widths are built at exactly 3. The cost that fixed those widths wants 37.47° and 37.47° at this daughter ratio, 74.93° in total, and the misses cost 0.573% and 0.292% of the network — which is why a fixed angle can sit in a figure about a minimisation and never look wrong.

The trees drawn at no angle

Two branching figures in these essays set every junction's radii from the cube law exactly and every junction's angle from a constant nobody derived. Read as exponents the drawn angles say 2.52 and 2.62, in pictures whose widths say exactly three — and at a lopsided fork the drawing puts a daughter thirty-four degrees from where the same cost puts it.

branching · Fork angle
The number of growing points after each season, for buds that wait no season, one, two, three or four. From one mature apex, each season every mature apex makes a new bud, and a bud branches only after it has waited its delay. With no delay the counts run 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 and settle into growing by 2.0000 a season; with one season the counts run 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 and settle into growing by 1.6180 a season; with two seasons the counts run 1, 2, 3, 4, 6, 9, 13, 19, 28, 41 and settle into growing by 1.4656 a season; with three seasons the counts run 1, 2, 3, 4, 5, 7, 10, 14, 19, 26 and settle into growing by 1.3803 a season; with four seasons the counts run 1, 2, 3, 4, 5, 6, 8, 11, 15, 20 and settle into growing by 1.3247 a season. On a logarithmic axis each settles into a straight line whose slope is its growth rate, the positive root of x^(d+1) = x^d + 1.

A count set by a delay

An L-system describes a plant and forbids nothing, because none of its parameters is anything a plant has. One branching grammar is the exception: a mature apex makes a new bud every season, and a bud waits d seasons before it branches. Its counts grow at the root of x^(d+1) = x^d + 1, a delay of one season gives Fibonacci's numbers and nothing else does, and the fourth count already separates a one-season wait from every longer one. So a Fibonacci count in a branching plant is a measurement of how long its buds wait. It is also a fragile one: if one bud in ten waits two seasons instead, eleven counts in a row come out Fibonacci's three times in a thousand.

branching · Lsystem
The rate a branching count grows at, against the chance a growing point dies. Every point dies with probability q each season and the survivors rewrite as before, so the expected counts obey x^(d+1) = (1 − q)·x^d + (1 − q)^(d+1). Substituting x = (1 − q)y returns the deathless equation exactly, which makes every line here straight: the rate is the deathless root multiplied by the survival. No delay runs from 2.0000 to one at q = 0.5000; one season runs from 1.6180 to one at q = 0.3820; two seasons runs from 1.4656 to one at q = 0.3177; three seasons runs from 1.3803 to one at q = 0.2755; four seasons runs from 1.3247 to one at q = 0.2451. Below the marked line a lineage shrinks.

A count that loses its growing points

The branching grammar behind the Fibonacci claim has no deaths in it, and a stem that loses shoots is the common case. Giving every growing point a chance q of dying each season leaves the counts a linear recurrence and does exactly one thing to it: the growth rate becomes the deathless root multiplied by 1 − q, at every delay and every death chance, to the last bit a double holds. So each waiting time has a death chance above which its lineage shrinks — a half with no wait, 0.3820 at one season, 0.2451 at four — and a longer wait tolerates less. What does not survive is the count itself: a plant losing one growing point in ten a season shows eight Fibonacci counts in a row one time in ten thousand, against one time in eight for a bud that occasionally waits an extra season.

branching · Lsystem
How many scars a lineage carries for every growing point still alive. Deaths arrive at q times the standing count and the count grows by x a season, so the scars settle at q/(x − 1) — the curves. The dots are the ratio the expected counts actually reach after eighty seasons, and they agree to within 1.0 per cent. A bud waiting no delay at q = 0.1 carries 0.1250; a bud waiting one season at q = 0.1 carries 0.2192; a bud waiting two seasons at q = 0.1 carries 0.3135; a bud waiting three seasons at q = 0.1 carries 0.4128. Each curve runs to infinity at its own threshold, where the living stop outgrowing the dead.

What a scar is worth

Counting the scars a dead shoot leaves does not put a branching count back on the sequence it would have had. A scar records a growing point and a dead growing point takes every branch it would have made, so living points plus scars reach 39.2 per cent of the deathless count after twenty seasons at one death in twenty, and 1.9 per cent at one in five — falling without limit rather than closing. What the scars restore is the other number. Scars per living point settle at q/(x − 1) exactly, so a rate with a scar share beside it recovers the death chance and then the waiting time, where a rate alone is reached by a one-season wait losing a tenth, a two-season wait losing 0.64 per cent and no wait at all losing 27.2 per cent.

branching · Lsystem
Every pair of death chances that reproduces each count, for one plant. A plant with a wait of two seasons, apices dying at 0.05 and buds at 0.15: a rate of 1.3351, 0.3098 scars per living point and 0.2225 of its scars left by apices. Each line is every pair of chances at that wait reproducing one count; the dashed lines either side are the same count one per cent high and low. The rate's and the scar share's lines cross at the plant's own pair, at an angle of 11.6°, so a one per cent error lets the pair slide along them — apex chances from 0.004 to 0.097 and bud chances from 0.100 to 0.198. The line for scars sorted by kind crosses the rate's at 51.5°, and read with it the same error leaves 0.044 to 0.056 and 0.134 to 0.166.

Two ways to die, three things to count

Giving a branching plant's waiting buds a death chance of their own leaves its counts a linear recurrence, but breaks the collapse onto the survival: the rate becomes the apex survival times the root of y^(d+1) = y^d + r^d, where r is the bud survival over the apex survival. The one-chance reading then names the wrong waiting time on 171 of 477 plants with waits of two to four seasons, shorter when the buds are the fragile ones and longer when the apices are. The two chances are separable from a rate and a scar share, exactly — but the two counts' loci cross at eight to sixteen degrees, so a one per cent error lets the chances wander by a factor of two. A third count is owed, and it is the scars sorted by kind.

branching · Lsystem
Four hundred plants whose seasons are sometimes bad, each measured against the count the average season predicts. A two-season wait, and every season bad with chance 0.1, killing each growing point with chance 0.5; good seasons kill with 0.0556, so the chance averaged over seasons is 0.1. Four hundred sequences of forty seasons, each plant's living count divided by the count the independent model expects at 0.1. The dashed line at one is the expectation over every sequence of seasons; the mean of these four hundred is 1.073 at season forty, as near as a sample carried by its luckiest few plants comes. The solid line is the median plant, 0.540 of the expected count by season forty, and the band holds the middle ninety per cent, from 0.080 to 3.640.

A bad year does not average out

Let every growing point on a plant share one season's death chance, bad one season in ten and good otherwise, with the average held at 0.1. Averaged over every sequence of seasons the counts are exactly the independent model's. But no plant is an average over sequences: with bad years at 0.5 a plant settles on a rate of 1.3001 against the expected 1.3190, the median plant holds 54 per cent of the expected count by season forty, and the scar share never settles, because it is set by how many seasons ago the last bad year was — 1.35 the season after one, 0.17 twelve seasons on. So the reading of a plant's waiting time from a rate and a scar share gets worse the longer it runs: right for 57 per cent of plants over ten seasons, 22 per cent over eighty.

branching · Lsystem
One plant's scars dated by season, and the wait they name when the recurrence is run through its own seasons. A plant with a two-season wait, grown point by point for 20 seasons from one apex; each season is bad with chance 0.1, when each point dies with chance 0.5. Top: the share of living points that died each season, read from that season's scars, with the bad seasons marked. Bottom: the living count on a logarithmic scale, and the counts a wait of one, two and three seasons predicts when the recurrence is run from one apex through these same seasons' death shares. The two-season line follows the plant; dated, the scars name a wait of 2. Read as two totals — the rate after the first 5 seasons and scars over living points — the same plant names 1.

Scars with dates on them

A bad season shared by every growing point wrecks the reading of a branching plant by two totals: over eighty seasons the rate and the scar share name a two-season wait for 22 per cent of plants. Date the scars — by position along a shoot, by growth ring — and each season's death chance is read off its own scars, so the bad years stop being noise and become a known input. Running the branching recurrence through the plant's own seasons names the wait for 94 per cent of plants over twenty seasons whether bad years kill a tenth of the points or seven tenths, and for every plant over eighty. What a plant cannot read from its own scars is the climate: the averaged chance comes only as fast as seasons do.

branching · Lsystem

Named alongside it

The objects these essays reach for when they reach for this one.

FibonacciHonest limitsClaim testingBranchMeasurementMortalityIdentifiabilityMeasurement errorRound tripDescription versus mechanismRewritingSilent failure

All concepts