Not((x, y)) seems to be a curious use of Not. What does it signify? I don't think its a literal. If that is the case, then your code (using 'elif literal.is_Not and len(literal.args) == 1:') might give the wrong output. 
I will modify is_literal  to give True for True and False also. In that case, we would probably have to figure out what literal_symbol(True) will do.