What the control carries: contributions, not fold values #
A design correction, found by writing the update rule down. The sweep's
control cannot carry the fold values DescriptiveComplexity.foldFrom j v:
at a step whose carry is c, the new value at a level j < c is the level's
own contribution combined with the deeper value – and the contribution is not
recoverable from the two old values (x = C ∨ y does not determine C). What
is closed under the update is the family of contributions themselves:
DescriptiveComplexity.Draw.accCVal j v– the completed-subtree contribution at levelj: the disjunction (existential polarity) or conjunction (universal) over the values strictly below the current coordinate;DescriptiveComplexity.Draw.foldFrom_eq_accCVal– the fold value at a level is the contribution combined with the deeper fold value, so any fold value is a finite Boolean chain of the contributions and the current leaf (DescriptiveComplexity.foldFrom_last), which a rule's guard can spell out;- the three update rules along an increment with carry
c:DescriptiveComplexity.Draw.accCVal_congr_above(levels before the carry are untouched),DescriptiveComplexity.Draw.accCVal_carry(the carry level absorbs the completed subtree, which is the deeper chain at the old valuation), andDescriptiveComplexity.Draw.accCVal_reset(levels after the carry reset to the polarity's unit).
So the machine's payload holds one bit per level – the contribution – plus the last leaf, and every verdict it ever needs is a chain of those bits.
The completed-subtree contribution at a level: what the enumeration has finished below the current coordinate – a disjunction of subtrees under an existential polarity, a conjunction under a universal one. Past the last level it is the polarity's unit.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Dependency graph
Dependency graph
The fold value is the contribution combined with the deeper value –
DescriptiveComplexity.foldFrom_ex / foldFrom_all read through the
contribution. Iterated down to DescriptiveComplexity.foldFrom_last, any fold
value is a finite Boolean chain of the contributions and the leaf.
Dependency graph
The three update rules along an increment #
Levels before the carry are untouched: their coordinate and everything above it agree across the step.
Dependency graph
Levels after the carry reset to the polarity's unit: nothing lies strictly below a minimal coordinate.
Dependency graph
The carry level absorbs the completed subtree: the new contribution is the old one together with the deeper fold value at the old valuation – which the machine has as a chain of its stored bits and the old leaf.
Dependency graph
The vector the control carries, and its update #
What the machine holds is one bit per level – the contribution – plus the
value of the last leaf. Two operations turn that into everything it needs: a
fold value is the chain of the stored bits from a level down, closed by the
leaf (DescriptiveComplexity.Draw.chainFrom, correct by
chainFrom_iff_foldFrom), and one round of the enumeration rewrites the
vector by the three rules above (accCVal_step: untouched before the carry,
absorbing at it, reset after it). A rule's dstSt spells out the first and
its guard the second; nothing else about the fold ever reaches the
program.
The chain, with an explicit fuel so that the recursion is structural.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.Draw.chainAux pol acc leaf n 0 x✝ = leaf
Instances For
Dependency graph
A fold value as the machine holds it: the chain of the stored contributions from a level down, closed by the last leaf.
Equations
- DescriptiveComplexity.Draw.chainFrom pol acc leaf n j = DescriptiveComplexity.Draw.chainAux pol acc leaf n (n - j) j
Instances For
Dependency graph
Dependency graph
Dependency graph
The chain is the fold value: a control whose bits are the contributions and whose leaf bit is the matrix at the current valuation reads off every accumulator of the sweep.
Dependency graph
One round of the enumeration rewrites the vector: the levels before
the carry keep their bit, the carry level absorbs the chain below it at the
old valuation, and the levels after it reset to the polarity's unit. This is
the whole content of the dstSt a landing rule carries.
Dependency graph
At the first valuation every accumulator is the polarity's unit: nothing lies below a minimal coordinate, so a cleared register starts the sweep.