The loop variables are definable: the one write that is not a copy #
Everything the EXPSPACE program writes is a copy of one of its slots or one of
the two designated elements – except the loop advance. A loop element is a
tuple over the instance, and advancing it is
DescriptiveComplexity.Draw.tupNext, the lexicographic successor: the
coordinates below the one that rolls over keep their value, the one that rolls
over takes the next element of the order, and the ones above it reset.
Two things make that definable all the same.
- Which coordinate rolls over is decided by which coordinates are maximal,
and that is in the equality pattern – so the case split is read off the
pattern (
DescriptiveComplexity.Draw.uSlotDefinable_cases). - The value at the carry is
DescriptiveComplexity.ordSuccof a single coordinate, which is exactly the sourceDescriptiveComplexity.SlotVal.succnames.
DescriptiveComplexity.Draw.tupNext_apply_of_carry is the coordinatewise
reading of tupNext, and the three statements after it are what a variable's
pack owes for its loop: the loop started, the loop advanced, and the loop
exhausted – at both widths.
tupNext, coordinate by coordinate #
Being exhausted is holding the greatest element everywhere.
Dependency graph
An exhausted tuple stands still.
Dependency graph
A tuple below the top steps at its carry coordinate.
Dependency graph
And the coordinate it carries is that one.
Dependency graph
An exhausted tuple carries past its last coordinate.
Dependency graph
The carry never passes the last coordinate.
Dependency graph
The next tuple, coordinate by coordinate: below the carry a copy, at the carry the next element, above it the least one. This is the reading the interpretation writes down.
Dependency graph
A tuple that is not exhausted has a carry coordinate.
Dependency graph
What the carry coordinate is: the greatest coordinate below the top.
Dependency graph
And when there is none: the tuple is exhausted.
Dependency graph
The least tuple is the constant designated element.
Dependency graph
The three obligations of a loop element #
A loop element's coordinate is definable after the advance: the carry is a question about the pattern, and the value at it is the next element.
Dependency graph
The wide loop, advanced, is definable.
Dependency graph
The wide loop, started, is definable.
Dependency graph
The wide loop's exhaustion test is definable.
Dependency graph
Which coordinate carries is a definable question: it is decided by which coordinates are maximal, and that is what a slot atom says.
Dependency graph
The narrow width #
A narrow loop element's coordinate is definable after the advance.
Dependency graph
The narrow loop, advanced, is definable.
Dependency graph
The narrow loop, started, is definable.
Dependency graph
The narrow loop's exhaustion test is definable.