12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

23
03/26/22 03/26/22 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction A Simple Introduction

Transcript of 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

Page 1: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 11

GC16/3011 Functional Programming

Lecture 2

The Lambda Calculus:A Simple IntroductionA Simple Introduction

Page 2: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 22

Notices:Notices:

Beware – lecture on 9Beware – lecture on 9thth Feb cancelled Feb cancelled

Page 3: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 33

Contents

• The “assembly language” for Miranda• Very simple syntax• Rules for evaluation• Order of applying the rules• Terminology: “bound” and “free”

Page 4: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 44

• This is the “assembly language” for Functional Languages

• Very simple (few operators and few rules)

• NOT SEQUENTIAL

• A program is an expression (like arithmetic) rather than a sequence of instructions

• All it does is return a value (no side effects)

The Lambda Calculus

Page 5: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 55

program :: expression

expression :: x

| expression expression

| x . expression

a function

an argument

… applied to …

Lambda Calculus Syntax

Page 6: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 66

programprogram

expressionexpression

expressionexpression

xx

expressionexpression expressionexpression

xx .. expressionexpression

Lambda Calculus Syntax (2)

Page 7: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 77

• This minimal syntax is often extended with:This minimal syntax is often extended with:• Constants: Constants:

• values (such as 3) and operators (such as +, * ) values (such as 3) and operators (such as +, * ) • Though values and operators are often not distinguished, we will Though values and operators are often not distinguished, we will

treat them differentlytreat them differently

• Types (such as Int, Bool)Types (such as Int, Bool)• but we will not cover the typed lambda calculusbut we will not cover the typed lambda calculus

• Extra brackets for grouping (such as (x) )Extra brackets for grouping (such as (x) )

Syntax extensions

Page 8: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 88

program :: expressionprogram :: expression

expression :: xexpression :: x | constant| constant | operator| operator | expression expression| expression expression

| | x x .. expression expression | ( expression )| ( expression )

Untyped Extended Syntax

Page 9: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 99

• Functions do Functions do notnot have names! have names!• They can be defined but must be used immediatelyThey can be defined but must be used immediately

• Function arguments DO have namesFunction arguments DO have names• used inside the functionused inside the function

• Functions can be arguments to other functionsFunctions can be arguments to other functions• that way they can have names that way they can have names • and can be used many timesand can be used many times• (inside the other function)(inside the other function)

Lambda Calculus Functions

Page 10: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 1010

• To define the (anonymous) function taking one To define the (anonymous) function taking one argument (called “x”) which adds 1 to x and returns argument (called “x”) which adds 1 to x and returns the sum as its result:the sum as its result:

x . ( (+ x) 1)x . ( (+ x) 1)

• Often simplified to one of the following (since + needs Often simplified to one of the following (since + needs both arguments):both arguments):

x . ( + x 1 )x . ( + x 1 ) x . ( x + 1 )x . ( x + 1 )

Defining a function

Page 11: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 1111

program :: expressionprogram :: expression

expression :: xexpression :: x | constant| constant | operator| operator | expression expression| expression expression | expression operator expression| expression operator expression

| | x x .. expression expression | ( expression )| ( expression )

Untyped Extended Syntax (2)

Page 12: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 1212

• To apply the previously defined function to the To apply the previously defined function to the constant number 3:constant number 3:

( ( x . ( x + 1 ) ) 3 x . ( x + 1 ) ) 3

Using (“applying”) a function

Page 13: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 1313

reductionreduction

reductionreduction

reduction reduction ( if x not free in E)( if x not free in E)

x . Ex . E y . E [ y / x ]y . E [ y / x ]

x . E ) z x . E ) z E [ z / x ]E [ z / x ]

x . ( E x )x . ( E x ) E E

Rules for Evaluation (1)

Page 14: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 1414

rulesrules there is a separate rule for evaluating each primitive there is a separate rule for evaluating each primitive

operator (such as +)operator (such as +) Example: the rule for + says that 3 + 4 evaluates to Example: the rule for + says that 3 + 4 evaluates to

77 Name clashesName clashes::

x . ( ( x . ( ( x . ( x + 3 ) ) ( x + 4 ) ) ) 5x . ( x + 3 ) ) ( x + 4 ) ) ) 5

