/
Simply Typed Lambda Calculus, Progress and Preservation Simply Typed Lambda Calculus, Progress and Preservation

Simply Typed Lambda Calculus, Progress and Preservation - PowerPoint Presentation

medshair
medshair . @medshair
Follow
366 views
Uploaded On 2020-06-15

Simply Typed Lambda Calculus, Progress and Preservation - PPT Presentation

Announcements HW3 due today HW5 is out and due on Tuesday after the break Spring 20 CSCI 44506450 A Milanova 2 Outline P ure lambda calculus catch up Syntax and semantics Free and bound variables ID: 777838

csci 6450 type 4450 6450 csci 4450 type spring milanova reduction normal lambda monad order calculus form expression stuck

Share:

Link:

Embed:

Download Presentation from below link

Download The PPT/PDF document "Simply Typed Lambda Calculus, Progress a..." is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

Simply Typed Lambda Calculus, Progress and Preservation

Slide2

Announcements

HW3 due today

HW5 is out and due on Tuesday after the break

Spring 20 CSCI 4450/6450, A Milanova

2

Slide3

Outline

P

ure lambda calculus (catch up)

Syntax and semanticsFree and bound variablesRules (alpha rule, beta rule)Normal forms

Reduction strategies

Lambda calculus interpreters

Coding them in Haskell

Spring 20 CSCI 4450/6450, A Milanova

3

Slide4

Spring

20

CSCI 4450/6450

,

A

Milanova

4

Rules of Lambda Calculus: Exercises

Use

-conversion

and/or

β-reduction:(x. x) y  ?(x. x) (y. y)  ?(x.y.z. x z (y z)) (u. u) (v. v) 

Notation:

denotes that expression

on the left reduces

to

the expression on

the

right, through a sequence

-conversions

and

β

-reductions.

Slide5

Spring

20

CSCI

4450/6450,

A

Milanova

5

Reductions

An expression

(

x.E

) M is called a redex (for reducible expression)An expression is in normal form if it cannot be β-reducedThe normal form is the meaning of the term, the “answer”

Slide6

Definitions of Normal Form

Normal form (NF)

: a term without

redexesHead normal form (HNF)x is in HNF

(x.

E)

is in HNF if

E

is in HNF

(x E1 E2 … En) is in HNF

Weak head normal form (WHNF)x is in WHNF(x. E) is in WHNF(x E1 E2 … En) is in WHNFSpring 20 CSCI 4450/6450, A Milanova

(from MIT’s 2015 Program Analysis OCW)

6

Slide7

Questions

z. z z

is in NF, HNF, or WHNF?

(

z. z z) (x. x)

is in?

x.y.z. x z (y (u. u)) is in?(x.y

. x) z ((x. z x) (x. z x)) is in?z ((x. z x) (x. z x)) is in?(z.(x.

y. x) z (

(x. z x) (x. z x))) is in?Spring 20 CSCI 4450/6450,

A

Milanova

7

Slide8

8

Exercise

S

=

x.

y

.z

. x z (y z

)

I = x. x What is S I I I

?

( x.y.z. x z (y z) ) I I I(y.z. I z (y z) ) I I(z. I z (I z) ) I

I I (I I) =

(

x.

x) I

(I I)

I (I I) =

(x. x)

(

I I

)

I I

=

(x. x)

I

 I

An expression with no free

variables is called combinator.S, I, C, H, T are combinators.

Reducible expression is underlined

a

t each step.

Slide9

Simple Reduction Exercise

C = 

x.y.f

. f x y

H = f. f (

x.y

. x)

T =

f. f (x.y. y)What is H (C a b)?(

f. f (x.y. x)) (C a b)(C a b) (x.y. x)((x.y.f. f x y) a b) (x.y. x)

(f. f

a b) (x.y. x)(x.y. x) a b a Spring 20 CSCI 4450/6450, A Milanova (from MIT 2015 Program Analysis OCW) 9

Slide10

Outline

P

ure lambda calculus, a reviewSyntax and semantics

Free and bound variablesRules (alpha rule, beta rule)Normal formReduction strategies

Lambda calculus interpreters

Coding them in Haskell

Spring 20 CSCI 4450/6450, A

Milanova

10

Slide11

11

Reduction Strategy

Let us look at

(

x.y.z

. x z (y z)) (u. u) (v. v)

Actually, there are (at least) two

reduction paths

”:Path 1: (x.y.z. x z (y z)) (u. u) (v. v)

