The data of the EXPSPACE reduction, bundled #
Everything the EXPSPACE program is built from, in one record: the
expansion, the partial-fixed-point definition, one prenex pack per step
formula and one for the output sentence, and the encoding layout with its
coordinate budget. On top of it, the derived dimensions the slot and
control inventories of DescriptiveComplexity.Problems.Wide.DrawSlots are
sized by: the variable index DescriptiveComplexity.Draw.Data.VarIx
(none is the output), the prefix lengths nOf and their maximum ki, the
outer block count ko, the classified atoms of each matrix
(DescriptiveComplexity.Draw.Data.kindOf) and their counts.
The point of bundling: the program's phase and rule types are indexed by
this data (one call site per variable, per atom, per argument position), so
every site file takes one Draw.Data and nothing else, and the dimensions are
defined as the exact maxima rather than constrained by inequalities.
The data of the EXPSPACE reduction: the expansion, the definition, the prenex packs, and the encoding layout with its coordinate budget.
- X : ExpExpansion L
The exponential expansion the machine's tape simulates.
- d : StepDef (self.X.E.sum FirstOrder.Language.order)
The partial-fixed-point definition being iterated.
A prenex pack per step formula.
- pkOut : PrenexPack (FirstOrder.Language.Formula.relabel Empty.elim self.d.out)
A prenex pack for the output sentence, its (no) free variables re-bound.
- domPk (t : self.X.Tag) : PrenexPack (FirstOrder.Language.Formula.relabel Empty.elim (self.X.dom t))
A prenex pack per domain sentence of the expansion: the gate's
domsub-evaluation runs its prefix as an element loop. - relPk {n : ℕ} (r : self.X.E.Relations n) (τ : Fin n → self.X.Tag) : PrenexPack (FirstOrder.Language.Formula.relabel Empty.elim (self.X.relSentence r τ))
A prenex pack per defining sentence of the expansion, at each relation symbol and tuple of tags: the expansion atoms' sub-folds run these.
- dd0 : ℕ
The coordinate budget of the encodings: the name slots of a mark.
- dd : ℕ
The dimension of the interpretation.
The encoding layout of the points.
- lyLt (j : Fin self.dd) : ((∃ (q : PtCode self.X), self.ly.cIx q = j) ∨ ∃ (p : Fin (blockArityBound self.X.B)), self.ly.pIx p = j) → ↑j < self.dd0
The layout inhabits the first
dd0coordinates, so a padded cell's mark can carry its own encoding-relevant coordinates in name slots. The budget fits in the dimension.
Instances For
Dependency graph
The variable index #
The variables the program evaluates a formula for: the fixed-point
variables, and (none) the output sentence.
Instances For
Dependency graph
The number of outer argument blocks: enough for every variable's arguments.
Equations
Instances For
Dependency graph
The arity of a variable – the number of blocks its address prefix
reads; 0 for the output.
Instances For
Dependency graph
The prefix length of a variable's pack. Reducible: the pack's own
statements are about (dt.pk i).n, and rw matches at implicit
transparency.
Instances For
Dependency graph
The polarities of a variable's pack.
Instances For
Dependency graph
The matrix of a variable's pack.
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The number of inner argument blocks: the longest prefix among the packs.
Equations
- dt.ki = Finset.univ.sup dt.nOf
Instances For
Dependency graph
Dependency graph
The classified atoms #
The atoms of a variable's matrix, in evaluation order.
Equations
- dt.atomsOf v = DescriptiveComplexity.Draw.qfAtoms (dt.matOf v)
Instances For
Dependency graph
The number of atoms of a variable's matrix.
Instances For
Dependency graph
The largest atom count among the matrices: the size of the verdict inventory.
Equations
- dt.natMax = Finset.univ.sup dt.natOf
Instances For
Dependency graph
Dependency graph
The kind of an atom, read off the syntax: the index data of the per-atom call sites.
Instances For
Dependency graph
The classifier agrees with the kind.
Dependency graph
The slot and control inventories, sized #
The control dimensions #
The prefix depth of an expansion atom's defining sentences, maximized
over the tag tuples; 0 for the other kinds, whose loops are the
coordinate ones.
Equations
Instances For
Dependency graph
The leaf-read budget of an atom: the block-atom count of its defining
sentences' matrices – the base-vocabulary atoms are guards and take no trip –
2 for the coordinate loops of an equality or order atom, 0 for a stage
atom.
Equations
- dt.kindReads (DescriptiveComplexity.Draw.MatAtom.exp e a) = Finset.univ.sup fun (τ : Fin k → dt.X.Tag) => (DescriptiveComplexity.Draw.blkAtoms (dt.relPk e τ).mat).length
- dt.kindReads (DescriptiveComplexity.Draw.MatAtom.eq a a_1) = 2
- dt.kindReads (DescriptiveComplexity.Draw.MatAtom.ord a a_1) = 2
- dt.kindReads (DescriptiveComplexity.Draw.MatAtom.stage i a) = 0
Instances For
Dependency graph
The domain sentences' largest prefix depth.
Instances For
Dependency graph
The domain sentences' largest read-leaf count.
Equations
- dt.domReads = Finset.univ.sup fun (t : dt.X.Tag) => (DescriptiveComplexity.Draw.blkAtoms (dt.domPk t).mat).length
Instances For
Dependency graph
The loop-variable budget: the coordinate loops' width and every element loop's depth.
Equations
Instances For
Dependency graph
The leaf-read budget.
Equations
Instances For
Dependency graph
The number of argument points an atom's kind reads the tags of: the arity
of an expansion atom, 0 for the other kinds.
Equations
- dt.kindArgs (DescriptiveComplexity.Draw.MatAtom.exp e a) = k
- dt.kindArgs x✝ = 0
Instances For
Dependency graph
The tag-flag budget: one per argument position of an expansion atom and tag, and one block's worth for the gates – whose domain evaluation reads the tag of the single block it gates, and which must be paid for even when no expansion atom occurs.
Equations
Instances For
Dependency graph
The accumulator budget: one per prefix level, and one over.
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
An expansion atom's tag flags fit: one per argument position and tag.
Dependency graph
A gate's tag flags fit: one block's worth is always paid for.
Dependency graph
Dependency graph
The control slots of the program, at the computed budgets.
Instances For
Dependency graph
The track slots of the program.
Instances For
Dependency graph
The slots' equality is classically decidable – the variable index only
carries Finite, and the rules that update slots (Function.update) are
noncomputable throughout.