Higher Order Logic Theorem Proving and Its Applications