Lambda Calculus and Extensions as Foundation of Functional - - PowerPoint PPT Presentation

lambda calculus and extensions as foundation of
SMART_READER_LITE
LIVE PREVIEW

Lambda Calculus and Extensions as Foundation of Functional - - PowerPoint PPT Presentation

Lambda Calculus and Extensions as Foundation of Functional Programming David Sabel and Manfred Schmidt-Schau 29. September 2015 Lehrerbildungsforum Informatik Last update: 30. September 2015 1 Introduction Lambda Calculus Connection to


slide-1
SLIDE 1

1

Lambda Calculus and Extensions as Foundation of Functional Programming

David Sabel and Manfred Schmidt-Schauß

  • 29. September 2015

Lehrerbildungsforum Informatik

Last update: 30. September 2015

slide-2
SLIDE 2

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Overview Overview

Untyped Lambda Calculus Operational Semantics Contextual Semantics Extension by Data Types

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

2/27

slide-3
SLIDE 3

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Pure (Untyped) Lambda Calculus Lambda Calculus

Grammar for expressions e ∈ Eλ of the pure lambda calculus: e, ei ∈ Eλ ::= x | λx.e | (e1 e2) where x ∈ Var λx.e Abstraction (e1 e2) Application (of e1 to e2) We may omit brackets for better readability. The body of abstraction extends as far as possible (e1 e2 e3 e4) is reconstructed as (((e1 e2) e3) e4). Bracketing is left-associative.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

3/27

slide-4
SLIDE 4

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Pure Lambda Calculus: Examples

λx.x The identity function λx.λy.x The function that can be applied to two arguments e1, e2 and returns e1. λx.λy.λf.f x y Used as encoding of pairs (λx.(x x)) (λx.(x x)) A lambda-expression which is useless as a program: It is nonterminating.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

4/27

slide-5
SLIDE 5

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Free and Bound Variables

free variables FV (e) and bound variables BV (e) are inductively defined: FV (x) :={x}, if x ∈ Var FV ((e1 e2)):=FV (e1) ∪ FV (e2) FV (λx.e) :=FV (e) \ {x} BV (x) :=∅, if x ∈ Var BV ((e1 e2)):=BV (e1) ∪ BV (e2) BV (λx.e) :=BV (e) ∪ {x}

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

5/27

slide-6
SLIDE 6

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Renaming Bound Variables

α-renaming: λx.e α − → λx′.e[x′/x], if x′ ∈ FV (e) and x′ ∈ BV (e) where α-equivalence =α is the smallest congruence obtained from

α

− →, i.e. it is inductively defined as e1 =α e2, if e1

α

− → e2 e =α e e1 =α e2, if e2 =α e1 e1 =α e3, if e1 =α e2 ∧ e2 =α e3 C[e1] =α C[e2], if e1 =α e2

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

6/27

slide-7
SLIDE 7

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Variable Convention

The Convention on Bound Variables: In the expressions mentioned: binders always bind distinct variables, and bound variables are distinct from free variables. This can always be achieved by α-renamings. Example λx.x(y (λx.λy.y x)): the convention is not satisfied. It can be satisfied by α-renaming: λx.x(y (λx.λy.y x)) =α λx.x(y (λz.λu.u z))

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

7/27

slide-8
SLIDE 8

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Substitution

We define a more general notion of substitution: e1[e2/x] denotes the substitution of all free occurrences of variable x in e1 by the expression e2: An inductive definition recursing over the expression structure is: x[e/x] := e y[e/x] := y, if x = y (λx.e1)[e/x] := λx.e1 (λy.e1)[e/x] := λy.(e1[e/x]), if x = y (e1 e2)[e/x] := (e1[e/x] e2[e/x]) Due to the distinct variable convention: There is no capture of variables.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

8/27

slide-9
SLIDE 9

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Substitution

Examples: Compute (x λx.x)[λy.y / x] (λx.x x) (λy.y y) → (x x) [(λy.y y) / x] = (λy.y y) (λy.y y) =α (λx.x x) (λy.y y)

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

9/27

slide-10
SLIDE 10

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Substitution

Examples: Compute (x λx.x)[λy.y / x]

  • 1. result of renaming:

(x λu.u)[λy.y / x]

  • 2. result of substitution :

((λy.y) λu.u) (λx.x x) (λy.y y) → (x x) [(λy.y y) / x] = (λy.y y) (λy.y y) =α (λx.x x) (λy.y y)

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

9/27

slide-11
SLIDE 11

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Some Combinators

