I forgot to mention SMT-LIB[1] and pySMT[2]. I don't want to say their are optimal, I just think You might find it interesting.
I think it would be even better with Curryed[0] Functions. As an example ``'(f a1 a2)'' is just a Syntactic Sugar for ``'((f a1) a2)''.
Don't forget something like `help' in Python :) .