β

(y.z. (u. u) z (y z)) (v. v) β (z. (u. u) z ((v. v) z)) β (z. z ((v. v) z)) β

z. z

z

Path 2:

(

x

.y.z

. x z (y z)) (u. u)

(v. v)

β

(

y.z

. (u. u) z (y z)) (v. v) β

(y.z. z (y z)) (v. v) β

(z. z (

(v. v) z

))

β

z. z z

Slide12

Spring

20

CSCI

4450/6450,

A

Milanova

12

Reduction Strategy

A reduction strategy (also called

evaluation order

)

is

a strategy for choosing redexesHow do we arrive at the normal form (answer)?Applicative order reduction chooses the leftmost-innermost redex in an expressionAlso referred to as call-by-value reductionNormal order reduction chooses the leftmost-outermost redex in an expressionAlso referred to as call-by-name reduction

Slide13

13

Reduction Strategy:

Examples

Evaluate

(x. x x) ( (y. y) (z. z)

)

Using applicative order

reduction:

(x. x x) (

(y. y) (z. z) )(x. x x) (z. z

)

(z. z) (z. z)  (z. z)Using normal order reduction(x. x x) ( (y. y) (z. z) )(y. y) (z. z) ( (y. y) (z. z) )(z. z) ( (y. y) (z. z) )(y. y) (z. z

)

(

z. z

)

Slide14

Spring

20

CSCI

4450/6450,

A

Milanova

14

Reduction Strategy

In our examples, both

strategies

produced the same result.

Is this

always the case?First, look at expression (x. x x) (x. x x). What happens when we apply β-reduction to this expression?Then look at (z.y) ((x. x x) (x. x x))Applicative order reduction – what happens?Normal order reduction – what happens?

Slide15

Spring

20

CSCI

4450/6450,

A

Milanova

15

Church-Rosser Theorem

Normal form implies that there are no more reductions possible

Church-Rosser Theorem, informally

If normal form exists, then it is unique

(i.e., result of computation does not depend on the order that reductions are applied; i.e., no expression can have two distinct normal forms)

If normal form exists, then normal order will find it

Slide16

Spring

20

CSCI

4450/6450,

A

Milanova

16

Reduction Strategy

Intuitively:

Applicative order (

call-by-value

) is an

eager evaluation strategy. Also known as strictNormal order (call-by-name) is a lazy evaluation strategyWhat order of evaluation do most PLs use?

Slide17

Exercises

Evaluate

(

x.

y

.

x y) ((

z. z) w)

Using applicative order reduction

Using normal order reduction

17

Spring

20 CSCI 4450/6450, A Milanova

Slide18

Interpreters

An interpreter for the lambda calculus is a program that reduces lambda expressions to “answers”

We must specify

The definition of “answer”. Which normal form?The reduction strategy. How do we chose

redexes

in an expression?

Spring 20 CSCI 4450/6450, A Milanova

18

Slide19

An Interpreter

Definition by cases on

E ::=

x | 

x. E

1

|

E1 E2 interpret(

x) = xinterpret(x.E1) = x.E1interpret(E

1

E2) = let f = interpret(E1) in case f of x.E3 -> interpret(E

3

[

E

2

/x

])

-

->

f E

2

What normal form: Weak head normal form

What strategy: Normal order

19

Haskell syntax: let …. in

case f of

->Spring 20 CSCI 4450/6450, A Milanova (modified from MIT 2015 Program Analysis OCW)

Slide20

Another Interpreter

Definition by cases on

E ::=

x | 

x. E

1

|

E1 E2 interpret(

x) = xinterpret(x.E1) = x.E1interpret(E

1

E2) = let f = interpret(E1) a = interpret(E2) in case f

of

x.E

3

interpret

(

E

3

[

a

/x

])

-  f aWhat normal form: Weak head normal formWhat strategy: Applicative order

20

Slide21

Outline

P

ure lambda calculus, a reviewSyntax and semantics

Free and bound variablesRules (alpha rule, beta rule)Reduction strategiesNormal formLambda calculus interpreters

Coding them in Haskell

Spring 20 CSCI 4450/6450, A

Milanova

21

Slide22

Coding them in Haskell

In HW5 you will

code interpreters in HaskellHaskell

A functional programming languageKey ideasLazy evaluationStatic typing and polymorphic type inference

Algebraic data types and pattern matching

Monads

and moreSpring 20 CSCI 4450/6450, A

