What a plant might be doing

The neighbourhood was already settled

The earlier work explained a small difference between two kinds of noise by saying a jostle is diluted among some thirty neighbours. Sweep the neighbourhood sixfold and the difference does not move — because past four spacings the rule builds the identical lattice, internode for internode. There was nothing to dilute.

Worth reading first: Where the noise gets in · How far a primordium reaches · A window that makes a pattern.

The earlier work measured three kinds of disturbance and found that a ruler cannot tell them apart. In passing it noticed one small difference — a jostle needs a little more amplitude than a placement displacement to produce the same divergence scatter — and offered a reason in a single clause: a jostled neighbour reaches the argmin through one contribution among some thirty, while placement noise goes into the recorded angle undivided.

It was careful about the difference, calling it one step of the sweep’s grid rather than a finding. It was not careful about the explanation, which was stated as though it needed no test.

The test is one sweep and the explanation does not survive it.

The prediction

If dilution among neighbours is the mechanism, the amount of dilution should depend on how many neighbours there are.

The placement rule has a parameter for exactly that. reach is how far the rule looks, in units of the local spacing between nodes, and the number of nodes it sums over is that reach divided by the square root of the rise — about thirty at reach six at the fine end of these runs, and about a hundred and ninety at reach twelve.

So: a short-ranged rule should convert a jostle into scatter more efficiently than a long-ranged one. Fewer neighbours, less dilution, more damage per degree of displacement.

The sweep

Six neighbourhood sizes, from two spacings to twelve. For each, the excess scatter a jostle adds over the scatter the undisturbed rule already has, divided by the same quantity for a placement displacement of the same size.

A sixfold neighbourhood, and nothing to dilute. The prediction was that a rule with fewer neighbours would convert a jostle into divergence scatter more efficiently. Across a sixfold widening the ratio sits between 0.97 and 1.00, and the one point that differs is the narrowest, at 0.82 — smaller, where the prediction wanted larger. The row underneath is why: past four spacings the rule builds the identical lattice, internode for internode, so there is no neighbourhood left to widen.
Fig. 1 The ratio the prediction was about, against the neighbourhood size. The prediction wanted the left of this plot higher than the right. Across a sixfold widening the ratio sits between 0.97 and 1.00, and the one point that moves is the narrowest, which moves the wrong way.
reach ratio
2 0.82
3 0.97
4 0.97
6 1.00
9 1.00
12 1.00

The prediction is refuted twice over. The ratio does not move as the neighbourhood widens sixfold; and the one point that differs is the narrowest neighbourhood, where the ratio is smaller — a jostle doing less damage relative to a displacement, where the prediction wanted more.

The identical numbers

At reach six, nine and twelve the ratios are not merely close. The excess scatters behind them are identical to four decimal places: 0.8596° for a jostle and 0.8628° for a placement displacement, three times over.

That is not what an insensitive measurement looks like. An insensitive measurement gives nearby numbers, not the same number.

Grow two stems differing in nothing but reach and compare them internode by internode:

  • reach 4 against reach 12 — 0 of 322 internodes differ
  • reach 3 against reach 4 — 11 of 322 differ
  • reach 2 against reach 3 — 42 of 322 differ

Past four spacings the rule does not build a similar lattice. It builds the same lattice, to the last digit, across a threefold widening of the neighbourhood.

Every disagreement is one sample wide

The internodes that do differ, below four spacings, differ by a specific amount.

The rule chooses an azimuth from a grid of three hundred and eighty-four samples, so the finest distinction it can draw is one step of that grid: 360°/384, which is 0.9375°. Every disagreement between reach two and reach three, and every one between reach three and reach four, is exactly that — 0.9375°, to six decimal places, worst case and typical case alike.

So even the rule cut down to two spacings is not building a different pattern. It is choosing the adjacent grid point, on about one placement in eight, and the effect on the finished lattice is a scatter of one grid step distributed over a few dozen internodes.

That is worth knowing for two reasons. It says the convergence is orderly rather than a coincidence of averages — the narrow rule is not making different decisions, it is making the same decisions marginally. And it puts a floor under what any sweep of this parameter could ever show: a difference smaller than one grid step is not representable, so a study of the far field’s influence at this resolution can only report zero.

How the excess is measured, and why in quadrature

One design choice in the sweep is load-bearing and would change the answer if made carelessly.

The undisturbed rule already scatters its divergences, by about half a degree, because it is chasing a moving equilibrium — that is the previous essays’ subject. A disturbed run scatters by about a degree. The quantity the prediction is about is the amount the disturbance added, not the total.

