Anda di halaman 1dari 31

C alculo lambda II

Extensiones del c alculo lambda Paradigmas de Lenguajes de Programaci on


Departamento de Computaci on Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires

En clases anteriores...

Introducci on a C-b como lenguaje representativo del paradigma funcional Formulaci on de un sistema de tipos a trav es de axiomas y reglas de inferencia Denici on de sem antica operacional small-step (en un paso) Primera extensi on: los naturales

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Tipos: motivaci on
Son correctas estas expresiones? x :Bool.x (x :Bool.x ) x y x 5x x x :Bool.x x x

Observaciones
Los tipos nos permiten caracterizar las expresiones del lenguaje que tienen sentido. El C- que usamos tiene alto orden. El C- nos ayuda a comprender los conceptos fundamentales de la programaci on funcional.
C alculo lambda II Paradigmas de Lenguajes de Programaci on

Reglas y axiomas de tipado

true : Bool

false : Bool

x : x :

{x : } M : x : .M :

M: N: M N:

M : Bool N : O : if M then N else O :

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Sem antica: motivaci on


Qu e signican estas expresiones? x :Bool.x (x :Bool.x ) true (x :Bool Bool.x ) (x :Bool.x ) false

Observaciones
La sem antica nos permite interpretar las expresiones correctas (t erminos tipados) del lenguaje. El objetivo es saber como se evaluan o ejecutan los t erminos para conocer su signicado. La sem antica que usamos es en un paso (small-step ). El C- que usamos no es lazy.
C alculo lambda II Paradigmas de Lenguajes de Programaci on

Valores

Qu e son los valores?


Los valores son las expresiones con sentido directo. Son los posibles resultados de los programas correctos. Los posibles valores en el c alculo presentado hasta ahora son: V ::= true | false | x : .M

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Sem antica operacional (en un paso)

MM M NM N

NN V NV N

(x : .M ) V M [x V ]

MM if M then N else O if M then N else O

if true then N else O N

if false then N else O O

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Sintaxis para c alculo con pares

Qu e hay que agregar? ...t erminos para representar el constructor y los observadores M ::= ... | < M , N > | 1 (M ) | 2 (M ) ...y un tipo para estas nuevas expresiones ::= ... |

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de tipado para pares

Qu e hay que agregar? Al menos una regla por cada forma nueva de sintaxis, porque cada una de ellas precisa poder ser tipada en algunos casos. Notar que, de no hacerlo, ser a imposible construir t erminos tipables ( utiles) con dicha forma.

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Regla de tipado para el constructor

M: N: < M , N >:

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de tipado para las proyecciones

M : 1 (M ) :

N : 2 (N ) :

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Sem antica para pares

Qu e reglas hay que agregar?

Necesitamos reducir todos los pares con sentido que no sean valores. Cu ales son los valores? Empecemos por ah entonces...

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Extensi on de los valores

V ::= ... | < V , W >

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de sem antica para pares

Ahora s , a por las reglas!

MM < M , N >< M , N >

NN < V , N >< V , N >

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de sem antica para las proyecciones

MM 1 (M ) 1 (M )

MM 2 (M ) 2 (M )

1 (< V , W >) V

2 (< V , W >) W

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Sintaxis para c alculo con arboles binarios


Qu e hay que agregar? ...t erminos para representar los constructores y observadores
M ::= ... | Nil | Bin(M , N , O ) | root (M ) | right (M ) | left (M ) | nil (M )

...y un tipo para estas nuevas expresiones ::= ... | AB

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de tipado para arboles binarios

Qu e hay que agregar? Como antes: una regla por cada forma nueva de sintaxis, porque cada una de ellas precisa poder ser tipada en algunos casos.

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de tipado para los constructores

Nil : AB

M : AB O : AB N : Bin(M , N , O ) : AB Nil es una constante diferente seg un el tipo .


No tenemos polimorsmo!

Para Bin, en cambio, el tipo queda determinado por el tipo de los subt erminos.

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de tipado para los observadores

M : AB root (M ) :

M : AB nil (M ) : Bool

M : AB left (M ) : AB

M : AB right (M ) : AB

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Sem antica para arboles binarios

Primero, empecemos por los valores:

V ::= ... | Nil | Bin(V , W , Y )

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de sem antica para los constructores

MM Bin(M , N , O ) Bin(M , N , O )

NN Bin(V , N , O ) Bin(V , N , O )

OO Bin(V , W , O ) Bin(V , W , O )

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de sem antica para los observadores (1/2)

MM left (M ) left (M )

MM right (M ) right (M )

MM root (M ) root (M )

MM nil (M ) nil (M )

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de sem antica para los observadores (2/2)

nil (Nil ) true

nil (Bin(V , W , Y )) false

left (Bin(V , W , Y )) V

right (Bin(V , W , Y )) Y

root (Bin(V , W , Y )) W

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Otra forma de proyectar/observar

Vamos a ver otra forma de representar proyectores u observadores m as prolija y que requiere menos reglas (aunque una construcci on m as sosticada).

Usamos los arboles nuevamente para ejemplicar, de manera que se pueda comparar correctamente y notar la desaparici on de algunos problemas que ya marcamos.

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Sintaxis para c alculo con arboles binarios bis

Los tipos quedan igual que en el caso anterior: ::= ... | AB

Y los t erminos,
M ::= ... | Nil | Bin(M , N , O ) | CaseAB M of Nil N ; Bin(m, n, o ) O

Aqu las min usculas (m,n,o ) representan variables.

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de tipado para arboles binarios bis

Para los constructores son las que ya ten amos.

Nil : AB

M : AB O : AB N : Bin(M , N , O ) : AB

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Regla de tipado para el Case

M : AB N : {m : AB , n : , o : AB } O : CaseAB M of Nil N ; Bin(m, n, o ) O:

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Sem antica para los arboles binarios bis

Tenemos los mismos valores que antes:

V ::= ... | Nil | Bin(V , W , Y )

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de sem antica para los constructores


An alogas a las que ya ten amos. MM Bin(M , N , O ) Bin(M , N , O )

NN Bin(V , N , O ) Bin(V , N , O )

OO Bin(V , W , O ) Bin(V , W , O )

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

Reglas de sem antica para el Case


CaseAB CaseAB MM M of Nil N ; Bin(m, n, o ) M of Nil N ; Bin(m, n, o ) O O

CaseAB Nil of Nil

N ; Bin(m, n, o )

ON

CaseAB Bin(V , W , Y ) of Nil N ; Bin(m, n, o ) O {m V , n W , o Y }

C alculo lambda II

Paradigmas de Lenguajes de Programaci on

En la pr oxima clase...

Inferencia de tipos para C-b . Mecanismo para reconstruir el tipo de una expresi on cualquiera sin anotaciones de tipo.

C alculo lambda II

Paradigmas de Lenguajes de Programaci on