Another way to prove E is not RE:
To prove certain language is Turing reconizable or not following step is need to do:
1. Select any Turing reconizable language like here I am taking
ATM{<M,w> | M is a TM and M accept w}
2.Find the reduction function from ATM to the complement of given language E.
If we able to find a reduction then E is not Turing Reconizable.
The reduction Function(TM F):
F = "On input <M,W> where M is a encoding of TM and w is a string"
1. Construct a new TM M'
M' = "On input x where x is string"
a. if x!=w "reject"
b. else RUN ATM on x ,if ATM "accept" then "accept" else "reject"
2. Output M'.
[ So, Basically M' is a TM which may accept language consisting of 'w' only or its a empty language. So we can feed M' to E , if E accept that mean w is present in the language which indirectly imply ATM accept w]
So, ATM <m E'
===> ATM' <m E but we know ATM' is not Turing Reconizable because ATM is undecidable and ATM is Turing Reconizable.
So, E is not Turing Reconizable.
Note: E' is Turing Reconizable and E is Undecidable.