The two guards the program's own sites are written from, and the stage atom #
Above the combinators the program stops being generic: its checkpoints are
guarded by DescriptiveComplexity.Draw.Data.exitG – at the marker, which is
nobody's register – and its trips are named by
DescriptiveComplexity.Draw.Data.nameG – this cell is the canonically padded
cell of the element whose block is b and whose first dd0 coordinates the
control holds. Both are conjunctions of the three atoms, so both are definable
once and for all, and with them the stage atom's machinery – the largest
single subroutine of the program – follows kit by kit.
The naming guard is stated at an arbitrary coordinate function
(DescriptiveComplexity.Draw.Data.nameGF), the caller owing the
comparison g (name j) = cf f j rather than the value: the leaf reads of the
element loops compute an encoded tuple there, and what they owe is the same
shape as what the coordinate loops owe.
The two guards #
The standard exit guard is definable: at the marker, which is nobody's register.
Dependency graph
A naming guard is definable, given that each of its coordinates is compared definably: the block flag and the padding flag are atoms, and the comparison is the caller's.
Dependency graph
The naming guard of a coordinate loop is definable: its coordinates are control slots, so each comparison is one atom.
Dependency graph
The stage atom #
A stage atom's machinery is definable: eleven kits and their exit rules, the exits all guarded by the standard one, plus the argument tuple loops, whose two naming guards are the coordinate loops'.