First, Cp is a function in the expression Cp(I) since it is applied to an argument. First-order logic does not allow quantifying over functions. You can replace Cp(I) by R(Cp, I) where R (for "result") is a predicate symbol, and similarly for Turing machines (TMs) and problems.

Second, since you mention TMs and C++ programs, you should appreciate the fact that they are syntactic objects constructed using specific rules. A TM is not a C++ program, which is not a Java program, even if all three solve the same problem. So, if you need a formal proof, please specify the proof calculus, which is also a requirement is this sticky thread. Without it, you can only write an informal proof, which is similar to a description of an algorithm in English.