Download presentation
Presentation is loading. Please wait.
Published byMorgan Sims Modified over 8 years ago
1
CS321 Functional Programming 2 © JAS 2005 4-1 The λ Calculus This is a formal system to capture the ideas of function abstraction and application introduced by Alzonzo Church and Haskell B Curry in the 1930s. A λ-term is defined as:- a variable x conventionally a lower case letter an abstraction λx.(M) an upper case letter conventionally represents any λ-term an application M N a bracketed term (M) Haskell has λ-terms – \x->M Note that application groups to the left – MNK means (MN)K
2
CS321 Functional Programming 2 © JAS 2005 4-2 Function application is straightforward. (λx.(f x)) y => f y substitute y for x in (f x) (λx.(f x)) y == [y/x](f x) (λx z.(z x)) y => (λx.(λz.(z x))) y => (λz.(z y)) (λx y.(y x)) y => (λx.(λy.(y x))) y => (λ.( )) but the two y ’s are different! y is said to be a bound variable (an argument) y is said to be a free variable (not bound) yyy
3
CS321 Functional Programming 2 © JAS 2005 4-3 We need to define the difference between free and bound variables. 1.The variable x occurs free in the expression x. No variable is bound in an expression consisting of a single variable. 2.The variable x occurs free (or bound) in YZ if and only if it occurs free (or bound) in Y or Z. 3.If a variable x does not occur in V then it occurs free (or bound) in λV.Y iff it occurs free (or bound) in Y. All occurrences of the elements of V are bound in λV.Y. 4.The variable x occurs free (or bound) in (Y) iff it occurs free (or bound) in Y.
4
CS321 Functional Programming 2 © JAS 2005 4-4 We can now define our substitution rules for [M/x]Y Rule 1 – single variables a) when Y is the variable x then [M/x]Y => M b) when Y is a variable other than x then [M/x]Y => Y Rule 2 – function applications when Y is the application W Z then [M/x]Y => ([M/x]W)([M/x]Z)
5
CS321 Functional Programming 2 © JAS 2005 4-5 Rule 3 – function abstraction We will assume all bound variables are preceded by a λ a)when Y is the abstraction λx.W then [M/x]Y => λx.W b) when Y is the abstraction λy.W and there are no free occurrences of x in W then [M/x]Y is λy.W c)when Y is the abstraction λy.W and there are no free occurrence of y in M then [M/x]Y is λy.[M/x]W d)when Y is the abstraction λy.W and there is a free occurrence of y in M then [M/x]Y is λz.[M.x]([z/y]W) where z is a variable name that does not occur free in M or Y. Therefore the binding of abstraction takes precedence and protects a function body from the effects of substitution if there is a name clash.
6
CS321 Functional Programming 2 © JAS 2005 4-6 Simplifying λ-terms There are 3 rules called conversion rules:- α : if there are no free occurrences of y in Z then λx.Z cnv α λy.[y/x]Z β : (λx.M) N cnv β [N/x] M η: if there are no free occurrences of x in M then (λx.M x) cnv η M β and η usually simplify (reduce the complexity of) expressions and are therefore called reduction rules.
7
CS321 Functional Programming 2 © JAS 2005 4-7 An expression that can be reduced is called a redex. (λx.M) N is a β-redex. (λx.M x) is an η-redex. An expression containing no redexes is said to be in Normal Form
8
CS321 Functional Programming 2 © JAS 2005 4-8 The First Church-Rosser Theorem If X cnv Y then there exists an expression Z such that X red Z and Y red Z. Corollary If an expression reduces to two normal forms then they must be inter-convertible using α-conversions.
9
CS321 Functional Programming 2 © JAS 2005 4-9 If A and B are two redexes in an expression M and the first occurrence of λ in A is to the left of the first occurrence of λ in B then A is said to be to the left of B. If A is a redex in M and it is to the left of all other redexes in M then A is called the leftmost redex of M. The Second Church-Rosser Theorem If X red Y and Y is in normal form then there is a reduction sequence from X to Y that involves successively reducing the leftmost redex. This is known as Normal Order Reduction
10
CS321 Functional Programming 2 © JAS 2005 4-10 Extending the λ-Calculus We will now add some simple extensions to the λ-calculus. (We could actually define these extensions with our existing calculus). numerical and logical constants basic arithmetic and logical operations a conditional expression construct plus = λx y. x + y max = λab. if a > b then a else b fib = λn.if n < 3 then 1 else fib(n-1)+fib(n-2)
11
CS321 Functional Programming 2 © JAS 2005 4-11 By simple referential transparency we should be able to substitute the λ -expression for fib, but if we do this we get an infinite expansion. To avoid this problem we need to define the concept of a Fixed Point of a function. The fixed points of a function are the set of values for which the function performs an identity transformation. fixed points of f = {X| forall xєX,f(x) = x} F = λgn.if n<3 then 1 else g(n-1)+g(n-2) fib is a fixed point of F
12
CS321 Functional Programming 2 © JAS 2005 4-12 Hypothesise existence of function Y that produces fixed point for arbitrary function f. f = Y F Every function (in a functional programming language) has at least one fixed point This gives us a fixed point X of F as X = ( λx.F(xx)) ( λx.F(xx)) X cnv β F(( λx.F(xx))( λx.F(xx))) => F(X) This gives us Y = λh.(( λx.h(xx))( λx.h(xx)))
13
CS321 Functional Programming 2 © JAS 2005 4-13 Theorem – Böhm Given the expression G = λyf.f(yf), then M is a fixed point operator iff M = GM. Hence we can confirm that Y is a fixed point operator Y = λh.((λx.h(xx))(λx.h(xx))) cnv β λh.h((λx.h(xx))(λx.h(xx))) cnv β λh.h((λf.λx.f(xx))(λx.f(xx)))h) = λh.h(Yh) = GY
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.