Theorem proving software systems