As to the former, main emphasis is given to algebraic specification techniques for descriptions of data and algorithms, and to temporal logic techniques for descriptions of dynamic system behaviours. The development process is viewed as a transformation activity that proceeds by way of refinements of specifications. Functional programming Programs should be formulated at the highest possible level of abstraction. This is true regardless of whether they are written directly or derived from a specification. Such a level of abstraction is provided by functional languages.
Compilation techniques Functional languages pose a number of challenges for their compilers.
Of foremost importance is the issue of the efficiency of the generated code. But the combination of parameterization and polymorphism with overloading and mixfix notation also poses challenging tasks for the front end. An application domain where formal methods are mandatory is the production of safety-critical software , such as car electronics, traffic control and the like. Massively parallel programs Another kind of application where formal methods are indispensable is the programming of massively parallel computers. In particular, the currently dominant class of MIMD machines with distributed memory is extremely challenging here.