The two contributions are independent, so they add in quadrature and the excess is sloud2−squiet2\sqrt{s_{\text{loud}}^2 - s_{\text{quiet}}^2}. Taking the totals raw instead would understate the ratio by about a quarter — and, worse, would understate it differently at each neighbourhood, because the quiet run’s own scatter changes slightly with the reach at the narrow end. A sweep of a difference between two kinds, contaminated by a baseline that also moves, is a sweep of nothing in particular.

The baseline is measured at every reach and reported alongside. It is 0.491° at reach two and 0.498° at every reach above it — which is itself the same convergence, showing up in the control.

Why the far field does nothing

The repulsion falls as the inverse cube of distance, and the site has measured that an inverse-cube rule is effectively local — that was the explanation offered for why a grown pattern never lags the static ladder.

Whether the rule's energy has a value at all. The sum of d⁻ᵖ over every node within a distance, divided by its value at one circumference, for seven exponents. Above p = 1 the curve flattens — the last doubling of the range adds 0.0 per cent at p = 3. Below it the sum keeps climbing however far the rule is allowed to see, so there is no total to take a minimum of.
Fig. 2 The reason, from an earlier thread. How much of the total repulsion at a candidate azimuth comes from the nearest shell of neighbours, the next, and the rest — and how quickly the contributions stop mattering.

The nodes past about three spacings contribute a sum that is smooth around the circumference: they are far enough away that moving the candidate azimuth barely changes their distances, so they add nearly the same amount at every sample.

And the rule takes an argmin. An argmin is blind to a constant. Adding a nearly constant background to a profile does not move its minimum, and here it does not move it even by one sample of a three-hundred-and-eighty-four-point grid — which is what “zero internodes differ” means.

A sixfold neighbourhood, and nothing to dilute. The prediction was that a rule with fewer neighbours would convert a jostle into divergence scatter more efficiently. Across a sixfold widening the ratio sits between 0.86 and 0.89, and the one point that differs is the narrowest, at 0.80 — smaller, where the prediction wanted larger. The row underneath is why: past four spacings the rule builds the identical lattice, internode for internode, so there is no neighbourhood left to widen.
Fig. 3 The same sweep at three runs. Widening the loop bound changes nothing that can be measured above the spread between runs.

So the neighbourhood the model has is already at its floor at four spacings. The neighbourhood the loop sums over goes on growing, and nothing downstream can tell.

Why four spacings and not some other number

The floor sits at about four spacings and it is worth deriving rather than reporting, because a derived floor moves correctly when the rule changes and a measured one does not.

What the argmin responds to is not the repulsion but its variation around the circumference. A neighbour at distance r contributes a term falling as the inverse cube, and its contribution to the slope of the profile — how much moving the candidate azimuth changes it — falls one power faster, as the inverse fourth. Meanwhile the number of nodes at distance r on a cylinder grows in proportion to r. So a shell at distance r contributes variation falling as 1/r³, and the whole far field beyond four spacings sums to a few per cent of what the nearest shell alone supplies.

Set that against the resolution the argmin is taken at. A few per cent of the profile’s own variation moves the minimum by a small fraction of one sample of a three-hundred-and-eighty-four-point grid, and a fraction of a sample is not a different answer. That is exactly the observation the sweep reports: zero internodes differ.

So the floor’s position is set by the exponent and by the grid together, and each has a stated consequence. A shallower falloff would push the floor outwards — an inverse-square rule’s shells fall as 1/r² and reach further, and an inverse first-power rule has no floor at all, which is why it makes no lattice when it can see far enough. And a finer grid would push it outwards too, since the far field’s few per cent would eventually exceed a smaller sample step.

Neither of those is a caveat on the result; both are the result stated in a form that says where it stops holding.

A parameter of the model and a parameter of the loop

This is the same distinction the cut-off thread was written to make, arrived at from the other side, and the pair of results is worth putting together.

That thread found that reach is a recency cut — it takes the most recently placed nodes, so a node one row up and a node half a turn away at the same distance are treated differently because one was placed later. Nothing in a plant works that way. It replaced it with a falloff of distance at a stated width, which makes the width a hypothesis an experiment could put a number to.

Three cut-offs at the same nominal width of 3 spacings. The weight the interaction is multiplied by, against distance. They halve at 2.08 (exponential), 2.50 (gaussian), 3.00 (hard) spacings — so a rule described as "cut off at 3 spacings" is three different rules until the falloff is named. Every later figure is read in half-weight radii for that reason.
Fig. 4 The replacement: a weight that falls with distance at a stated width and shape, rather than a window on placement order. That thread’s point was that the recency cut is a property of the program; this one’s is that above a certain size it is not even that.

