The certificate Immerman–Szelepcsényi's machine guesses #
⚠️ Unreviewed by Bolton
Complexitylib.Classes.Containments.Internal.InductiveCounting isolates the counting principle:
a subset of a round as large as the round is the round. This file turns that principle into the
shape a machine can verify, which is what stands between it and NL ⊆ coNL.
Two things have to be checkable with only logarithmically many bits in hand.
Membership in a round becomes a walk: a code lies in round i exactly when there is a
sequence of i steps from the start, each of which either stays put or moves to a successor
(Complexity.NTM.mem_reachCodes_iff_walk). A machine verifies such a walk holding only the
current code and the step index — never the walk itself.
Non-membership becomes a round list: a list of distinct members of the round, at least as
long as the round (Complexity.NTM.RoundList). A machine never holds the list either; it guesses
the entries one at a time, checks each against a walk, counts them, and compares the count against
the round's size. Complexity.NTM.not_mem_of_roundList is what licenses the negative conclusion,
and Complexity.NTM.roundList_exists is what says an honest prover can always supply one.
Main definitions #
Complexity.NTM.RoundList— a list that exhausts a round
Main results #
Complexity.NTM.mem_reachCodes_iff_walk— membership in a round is a walkComplexity.NTM.roundList_exists— a round can always be listedComplexity.NTM.not_mem_of_roundList,Complexity.NTM.mem_of_roundList— what a list decidesComplexity.NTM.card_reachCodes_zero— the count the machine starts fromComplexity.NL_complement_certificate_internal— the complement as a certificate
Membership is a walk #
Membership in a round is a walk. A code lies in round i exactly when some sequence of
i steps from the start reaches it, each step either staying put or moving to a successor. This
is the form a machine verifies: it holds only the current code and the step index.
A round as a list #
A list that exhausts a round: distinct members, at least as many as the round has. The machine never holds such a list — it guesses the entries one at a time and counts them.
Equations
Instances For
What a round list decides, negatively. A code absent from a list that exhausts the round is not in the round — a negative fact, certified by a count.
And positively: every member of the round appears.
The count the machine starts from #
The complement, as a certificate #
The complement of an NL language is a certificate a machine can guess. An input is
outside the language exactly when the last round of the search can be listed with none of its
members accepting. Every quantity here is an explicit arithmetic function of the input length,
and the list is only ever consumed one entry at a time: the machine guesses an entry, verifies it
by a walk (Complexity.NTM.mem_reachCodes_iff_walk), checks it is not accepting, counts it, and
at the end compares the count against the round's size. That comparison is what makes the
absence of an accepting code a positive certificate.