Applications of theorem-proving to problem-solving