L = { <M,t> : t ∈ L(M) and s ∉ L(M), t,s ∈ {a,b}*, where t is the string after s in a lexicographic ordering of {a,b}*}.
Decidability and Undecidability Proofs
Sections 21.4 - 21.7
Is There a Pattern?
● Does L contain some particular string w?
● Does L contain ?
● Does L contain any strings at all?
● Does L contain all strings over some alphabet ?
● A = {<M, w> : TM M accepts w}.
● A = {<M> : TM M accepts }.
● AANY = {<M> : there exists at least one string that
TM M accepts}.
● AALL = {<M> : TM M accepts all inputs}.
Rice’s Theorem
No nontrivial property of the SD languages is decidable.
or
Any language that can be described as:
{<M>: P(L(M)) = True}
for any nontrivial property P, is not in D.
A nontrivial property is one that is not simply:
- True for all languages, or
- False for all languages.
Applying Rice’s Theorem
To use Rice’s Theorem to show that a language L is not in D we must:
● Specify property P.
● Show that the domain of P is the SD languages.
● Show that P is nontrivial:
● P is true of at least one language
● P is false of at least one language
Applying Rice’s Theorem
1. {<M> : L(M) contains only even length strings}.
2. {<M> : L(M) contains an odd number of strings}.
3. {<M> : L(M) contains all strings that start with a}.
4. {<M> : L(M) is infinite}.
5. {<M> : L(M) is regular}.
6. {<M> : M contains an even number of states}.
7. {<M> : M has an odd number of symbols in its tape
alphabet}.
8. {<M> : M accepts within 100 steps}.
9. {<M>: M accepts }.
10. {<Ma, Mb> : L(Ma) = L(Mb)}.
Proof: Let P be any nontrivial property of the SD languages.
H = {<M, w> : TM M halts on input string w}
R
(?Oracle) L2 = {<M> : P(L(M)) = T}
Either P() = T or P() = F. Assume it is F (a matching proof exists if it is T).
Since P is nontrivial, there is some SD language LT such that P(LT) is T. Let K be some Turing machine that semidecides LT.
Proof of Rice’s Theorem
R(<M, w>) =
1. Construct <M#>, so M#(x) operates as follows:
1.1. Copy its input x to another track for later.
1.2. Erase the tape.
1.3. Write w on the tape.
1.4. Run M on w.
1.5 Put x back on the tape and run K on x.
2. Return <M#>.
Proof of Rice’s Theorem
Recall: K decides LT and we know that P(LT) is True.
Claim: If Oracle exists, C = Oracle(R(<M, w>)) decides H.
Proof:
● R can be implemented as a Turing machine.
● C is correct:
But no machine to decide H can exist, so neither does Oracle.
Proof, Continued
---------------
1. Construct <M#>, so M#(x) operates as follows:
1.1. Copy its input x to another track for later.
1.2. Erase the tape.
1.3. Write w on the tape.
1.4. Run M on w.
1.5 Put x back on the tape and run K on x.
2. Return <M#>.
Proof that R Can Be Implemented
● <M, w> H: M halts on w. M# makes it to 1.5.
So it is equivalent to K.
L(M#) = L(K) and P(L(M#)) = P(L(K)).
P(L(K)) is T, so P(L(M#)) is T.
Oracle decides P. Oracle accepts.
● <M, w> H: M does not halt on w. M# gets stuck in 1.4.
So it accepts nothing.
L(M#) = . P() = F.
Oracle decides P. Oracle rejects.
---------------
1. Construct <M#>, so M#(x) operates as follows:
1.1. Copy its input x to another track for later.
1.2. Erase the tape.
1.3. Write w on the tape.
1.4. Run M on w.
1.5 Put x back on the tape and run K on x.
2. Return <M#>.
Proof that C is Correct
Given a TM M, is L(M) Regular?
The problem: Is L(M) regular?
As a language: Is {<M> : L(M) is regular} in D?
No, by Rice’s Theorem:
● P = True if L is regular and False otherwise.
● The domain of P is the set of SD languages since it is
the set of languages accepted by some TM.
● P is nontrivial:
♦ P(a*) = True.
♦ P(AnBn) = False.
Given a Turing Machine M, is L(M) Regular?
H = {<M, w> : TM M halts on input string w}
R
(Oracle) L2 = {<M> : L(M) is regular}
R(<M, w>) =
1. Construct the description of M#(x):
1.1. Erase tape.
1.2. Write w on the tape.
1.3. Run M on w.
2. Return <M#>.
Is this correct?
Given a Turing Machine M, is L(M) Regular?
H = {<M, w> : TM M halts on input string w}
R
(Oracle) L2 = {<M> : L(M) is regular}
R(<M, w>) =
1. Construct M#(x):
1.1. Erase tape.
1.2. Write w on the tape.
1.3. Run M on w.
1.4. Accept
2. Return <M#>.
Is this correct?
Given a Turing Machine M, is L(M) Regular?
H = {<M, w> : TM M halts on input string w}
R
(Oracle) L2 = {<M> : L(M) is regular}
R(<M, w>) =
1. Construct M#(x):
1.1. Copy its input x to another track for later.
1.2. Erase the tape.
1.3. Write w on the tape.
1.4. Run M on w.
1.5. Put x back on the tape.
1.6. If x AnBn then accept, else reject.
2. Return <M#>.
Problem:
But We Can Flip
R(<M, w>) =
1. Construct the description <M#>, where M#(x) operates as follows:
1.1. Save x for later.
1.2. Erase the tape.
1.3. Write w on the tape.
1.4. Run M on w.
1.5. Put x back on the tape.
1.6. If x AnBn then accept, else reject.
2. Return <M#>.
If Oracle decides L2, then C = Oracle(R(<M, w>)) decides H:
● <M, w> H: M# makes it to step 1.5. Then it accepts x iff
x AnBn. So M# accepts AnBn, which is not regular.
Oracle rejects. C accepts.
● <M, w> H: M does not halt on w. M# gets stuck in step 1.4.
It accepts nothing. L(M#) = , which is regular.
Oracle accepts. C rejects.
But no machine to decide H can exist, so neither does Oracle.
Or, Doing it Without Flipping
R(<M, w>) =
1. Construct the description <M#>, where M#(x) operates as follows:
1.1. If x AnBn then accept, else:
1.2. Erase the tape.
1.3. Write w on the tape.
1.4. Run M on w.
1.5. Accept
2. Return <M#>.
If Oracle exists, C = Oracle(R(<M, w>)) decides H:
● C is correct: M# immediately accepts all strings AnBn:
● <M, w> H: M# accepts everything else in step 1.5. So
L(M#) = *, which is regular. Oracle accepts.
● <M, w> H: M# gets stuck in step 1.4, so it accepts nothing
else. L(M#) = AnBn, which is not regular. Oracle rejects.
But no machine to decide H can exist, so neither does Oracle.
Any Nonregular Language Will Work
R(<M, w>) =
1. Construct the description <M#>, where M#(x) operates as follows:
1.1. If x WW then accept, else:
1.2. Erase the tape.
1.3. Write w on the tape.
1.4. Run M on w.
1.5. Accept
2. Return <M#>.
If Oracle exists, C = Oracle(R(<M, w>)) decides H:
● C is correct: M# immediately accepts all strings WW:
● <M, w> H: M# accepts everything else in step 1.5. So
L(M#) = *, which is regular. Oracle accepts.
● <M, w> H: M# gets stuck in step 1.4, so it accepts nothing
else. L(M#) = WW, which is not regular. Oracle rejects.
But no machine to decide H can exist, so neither does Oracle.
Is L(M) Context-free?
How about: L3 = {<M> : L(M) is context-free}?
Is L(M) Context-free?
How about: L3 = {<M> : L(M) is context-free}?
R(<M, w>) =
1. Construct the description <M#>, where M#(x) operates as follows:
1.1. If x AnBnCn then accept, else:
1.2. Erase the tape.
1.3. Write w on the tape.
1.4. Run M on w.
1.5. Accept
2. Return <M#>.
1. Does P, when running on x, halt?
2. Might P get into an infinite loop on some input?
3. Does P, when running on x, ever output a 0? Or anything at
all?
4. Are P1 and P2 equivalent?
5. Does P, when running on x, ever assign a value to n?
6. Does P ever reach S on any input (in other words, can we
chop it out?
7. Does P reach S on every input (in other words, can we
guarantee that S happens)?
● Can the Patent Office check prior art?
● Can the CS department buy the definitive grading program?
Practical Impact of These Results
Turing Machine Questions Can be Reduced to Program Questions
EqPrograms =
{<Pa, Pb> : Pa and Pb are PL programs and L(Pa) = L(Pb)}.
We can build, in any programming language PL, SimUM:
- that is a PL program
- that implements the Universal TM U and so can simulate an arbitrary TM.
TM Questions and Program Questions
EqPrograms = {<Pa, Pb> : Pa and Pb are PL programs and L(Pa) = L(Pb)}.
Theorem: EqPrograms is not in D.
Proof: Reduction from EqTMs = {<Ma, Mb> : L(Ma) = L(Mb)}.
R(<Ma, Mb>) =
1. Build P1, a PL program that, on w, returns SimUM(Ma, w).
2. Build P2, a PL program that, on w, returns SimUM(Mb, w).
3. Return <P1, P2>.
If Oracle exists and decides EqPrograms, then C = Oracle(R(<Ma, Mb>))
decides EqTMs. C is correct. L(P1) = L(Ma) and L(P2) = L(Mb). So:
● <Ma, Mb> EqTMs: L(Ma) = L(Mb). So L(P1) = L(P2). Oracle(<P1, P2>)
accepts.
● <Ma, Mb> EqTMs: L(Ma) L(Mb). So L(P1) L(P2). Oracle(<P1, P2>)
rejects.
But no machine to decide EqTMs can exist, so neither does Oracle.
{<M, q> : M reaches q on some input}
HANY = {<M> : there exists some string on which TM M halts}
R
(?Oracle) L2 = {<M, q> : M reaches q on some input}
R(<M>) =
1. Build <M#> so that M# is identical to M except that, if M has a transition
((q1, c1), (q2, c2, d)) and q2 is a halting state other than h, replace that
transition with:
((q1, c1), (h, c2, d)).
2. Return <M#, h>.
If Oracle exists, then C = Oracle(R(<M>)) decides HANY:
● R can be implemented as a Turing machine.
● C is correct: M# will reach the halting state h iff M would reach some
halting state. So:
● <M> HANY: There is some string on which M halts. So there is some
string on which M# reaches state h. Oracle accepts.
● <M> HANY: There is no string on which M halts. So there is no string
on which M# reaches state h. Oracle rejects.
But no machine to decide HANY can exist, so neither does Oracle.
How many Turing machines does it take to change a light bulb?
How many Turing machines does it take to change a light bulb?
One.
The Universal Turing Machine
How many Turing machines does it take to change a light bulb?
One.
How can you tell whether your Turing machine is the one?
How many Turing machines does it take to change a light bulb?
One.
How can you tell whether your Turing machine is the one?
You can’t.
- Tim Nodine
There is an uncountable number of non-SD languages, but only a
countably infinite number of TM’s (hence SD languages). The class
of non-SD languages is much bigger than that of SD languages!
Non-SD Languages
Intuition: Non-SD languages usually involve either infinite
search or knowing a TM will infinite loop.
Examples:
- H = {<M, w> : TM M does not halt on w}.
- {<M> : L(M) = *}.
- {<M> : TM M halts on nothing}.
Non-SD Languages
● Contradiction
● L is the complement of an SD/D Language.
● Reduction from a known non-SD language
Proving Languages are not SD
Theorem: TMMIN =
{<M>: Turing machine M is minimal} is not in SD.
Proof: If TMMIN were in SD, then there would exist some Turing
machine ENUM that enumerates its elements. Define the following
Turing machine:
M#(x) =
1. Invoke obtainSelf to produce <M#>.
2. Run ENUM until it generates the description of some Turing
machine M whose description is longer than |<M#>|.
3. Invoke U on the string <M, x>.
Since TMMIN is infinite, ENUM must eventually generate a string that
is longer than |<M#>|. So M# makes it to step 3 and so is equivalent
to M since it simulates M. But, since |<M#>| < |<M>|, M cannot be
minimal. Yet it was generated by ENUM. Contradiction.
Contradiction
Suppose we want to know whether L is in SD and we know:
● L is in SD, and
● At least one of L or L is not in D.
Then we can conclude that L is not in SD, because, if it were,
it would force both itself and its complement into D, which we
know cannot be true.
Example:
● H (since (H) = H is in SD and not in D)
The Compliment of L is in SD/D
Theorem: HANY = {<M> : there does not exist any string on which TM M halts} is not in SD.
Proof: HANY is HANY =
{<M> : there exists at least one string on which TM M
halts}.
We already know:
● HANY is in SD.
● HANY is not in D.
So HANY is not in SD because, if it were, then HANY would be in D but it isn’t.
HANY
Theorem: If there is a reduction R from L1 to L2 and L1 is
not SD, then L2 is not SD.
So, we must:
- Choose a language L1 that is known not to be in SD.
- Hypothesize the existence of a semideciding TM Oracle.
Note: R may not swap accept for loop.
Using Reduction
H = {<M, w> : TM M does not halt on input string w}
R
(?Oracle) HANY = {<M> : there does not exist a string
on which TM M halts}
R(<M, w>) =
1. Construct the description <M#> of M#(x):
1.1. Erase the tape.
1.2. Write w on the tape.
1.3. Run M on w.
2. Return <M#>.
Using Reduction for HANY
R(<M, w>) =
1. Construct the description <M#> of M#(x):
1.1. Erase the tape.
1.2. Write w on the tape.
1.3. Run M on w.
2. Return <M#>.
If Oracle exists, then C = Oracle(R(<M, w>)) semidecides H:
● C is correct: M# ignores its input. It halts on everything or
nothing, depending on whether M halts on w. So:
● <M, w> H: M does not halt on w, so M# halts on
nothing. Oracle accepts.
● <M, w> H: M halts on w, so M# halts on everything.
Oracle does not accept.
But no machine to semidecide H can exist, so neither does Oracle.
Or We Could Use Reduction for HANY
Aanbn contains strings that look like:
(q00,a00,q01,a00,),
(q00,a01,q00,a10,),
(q00,a10,q01,a01,),
(q00,a11,q01,a10,),
(q01,a00,q00,a01,),
(q01,a01,q01,a10,),
(q01,a10,q01,a11,),
(q01,a11,q11,a01,)
It does not contain strings like aaabbb.
But AnBn does.
Aanbn = {<M> : L(M) = AnBn}
What’s wrong with this proof that Aanbn is not in SD:
H = {<M, w> : TM M does not halt on w}
R
(?Oracle) Aanbn = {<M> : L(M) = AnBn}
R(<M, w>) =
1. Construct the description <M#>, where M#(x) operates as follows:
1.1. Erase the tape.
1.2. Write w on the tape.
1.3. Run M on w.
1.4. Accept.
2. Return <M#>.
If Oracle exists, C = Oracle(R(<M, w>)) semidecides H:
Aanbn = {<M> : L(M) = AnBn}
If <M, w> is in H, L(M#) = . If <M, w> is not in H, L(M#) is *. Neither is AnBn. So Oracle makes no distinction between the two cases.
What about: H = {<M, w> : TM M does not halt on w}
R
(?Oracle) Aanbn = {<M> : L(M) = AnBn}
R(<M, w>) =
1. Construct the description <M#>, where M#(x) operates as follows:
1.1 Copy the input x to another track for later.
1.2. Erase the tape.
1.3. Write w on the tape.
1.4. Run M on w.
1.5. Put x back on the tape.
1.6. If x AnBn then accept, else loop.
2. Return <M#>.
If Oracle exists, C = Oracle(R(<M, w>)) semidecides H:
Aanbn = {<M> : L(M) = AnBn} is not SD
If <M, w> is in H, L(M#) = . If <M, w> is not in H, L(M#) is AnBn. So Oracle gets it backwards.
R(<M, w>) reduces H to Aanbn:
1. Construct the description <M#>:
1.1. If x AnBn then accept. Else:
1.2. Erase the tape.
1.3. Write w on the tape.
1.4. Run M on w.
1.5. Accept.
2. Return <M#>.
If Oracle exists, then C = Oracle(R(<M, w>)) semidecides H:
M# immediately accepts all strings in AnBn. If M does not halt on
w, those are the only strings M# accepts. If M halts on w,
M# accepts everything:
● <M, w> H: M does not halt on w, so M# accepts strings in
AnBn in step 1.1. Then it gets stuck in step 1.4, so it accepts
nothing else. It is an AnBn acceptor. Oracle accepts.
● <M, w> H: M halts on w, so M# accepts everything. Oracle
does not accept.
But no machine to semidecide H can exist, so neither does Oracle.
Aanbn = {<M> : L(M) = AnBn} is not SD
What about: H = {<M, w> : TM M does not halt on w}
R
(?Oracle) HALL = {<M> : TM halts on *}
Reduction Attempt 1: R(<M, w>) =
1. Construct the description <M#>, where M#(x)
operates as follows:
1.1. Erase the tape.
1.2. Write w on the tape.
1.3. Run M on w.
2. Return <M#>.
HALL = {<M> : TM halts on *}
H = {<M, w> : TM M does not halt on w}
R
(?Oracle) HALL = {<M> : TM halts on *}
Reduction Attempt 1: R(<M, w>) =
1. Construct the description <M#>, where M#(x) operates as follows:
1.1. Erase the tape.
1.2. Write w on the tape.
1.3. Run M on w.
2. Return <M#>.
If Oracle exists, C = Oracle(R(<M, w>)) semidecides H:
● <M, w> H: M does not halt on w, so M# gets stuck in step 1.3
and halts on nothing. Oracle does not accept.
● <M, w> H: M halts on w, so M# halts on everything. Oracle
accepts.
There May Be No Easy Way to Flip
R(<M, w>) reduces H to HALL:
1. Construct the description <M#>, where M#(x) operates as follows:
1.1. Copy the input x to another track for later.
1.2. Erase the tape.
1.3. Write w on the tape.
1.4. Run M on w for |x| steps or until M naturally halts.
1.5. If M naturally halted, then loop.
1.6. Else halt.
2. Return <M#>.
If Oracle exists, C = Oracle(R(<M, w>)) semidecides H:
● <M, w> H: No matter how long x is, M will not halt in |x|
steps. So, for all inputs x, M# makes it to step 1.6. So it
halts on everything. Oracle accepts.
● <M, w> H: M halts on w in n steps. On inputs
of length less than n, M# makes it to step 1.6 and halts.
But on all inputs of length n or greater, M# will loop in step
1.5. Oracle does not accept.
HALL = {<M> : TM halts on *}
EqTMs = {<Ma, Mb> : L(Ma) = L(Mb)}
We’ve already shown it’s not in D.
Now we show it’s also not in SD.
EqTMs = {<Ma, Mb> : L(Ma) = L(Mb)}
H = {<M, w> : TM M does not halt on w}
R
(?Oracle) EqTMs = {<Ma, Mb> : L(Ma) = L(Mb)}
R(<M, w>) =
1. Construct the description <M#>:
2. Construct the description <M?>:
3. Return <M#, M?>.
If Oracle exists, C = Oracle(R(<M, w>)) semidecides H:
● <M, w> H:
● <M, w> H:
EqTMs = {<Ma, Mb> : L(Ma) = L(Mb)}
R(<M, w>) =
1. Construct the description <M#>:
1.1 Erase the tape.
1.2 Write w on the tape.
1.3 Run M on w.
1.4 Accept.
2. Construct the description <M?>:
1.1 Loop.
3. Return <M#, M?>.
If Oracle exists, C = Oracle(R(<M, w>)) semidecides H: M? halts on nothing.
● <M, w> H: M does not halt on w, so M# gets stuck
in step 1.3 and halts on nothing. Oracle accepts.
● <M, w> H: M halts on w, so M# halts on
everything. Oracle does not accept.
L1 = {<M>: M has an even number of states}.
L2 = {<M>: |<M>| is even}.
L3 = {<M>: |L(M)| is even}.
L4 = {<M>: M accepts all even length strings}.
The Details Matter
L1 = {<M>: M has an even number of states}.
L2 = {<M>: |<M>| is even}.
L3 = {<M>: |L(M)| is even}.
H M L3: R(<M, w>) =
1. Construct the description <M#>, where M#(x) operates as follows:
1.1 Copy the input x to another track for later.
1.2 Erase the tape.
1.3 Write w on the tape.
1.4 Run M on w.
1.5 If x = then accept. Else loop.
2. Return <M#>.
● <M, w> H:
● <M, w> H:
The Details Matter
L1 = {<M>: M has an even number of states}.
L2 = {<M>: |<M>| is even}.
L3 = {<M>: |L(M)| is even}.
L4 = {<M>: M accepts all even length strings}.
The Details Matter
L1 = {<M>: M has an even number of states}.
L2 = {<M>: |<M>| is even}.
L3 = {<M>: |L(M)| is even}.
L4 = {<M>: M accepts all even length strings}
The Details Matter
H M L4: R(<M, w>) =
1. Construct the description <M#>, where M#(x) operates as follows:
1.1 Copy the input x to another track for later.
1.2 Erase the tape.
1.3 Write w on the tape.
1.4 Run M on w for |x| steps or until M naturally halts.
1.5 If M halted naturally, then loop. Else accept.
2. Return <M#>.
● <M, w> H:
● <M, w> H:
Consider :
L1 = {<M, w>: M rejects w}.
L2 = {<M, w>: M does not halt on w}.
L3 = {<M, w>: M is a deciding TM and rejects w}.
Accepting, Rejecting, Halting, and Looping
{<M, w>: M is a Deciding TM and Rejects w}
H = {<M, w> : TM M does not halt on w}
R
(?Oracle) {<M, w>: M is a deciding TM and rejects w}
R(<M, w>) =
1. Construct the description <M#>, where M#(x) operates as follows:
1.1 Erase the tape.
1.2 Write w on the tape.
1.3 Run M on w.
1.4 Reject.
2. Return <M#, >.
If Oracle exists, C = Oracle(R(<M, w>)) semidecides H:
● <M, w> H:
● <M, w> H:
Problem:
If <M, w> H, then M# isn’t a decider. So Oracle fails to accept.
{<M, w>: M is a Deciding TM and Rejects w}
HALL = {<M> : TM M halts on *}
R
(?Oracle) {<M, w>: M is a deciding TM and rejects w}
R(<M>) =
1. Construct the description <M#>, where M#(x) operates as follows:
1.1 Run M on x.
1.2 Reject.
2. Return <M#, >.
If Oracle exists, C = Oracle(R(<M>)) semidecides HALL:
● <M> HALL: M# halts and rejects all inputs. Oracle accepts.
● <M> HALL: There is at least one input on which M doesn’t halt. So M# is not a deciding TM. Oracle does not accept.
No machine to semidecide HALL can exist, so neither does Oracle.
What About These?
L1 = {a}.
L2 = {<M> : M accepts a}.
L3 = {<M> : L(M) = {a}}.
What About These?
L1 = {a}.
L2 = {<M> : M accepts a}.
L3 = {<M> : L(M) = {a}}.
H M L3: R(<M, w>) =
1. Construct the description <M#>, where M#(x) operates as follows:
1.1 If x = a, accept.
1.2 Erase the tape.
1.2 Write w on the tape.
1.3 Run M on w.
1.4 Accept.
2. Return <M#>.
● <M, w> H:
● <M, w> H:
<M, w> H: L(M#) = {a}.
<M, w> H: L(M#) = *.
{<Ma, Mb> : L(Ma) – L(Mb)}
{<Ma, Mb> : L(Ma) – L(Mb)}
R( ) =
Return <M?, M#>.
<M, w> H: L(M?) - L(M#) =
<M, w> H: L(M?) - L(M#) =
{<Ma, Mb> : L(Ma) – L(Mb)}
R is a reduction from H. R(<M, w>) =
1. Construct the description of M#(x) that operates as follows:
1.1. Erase the tape.
1.2. Write w.
1.3. Run M on w.
1.4. Accept.
2. Construct the description of M?(x) that operates as follows:
2.1. Accept.
3. Return <M?, M#>.
If Oracle exists and semidecides L, C = Oracle(R(<M, w>))
semidecides H: M? accepts everything, including . So:
- <M, w> H: L(M?) - L(M#) =
- <M, w> H: L(M?) - L(M#) =
- <M, w> H: L(M?) - L(M#) = * - = *.
- <M, w> H: L(M?) - L(M#) = * - *= .
| The Problem View | The Language View | Status |
| Does TM M have an even number of states? | {<M> : M has an even number of states} | D |
| Does TM M halt on w? | H = {<M, w> : M halts on w} | SD/D |
| Does TM M halt on the empty tape? | H = {<M> : M halts on } | SD/D |
| Is there any string on which TM M halts? | HANY = {<M> : there exists at least one string on which TM M halts } | SD/D |
| Does TM M halt on all strings? | HALL = {<M> : M halts on *} | SD |
| Does TM M accept w? | A = {<M, w> : M accepts w} | SD/D |
| Does TM M accept ? | A = {<M> : M accepts } | SD/D |
| Is there any string that TM M accepts? | AANY {<M> : there exists at least one string that TM M accepts } | SD/D |
| Does TM M accept all strings? | AALL = {<M> : L(M) = *} | SD |
| Do TMs Ma and Mb accept the same languages? | EqTMs = {<Ma, Mb> : L(Ma) = L(Mb)} | SD |
| Does TM M not halt on any string? | HANY = {<M> : there does not exist any string on which M halts} | SD |
| Does TM M not halt on its own description? | {<M> : TM M does not halt on input <M>} | SD |
| Is TM M minimal? | TMMIN = {<M>: M is minimal} | SD |
| Is the language that TM M accepts regular? | TMreg = {<M> : L(M) is regular} | SD |
| Does TM M accept the language AnBn? | Aanbn = {<M> : L(M) = AnBn} | SD |
IN SD OUT
Semideciding TM H Reduction
Enumerable
Unrestricted grammar
D
Deciding TM AnBnCn Diagonalize
Lexico. enum Reduction
L and L in SD
Context-Free
CF grammar AnBn Pumping
PDA Closure
Closure
Regular
Regular Expression a*b* Pumping
FSM Closure
Language Summary