First Order Logic

Maybe you could override \_\_new\_\_ instead of \_\_init\_\_, and pass <code>Symbol(name)</code> to the super-class constructor.
Something like
obj = super(Callable, cls).\_\_new\_\_(cls, Symbol(name))
obj._name = name
return obj

This way, you won't have to overwrite \_\_eq\_\_ and \_\_hash\_\_. The SymPy core will take care of it automatically, by comparing the cls and the args.
Or maybe I missing something?