Walking the positions, and reading a play off a walk #
The bookkeeping between the two shapes a round of the game comes in: a walk,
one configuration per position, which is what a second-order block guesses, and
a play (DescriptiveComplexity.ATMData.BlockPlay), an ℕ-indexed sequence of
steps, which is what the collapse lemmas of
DescriptiveComplexity.MachinesAltPlay speak about. Translating between them
is arithmetic on DescriptiveComplexity.bitRank, exactly as
DescriptiveComplexity.TMData.accepts_iff_exists_walk cashes in the unary time
bound of the nondeterministic bridge.
The order facts #
The rank is injective on positions
(DescriptiveComplexity.ATMData.bitRank_inj), so a position is the highest one
exactly when its rank is (DescriptiveComplexity.ATMData.maxPos_iff_rank), and
comparing ranks compares positions
(DescriptiveComplexity.ATMData.le_of_bitRank_le). Iterating
DescriptiveComplexity.ATMData.nextPos from a position therefore enumerates
the positions above it in order, its rank going up by one each time
(DescriptiveComplexity.ATMData.posSeq_spec), until the highest is reached –
which is where the budget of a configuration comes from: from the position
t there are exactly rank p₁ - rank t steps left.
Reading a play #
DescriptiveComplexity.ATMData.exists_play_of_legalBelow is the one theorem
here: from a walk legal below i + 1 and a position t whose configuration is
in block i, the configurations at t, nextPos t, … form a play of block
i, stopped at the first moment the walk leaves the block, accepts, gets
stuck, or runs out of budget. Those four alternatives are exactly the cases the
two collapse lemmas distinguish, so this is the whole interface the round
induction needs in that direction.
Ranks and positions #
The rank is injective on positions.
Dependency graph
Comparing ranks compares positions.
Dependency graph
A position is the highest one exactly when its rank is.
Dependency graph
The rank of a position other than the highest is below the highest rank.
Dependency graph
Iterating nextPos enumerates the positions above t in order: the
j-th one is a position of rank rank t + j, as long as the budget
rank p₁ - rank t has not run out.
Dependency graph
Consecutive positions of the enumeration are immediate successors.
Dependency graph
The enumeration reaches the highest position exactly at the end of the budget.
Dependency graph
Reading a play off a sequence #
Cutting a sequence of configurations into a play of block i. The
sequence is stopped at the first of four events – the bound n is reached, the
sequence leaves the block, it accepts, it gets stuck – and up to there it is a
DescriptiveComplexity.ATMData.BlockPlay. The only thing asked of the sequence
is that it takes a genuine step whenever none of the four has happened, which
is what both a legal walk and the greedy continuation of
DescriptiveComplexity.ATMData.greedy provide.
Dependency graph
A play depends only on its first ℓ + 1 configurations.
Dependency graph
Reading a play off a walk #
A walk legal below i + 1 carries a play of block i. From the
position t, whose configuration is in block i, follow the walk along the
order: the configurations form a play of block i, and it stops at the first
moment one of the four things happens that end a block – the budget runs out,
the walk leaves the block, it accepts, or it gets stuck.