This thread finds that above four spacings the recency cut is not a property of anything. It does not shape the pattern, because it is not binding; the interaction has already fallen to where the argmin cannot see it.

Both are the same lesson about sweeping. The site’s own notes record raising a window from 120 to 480 and finding nothing change, and reading that as a converged answer when the parameter had never been binding. The defence used here is the one that lesson recommends: check that the parameter being swept is doing something before concluding from the fact that it isn’t. The figure’s window sizes are stated, the cap is checked not to be clipping any of them, and the sweep is therefore of the neighbourhood rather than of the cap.

What was measured before the comparison was right

The first version of the internode comparison reported that reach six and reach twelve differ in 246 placements out of 315 — the opposite of the result above, and a number that would have been published as a finding.

The two runs do have different azimuths at almost every node. What they do not have is different lattices. One built the pattern left-handed and the other right-handed: every divergence has the same magnitude and the opposite sign.

Nothing in the rule prefers a chirality. Which one a run falls into is decided by arithmetic far below the level of anything physical — the sample index that happens to win the first contested argmin — and it is not a property of the lattice, the divergence, the counts or the scatter. A plant has a handedness too, and it is famously not predicted by anything about its phyllotaxis — though a cut can reverse it on a coarse enough stem.

So the comparison is of divergence magnitudes, and it is worth recording that the raw comparison was tried first and gave a confident wrong answer. The error is the same shape as the one this essay is about: a quantity that varies between runs, is easy to measure, and is not the quantity in question.

A sixfold neighbourhood, and nothing to dilute. The prediction was that a rule with fewer neighbours would convert a jostle into divergence scatter more efficiently. Across a sixfold widening the ratio sits between 0.89 and 0.89, and the one point that differs is the narrowest, at 0.88 — smaller, where the prediction wanted larger. The row underneath is why: past four spacings the rule builds the identical lattice, internode for internode, so there is no neighbourhood left to widen.
Fig. 5 Three narrow bounds only. The null is not an artefact of including the wide ones, which is what this reading checks.

What the small difference actually is

Refuting the explanation leaves the observation, and it is worth saying what is left of it.

At reach two the ratio is 0.82, so there is a regime in which the neighbourhood size matters — it is just far narrower than anything the model was ever run at, and the effect goes the other way. A rule looking two spacings out has fewer than a dozen neighbours at the fine end, its energy profile is dominated by two or three of them, and the difference between disturbing a neighbour and disturbing the node is not what it is in the converged regime.

At every neighbourhood the model has actually been run at, the difference between a jostle and a placement displacement is 3% or less in excess scatter, which is well inside the step of the amplitude grid the earlier work reported it from. The honest statement is that the difference is at or below the resolution of the measurement that found it, and that the explanation attached to it was about a mechanism the model does not have.

A sixfold neighbourhood, and nothing to dilute. The prediction was that a rule with fewer neighbours would convert a jostle into divergence scatter more efficiently. Across a sixfold widening the ratio sits between 0.97 and 1.00, and the one point that differs is the narrowest, at 0.82 — smaller, where the prediction wanted larger. The row underneath is why: past four spacings the rule builds the identical lattice, internode for internode, so there is no neighbourhood left to widen.
Fig. 6 Four bounds at four runs. The sweep is over the bound, and the quantity read off it is a ratio that does not move.

What it says about every figure on this site

There is a consequence for the collection itself, and it cuts two ways.

Every grown-stem figure here uses a reach of six. On the strength of this measurement, four would produce byte-identical output and would cost a third less to compute — the inner loop runs over the window, so the saving is direct, and grown-stem ensembles are the most expensive things in the build.

That is not a change worth making, and the reason is the more interesting half. A parameter set safely above where it stops mattering is doing a job: it is the margin that makes the results insensitive to it. Trimming it to the edge of the converged region would save build time and would mean that the next change to the rule — a different exponent, a cut-off, a coarser sample grid — could quietly move the convergence point past the setting without anything failing.

The right response to “this parameter does not matter” is to record where it stops mattering, not to move to the boundary. So the reach stays at six, and the number four is now written down.

What the measurement does license is a claim the site has been making loosely. Several essays describe the rule as local, on the strength of the inverse-cube exponent and the partial-sums figure. That was an argument about how the energy converges. This is the statement in the form that matters for a model: the arrangement is unchanged by anything past four spacings, which is stronger than saying the energy has converged, because a converged energy could still move an argmin.

