A partial fixed point that holds makes the machine accept #
The forward half of the EXPSPACE reduction, assembled: from the initial configuration – the marks over the blank – through the startup, MAIN and the output evaluation, to the accepting phase. Every leg is a theorem of the run layer; what this file does is choose the parameters those legs are stated at and discharge their hypotheses.
The choices, once:
- the end marker is the last logical address
(
DescriptiveComplexity.Draw.logicalTop), which is what the startup's pattern write leaves in TARGET (DescriptiveComplexity.Draw.Data.tgtTopSt_tgt); - the VAL enumeration is the increment chain of
DescriptiveComplexity.Draw.Data.exists_valEnum, indexed byFin (n + 1)so that its bottom and top are0andFin.last n; - the stage the machine stops at is the first stable one
(
DescriptiveComplexity.StepDef.exists_least_stable), which exists because a definition whose value is read converges.
The two constraints on the layout the assembly needs are the ones
DescriptiveComplexity.Draw.Data.wmSetLt_stageTgtD_logicalTop asks for: one
coordinate of slack beyond the encoding budget (dd0 < dd) and one argument
block to name (dt.KIx nonempty).
The end marker the startup plants #
The pattern the startup writes into TARGET is the last logical address: a tag has a block exactly when it is an argument tag. This is what pins the end marker of the whole run, and with it the interval every dictionary statement of the layer is read over.
Dependency graph
The startup leaves the marker at the empty address.
Dependency graph
The startup leaves the mirror home.
Dependency graph
The startup leaves the bottom mark at the empty address.
Dependency graph
The startup leaves the end marker at the last logical address.
Dependency graph
The forward run #
The strict order on addresses depends on the order of the elements only
through its extension – the companion of
DescriptiveComplexity.Draw.Table.wmSetLe_congr_rel, and what carries the
layout's own placement lemmas to the instance's order.
Dependency graph
The output leg lands in the accepting phase with the output sentence as
its verdict, at any state whose tracks hold a stage. The output variable is
nullary, so its argument block is empty and every hypothesis the machinery
asks about the working address's blocks is a function on Fin 0; what is left
is the verdict, which is
DescriptiveComplexity.Draw.Data.accVerdict_out – an equivalence, so this
one leg settles both the accepting and the rejecting case.
Dependency graph
The whole run, from the initial configuration to the accepting phase,
with the accepting predicate at the state it stops in equivalent to the
value of the partial fixed point. Convergence is all that is asked: it is what
makes MAIN's loop stop, and the verdict the output leg then writes is the
sentence read at the stable stage
(DescriptiveComplexity.StepDef.partStage_eq_of_isFixedPt making that stage
the one PFPHolds speaks of).
Dependency graph
A partial fixed point that holds makes the emitted instance a
yes-instance: the two promises of DescriptiveComplexity.DWideAcceptSpace –
well-formedness for free, determinism from the program's separation argument –
together with the run of
DescriptiveComplexity.Draw.Data.reaches_outVerdict.