Programming, specification, and interactive theorem proving : towards a unified language based on equational logic, rewriting logic, and type theory