Halt0 = {<M>|M is a TM and M halts on epsilon"}

First we'll show L2 is not in Co-RE; i.e L1 is not in RE.

Reduction from halt0 to L2 (the complement of L1):

On input <M> (input to halt0), f builds M', TM that works as follow:

On input <N>

1. Run M on epsilon

2. If it halts then Run N on epsilon

3. If N halts then accepts.

Correctness: If M halts on epsilon then we get to check N which halts on epsilon iff N is a TM that is in Halt0, L(M')=halt0, a language in RE\R, L(M') is in RE\R, its in L2. (if M doesnt halt then L(M')=empty because it doesnt accepts any N. L(M') is in R, its in L1).

Second we'll show L1 is not in CoRE; i.e L2 is not in RE

On input <M> (input to halt0), f builds M', TM that works as follow:

On input <N>

1. Run Both M on epsilon and N on epsilon

2. If one of these halts then accept.

Correctness: If M halts on epsilon then M' accepts all N, L(M')= sigma* which is in R, L(M') is in L1.

If M doesnt halt on epsilon then N halts iff N is a TM in halt0. as above then L(M')=halt0, halt0 is in RE\R, L(M') is in RE, its in L2.