Milanova

22

Slide23

Lazy Evaluation

Unlike Scheme (and most programming languages) Haskell does

lazy evaluation

, i.e., normal order reductionIt won’t evaluate an argument

expr

. until it is needed

>

f x = [] // f takes x

and returns the empty list

> f (repeat 1) // returns? > []> head (tail [1..]) // returns? > 2 // [1..] is infinite list of integersLazy evaluation allows us to work with infinite structures!

23

Slide24

Static Typing and Type Inference

Unlike Scheme, which is dynamically typed, Haskell is

statically typed

!Unlike Java/C++ we don’t always have to write type annotations. Haskell infers types!A lot more on type inference later!

>

f x = head x

//

f returns the head of list x> f True // returns?

• Couldn't

match expected type ‘[a]’ with actual type ‘Bool’• In the first argument of ‘f’, namely ‘True’ In the expression: f True …24

Slide25

Algebraic Data Types

Algebraic data types are

tagged unions (aka sums) of

products (aka records)data

Shape

=

Line Point Point

| Triangle Point Point Point | Quad Point Point Point PointSpring 20 CSCI 4450/6450, A Milanova (from MIT 2015 Program Analysis OCW)

25unionHaskell keyword

the new type

new constructors (a.k.a. tags, disjuncts, summands)Line is a binary constructor, Triangle is a ternary …

Slide26

Algebraic Data Types in HW5

Constructors create new values

Defining a lambda expression

type Name = String

data

Expr = Var

Name

| Lambda Name Expr | App Expr Expr

> e1 = Var “x” // Lambda term x> e2 = Lambda “x” e1 // Lambda term x.x 26

Slide27

Examples of Algebraic Data Types

data

Bool = True | Falsedata

Day = Mon | Tue | Wed | Thu | Fri | Sat | Sun

data

List

a =

Nil

| Cons a (List a)data Tree a = Leaf a | Node (Tree a) (Tree

a)data Maybe a = Nothing | Just aMaybe type denotes that result of computation can be a or Nothing. Maybe is a monad. Spring 20 CSCI 4450/6450, A Milanova (from MIT 2015 Program Analysis OCW) 27

Polymorphic types.a

is a type parameter!

Slide28

Pattern Matching

Examine values of an algebraic data type

anchorPnt

:: Shape  Pnt

anchorPnt

s =

case

s of

Line p1 p2  p1 Triangle p3 p4 p5  p3 Quad p6 p7 p8 p9  p6Two key points hereTest: does the given value match this pattern?Binding: if value matches, deconstruct and bind corresponding values of s and pattern

Spring 20 CSCI 4450/6450, A Milanova (from MIT 2015 Program Analysis OCW) 28Type signature of anchorPnt: takesa Shape and returns a Pnt.

Slide29

Pattern Matching in HW5

isFree

::Name 

Expr  Bool

isFree

v e =

case e of

Var n  if (n == v) then True else False Lambda …

Spring 20 CSCI 4450/6450, A Milanova29Type signature of isFree. In Haskell, all functionsare curried, i.e., they take just one argument.isFree takes a variable name, and returns a function that takes an expression and returns a boolean.Of course, we can interpret isFree as a function that takes a variable name

name and an expressionE

, and returns true if variable name is free in E.

Slide30

Monads

A way to cleanly compose computations

E.g., f may return a value of type

a or NothingComposing computations becomes tedious:case (f s) of

Nothing

Nothing Just m  case (f m) …

In Haskell, monads model IO and other imperative featuresSpring 20 CSCI 4450/6450, A Milanova30

Slide31

An Example: Cloned Sheep

t

ype Sheep = …

father :: Sheep  Maybe Sheep

f

ather = ...

mother :: Sheep

 Maybe Sheepmother = …

(Note: a sheep has both parents; a cloned sheep has one)

maternalGrandfather :: Sheep  Maybe SheepmaternalGrandfather s = case (mother s) of Nothing 

Nothing Just m  father m Spring 20 CSCI 4450/6450, A Milanova (Example from All About Monads Tutorial)31

Slide32

An Example

mothersPaternalGrandfather :: Sheep  Maybe Sheep

mothersPaternalGrandfather

s = case

(mother

s

)

of

Nothing

 Nothing Just m  case (father m) of

Nothing  Nothing Just gf  father gfTedious, unreadable, difficult to maintainMonads help!32Spring 20 CSCI 4450/6450, A Milanova (Example from All About Monads Tutorial)

