What the inner loop computes #
The VAL register of the EXPSPACE program enumerates addresses supported on the inner argument blocks, from the empty one to the full one, and the control folds one leaf per address. This file says what that fold is worth: at the inner top it is one step of the iteration at the points the working address holds.
The dictionary, fixed here once and for all:
- level
jof a variable's pack is inner blockjof the register – the free levels included, although the machine reads those off the working address's outer blocks (DescriptiveComplexity.Draw.Data.levelVal); - the leaf is the gated matrix of
DescriptiveComplexity.Problems.Wide.DrawRelat that valuation (DescriptiveComplexity.Draw.Data.leafP), so the encodings' gates are part of the leaf and not of the loop.
DescriptiveComplexity.Draw.Data.altQuantFrom_leafP is the join: the
prefix of the leaf predicate over all ki blocks, from level 0, is
DescriptiveComplexity.StepDef.next at the encoded arguments. The two ends
of the mismatch are paid for by
DescriptiveComplexity.Problems.Wide.DrawPad – the free levels and the
levels past the pack are skipped, the starting valuation is never read at
level 0 – and the middle by
DescriptiveComplexity.Draw.StepDef.next_iff_gateMat.
foldFrom_leafP_top then reads it off the accumulators, at the address the
loop stops at.
The leaf predicate #
The valuation the levels of a pack read: the working address's outer blocks below the variable's arity – those are the arguments the stage is being computed at – and the register's inner blocks above it.
Instances For
Dependency graph
The same valuation over the pack's own levels: the free ones off the working address, the quantified ones as given.
Instances For
Dependency graph
The matrix of a variable's pack, read over points at a stage.
Instances For
Dependency graph
The gated matrix over block values: the encodings' gates, then the matrix at the decoded points – the leaf of the relativized prefix.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The leaf the machine folds, one per address of the VAL register: the gated matrix at the levels' values.
Instances For
Dependency graph
The leaf is the pack-level predicate padded to the register's blocks.
Dependency graph
The leaf ignores the register blocks the pack does not quantify: those below the variable's arity, whose values it reads off the working address, and those past its prefix, which nothing reads.
Dependency graph
The leaf, machine-shaped: at an address whose outer blocks encode points, the leaf splits into the two flags the machinery conjoins – every ∃-level of the register an encoding, and if every ∀-level is one, the matrix at the decoded valuation. The free levels' gates are absorbed by the address's.
Dependency graph
The join #
The inner loop computes the step formula. The prefix of the leaf
predicate over every block of the register, played from level 0, is one
step of the iteration at the points the working address's outer blocks
encode – whatever the register held when the loop began, since level 0
reads nothing.
The three mismatches between what the machine plays and what the pack asks
for are exactly the three lemmas of
DescriptiveComplexity.Problems.Wide.DrawPad: the free levels are skipped,
the levels past the prefix are padding, and below the prefix's start the
machine's leaf reads the working address where the pack reads its
valuation.
Dependency graph
The inner loop at the output variable computes the output sentence.
The same three mismatches as altQuantFrom_leafP, minus the free levels: a
sentence has none, so the prefix starts where the machine starts it and only
the padding past the pack has to be skipped.
Dependency graph
Read off the accumulators #
At the inner top the fold holds the step's value. The loop stops when
every inner block of the register is full; there the accumulator at level 0
is the whole prefix (DescriptiveComplexity.Draw.foldFrom_top_of_ix), hence
one step of the iteration at the working address's points.