The fold on a final segment of the blocks #
DescriptiveComplexity.Problems.Wide.Bridge joins the fold to the address
increment when the block index type is the whole of Fin n. The inner loop of
the EXPSPACE program is not like that: its register enumerates the valuations
of the step formula's quantifier prefix, which live in the last q blocks
of the address – the Kin half of the argument tags – while every other block
of the register stays empty. So the join is restated here for an arbitrary
family of block indices ι : Fin q → T, assumed to be an order embedding onto
a final segment of the tag order:
- the embedding hypotheses are
DescriptiveComplexity.Draw.IxSeg; DescriptiveComplexity.Draw.exists_carry_ix– an increment of the address whose image blocks are not all full has its carry inside the image (every tag after an image tag is an image tag, so the last non-full block cannot escape), and decomposes there;DescriptiveComplexity.Draw.foldFrom_carry_of_ix/foldFrom_above_of_ix/foldFrom_below_of_ix– the three fold rules, at the familyDescriptiveComplexity.Draw.ixBlkof image blocks;DescriptiveComplexity.Draw.foldFrom_bot_of_ix/foldFrom_top_of_ix– the two ends: empty image blocks start the sweep at the matrix, full ones finish it at the whole prefix.
Everything is about the product order DescriptiveComplexity.lexRel on
T × V; joining it to the machine's own order is the instance's le field, as
everywhere in the layer.
A final segment of the blocks: an order embedding of Fin q into the
tags whose image is upward closed – every tag strictly above an image tag is an
image tag. The Kin half of the argument tags is one.
The embedding is strictly monotone, in both directions.
The image is a final segment of the tag order.
Instances For
Dependency graph
The image blocks of an address, as a valuation of the fold.
Equations
- DescriptiveComplexity.Draw.ixBlk ι s j = DescriptiveComplexity.wmBlk s (ι j)
Instances For
Dependency graph
The carry of an increment stays in a final segment whose blocks are not
all full: the carry tag is the last tag with a non-full block, every tag
above an image tag is an image tag, and some image block is non-full – so the
carry decomposition of DescriptiveComplexity.wmIncr_lexRel_iff happens at an
image tag.
Dependency graph
The fold rules at the image blocks #
The fold rule at the carry index, when the carry tag is the c-th image
tag: the accumulator there absorbs the finished subtree and takes in the deeper
accumulator, exactly as over a full block index type.
Dependency graph
Below the carry index the accumulators reset to the new leaf: the image blocks there have been emptied.
Dependency graph
Above the carry index only the deeper accumulator changes: the image blocks up to the level are untouched by the increment.
Dependency graph
The two ends of the enumeration #
Empty image blocks start the sweep at the matrix: nothing has been accumulated yet.
Dependency graph
Full image blocks finish the sweep at the whole prefix: every leaf has been seen.
Dependency graph
The fold along a tuple loop #
The element loops of the atom subroutines enumerate tuples of source
elements in the control, stepping by the lexicographic successor
DescriptiveComplexity.TupSucc – whose components are exactly the hypotheses
of the fold's three step rules, at value type the source structure itself.
These are the control-scale twins of the rules above; the two ends need no
twin, DescriptiveComplexity.foldFrom_bot / foldFrom_top apply as they
stand at an all-minimal / all-maximal tuple.
The strict form of the order relation the fold reads is the strict order.