Slide33

The Monad Class

Haskell’s Monad

type class

requires 2 operations, >>= (bind) and

return

class

Monad

m where

// >>= (the bind operation) takes a monad // m a, and a function that takes a and turns // it into a monad m b, and returns m b

(>>=) :: m a  (a  m b)  m b // return encapsulates a value into the monad return :: a

m a 33

Slide34

The

Maybe

Monadinstance

Monad Maybe where

Nothing

>>=

f = Nothing

(Just x) >>= f = f x return = JustBack to our example:mothersPaternalGrandfather

s = (return s) >>= mother >>= father >>= father(Note: if at any point, some function returns Nothing, it gets cleanly propagated.) 34

Slide35

The

List

MonadThe List type constructor is a monad

li >>=

f =

concat

(map f li) return

x = [x]

Note: concat::[[a]]  [a]e.g., concat [[1,2],[3,4],[5,6]] yields [1,2,3,4,5,6]U

se any f s.t. f::a[b]. f may return a list of 0,1,2,… elements of type b, e.g.,> f x = [x+1]> [1,2,3] >>= f // returns [2,3,4]

35

Slide36

The

List

Monadparents

:: Sheep  [Sheep]parents

s

=

MaybeToList

(mother s

) ++

MaybeToList (father s) grandParents :: Sheep  [Sheep]

grandParents s = (parents s) >>= parents Spring 20 CSCI 4450/6450, A Milanova36

Slide37

Monad Quote

“A monad is just a

monoid in the category of endofunctors

, what's the problem?”Monad type class and the monad lawsMaybe monad

List monad

IO monad

State monad

Spring 20 CSCI 4450/6450, A Milanova

37

Slide38

Outline

Applied lambda

calculus

Introduction to types and type systemsThe simply typed lambda calculusSyntaxDynamic semanticsStatic semantics

Type safety

Spring 20 CSCI 4450/6450, A

Milanova

38

Slide39

Reading

“Types and Programming Languages” by Benjamin Pierce, Chapters 8 and 9

Lecture notes based on Pierce and notes by Dan Grossman, UW

Spring 20 CSCI 4450/6450, A Milanova

39

Slide40

Spring

20

CSCI

4450/6450,

A

Milanova

40

Applied Lambda Calculus (from Sethi)

E

::=

c | x | ( x.E1 ) | ( E1 E2 ) Augments the pure lambda calculus with constants. An applied lambda calculus defines its set of constants and reduction rules. For example: Constants: Reduction rules:

if, true, false

(all these are

terms,

e.g., true=

x.y

.

x

)

0,

iszero

, pred, succ

if true

M N

δ

M

if false

M N

δ

N

iszero

0

δ

true

iszero

(

succ

k

0

)

δ

false

, k>0

iszero

(

pred

k

0

)

δ

false

, k>0

succ

(

pred

M)

δ

M

pred

(

succ

M)

δ

M

Slide41

Spring

20

CSCI

4450/6450,

A

Milanova

41

From an Applied Lambda Calculus to a Functional

Language

Construct Applied

-

Calculus A Language

(ML)Variable x xConstant c cApplication M N M NAbstraction x.M fun x => MInteger succk 0, k>0 k

pred

k

0

,

k>0

-

k

Conditional

if

P M N

if

P

then M else NLet let

val x = N in

M end

Slide42

Spring

20

CSCI

4450/6450,

A

Milanova

42

Aside: The

Fixed-Point Operator

One more constant, and one more rule:

fix

fix M δ M (fix M)Needed to define recursive functions:Therefore:plus = x.y. if (iszero x) y (plus

(

pred

x) (

succ

y))

y

if

x = 0

plus

(

pred

x) (

succ

y)

otherwise

plus

x y

=

x

-1

y

+1

M(M(M

… ))

Slide43

Spring

20

CSCI

4450/6450,

A

Milanova

43

Aside: The

Fixed-Point Operator

But how do we define

plus

?

Define plus = fix M, whereM = f. x.y. if (iszero x) y (f (pred x) (succ y))

We must show that

fix

M

=

δβ

x

.

y

.

if

(

iszero

x) y ((

fix M) (pred x) (succ y))

Slide44

Spring 20 CSCI 4450/6450, A

Milanova

44

Define

times

=

fix

f.x

.

y. if (iszero x) 0 (plus y (f (pred x) y)) Exercise: define factorial = ?Aside: The Fixed-Point Operator

