The folds are definable #
What the program's control holds between rounds is a fold: one accumulator
per level of a quantifier prefix, closed by a leaf flag. Reading it back is
DescriptiveComplexity.Draw.chainFrom, a recursion down the levels, and writing
it at a carry is DescriptiveComplexity.Draw.Data.putVec of a family whose
entries branch on the carry.
Both are definable, and for the same reason: the recursion is over a fixed
number of levels, so recursing the same way builds the pattern function. The
atoms are DescriptiveComplexity.Draw.Data.uGDefinable_readVec and
uGDefinable_ctlBit; everything else is the connectives.
The matrix's own value at the atoms' verdicts
(DescriptiveComplexity.Draw.qfValue) is the same shape one level down – a
recursion over the syntax rather than over the levels – so it is here too.
The chain #
A fold, read back, is definable: the recursion down the levels is finite, so recursing the same way builds the formula. The leaf it closes with is the caller's – a flag of the control, or a bit it is about to store.
Dependency graph
The inner fold's verdict is definable.
Dependency graph
A sub-fold's verdict is definable.
Dependency graph
The write at a carry #
A fold at a tuple successor is definable: below the carry each level keeps its bit, the carry absorbs the chain below it, and the levels above it reset – three branches decided when the formula is built.
Dependency graph
The inner fold at a carry.
Dependency graph
A sub-fold at a carry.
Dependency graph
A sub-fold at its first tuple.
Dependency graph
Storing a sub-fold's leaf.
Dependency graph
The atoms a leaf is evaluated from #
A block atom's value at the control is definable. Three of its four shapes are what a guard may now ask: two control slots are equal, one is at most another, and a relation of the source vocabulary holds of a tuple of them – the last two being exactly what an equality pattern cannot say. The fourth, a relation variable of the block, is a read leaf and never evaluated here.
Dependency graph
The matrix at its atoms' verdicts #
A quantifier-free formula's value at a definable reading of its atoms is definable: a recursion over the syntax, the atoms being the caller's.
Dependency graph
The matrix's value at the atoms' verdicts is definable: each atom's verdict is one of finitely many control flags.