Conversion from callcc to Continuation Passing Style (CPS) Tom - - PowerPoint PPT Presentation

conversion from callcc to continuation passing style cps
SMART_READER_LITE
LIVE PREVIEW

Conversion from callcc to Continuation Passing Style (CPS) Tom - - PowerPoint PPT Presentation

Conversion from callcc to Continuation Passing Style (CPS) Tom Nikken Based on slides from Xavier Leroy, INRIA Type Theory and Coq May 8th 2018 Tom Nikken Conversion from callcc to CPS 1 / 16 Conversion to continuation-passing style (CPS)


slide-1
SLIDE 1

Conversion from callcc to Continuation Passing Style (CPS)

Tom Nikken Based on slides from Xavier Leroy, INRIA Type Theory and Coq May 8th 2018

Tom Nikken Conversion from callcc to CPS 1 / 16

slide-2
SLIDE 2

Conversion to continuation-passing style (CPS)

Goal: make explicit the handling of continuations. Input: a call-by-value functional language with callcc. Output: a pure functional language (no callcc). Uses: compilation of callcc, semantics, programming with continuations in Scheme, Haskell, ...

Tom Nikken Conversion from callcc to CPS 2 / 16

slide-3
SLIDE 3

Illustration of CPS in Javascript

We need to save the continuation, in case we encounter a callcc Idea: turn everything into a function from its continuation to its value function id(x) { return x; }

Tom Nikken Conversion from callcc to CPS 3 / 16

slide-4
SLIDE 4

Illustration of CPS in Javascript

We need to save the continuation, in case we encounter a callcc Idea: turn everything into a function from its continuation to its value function id(x, cont) { cont(x); }

Tom Nikken Conversion from callcc to CPS 3 / 16

slide-5
SLIDE 5

Illustration of CPS in Javascript

function fact(n,cont) { if (n == 0) cont (1) ; else fact(n-1, function (t0) { cont(n * t0) }) ; }

Tom Nikken Conversion from callcc to CPS 4 / 16

slide-6
SLIDE 6

Illustration of CPS in Javascript

function fact(n,cont) { if (n == 0) cont (1) ; else fact(n-1, function (t0) { cont(n * t0) }) ; } fact (5, function (n) { console.log(n) ; })

Tom Nikken Conversion from callcc to CPS 4 / 16

slide-7
SLIDE 7

Now in the lambda calculus

Tom Nikken Conversion from callcc to CPS 5 / 16

slide-8
SLIDE 8

Now in the lambda calculus

... : (λ + callcc) → λ If a : τ, then a : (τ → answer) → answer, where: τ = τ for base types and τ1 → τ2 = τ1 → (τ2 → answer) → answer N = λk. k N x = λk. k x λx. a = λk. k (λx. a) f a = λk. f (λvf . a (λva. vf va k)) callcc f = λk. f (λvf . vf k k) throw a b = λk. a (λva. b (λvb. va vb))

Tom Nikken Conversion from callcc to CPS 5 / 16

slide-9
SLIDE 9

Now in the lambda calculus

... : (λ + callcc) → λ If a : τ, then a : (τ → answer) → answer, where: τ = τ for base types and τ1 → τ2 = τ1 → (τ2 → answer) → answer N = λk. k N x = λk. k x λx. a = λk. k (λx. a) f a = λk. f (λvf . a (λva. vf va k)) callcc f = λk. f (λvf . vf k k) throw a b = λk. a (λva. b (λvb. va vb))

Tom Nikken Conversion from callcc to CPS 5 / 16

slide-10
SLIDE 10

Remarks

callcc conversion duplicates k: one as argument to f and one to propagate the current continuation. Throw ignores k. Argument of application is always a value, so works for CBV and CBN.

Tom Nikken Conversion from callcc to CPS 6 / 16

slide-11
SLIDE 11

Exercise f x =β ?

Tom Nikken Conversion from callcc to CPS 7 / 16

