For a particular system, a number of different abstractions with corresponding proofs might be made, increasing the confidence in the correctness of the system. The specific abstractions that need to be made are likely to be problem-dependent, and need to be chosen intuitively. While it would be fairly straightforward to automatically translate large parts of a program into logic or process algebra, the resulting specification is not likely to be tractable for proof. Proofs are often done using a separate language. This does not mean, however, that proof always requires the use of a separate language.
Some languages actually enable both proof and simulation.
For example, Promela, while actually a model checking language, looks a lot like a traditional programming language, and might be used as one. In practice, it is likely that some kinds of proof will require a separate language. While the language being used happens to be one that is particularly suitable for proof, there's little proof being done. The languages aren't executable either. One might as well be using natural language.