Slide45

Aside: The

Y

Combinator

fix is, of course, a lambda expression!

One possibility, the famous Y-

combinator

:

Y =

f. (x. f (x x)) (x. f (x x))Show that Y M indeed beta-reduces to

M (Y M)

45

Spring 20 CSCI 4430/6450, A Milanova

Slide46

Spring

20

CSCI

4450/6450,

A

Milanova

46

Types!

Constants add

power

But they raise problems because they permit

“bad” terms

such asif (x.x) y z (arbitrary function values are not permitted as predicates, only true/false values)(0 x) (0 does not apply as a function)

succ

true

(undefined in our language)

plus

true

0

etc.

Slide47

Types!

Why types?

Safety. Catch semantic errors earlyData abstraction. Simple types and ADTs

Documentation (statically-typed languages only)Type signature is a form of specification!Statically typed vs. dynamically typed languages

Type annotations vs. type inference

Type safe vs. type unsafe

Spring 20 CSCI 4450/6450, A

Milanova

47

Slide48

Types!

Important subarea of programming languages, program analysis

Related to abstract interpretation, although

…AI is framework of choice for reasoning about imperative languages

Type systems is framework of choice for reasoning about

functional languages

Type systems and extensions to reason about imperative programs

Spring 20 CSCI 4450/6450, A

Milanova

48

Slide49

Type System

Syntax

Dynamic semantics (aka concrete semantics). In type theory, it is

A sequence of reductionsStatic semantics (aka abstract semantics). In type theory, it is defined in terms of

Type environment

Typing rules, also called

type judgments

This is typically referred to as the type system

49

Spring

20 CSCI 4450/6450 A Milanova

Slide50

Spring

20

CSCI

4450/6450,

A

Milanova

50

Example, The Static Semantics. More On This Later!

Γ

|-

E

1 : στ Γ

|-

E

2

:

σ

Γ

|-

(

E

1

E

2

)

: τ

Γ

|- x :

τ

Γ

,

x

:

σ

|-

E

1

:

τ

Γ

|- (x:

σ

.

E

1

)

:

σ

τ

(Variable

)

(Application

)

(Abstraction

)

binding

: augments environment

Γ

w

ith binding of

x

to type

σ

looks up the

type of

x

in environment

Γ

x:

τ

Γ

Slide51

Type System

A type system either accepts a term (i.e., term is “

well-typed

”), or rejects it Type soundness, also called

type safety

Well

-typed

terms never “go wrong”More concretely: well-typed terms never reach a “

stuck state

” (a “bad” term) during evaluationWe must give a definition of “stuck state”Each programming language defines its own set of “stuck states”Spring 20 CSCI 4450/6450, A Milanova51

Slide52

Stuck States

Informally, a term is “stuck” if it cannot be further reduced and it is not a value

E.g

, 0 x“Stuck states” characterize runtime errors

In real programming languages “stuck states” correspond to

forbidden errors

such as

seg faults, execution of operation on illegal arguments, etc.We will define “stuck states” formally

for the simply typed lambda calculus, in just awhile

Spring 20 CSCI 4450/6450, A Milanova52

Slide53

Stuck States Examples

E.g.,

c

(

x.x

),

where

c

is an int constant, is a “stuck state”, i.e., a meaningless state E.g., if c E1 E

2 where c is an int constant, is a “stuck state” Clearly not a value and clearly no rule applies!Because the evaluation rules for if-then-else areif true E1

E2

δ E1if false E1 E2δ E2Spring 20 CSCI 4450/6450, A Milanova53

Slide54

Type Soundness

Remember, a type system accepts or rejects terms

A sound type system

never accepts a term that can get stuckA complete type system never rejects a term that cannot get stuck

Typically, whether a term gets stuck is

undecidable

Type systems choose

type soundness

Spring 20 CSCI 4450/6450, A

Milanova54

Slide55

Safety = Progress + Preservation

Progress:

A well-typed term is not stuck (i.e., either it is a value, or there is an evaluation step that applies)

Preservation: If a well-typed term takes a step of evaluation, then the resulting term is also well-typedSoundness follows:

Each state reached by program is well-typed (by Preservation)

A

well-typed state is not stuck (by Progress)

Thus, each state reached by the program is not stuck

Spring 20 CSCI 4450/6450, A

Milanova55

Slide56

Spring 20 CSCI 4450/6450, A

Milanova

56