The specification is a formal statement of what the system is supposed to do. Looks quite different from code. Usually consists of assertions about what is true at certain points in the program. This only works if the specification and the code are quite different in style. No, because it's likely that errors made in one place would also be made in the other.
Verification is extremely hard.
It has been used for only a few systems of any size, and was extremely difficult even then. Specification can take much longer than writing the initial code. Checking the specification against the code is also hard. A program can't usually do the job without some human help. When the two don't match, it's very hard to figure out what's wrong.