I think I understand the basics of reduction, however I'm far from confident with using the techniques.
I have a couple of examples that I'm struggling with:
L1 = {< M > | M accepts an infinite amount of strings that end in a}
L2 = {< M > | L(M) ∈ SD}
Here is what I have tried for the first one:
By reduction of ¬H = {: Turing Machine M does not halt on w} to L.
R (< M, w >) =
1. Construct < M# >, where M# operates as follows:
1.1 Save it's input on a second tape
1.2 Erase the tape
1.3 Write w
1.4 Run M on w for n steps, or until it halts
1.5 If M has halted, then intentionally loop
1.6 Else accept
2. Return < M# >
If < M# > exists and semi-decides L, then R semi-decides ¬H.
However, I'm assuming no machine can semi-decide ¬H, thus the language is not in SD or D? But I'm not really sure why, or how…
Any help is appreciated, thank you!
Best Answer
I can't follow your reduction, although there is indeed a (many-one) reduction of $\neg H$ to $L_1$; so, if $L_1$ is semidecidable, $\neg H$ is semidecidable.
You're also right that $\neg H$ is not, in fact, semidecidable; and that therefore $L_1$ is not semidecidable.
To see that $\neg H$ is not semidecidable:
Is $H$ semidecidable?
What do you know about a language, such that it and its complement are semidecidable?
As to the other question: I suspect you are thinking too hard about this one. When is the language accepted by some Turing machine a semidecidable language? (HINT: what does "semidecidable" mean?)