The address primitives of a wide machine #
What a wide machine can do to its head, and nothing else: start it on the least position, move it to a neighbor, recognize the last one. Every step of every program a hardness reduction will write is one of these, so they are settled first, at an arbitrary order relation and from finiteness alone.
The one thing to know about them is what an address's neighbor is. An address
is a subset read as a binary number whose most significant digit is the
Le-least element (DescriptiveComplexity.WMSetLe compares at the least element
where two addresses differ), so incrementing flips a run of trailing digits: the
greatest element u outside the address enters, and everything above u leaves.
DescriptiveComplexity.WMIncr says that relationally – with u existentially
quantified rather than chosen – so no choice function enters the statements and
the increment is first-order describable as it stands.
| primitive | what it is | theorem |
|---|---|---|
| the head's start | the empty address | DescriptiveComplexity.minPos_wpLe |
| the last cell | the whole universe | DescriptiveComplexity.maxPos_wpLe |
| one step | the binary increment | DescriptiveComplexity.succPos_wpLe_iff |
The last of these is the one the programs use: DescriptiveComplexity.TMData.Step
moves the head by DescriptiveComplexity.SuccPos, an order-theoretic notion
(“no position strictly between”), while a program reasons with the increment. The
two agree, which is what lets a machine maintain a mirror of its own head
position by incrementing it – the invariant the whole hardness plan rests on,
since a head cannot read the digits of its address.
Extremal elements of a definable set #
A nonempty set has a Le-least element.
Dependency graph
A nonempty set has a Le-greatest element.
Dependency graph
The strict order, and the strict comparison of addresses #
The strict part of an order relation, in the shape the address layer writes it.
Equations
- DescriptiveComplexity.WMLt Le x y = (Le x y ∧ ¬Le y x)
Instances For
Dependency graph
The strict comparison of two addresses: at some element the first is out
of and the second in, they agree at every strictly smaller element. This is the
second disjunct of DescriptiveComplexity.WMSetLe, named.
Equations
- DescriptiveComplexity.WMSetLt Le s t = ∃ (x : α), (∀ (y : α), DescriptiveComplexity.WMLt Le y x → (s y ↔ t y)) ∧ ¬s x ∧ t x
Instances For
Dependency graph
Weak comparison of addresses is agreement or strict comparison, by definition.
Dependency graph
Two elements neither of which is strictly below the other are equal.
Dependency graph
The increment of an address #
The binary increment of an address: at the greatest element u the
address does not contain – so that it contains everything strictly above u –
the increment adds u and removes everything strictly above it. The carry
position is quantified, not chosen: nothing here needs a choice function, and the
relation is first-order in the two addresses.
Equations
- DescriptiveComplexity.WMIncr Le s t = ∃ (u : α), ¬s u ∧ (∀ (v : α), DescriptiveComplexity.WMLt Le u v → s v) ∧ ∀ (v : α), t v ↔ v = u ∨ s v ∧ ¬DescriptiveComplexity.WMLt Le u v
Instances For
Dependency graph
The carry position of an increment is unique: it is the greatest element outside the address, and an address has only one such.
Dependency graph
The increment is unique, so a program stepping by it is deterministic.
Dependency graph
The increment is above the address: they differ at the carry position, and agree at every element below it – that is, above it in significance.
Dependency graph
The increment differs from the address, at the carry position.
Dependency graph
Every address but the last has an increment.
Dependency graph
Every address but the first has a predecessor. The carry position of the
step into an address is the greatest element that address contains: everything
above it leaves, and it is what the increment put there. A program walking its
mirror downwards – which is what an increment does, the least significant digit
being the Le-greatest element – needs this end of the statement.
Dependency graph
Strict comparison of addresses is weak comparison plus difference.
Dependency graph
A set below an upward-closed address is contained in it: at the element where they first differ the smaller one says no, and everything above that element is in the larger by closure – so nothing the smaller holds escapes. This is what says a register enumerated up to a region (the address whose elements are exactly a final segment's cells) never holds a cell outside it.
Dependency graph
An address holding nothing is below every address.
Dependency graph
A sub-address is below the address containing it. The least element where two addresses differ decides the comparison, and if one is contained in the other that element is in the larger – so a program that only ever clears cells moves its address down the tape, and one that only sets them moves it up.
Dependency graph
An address holding everything is above every address.
Dependency graph
The strict part of the address order is the strict comparison of
addresses: the fold of DescriptiveComplexity.Problems.Wide.Fold writes its
strict order as DescriptiveComplexity.WMLt of whatever relation it is given, and
at addresses that is DescriptiveComplexity.WMSetLt.
Dependency graph
Nothing lies strictly between an address and its increment: an address weakly between them agrees with one of the two. This is the half that makes the increment an immediate successor, and the only place the linearity of the address order is used.
Dependency graph
An address is below the increment of another exactly when it is at or below
that other: the increment is the immediate successor, so < t' and ≤ t are
the same. This is the hypothesis the fold of
DescriptiveComplexity.Problems.Wide.Fold asks about the successor, discharged for
addresses.
Dependency graph
The empty address's successor is at or below every nonempty address: an address strictly below it is at or below the empty one, hence empty. This is what puts a program's data – every address it marks anything at – inside a stretch that starts one step above the cell its head began on.
Dependency graph
An increment cannot overshoot: the successor of an address strictly below another is still at or below it. A walk that stops at the first address a marker sits on reads this at every round.
Dependency graph
Every address is reached from the empty one by increments #
The chain and its monotonicity, over an arbitrary linearly ordered index. The universe of a wide machine is one such index and so is the index of a file, which is what a program handed its file counts its rounds over.
Every address is reached from the empty one by increments: a finite
chain, each step the binary increment, ending at the target. This is
DescriptiveComplexity.exists_wmChain over an arbitrary index.
Dependency graph
The chain is strictly increasing: two positions compare as their addresses do, by induction on the distance.
Dependency graph
The three primitives, on the universe of a wide machine #
Only addresses are positions, so both ends of a step are addresses.
Dependency graph
The head of a wide machine starts on the empty address.
Dependency graph
The last cell of a wide machine is the full address.
Dependency graph
A step of a wide machine is the binary increment of its address. The
machine's own primitive is DescriptiveComplexity.SuccPos, which says only that
no position lies strictly between; this identifies it with the increment, which is
what a program can maintain.