Documentation

DescriptiveComplexity.Problems.Wide.DrawDefExp

An expansion atom's pack #

An expansion atom runs the same machinery a gate does, one exponent along: it reads the tags of its argument points, branches on the tuple they decode, and folds the defining sentence of that branch. So every piece it needs is one already discharged for the gates, at the branch's prefix rather than the domain's – the naming guards through DescriptiveComplexity.Draw.Data.encCoord, the leaf from the control, and the three shapes of a fold.

With them, DescriptiveComplexity.Draw.UTagArgsDef of DescriptiveComplexity.Draw.Data.expArgs is a field-by-field check.

What a branch reads #

A branch's three folds #

The pack #

A comparison's pack #

The equality and order atoms of a matrix compare two points, and the machine does it by walking their two registers in step. What it keeps between rounds is three scratch flags – agreement so far, a difference seen, and its direction – so its folds are nested single-slot writes over the narrow loop element.

A stage atom's pack #

A gate block's pack #

An atom's pack, by kind #

The whole pack of a variable #

The semantic pack of one variable's machinery meets its obligation. This is the last thing the program's rules owe the interpretation: with it, DescriptiveComplexity.Draw.Data.uRulesDefinable_progAsm applies to the reduction's own machine.

Dependency graph

The EXPSPACE program's whole rule set is definable. Every rule of the reduction's own machine – its guard, the pointer it leaves and the tracks it writes – is written down by one formula for every instance, so the eleven relations of FirstOrder.Language.wide can be emitted by an interpretation. The one environment it asks for is what names the dispatch's default tag.

Dependency graph