slide-12
SLIDE 12

Exercise

f x = λk. f (λva. x (λvb. va vb k))

Tom Nikken Conversion from callcc to CPS 8 / 16

slide-13
SLIDE 13

Exercise

f x = λk. f (λva. x (λvb. va vb k)) = λk. (λk1. k1 f ) (λva. (λk2. k2 x) (λvb. va vb k))

Tom Nikken Conversion from callcc to CPS 8 / 16

slide-14
SLIDE 14

Exercise

f x = λk. f (λva. x (λvb. va vb k)) = λk. (λk1. k1 f ) (λva. (λk2. k2 x) (λvb. va vb k)) →β λk. (λk1. k1 f ) (λva. (λvb. va vb k) x)

Tom Nikken Conversion from callcc to CPS 8 / 16

slide-15
SLIDE 15

Exercise

f x = λk. f (λva. x (λvb. va vb k)) = λk. (λk1. k1 f ) (λva. (λk2. k2 x) (λvb. va vb k)) →β λk. (λk1. k1 f ) (λva. (λvb. va vb k) x) →β λk. (λk1. k1 f ) (λva. va x k)

Tom Nikken Conversion from callcc to CPS 8 / 16

slide-16
SLIDE 16

Exercise

f x = λk. f (λva. x (λvb. va vb k)) = λk. (λk1. k1 f ) (λva. (λk2. k2 x) (λvb. va vb k)) →β λk. (λk1. k1 f ) (λva. (λvb. va vb k) x) →β λk. (λk1. k1 f ) (λva. va x k) →β λk. (λva. va x k) f

Tom Nikken Conversion from callcc to CPS 8 / 16

slide-17
SLIDE 17

Exercise

f x = λk. f (λva. x (λvb. va vb k)) = λk. (λk1. k1 f ) (λva. (λk2. k2 x) (λvb. va vb k)) →β λk. (λk1. k1 f ) (λva. (λvb. va vb k) x) →β λk. (λk1. k1 f ) (λva. va x k) →β λk. (λva. va x k) f →β λk. f x k

Tom Nikken Conversion from callcc to CPS 8 / 16

slide-18
SLIDE 18

Exercise

f x = λk. f (λva. x (λvb. va vb k)) = λk. (λk1. k1 f ) (λva. (λk2. k2 x) (λvb. va vb k)) →β λk. (λk1. k1 f ) (λva. (λvb. va vb k) x) →β λk. (λk1. k1 f ) (λva. va x k) →β λk. (λva. va x k) f →β λk. f x k Perform β reductions at transformation time to eliminate the “administrative redexes” introduced by the translation.

Tom Nikken Conversion from callcc to CPS 8 / 16

slide-19
SLIDE 19

Example

To show the effect of the translation. f (f x) =β λk. f x (λv. f v k)

Tom Nikken Conversion from callcc to CPS 9 / 16

slide-20
SLIDE 20

Example

To show the effect of the translation. f (f x) =β λk. f x (λv. f v k) µfact. λn. if n = 0 then 1 else n ∗ fact(n − 1) =β λk0. k0( µfact. λn. λk. if n = 0 then k 1 else fact(n − 1)(λv. k (n ∗ v)))

Tom Nikken Conversion from callcc to CPS 9 / 16

slide-21
SLIDE 21

Example

To show the effect of the translation. f (f x) =β λk. f x (λv. f v k) µfact. λn. if n = 0 then 1 else n ∗ fact(n − 1) =β λk0. k0( µfact. λn. λk. if n = 0 then k 1 else fact(n − 1)(λv. k (n ∗ v))) callcc (λk.a) =β λk. a k

Tom Nikken Conversion from callcc to CPS 9 / 16

slide-22
SLIDE 22

Example

