The upper fence: a machine's acceptance is a sentence of the bit-level logic #
Every problem decided by an alternating machine with a logarithmic clock and a
bit-level base is defined by a prenex sentence of FO(≤, +, BIT)
(DescriptiveComplexity.LTDecidable.bitDefinable). With
DescriptiveComplexity.BitDefinable.ltDecidable this makes the model exactly
that logic.
The four moving parts #
- The guesses are quantifiers. A register holds an element of the universe,
and filling it existentially or universally is
∃or∀– the alternation structure of the machine is the quantifier prefix of the sentence, on the nose. - A query is an atom. Reading the instance at a tuple of registers is an atomic formula of the input vocabulary; no encoding of addresses is involved, which is the whole reason the model fits a structure-based framework.
- A read is an atom too.
DescriptiveComplexity.BaseTest.bitis the bit atom of the logic and nothing more: both name a bit position by an element, so the translation has nothing to do. - A sweep is a guessed trace. This is the content. A sweep carries
σbits of state past each of theposCount Abit positions, so its entire history isσbit vectors over the positions – and a bit vector over the positions is an element of the universe. The formula therefore guessesσelements, says withDescriptiveComplexity.BitIxthat the bit of thej-th at each index is what the transition of the sweep produces there, and reads acceptance off the top. Determinism of the sweep makes the guess unique, so the existential is faithful.
Two places the index naming pays #
The trace is pinned by a condition relating the bit at an index to the bit at
the index below, and under the index naming that is the cover relation of the
order (DescriptiveComplexity.stepAt), where naming positions by their place
value made it a doubling. The end of the tape is likewise read rather than
computed: DescriptiveComplexity.IsTopIx is “the highest index carrying a bit of
the greatest element”, an order condition on the bit atom
(DescriptiveComplexity.isTopIx_iff_bits).
The one asymmetry: the last position #
A bit vector over all the positions need not be a rank – the universe need not
have a power of two elements – so the trace elements can only carry the state up
to the index below the top (DescriptiveComplexity.exists_orank_testBit). The
state after the top position is therefore carried by σ further elements used
as flags, one bit each, read as “nonzero rank”. Everything else in the
construction is uniform.
Two statements, one construction #
Landing in FO(≤, +, BIT) is what the construction below does; landing in
FO(≤, +, ×) is that plus one lemma – DescriptiveComplexity.powArithDef, the
definability of i ↦ 2 ^ i. Both are unconditional, and the statement of record
here is the first, DescriptiveComplexity.LTDecidable.bitDefinable: it is the
classical logic for AC⁰, and it is what the converse direction reads.
Boolean expressions, read as formulas #
A Boolean expression of definable bits is definable: the translation is a recursion over the expression, not an enumeration of its truth table.
Dependency graph
The trace of a sweep #
The transition of a sweep at an index, as a statement about a guessed
trace: the state bits before the position are the initial ones at the lowest
index, and the trace bits at the index covered by this one otherwise. Under
the index naming the previous position is the predecessor in the order, so
nothing but ≤ is needed to find it.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
What the formula asks of the guessed trace and flags: the trace records the state after each index below the top, the flags record the state after the top position, and the acceptance condition holds of the flags – of the initial state, if the universe has no bit position at all.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The state the witnesses record after position i: a trace bit below the
top, a flag at the top.
Equations
- DescriptiveComplexity.storedAfter S t f i j = if i + 1 < DescriptiveComplexity.posCount A then (DescriptiveComplexity.orank (t j)).testBit i = true else DescriptiveComplexity.orank (f j) ≠ 0
Instances For
Dependency graph
A top index exists exactly when the universe has more than one element.
Dependency graph
The transition read from the trace is the transition of the sweep: at
the index i, the guessed bits say exactly what the automaton computes from the
state before that position.
Dependency graph
The guessed trace is the run: the witnesses of the formula record, position by position, the states of the sweep. Determinism does the work – the local conditions pin the trace by induction along the indices.
Dependency graph
The formula says what the sweep does.
Dependency graph
Definability of the machine #
The transition condition at an index is definable.
Dependency graph
A sweep is definable: the formula guesses the trace and the flags, and asks that they be the run.
Dependency graph
A base test is definable: sweeps by the construction above, reads and queries as atoms, and the Boolean structure by the closure lemmas.
Dependency graph
The inclusion #
The machine model is inside the bit-level logic: every problem decided
by an alternating machine with a logarithmic clock and a bit-level base is
defined by a prenex sentence over ≤, + and the bit at an index. The guesses
are the quantifier prefix, the queries and the reads are atoms, and each sweep is
a guessed trace pinned by its transition.
With DescriptiveComplexity.BitDefinable.ltDecidable this makes the fence an
equality: the machine model is exactly characterized by a logic, and by the
logic that is classically AC⁰.
Dependency graph
The machine model is inside AC⁰: a corollary of the statement above and
of the translation of the bit-level logic into FO(≤, +, ×), whose bit atom is
DescriptiveComplexity.powArithDef and whose other atoms are numeric predicates
outright.