 
Summary: Under consideration for publication in J. Functional Programming 1
Typed calculi with one binder
Fairouz Kamareddine
School of Mathematical and Computer Sciences, HeriotWatt University,
Riccarton, Edinburgh EH14 4AS, Scotland,
http: // www. macs. hw. ac. uk/ ~fairouz
Abstract
Type theory was invented at the beginning of the twentieth century with the aim of
avoiding the paradoxes which result from the selfapplication of functions. calculus was
developed in the early 1930s as a theory of functions. In 1940, Church added type theory
to his calculus giving us the influential simply typed calculus where types were simple
and never created by binders (or abstractors). However, realising the limitations of the
simply typed calculus, in the second half of the twentieth century we saw the birth of new
more powerful typed calculi where types are indeed created by abstraction. Most of these
calculi use two binders and to distinguish between functions (created by abstraction)
and types (created by abstraction). Moreover, these calculi allow reduction but not
reduction. That is, (x:A.B)C B[x := C] is only allowed when is but not
when it is . This means that, modern systems do not allow types to have the same
instantiation right as functions. In particular, when b has type B, the type of (x:A.b)C
is taken immediately to be B[x := C] instead of (x:A.B)C. Extensions of modern type
