nameless representation of terms
play

Nameless Representation of Terms CIS500: Software Foundations - PowerPoint PPT Presentation

Nameless Representation of Terms CIS500: Software Foundations Nameless Representation of Terms p.1/29 First, some review . . . A Proof on -Terms Nameless Representation of Terms p.2/29 Proof (1) We want to prove that if z FV ([


  1. Nameless Representation of Terms CIS500: Software Foundations Nameless Representation of Terms – p.1/29

  2. First, some review . . . A Proof on λ -Terms Nameless Representation of Terms – p.2/29

  3. Proof (1) We want to prove that if z ∈ FV ([ x �→ v ] u ) then z ∈ ( FV ( u ) \ { x } ) ∪ FV ( v ) In other words, FV ([ x �→ v ] u ) ⊆ ( FV ( u ) \ { x } ) ∪ FV ( v ) Proof by induction on the structure of u . Nameless Representation of Terms – p.3/29

  4. Proof (2) Case u = x : Then [ x �→ v ] u = v , and FV ( v ) ⊆ FV ( u ) \ { x } ∪ FV ( v ) Case u = y , where y � = x : Then [ x �→ v ] u = y , and FV ( u ) = FV ( y ) = { y } ⊆ ( { y } \ { x } ) ∪ FV ( v ) = ( FV ( u ) \ { x } ) ∪ FV ( v ) Nameless Representation of Terms – p.4/29

  5. Proof (3) Case u = λy. t , where y � = x : Then [ x �→ v ] u = λy. [ x �→ v ] t By the IH, FV ([ x �→ v ] t ) ⊆ ( FV ( t ) \ { x } ) ∪ FV ( v ) . So FV ([ x �→ v ] u ) = FV ( λy. [ x �→ v ] t ) = FV ([ x �→ v ] t ) \ { y } ⊆ (( FV ( t ) \ { x } ) ∪ FV ( v )) \ { y } ⊆ ( FV ( t ) \ { x } \ { y } ) ∪ FV ( v ) = ( FV ( t ) \ { y } \ { x } ) ∪ FV ( v ) = ( FV ( u ) \ { x } ) ∪ FV ( v ) Nameless Representation of Terms – p.5/29

  6. Proof (4) Case u = t 1 t 2 : Exercise. Nameless Representation of Terms – p.6/29

  7. Now on to the main topic . . . Nameless Representation of Terms Nameless Representation of Terms – p.7/29

  8. Representing Terms ::= t x | λx. t | t 1 t 2 Choosing a concrete way to represent terms is necessary when using computers to work with λ -terms. Implementing programming language evaluators. Writing machine-checkable definitions and proofs of theorems. Nameless Representation of Terms – p.8/29

  9. Variable Capture [ x �→ λy. z ]( λz. x ) � = λz. λy. z How can we be sure that our implementation doesn’t make this mistake? Nameless Representation of Terms – p.9/29

  10. Idea: Rename During Substitution Rename z to z ′ before applying substitution. [ x �→ λy. z ]( λz. x ) = λz ′ . λy. z Nameless Representation of Terms – p.10/29

  11. Idea: “Barendregt Convention” We can make sure our terms never use the same variable name twice. So we must always start with [ x �→ λy. z ]( λz ′ . x ) Nameless Representation of Terms – p.11/29

  12. Idea: “Barendregt Convention” We can make sure our terms never use the same variable name twice. So we must always start with [ x �→ λy. z ]( λz ′ . x ) But then what happens here? [ x �→ λy. z ]( λz. x x ) Nameless Representation of Terms – p.11/29

  13. More Extreme Proposals Explicit Substitutions: Make substitutions part of the syntax and encode renaming into the evaluation rules. Combinators: Find a language with applications but no variables or binding, and translate terms to this langauge. Nameless Representation of Terms – p.12/29

  14. Devise Canonical Representation Maybe we can think of a unique representation for α -equivalent terms. Nameless Representation of Terms – p.13/29

  15. Devise Canonical Representation Maybe we can think of a unique representation for α -equivalent terms. For λx. λy. x ( y x ) we could write λ. λ. 1 (0 1) Is this representation unique? Nameless Representation of Terms – p.13/29

  16. Devise Canonical Representation Maybe we can think of a unique representation for α -equivalent terms. For λx. λy. x ( y x ) we could write λ. λ. 1 (0 1) Is this representation unique? What about free variables? Nameless Representation of Terms – p.13/29

  17. Formal Definition of de Bruijn Terms We will define a family of sets T n so that the set T i can represent terms with at most i free variables. 0 ≤ k < n t ∈ T n n > 0 k ∈ T n λ.t ∈ T n − 1 t 1 ∈ T n t 2 ∈ T n ( t 1 t 2 ) ∈ T n Nameless Representation of Terms – p.14/29

  18. Free Variables What do we do with y ? λx. y x Nameless Representation of Terms – p.15/29

  19. Free Variables What do we do with y ? λx. y x We need some sort of context of definitions, for example Γ = x �→ 4 , y �→ 3 , z �→ 2 , a �→ 1 , b �→ 0 Then we should be able to define a function db Γ , such that db Γ ( x ( y z )) = 4 (3 2) db Γ ( λx. y x ) = λ. 4 0 Nameless Representation of Terms – p.15/29

  20. Naming Contexts Let’s simplify Γ to be a sequence of variable names. Γ = x n − 1 , . . . , x 1 , x 0 Then we’ll define dom (Γ) = { x n − 1 , . . . , x 1 , x 0 } And Γ( x ) = rightmost index of x in Γ Nameless Representation of Terms – p.16/29

  21. Converting to Nameless Representation db Γ ( x ) = Γ( x ) db Γ ( λx. t ) = λ.db Γ ,x ( t ) db Γ ( t 1 t 2 ) = db Γ ( t 1 ) db Γ ( t 2 ) Nameless Representation of Terms – p.17/29

  22. Converting to Nameless Representation db Γ ( x ) = Γ( x ) db Γ ( λx. t ) = λ.db Γ ,x ( t ) db Γ ( t 1 t 2 ) = db Γ ( t 1 ) db Γ ( t 2 ) What is the type of db Γ ? Nameless Representation of Terms – p.17/29

  23. Converting to Nameless Representation db Γ ( x ) = Γ( x ) db Γ ( λx. t ) = λ.db Γ ,x ( t ) db Γ ( t 1 t 2 ) = db Γ ( t 1 ) db Γ ( t 2 ) What is the type of db Γ ? db Γ : T λ → T len (Γ) Nameless Representation of Terms – p.17/29

  24. Conversion Example We will work with Γ = x, y, z and will convert the term λx. y x Then we have db x,y,z ( λx. y x ) = λ. db x,y,z,x ( y x ) = λ. db x,y,z,x ( y ) db x,y,z,x ( x ) = λ. 2 0 Nameless Representation of Terms – p.18/29

  25. Defining Substitution Nameless Representation of Terms – p.19/29

  26. Substitution on Nameless Terms We must define [ k �→ s ] t for terms in T n . But how? Nameless Representation of Terms – p.20/29

  27. Substitution on Nameless Terms We must define [ k �→ s ] t for terms in T n . But how? We want to guarantee db Γ ([ x �→ s ] t ) = [Γ( x ) �→ db Γ ( s )] db Γ ( t ) for all Γ such that FV ( s ) ∪ FV ( t ) ∪ { x } ⊆ dom (Γ) Nameless Representation of Terms – p.20/29

  28. First Attempt � s if k = j [ j �→ s ] k = otherwise k [ j �→ s ]( λ.t ) = λ. [ j �→ s ] t [ j �→ s ]( t 1 t 2 ) = ([ j �→ s ] t 1 ) ([ j �→ s ] t 2 ) Nameless Representation of Terms – p.21/29

  29. Counter-Example [ x �→ λz. z ]( x ( λy. y )) Let Γ = x . db Γ ([ x �→ λz. z ]( x ( λy. y ))) = db Γ (( λz. z ) ( λy. y )) = ( λ. 0) ( λ. 0) but [Γ( x ) �→ db Γ ( λz. z )] db Γ ( x ( λy. y )) = [0 �→ λ. 0](0 ( λ. 0)) = ( λ. 0) ( λ. [0 �→ λ. 0]0) = ( λ. 0) ( λ. λ. 0) Nameless Representation of Terms – p.22/29

  30. Second Attempt � s if k = j [ j �→ s ] k = otherwise k [ j �→ s ]( λ.t ) = λ. [ j + 1 �→ s ] t [ j �→ s ]( t 1 t 2 ) = ([ j �→ s ] t 1 ) ([ j �→ s ] t 2 ) Nameless Representation of Terms – p.23/29

  31. Counter-Example [ x �→ λy. w ] λz. x Let Γ = x, w . db Γ ([ x �→ λy. w ] λz. x ) = db Γ ( λz. λy. w ) = λ. db Γ ,z ( λy. w ) = λ. λ. db Γ ,z,y ( w ) = λ. λ. 2 but [Γ( x ) �→ db Γ ( λy. w )] db Γ ( λz. x ) = [1 �→ λ. 1] λ. 2 = λ. [2 �→ λ. 1]2 = λ. λ. 1 Nameless Representation of Terms – p.24/29

  32. Third Attempt (Shifting) ↑ ( k ) = k + 1 ↑ ( λ. t ) = λ. ↑ ( t ) ↑ ( t 1 t 2 ) = ↑ ( t 1 ) ↑ ( t 2 ) � s if k = j [ j �→ s ] k = otherwise k [ j �→ s ]( λ.t ) = λ. [ j + 1 �→↑ ( s )] t [ j �→ s ]( t 1 t 2 ) = ([ j �→ s ] t 1 ) ([ j �→ s ] t 2 ) Nameless Representation of Terms – p.25/29

  33. Counter-Example [ x �→ λy. w y ] λz. x Let Γ = x, w . db Γ ([ x �→ λy. w y ] λz. x ) = db Γ ( λz. λy. w y ) = λ. λ. db Γ ,z,y ( w y ) = λ. λ. 2 0 but [Γ( x ) �→ db Γ ( λy. w y )] db Γ ( λz. x ) = [1 �→ λ. 1 0] λ. 2 = λ. [2 �→↑ ( λ. 1 0)]2 = λ. [2 �→ λ. 2 1]2 = λ. λ. 2 1 Nameless Representation of Terms – p.26/29

  34. Third Attempt (Shifting with Cut-Off) � k if k < c ↑ c ( k ) = k + 1 if k ≥ c ↑ c ( λ. t ) = λ. ↑ c +1 ( t ) ↑ c ( t 1 t 2 ) = ↑ c ( t 1 ) ↑ c ( t 2 ) � s if k = j [ j �→ s ] k = otherwise k [ j �→ s ]( λ.t ) = λ. [ j + 1 �→↑ 0 ( s )] t [ j �→ s ]( t 1 t 2 ) = ([ j �→ s ] t 1 ) ([ j �→ s ] t 2 ) Nameless Representation of Terms – p.27/29

  35. Generalized Shifting � k if k < c ↑ d c ( k ) = k + d if k ≥ c ↑ d λ. ↑ d c ( λ. t ) = c +1 ( t ) ↑ d ↑ d c ( t 1 ) ↑ d c ( t 1 t 2 ) = c ( t 2 ) Nameless Representation of Terms – p.28/29

  36. Evaluation of de Bruijn Terms The evaluation rule we want is 0 ( v 2 )] t 12 ) E-A PP A BS ( λ. t 12 ) v 2 →↑ − 1 ([0 �→↑ 1 0 Nameless Representation of Terms – p.29/29

  37. Evaluation of de Bruijn Terms The evaluation rule we want is 0 ( v 2 )] t 12 ) E-A PP A BS ( λ. t 12 ) v 2 →↑ − 1 ([0 �→↑ 1 0 Consider this example. Let’s say our context is Γ = z, y, x . db Γ (( λw. w x y ) x y z ) = ( λ. 0 1 2) 0 1 2 ( ↑ − 1 ([0 �→↑ 1 → 0 (0)](0 1 2))) 1 2 0 ( ↑ − 1 = ([0 �→ 1](0 1 2))) 1 2 0 ( ↑ − 1 = (1 1 2)) 1 2 0 = 0 0 1 1 2 = db Γ ( x x y y z ) Nameless Representation of Terms – p.29/29

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend