A neighbourhood is a hypothesis
Worth reading first: How far a primordium reaches · The exponent that barely matters · A window that makes a pattern.
The placement rule on this site has one line that decides everything and one line nobody wrote down as a decision. The first is the rule itself: put the next primordium where the repulsion from the ones already there is least. The second is the sum that “the ones already there” runs over — because a real sum has to stop.
The previous phase discovered what that stopping place is worth. At an inverse first power the rule produces no lattice at all when it can see far enough — the divergence angle wanders over forty degrees, which is the wandering of an arbitrary sequence. Cut the neighbourhood at three spacings and the same rule produces a clean 8/13 at 137.62° with 0.58° of scatter: a pattern that passes every test this collection has, and disappears the moment the window is widened.
That result was recorded as truncation manufactures a pattern, and it was recorded with a repair attached that the phase did not have room to make. The repair is the subject here, and it is one sentence long: the neighbourhood is a parameter of the model rather than of the loop.
What the loop was actually doing
The code is worth being exact about, because the defect is invisible in the mathematics and obvious in the program.
grow() places node i by sweeping a candidate azimuth around the cylinder and
computing, at each candidate, the total repulsion from a set of neighbours. The
set was the most recent reach/√h nodes. That is a cut in recency: a node
is in the sum because it was placed lately, not because it is nearby.
Two things follow, and the second is the one that matters.
The first is that the cut has no physical reading at all. On a cylinder the most-recent nodes are the ones nearest the top, so a recency window is roughly a band of rows below the tip — but only roughly. A node placed forty steps ago sits somewhere on a circle whose circumference is the whole stem, so some of it is close to the candidate and some of it is half a turn away, and the window keeps all of it equally. Meanwhile a node placed a hundred steps ago that happens to lie directly below the candidate is discarded. Nothing about a growing apex works that way. If inhibition falls off with distance, it falls off with distance.
The second is that the recency cut is smooth in the one variable the rule minimises over. As the candidate azimuth sweeps around the circle, the set of neighbours in the sum does not change: it was chosen once, before the sweep began. So the energy profile the rule sees is a continuous function of azimuth, whatever the window is.
That is not a small property. It is the reason the truncated rule produces a beautiful lattice rather than nonsense, and it is why the obvious repair — cut at a distance instead — turns out to be a different thing entirely rather than a tidier version of the same thing. That comparison has an essay of its own; what belongs here is why the repair was attempted in the first place.
Why nobody noticed
It is worth asking how a decision of this size stayed invisible through four phases, because the answer generalises past this site.
A loop bound does not look like a modelling choice. It looks like an efficiency measure — the kind of line written while thinking about something else, with a comment saying keep the last few hundred, the rest contribute nothing. That comment is even true for the exponent the model was built at: at an inverse cube the far field really does contribute nothing, and a window of any generous size gives the same answer as no window at all. The bound was introduced when it was harmless and was still there when it was not.
What made it harmful was a different phase asking a different question. Varying the falloff exponent is the natural thing to do to a rule whose exponent came from a ferrofluid experiment rather than from a plant, and at the long-ranged end of that sweep the window stopped being generous and started being the model. Nothing warned anybody. Every gate was green; the figures were beautiful; the counts were Fibonacci.
There is a general shape here and this collection has now met it three times. A parameter that is not binding reports the same number however it is varied, and the same number however it is varied reads as robustness. The previous phase’s first sweep varied the window and found the answer perfectly stable, because at the rises involved the window was not the binding constraint and every column of the table was the same run. A robustness check that varies the wrong quantity is worse than no robustness check, because it is evidence for the wrong conclusion.
A cut-off, and what makes it a hypothesis
The change is small. Instead of choosing a set of neighbours and summing over it, multiply every neighbour’s contribution by a weight that falls with distance:
where is a stated width and is a stated falloff. The sum still runs over a finite set of nodes, because a program has to stop somewhere — but now the stopping place is chosen to be irrelevant: the window runs to four widths, where an exponential weight has fallen to , about one part in fifty-five, and a gaussian to .
The distinction between those two stopping places is the whole content of this
change, and it is worth stating plainly. The old window decided the answer. The
new one is required not to. That requirement is a check rather than a hope:
assertTheWindowIsNotTheCutOff runs the same cut-off over twice as many
neighbours and requires the settled divergence to move by less than a third of a
degree. It does; the two agree to two decimal places.
What the change buys is that is now a claim about a plant. Inhibition from a primordium falls to half its strength at about two cell diameters is a sentence a biologist could argue with, could measure against, and could be wrong about. The loop stops after forty-seven nodes is a sentence about a program.
Three shapes, and why the third is here
The library carries three falloffs, and it is worth being explicit that only two of them are hypotheses.
Exponential, , is the steady-state concentration of a substance that is produced at a source, diffuses, and decays at a constant rate. It is what the standard account of auxin depletion actually implies: a primordium acts as a sink, the depleted region around it has an exponential profile, and the next primordium forms where the concentration recovers. Of the three, this is the one with a mechanism behind it.
Gaussian, , is what a briefly-produced signal’s profile looks like as it spreads by diffusion alone, with no decay. It is the other standard shape and it describes a different story about the same chemistry.
Hard, one inside the width and zero outside, is not a physical claim about anything. It is in the library because it is what a truncated loop amounts to once it is written down as a function — the previous phase’s accident, converted into an explicit hypothesis so that it can be compared with the ones made on purpose. It turns out to behave completely differently from both smooth shapes, and that difference is the sharpest result of this thread.
The unit the widths have to be read in
There is a trap in comparing shapes that this essay walked into and that the figures now exist to prevent.
Ask for “a cut-off at three spacings” and the three shapes give three different rules. At spacings with , the exponential is at and the gaussian is at too — they agree there by construction — but at the exponential is at 0.61 and the gaussian at 0.78, and at the exponential is at 0.14 and the gaussian at 0.018. Nominally the same width, and one of them keeps four times as much of its far field.
The consequence, measured before it was understood: the two shapes disagreed about where the lattice ends, and the disagreement was reported as a property of the shapes when part of it was a property of the axis. The repair is a unit. Every range in this thread is stated as a half-weight radius — the distance at which the weight has fallen to a half — which is for a gaussian and for an exponential.
That does not make the disagreement go away. It shrinks it, and what is left is real, and the essay that follows this one is about what the residue turns out to be. But the unit had to exist before the question could be asked, and the general form is one this collection keeps rediscovering: a comparison between two models is a comparison between two parameterisations until somebody names the quantity both are being read in.
What the cut-off makes
With all of that in place, the prediction the previous phase recorded can be tested. It had three parts. A physical cut-off at three spacings would reproduce the manufactured lattice; it would be as fragile as the manufactured one; and the width would become a hypothesis with a critical value.
The first part holds, closely. The truncated loop settles at 137.62° with 0.58° of scatter and counts 8/13. An exponential cut-off at the same range settles at 137.58° with 0.50°, and counts 8/13. Four hundredths of a degree apart, on a quantity whose branches are three degrees apart — the two are the same pattern by any reading.
The third part holds too, and it is what makes the change worth making. Widen the cut-off and the lattice stops: past about four half-weights the exponential rule has no divergence angle either, which is the state the uncut rule was in all along. So there is a boundary, it is at a stated width, and the width is a number about inhibition rather than about a loop. A hypothesis that excludes something is the only kind worth having.
The second part fails, and it fails in the most useful direction available. That has an essay of its own as well.
What a width would mean on a plant
It is worth spending a paragraph on what the number actually refers to, because a model parameter with no units attached is a model parameter nobody can refute.
The local spacing on a cylindrical apex of unit circumference gaining one node per rise is — each node holds an area of , and the distance between neighbours is the root of it. On a real shoot apical meristem that spacing is the distance between adjacent primordia at the moment of their formation, which is measured in tens of micrometres and is a few cell diameters across. So a cut-off at two half-weight radii is a claim that a forming primordium’s influence has fallen to half strength about two primordium-spacings away, and to a twentieth by five.
That is a claim about the reach of whatever is doing the inhibiting. If the inhibitor is auxin depletion, the reach is set by how far auxin diffuses before the transporters move it back — a length that can be estimated from transport rates and that mutants change. If the inhibiting signal is mechanical, the reach is set by the stiffness of the tissue and is a completely different length. The two hypotheses predict different widths, and a width is now the kind of thing the model has an opinion about.
None of that is measured here. What is measured is that the model has the opinion — that the width matters, that there is a value beyond which the pattern stops, and that below it the pattern is the one plants show. Before this change, the model had no opinion at all, because the quantity was a loop bound and loop bounds do not have units.
What this does not fix
Two limits, both of which the rest of this thread runs into.
The cut-off does not make the p = 1 rule’s lattice real. It makes the claim that the lattice depends on a stated neighbourhood into an explicit one. A pattern that exists at a range of two spacings and not at six is a pattern conditional on a measurement nobody has made, and writing the condition down is progress rather than resolution. The honest summary of the whole thread is that the previous phase’s manufactured lattice has been converted from an artefact into a prediction — which is better, and is not the same as being true.
And the range, on its own, decides nothing. Two shapes read in the same unit still disagree about where the lattice ends by half. Something else is the invariant, and it was measured a phase ago for a different reason. That is the next essay.
What is left
The previous phase asked for a repair and this is the repair. It changed one line of the placement rule, added a check that the loop bound is not the answer, and gave the neighbourhood a unit. What it found is that the accident it was built to remove reproduces exactly when it is stated on purpose — and that stating it on purpose changes something else, which nobody predicted, and which the next two essays are about.
The line that is now written down is worth reading once more as the thing it is:
the interaction falls to half its strength at R local spacings, with a stated falloff shape
Two numbers and a functional form, where before there was a loop bound. Neither number has been measured on a plant. Both could be.
Shares its objects with
Essays that name at least two of the same things, and that neither author linked.
- The fragility belonged to the window — both name artefact, cut off, the range of the interaction, neighbourhood, the placement rule, repulsion, truncation
- Two shapes, one threshold — both name cut off, the range of the interaction, lattice offset, model scope, neighbourhood, the placement rule, repulsion
- Where the model stops — both name discretisation, the range of the interaction, meristem, repulsion, truncation
- The sequence has a memory — both name discretisation, lattice offset, the placement rule, rise
- Where the noise gets in — both name meristem, the placement rule, primordium, rise
- A growing organ is part of the rule — both name model scope, the placement rule, primordium
Named objects
A flat tag is an object no other essay names yet.
ArtefactCut offDiscretisationThe range of the interactionLattice offsetMeristemModel scopeNeighbourhoodThe placement rulePrimordiumRepulsionRiseTruncationUntested claim