To show the effect of the translation. f (f x) =β λk. f x (λv. f v k) µfact. λn. if n = 0 then 1 else n ∗ fact(n − 1) =β λk0. k0( µfact. λn. λk. if n = 0 then k 1 else fact(n − 1)(λv. k (n ∗ v))) callcc (λk.a) =β λk. a k

Tom Nikken Conversion from callcc to CPS 9 / 16

slide-23
SLIDE 23

Still confused?

The types can help. N = λk. k N N :

Tom Nikken Conversion from callcc to CPS 10 / 16

slide-24
SLIDE 24

Still confused?

The types can help. N = λk. k N N : (nat → answer) → answer k :

Tom Nikken Conversion from callcc to CPS 10 / 16

slide-25
SLIDE 25

Still confused?

The types can help. N = λk. k N N : (nat → answer) → answer k : nat → answer

Tom Nikken Conversion from callcc to CPS 10 / 16

slide-26
SLIDE 26

Still confused?

λx. a = λk. k (λx. a) λx. a : (x → a → answer) → answer a : (a → answer) → answer

Tom Nikken Conversion from callcc to CPS 11 / 16

slide-27
SLIDE 27

Still confused?

λx. a = λk. k (λx. a) λx. a : (x → a → answer) → answer a : (a → answer) → answer k : x → a → answer

Tom Nikken Conversion from callcc to CPS 11 / 16

slide-28
SLIDE 28

Still confused?

λx. a = λk. k (λx. a) λx. a : (x → a → answer) → answer a : (a → answer) → answer k : x → a → answer x → a = x → (a → answer) → answer

Tom Nikken Conversion from callcc to CPS 11 / 16

slide-29
SLIDE 29

Still confused?

λx. a = λk. k (λx. a) λx. a : (x → a → answer) → answer a : (a → answer) → answer k : x → a → answer x → a = x → (a → answer) → answer λx. a : x → (a → answer) → answer

Tom Nikken Conversion from callcc to CPS 11 / 16

slide-30
SLIDE 30

Still confused?

f a = λk. f (λvf . a (λva. vf va k)) with f : a → b and a : a f a : (b → answer) → answer f : (a → b → answer) → answer a : (a → answer) → answer

Tom Nikken Conversion from callcc to CPS 12 / 16

slide-31
SLIDE 31

Still confused?

f a = λk. f (λvf . a (λva. vf va k)) with f : a → b and a : a f a : (b → answer) → answer f : (a → b → answer) → answer a : (a → answer) → answer k : b → answer

Tom Nikken Conversion from callcc to CPS 12 / 16

slide-32
SLIDE 32

Still confused?

f a = λk. f (λvf . a (λva. vf va k)) with f : a → b and a : a f a : (b → answer) → answer f : (a → b → answer) → answer a : (a → answer) → answer k : b → answer vf : a → b = a → (b → answer) → answer

Tom Nikken Conversion from callcc to CPS 12 / 16

slide-33
SLIDE 33

Still confused?

f a = λk. f (λvf . a (λva. vf va k)) with f : a → b and a : a f a : (b → answer) → answer f : (a → b → answer) → answer a : (a → answer) → answer k : b → answer vf : a → b = a → (b → answer) → answer va : a

Tom Nikken Conversion from callcc to CPS 12 / 16

slide-34
SLIDE 34

Execution of CPS-converted programs

Execute prog by giving it the initial continuation λx.x: prog(λx.x)

Theorem

If a →∗ v, then a(λx.x) →∗ vv. If a diverges, so does a(λx.x) Where the CPS translation of values v is: Nv = N λx.av = λx.a

Tom Nikken Conversion from callcc to CPS 13 / 16

slide-35
SLIDE 35

Plotkin’s proof

Tom Nikken Conversion from callcc to CPS 14 / 16

slide-36
SLIDE 36

CPS terms

Tom Nikken Conversion from callcc to CPS 15 / 16

slide-37
SLIDE 37

Reduction of CPS terms

Tom Nikken Conversion from callcc to CPS 16 / 16