Theorem Proving in Higher-Order Logics