Since it is convenient for the developer, the same paradigm are often used for implementations and specifications, e.g.
- for testing (e.g. Java for the implementation and unit tests, Scala for the implementation and property testing)
- for model-based testing (e.g. C# for the implementation and specifications using Spec Explorer, or Java for the implementation and specifications using Conformiq)
- for verification (e.g. C for some embedded software and specifications in the C-like language Promela for model checking, or Dafny, which integrates implementation and specification).
There even seems to be a trend in this direction.
I always thought using different paradigms would help think on different abstraction levels and more generally in different structures, and that faults could be detected much better that way, when checking the implementation against the tests/specification (similar to using design diversity for fault tolerant systems).
So is it true that different paradigms for the implementation and specification can avoid more faults? Do you have a citable reference?