1. Models of computation In Turing (1937) a characterization is given of those functions that can be computed using a mechanical device. Moreover it was shown that some precisely stated problems cannot be decided by such functions. In order to give evidence for the power of this model of computation, Turing showed in the same paper that machine computability has the same strength as definability via �-calculus, introduced in Church (1936). This model of computation was also introduced with the aim to show that undecidable problems exist. Turing Machine computability forms a very simple model that is easy to mechanize. Lambda calculus computability, on the other hand, is a priori more powerful. Therefore it is not obvious that it can be executed by a machine. As Turing showed the equivalence of both models also �-calculus computations can be performed by a machine and also Turing Machine computations are powerful. This gave rise to the combined Church-Turing Thesis The notion of intuitive computability is exactly captured by �-definability or by Turing computability. Computability via Turing machines gave rise to Imperative Programming. Computability described via �-calculus gave rise to Functional Programming. As imperative programs are more easy to run on hardware, this style of software became predominant. We present major advantages of the functional programming paradigm over the imperative one, that are applicable, provided one is has the mental capacity to explicitly deal with simple abstractions.
[1]
Hugo Herbelin,et al.
The Coq proof assistant : reference manual, version 6.1
,
1997
.
[2]
Xavier Leroy,et al.
A Formally Verified Compiler Back-end
,
2009,
Journal of Automated Reasoning.
[3]
Alan M. Turing,et al.
Computability and λ-definability
,
1937,
Journal of Symbolic Logic.
[4]
Simon L. Peyton Jones,et al.
Complete and decidable type inference for GADTs
,
2009,
ICFP.
[5]
Kevin Hammond,et al.
Research Directions in Parallel Functional Programming
,
1999,
Springer London.
[6]
Simon L. Peyton Jones,et al.
Runtime support for multicore Haskell
,
2009,
ICFP.
[7]
John McCarthy,et al.
LISP 1.5 Programmer's Manual
,
1962
.
[8]
A. Church.
An Unsolvable Problem of Elementary Number Theory
,
1936
.
[9]
D. A. Turner,et al.
Miranda: A Non-Strict Functional language with Polymorphic Types
,
1985,
FPCA.
[10]
Robin Milner,et al.
Definition of standard ML
,
1990
.
[11]
Peyton Jones,et al.
Haskell 98 language and libraries : the revised report
,
2003
.
[12]
Marinus J. Plasmeijer,et al.
iTasks: executable specifications of interactive work flow systems for the web
,
2007,
ICFP '07.
[13]
Ulf Norell,et al.
A Brief Overview of Agda - A Functional Language with Dependent Types
,
2009,
TPHOLs.