x . ( 5 + 3 ) ) ( 5 + 4 )x . ( 5 + 3 ) ) ( 5 + 4 ) WRONG!!!WRONG!!!

Rules for Evaluation (2)

Page 15: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 1515

• Normal Order ReductionNormal Order Reduction• ““leftmost-outermost” firstleftmost-outermost” first• guaranteed to terminate (if termination possible)guaranteed to terminate (if termination possible)

• Other possible reduction ordersOther possible reduction orders• applicative orderapplicative order• parallel reductionparallel reduction

• All strategies guaranteed to give same result (caveat All strategies guaranteed to give same result (caveat termination): termination): “Normal Form”“Normal Form” !!!!!! !!!!!!

Reduction Orders

Page 16: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 1616

( 5 + 3 )( 5 + 3 )

88

using theusing therule forrule for

++

Lambda Calculus Examples (1)

Page 17: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 1717

( ( x . ( x + 3 ) ) 5x . ( x + 3 ) ) 5

( 5 + 3 )( 5 + 3 )

usingusingreductionreduction

88

using theusing therule forrule for

++

Lambda Calculus Examples (2)

Page 18: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 1818

x . ( ( x . ( ( y . ( x + y ) ) 3 ) ) 5y . ( x + y ) ) 3 ) ) 5

( ( y . ( 5 + y ) ) 3y . ( 5 + y ) ) 3

usingusingreductionreduction

88

as beforeas before

Lambda Calculus Examples (3)

Page 19: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 1919

x . ( ( x . ( ( x . ( x + 3 ) ) x ) ) 5x . ( x + 3 ) ) x ) ) 5

( ( x . ( x + 3 ) ) 5x . ( x + 3 ) ) 5

y . ( ( y . ( ( x . ( x + 3 ) ) y ) ) 5x . ( x + 3 ) ) y ) ) 5

Lambda Calculus Examples (4)

Page 20: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 2020

x . ( x 5 ) ) ( x . ( x 5 ) ) ( x . ( x + 3 ) ) x . ( x + 3 ) )

( 5 + 3 )( 5 + 3 )

x . ( x + 3 ) ) 5 )x . ( x + 3 ) ) 5 )

Lambda Calculus Examples (5)

Page 21: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 2121

x . ( ( x 5 ) + ( x 4 ) ) ( x . ( ( x 5 ) + ( x 4 ) ) ( x . ( x + 3 ) )) x . ( x + 3 ) ))

x . ( x + 3 ) ) 5 ) + ( ( x . ( x + 3 ) ) 5 ) + ( ( x . ( x + 3 ) ) 4 )x . ( x + 3 ) ) 4 )

( 5 + 3 ) + ( ( ( 5 + 3 ) + ( ( x . ( x + 3 ) ) 4 )x . ( x + 3 ) ) 4 )

Lambda Calculus Examples (6)

Page 22: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 2222

• BindingBinding• A BINDING links a name to a valueA BINDING links a name to a value• This happens whenever a function is appliedThis happens whenever a function is applied

• Bound and Not Bound (a.k.a. “Free”)Bound and Not Bound (a.k.a. “Free”)• In ( In ( x . ( x + y ) ) we say that x is BOUND x . ( x + y ) ) we say that x is BOUND

and y is NOT BOUND (or “FREE”)and y is NOT BOUND (or “FREE”)• This is because we know what x must be - it is This is because we know what x must be - it is

the function argument. “y” is unknown.the function argument. “y” is unknown.

Terminology

Page 23: 12/2/20151 GC16/3011 Functional Programming Lecture 2 The Lambda Calculus: A Simple Introduction.

04/18/2304/18/23 2323

• The “assembly language” for MirandaThe “assembly language” for Miranda• Very simple syntaxVery simple syntax• Only Four rules for evaluationOnly Four rules for evaluation• Apply the rules in any orderApply the rules in any order

• Caveat terminationCaveat termination

• ““Normal Order” guaranteed to terminateNormal Order” guaranteed to terminate• if termination is possibleif termination is possible

• Terminology: “bound” and “free”Terminology: “bound” and “free”

Summary