Padding a kernel's block #
A machine written against a DescriptiveComplexity.NexKernel pays for its run
out of the drawing's own size, and the drawing's size is a count of tags – one
per rule name, and a rule name of the guessing site carries an assignment of the
guessed block. So a kernel with few relation variables draws a small machine and
buys a short clock, while what the run costs is set by the machine's tape,
which the block does not shrink.
The remedy is to pad: give the block extra relation variables that the kernel
never mentions. It says the same thing – an existential block whose extra
variables do not occur is satisfied exactly when the original is – and it
multiplies the guessing site's rule names by 2 ^ (number of extra variables).
This file is that padding: the block (SOBlock.pad), the language morphism that
reads a kernel over it (blockPadLHom), the two directions of the transport
(realize_blockPad), and the kernel-level statement
(NexKernel.pad_holds).
A block with n more relation variables, each of arity a, which no
kernel of the original block mentions.
Equations
Instances For
Dependency graph
Dependency graph
The variables of a padded block, counted: the original's and the new ones. This is what a clock's counting hypothesis is discharged by – the guessing site's rule names are indexed by assignments of the block.
Dependency graph
What a padded block's assignment says about the original's: forget the new variables.
Equations
- B.unpadAssign ρ i = ρ (Sum.inl i)
Instances For
Dependency graph
And back: the new variables empty.
Equations
Instances For
Dependency graph
Dependency graph
The language morphism reading a kernel of the block over the padded one: every symbol goes to itself, and the new relation symbols are simply not in the image.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The padded structure is an expansion along it: the new symbols are the only ones added, and no formula in the image mentions them.
Dependency graph
Padding the block changes no meaning: a kernel of the original block, read over the padded one, says of a padded assignment what it said of the assignment's own part.
Dependency graph
The padded kernel #
A kernel with a padded block: the same expansion, the same sentence read over more relation variables.
Equations
- K.pad n a = { X := K.X, B := K.B.pad n a, ker := (DescriptiveComplexity.blockPadLHom (K.X.E.sum FirstOrder.Language.order) K.B n a).onSentence K.ker }
Instances For
Dependency graph
Dependency graph
Dependency graph
A padded kernel says what the kernel said. The extra variables occur in no atom, so an assignment satisfying the padded kernel restricts to one satisfying the kernel, and one satisfying the kernel extends – by the empty relation – to one satisfying the padded kernel.