Example I := λx.x K := λx.λy.x K2 := λx.λy.y Ω := (λx1.(x1 x1)) (λx2.(x2 x2)) Y := λy1.(λx1.(y1 (x1 x1))) (λy2.(y2 (x2 x2))) The I-combinator is the identity function. K, K2 are projections, and Ω is non-terminating (diverging). The Y -combinator is a fixpoint-combinator, it has the property that Y e ∼c e (Y e) holds. It can be used to express recursion.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

10/27

slide-12
SLIDE 12

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Operational Semantics

Small-Step Operational Semantics

  • f the

Pure Lazy Lambda-Calculus Beta-Reduction (λx.e1) e2

β

− → e1[e2/x] We write e1

C,β

− − → e2, if e1 = D[e′

1], e′ 1 β

− → e′

2, and e2 = D[e′ 2]

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

11/27

slide-13
SLIDE 13

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Operational Semantics: Normal-order reduction

Normal order reduction : A deterministic evaluation strategy. Reduce the outermost-leftmost beta-redex: A normal order reduction step no − → is any β-reduction which is performed inside a reduction context: s no − → t if s is of the form R[(λx.s1) s2] and t = R[s1[s2/x]] for a reduction context R. Grammar for reduction contexts: R ::= [·] | (R e)

no,+

− − − → transitive closure of no − →

no,∗

− − → reflexive-transitive closure

no,i

− − → exactly i normal order reduction steps.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

12/27

slide-14
SLIDE 14

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Normal-order reduction: WHNF

Closed and no − →-irreducible expressions of the (lazy) lambda calculus are exactly the abstractions. Abstractions are also the weak head normal forms (WHNFs) of the (lazy) lambda calculus.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

13/27

slide-15
SLIDE 15

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Converging Expression

Definition An expression e ∈ Eλ converges (or successfully terminates) (written as e⇓) iff there exists a sequence of normal order reduction steps starting with e and ending in a WHNF: e⇓ iff e

no,∗

− − → e′ where e′ is a WHNF. If e⇓ does not hold, then we say that e diverges and write e⇑.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

14/27

slide-16
SLIDE 16

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Converging Expression

Definition An expression e ∈ Eλ converges (or successfully terminates) (written as e⇓) iff there exists a sequence of normal order reduction steps starting with e and ending in a WHNF: e⇓ iff e

no,∗

− − → e′ where e′ is a WHNF. If e⇓ does not hold, then we say that e diverges and write e⇑. Examples

  • (λx.x)⇓
  • ((λx.λy.x) (λz.z) (λw.w))⇓ :

no

