User-defined theories for SMT-solvers