What is left to sweep

The prediction was cheap and it was worth testing, and its refutation closes a direction rather than opening one. If a jostle is not diluted by the number of neighbours, then the small difference between the two kinds is set by something else — the shape of the profile near its minimum, most likely, which is a property of the falloff exponent rather than of the range.

That is a different sweep, over a parameter this site has already established matters a great deal, and it is not attempted here. What this essay establishes is that the obvious sweep has been done and the obvious answer is not there.

A sixfold neighbourhood, and nothing to dilute. The prediction was that a rule with fewer neighbours would convert a jostle into divergence scatter more efficiently. Across a sixfold widening the ratio sits between 0.89 and 0.89, and the one point that differs is the narrowest, at 0.80 — smaller, where the prediction wanted larger. The row underneath is why: past four spacings the rule builds the identical lattice, internode for internode, so there is no neighbourhood left to widen.
Fig. 7 The wider bounds on their own. Past about four spacings the rule builds the same lattice whatever it is allowed to see.

The general form, which is the reason to record a refutation

A refuted prediction is worth an essay only if the way it failed generalises, and this one does.

The explanation offered was mechanistic and plausible and untested: a jostle is diluted among thirty neighbours, therefore fewer neighbours means less dilution. Every step of that reads as physics. What it assumed, without saying so, is that the thirty neighbours are thirty contributors — that each of them is doing a comparable share of the work of choosing the azimuth.

They are not. Four or five of them decide it and the rest supply a background the argmin cannot see. So “one contribution among thirty” was a description of the loop’s bounds rather than of the rule’s arithmetic, and the ratio it predicted was a ratio between two numbers that were never both real.

The tell, available in advance, is that the explanation named a quantity — thirty — that came from a parameter rather than from a measurement. Nothing had ever counted how many neighbours matter. The count of thirty is reach divided by the square root of the rise, which is to say it is the loop bound, and using a loop bound in a physical argument is the error the cut-off thread exists to prevent in its other form.

Where a mechanism’s explanation contains a number, ask which measurement produced it. Here the answer was none, and the sweep that would have produced one is the sweep that refutes the explanation.

That is the third prediction this collection has tested and refuted rather than confirmed, and all three failed the same way: the observation was right, the mechanism attached to it was a story about the program. A truncated loop was fragile and the fragility belonged to the boundary rather than to the short range. A statistic was called the sequence’s own memory and belonged to the rise. A difference between two noises was attributed to a neighbourhood that turns out not to exist above four spacings.

The pattern in the pattern is worth stating: the explanations that fail are the ones that reach for a quantity in the implementation. The ones that survive — a lattice fails at a degree and a half of scatter, the peak in a sequence sits at the parastichy number — are stated in quantities a plant could have.

A sixfold neighbourhood, and nothing to dilute. The prediction was that a rule with fewer neighbours would convert a jostle into divergence scatter more efficiently. Across a sixfold widening the ratio sits between 0.97 and 1.00, and the one point that differs is the narrowest, at 0.82 — smaller, where the prediction wanted larger. The row underneath is why: past four spacings the rule builds the identical lattice, internode for internode, so there is no neighbourhood left to widen.
Fig. 8 And the same at four runs. Six sweeps is what says the neighbourhood was already settled before the question was asked.

What links here

Computed from the collection, not written here: the essays that point at this one.

Shares its objects with

Essays that name at least two of the same things, and that neither author linked.

  • The sequence has a memory — both name cylinder, discretisation, divergence angle, ensemble, equilibrium, lattice offset, measurement, noise, the placement rule, self-correction
  • The order carries the count — both name cylinder, discretisation, divergence angle, ensemble, equilibrium, lattice offset, measurement, noise, the placement rule
  • A counter that sees no positions — both name cylinder, discretisation, divergence angle, ensemble, equilibrium, lattice offset, measurement, noise
  • A shoot too fast to remember — both name cylinder, divergence angle, ensemble, equilibrium, measurement, noise, the placement rule, self-correction
  • The memory was the rise — both name cylinder, divergence angle, ensemble, equilibrium, measurement, noise, the placement rule, self-correction
  • What the protractor has to be — both name cylinder, discretisation, divergence angle, ensemble, equilibrium, measurement, noise, the placement rule

Named objects

A flat tag is an object no other essay names yet.

Cut-offCylinderDiscretisationDivergence angleEnsembleEquilibriumHandednessThe range of the interactionLattice offsetThe local exponentMeasurementNoiseThe placement ruleSelf-correction