− → (λy.λz.z) (λw.w) no − → λz.z.

  • ((λx.x) (λy.y))⇓
  • ((λx.x x) (λy.y y))⇑
  • (x (λy.y)⇑
  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

14/27

slide-17
SLIDE 17

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Standardization

In order to compute WHNFs from an expression, normal-order reduction is sufficient: Proposition Let e be an expression, such that e

C,β,∗

− − − → e′ where e′ is a WHNF. Then e⇓. s

no,∗

  • C,β,∗
  • s0

C,β,∗

s1

where s0, s1 are abstractions

(

C,β,∗

− − − → is β-reduction at any occurrence)

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

15/27

slide-18
SLIDE 18

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Semantics: Contextual Equivalence

Definition contextual equivalence Definition Let e1, e2 ∈ Eλ. Then e1 and e2 are contextually equivalent, written as e1 ∼ e2 iff for all contexts C ∈ Cλ: C[e1]⇓ ⇐ ⇒ C[e2]⇓.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

16/27

slide-19
SLIDE 19

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Semantics: Contextual Equivalence

Properties of ∼c Contextual preorder is a precongruence (i.e. it is a partial

  • rder and s ≤c t =

⇒ C[s] ≤c C[t] ) Contextual equivalence is a congruence (i.e. it is an equivalence relation and s ∼c t = ⇒ C[s] ∼c C[t] ) Consequence: if s ∼c t it is possible to replace s by t anywhere in a program P to P ′ and P ∼c P ′ holds. Divergent closed expressions are equivalent: Let e1, e2 be two closed expressions with e1⇑ and e2⇑. Then e1 ∼c e2.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

17/27

slide-20
SLIDE 20

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Connection to Rewriting and Confluence

The reduction

C,β,∗

− − − → is confluen: e

C,β,∗

  • C,β,∗
  • e1

C,β,∗

  • e2

C,β,∗

  • s3

The confluence of

C,β,∗

− − − → and the standardization of normal-order reduction imply: Theorem

β

− → is correct w.r.t. ∼c, i.e. if e1

C,β

− − → e2 then e1 ∼c e2.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

18/27

slide-21
SLIDE 21

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Connection to Rewriting

C,β,∗

← − − → is called the conversion relation

C,β,∗

← − − → is a congruence.

C,β,∗

← − − → ⊆ ∼c. However :

C,β,∗

← − − → = ∼c. Example: (λx.(x x x) (λx.(x x x))⇑, hence, Ω ∼c (λx.(x x x)) (λx.(x x x)). But, Ω

  • C,β,∗

← − − → (λx.(x x x)) (λx.(x x x)), since there is no common reduction successor.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

19/27

slide-22
SLIDE 22

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Extension by Data Types LNAME as a Core Language of Haskell

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

20/27

slide-23
SLIDE 23

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Syntax of LNAME

LNAME is an extension of the lazy lambda calculus by three constructs: data: there are primitives for constructing and deconstructing data Sequentialization: seq Supercombinators ∈ F: recursive function definitions

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

21/27

slide-24
SLIDE 24

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Summary: Syntax of LNAME

For every f ∈ F there is a definition of the form f x1 . . . xn = e where xi are variables and FV (e) ⊆ {x1, . . . , xn}. Syntax Grammar for expressions of LNAME where x, xi ∈ Var, f ∈ F, and cT,i ∈ KT : e, ei ∈ ELNAME ::= x | λx.e | f | (e1 e2) | (cT,i e1 . . . ear(cT,i)) | caseT e of {patT,1 → e1; . . . ; patT,|T| → e|T|} | seq e1 e2 patT,i ::= (cT,i xi,1 . . . xi,ar(cT,i))

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

22/27

slide-25
SLIDE 25

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Reductions rules of LNAME

β (λx.e1) e2 → e1[e2/x] (case) (caseT (cT,i e′

1 . . . e′ ar(cT,i)) of

{. . . ; (cT,i xi,1 . . . xi,ar(cT,i)) → ei; . . .}) → ei[e′

1/xi,1, . . . , e′ ar(cT,i)/xi,ar(cT,i)]

(seq) seq v e → e, if v is a WHNF. (SCβ) f e1 . . . en → e[e1/x1, . . . , en/xn], if f x1 . . . xn = e is the definition of f ∈ F.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

23/27

slide-26
SLIDE 26

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Syntax of LNAME

Extension by Data There is a finite nonempty set of type constructors T , where for every T ∈ T there are pairwise disjoint finite nonempty sets of data constructors DT = {cT,1, . . . cT,|T|}. Every constructor has a fixed arity (a non-negative integer) denoted by ar(T) or ar(cT,j), The data constructor cT,i of arity n is applied to n expressions to form a constructor application (cT,i e1 . . . ear(cT,i)). Case-expressions for analysing and deconstructing data. Examples type constructor Bool (of arity 0) with data constructors True and False type constructor List (of arity 1) with data constructors Nil (of arity 0) and Cons (of arity 2). A list of three elements: (Cons True (Cons False (Cons True Nil))).

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

24/27

slide-27
SLIDE 27

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Recursive Definition of Functions

Extension We assume that there is a set F of function symbols, also called supercombinators and that for every f ∈ F there is a definition of f of the form f x1 . . . xn = e where xi are variables and e is an expression s.t. FV (e) ⊆ {x1, . . . , xn}. The names from F are treated as constants, and so may also occur in the defining expressions e on the right hand side. The number n in a definition f x1 . . . xn = e is called the arity of f and written as ar(f).

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

25/27

slide-28
SLIDE 28

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

Recursive Definition of Supercombinators

Examples map, head ∈ F map ∈ F is a recursive supercombinator: map f xs = caseList xs of {Nil → Nil; (Cons y ys) → Cons (f y) (map f ys )} head ∈ F is a non-recursive supercombinator: head xs = caseList xs of {Nil → Ω; (Cons y ys) → y}

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

26/27

slide-29
SLIDE 29

Introduction Lambda Calculus Connection to Rewriting and Confluence LNAME

WHNFs of LNAME

Definition WHNFs of LNAME are of the form A functional weak head normal form (FWHNF) in LNAME is any abstraction and any expression of the form (f e1 . . . em) where f ∈ F and ar(f) > m. A constructor weak head normal form (CWHNF) is any expression of the form (cT,i e1 . . . ear(cT,i)). There are no − →-irreducible closed expressions that are not WHNFs, for example (True True); These are ruled out in typed calculi.

  • D. Sabel & M. Schmidt-Schauß · · Lambda Calculus and Extensions

27/27