Uses of Programming by Contract: Contracts can also be used for dynamic, temporal properties (Mehlitz and Penix 2005), which are especially useful to verify protocol compliance (for instance, requiring the test state to keep track of previous evaluations). However, this does not provide the documenting aspect of contracts, but rather uses them as a convenient instrumentation mechanism.
There also have been attempts to use contracts as input for theorem provers (ACL, SPARKAda, Eiffel), but this usually requires additional language features and significantly more effort.