The combinators carry definability up the tower #
DescriptiveComplexity.Problems.Wide.DrawDefKit discharges the leaves; this file
carries DescriptiveComplexity.Draw.URuleDefinable through the combinators the
EXPSPACE program is assembled by – the chain, the sequencer, the element loop,
the tag-branched machinery and the tuple loop.
Each combinator contributes only checkpoints, and a checkpoint's rule has the
same three shapes everywhere: a walk back to the marker (stay), and one or two
dispatches, whose guards are the standard exit guard conjoined with a question
the caller supplies and whose destination pointers are the caller's control
updates. So each proof is: the leaves by
DescriptiveComplexity.Problems.Wide.DrawDefKit, the checkpoints by the atoms,
and nothing else.
A rule may be transported along an equality of families #
Dependency graph
A rule without its source phase #
A dispatch descriptor is definable: the same three obligations, its source phase being the checkpoint's.
The phase it moves to is the same at every instance.
And so is its direction.
- guard : UGDefinable fun (e : Env L) => (pr e).guard
Its guard reads its data only through the equality pattern.
- dst : UStDefinable fun (e : Env L) => (pr e).dstSt
The pointer it leaves is definable slot by slot.
- wr : UTrDefinable fun (e : Env L) => (pr e).wr
And so are the tracks it writes.
Instances For
Dependency graph
A descriptor at a source phase is a definable rule.
Dependency graph
The dispatch shape of every checkpoint: the standard exit guard, conjoined with a question the caller supplies, a control update and the tracks riding along.
Dependency graph
The chain #
A chain's rules are definable: its stages' are the parameter, and each checkpoint contributes the walk back and its two descriptors.
Dependency graph
The sequencer #
A sequencer's rules are definable: its stages' are the parameter, its dispatch enters the next stage with the caller's control update or leaves after the last, and the second descriptor is dead.
Dependency graph
The element loop #
An element loop's rules are definable: the read trips by
DescriptiveComplexity.Draw.ReadKit.uRuleDefinable, and the three checkpoints –
the entry, each read's verdict exit and the fold – by the dispatch shape.
Dependency graph
The tag-branched machinery #
A tag-branched machinery's rules are definable: the witness reads by
the read kit, the branch checkpoint by the dispatch shape – one dispatch per
tag, each guarded by the caller's decoding question – and the loops by
DescriptiveComplexity.Draw.uRulesDefinable_elemRule.
Dependency graph
The tuple loop #
A tuple loop's stages are definable: the read trip storing its bit and the write trip handing it back.
Dependency graph
A tuple loop's dispatch descriptors are definable: begin, hand over, advance or leave.
Dependency graph
A tuple loop's rules are definable, the chain over its two stages.