EL λ-CÁLCULO CON TIPOS

31
EL λ-CÁLCULO CON TIPOS Inmaculada Berrocal Rincón Pablo Camacho Aires Adrián Muñoz Alba

description

EL λ-CÁLCULO CON TIPOS. Inmaculada Berrocal Rincón Pablo Camacho Aires Adrián Muñoz Alba. CONTENIDOS. Introducción Los Sistemas de tipos de Church y de Curry Propiedades del Sistema de tipos à la Curry Inferencia de tipos Un argumento Varios argumentos Otras variables predefinidas - PowerPoint PPT Presentation

Transcript of EL λ-CÁLCULO CON TIPOS

Page 1: EL λ-CÁLCULO CON TIPOS

EL λ-CÁLCULO CON TIPOS

Inmaculada Berrocal RincónPablo Camacho AiresAdrián Muñoz Alba

Page 2: EL λ-CÁLCULO CON TIPOS

2

CONTENIDOS Introducción Los Sistemas de tipos de Church y de Curry

o Propiedades del Sistema de tipos à la Curry Inferencia de tipos

o Un argumentoo Varios argumentoso Otras variables predefinidas

Inferencia de tipos en presencia de recursión Inferencia de tipos en presencia de patrones Reglas elementales para inferencia de tipos

Page 3: EL λ-CÁLCULO CON TIPOS

3

El λ-cálculo fue ideado por Church (1932-1933) como parte de una teoría general de funciones y lógica. El sistema se volvió inconsistente, como lo demostraron Kleene y Rosser (1936). El subsistema que trata con funciones llegó a ser un modelo factible para modelos computables. Esto es lo que se conoce hoy como el λ-cálculo.

Kleene y Rosser demostraron que todas las funciones recursivas se podían representar en λ-cálculo. Por otra parte, Turing demostró que las funciones computables por una máquina de Turing pueden ser representadas en el λ-cálculo. La representación de funciones computables como λ-términos dió lugar a lo que se llama Programación Funcional.

El λ-cálculo siempre ha sido tratado como una teoría libremente tipificada.

INTRODUCCIÓN

Page 4: EL λ-CÁLCULO CON TIPOS

4

El uso de tipos para modelar la lógica se remonta al trabajo de Bertrand Russell en el año 1908 (Mathematical logic as based on a theory of types).

En 1940, Alonzo Church desarrolló una teoría simple de tipos. Un poco antes fue Haskell Curry quien desarrolló una teoría de tipos para la lógica combinatoria en 1934.

Henk P. Barendregt, en su artículo Lamba Calculi with Types, distingue esencialmente dos estilos para la descripción de los sistemas de tipos, denominados sistemas de tipos à la Church y sistemas de tipos à la Curry.

Los primeros se suelen llamar sistemas explícitos, mientras que los segundos se conocen como implícitos, y en estos los términos a tipificar son esencialmente los del λ-cálculo.

LOS SISTEMAS DE TIPOS DE CHURCH Y DE CURRY

Page 5: EL λ-CÁLCULO CON TIPOS

5

LOS SISTEMAS DE TIPOS DE CHURCH Y DE CURRY

En el sistema de tipos à la Curry, los términos puede tener un conjunto de tipos posibles que puede estar vacío, tener uno o varios elementos.

En el sistema de tipos à la Church, cada término tiene un tipo que es único.

En los sistemas à la Curry falla la propiedad de unicidad de tipos.

Page 6: EL λ-CÁLCULO CON TIPOS

6

LOS SISTEMAS DE TIPOS DE CHURCH Y DE CURRY

El sistema de tipos de Curry viene descrito por el siguiente axioma y reglas de inferencia:

Page 7: EL λ-CÁLCULO CON TIPOS

7

PROPIEDADES Conservación del tipo: la evaluación de un término no modifica el tipo de dicho término.

Todo término tipificable es fuertemente normalizante: si un término es tipificable, tiene una forma normal.

Sustitución: podemos considerar tipos resultantes por sustitución de tipos en expresiones o contextos.

Page 8: EL λ-CÁLCULO CON TIPOS

8

PROPIEDADES Problemas fundamentales en los sistemas de tipos en general

Comprobación de tipos Tipificación Habitabilidad

La demostración de la decibilidad de los dos primeros problemas surge de la demostración que Curry y Hindley realizaron sobre la tipificabilidad de un término. El tercer problema no es decidible en el lambda cálculo polimórfico.

Page 9: EL λ-CÁLCULO CON TIPOS

9

LEMA DE GENERACIÓN

a) Si Г├ x :, entonces x : Г.

b) Si Г├ f a :, entonces existe un tipo tal que Г├ f : ^ Г├ a :.

c) Si Г├ x.b : , entonces existen dos tipos y tales que ≡ , y además Г,x : ├ b : .

Page 10: EL λ-CÁLCULO CON TIPOS

10

UNICIDAD DE TIPO DE VARIABLES

(UniVar) Г├ x :1 Г├ x :2 1 ≡ 2

Demostración. Si tenemos las derivaciones de la parte izquierda de la implicación anterior, aplicando al apartado (a) del lema anterior tendremos que

x :1 Г ^ x :2 Г

Pero en un mismo contexto no puede aparecer variables repetidas. Es necesario que 1 ≡ 2.

Page 11: EL λ-CÁLCULO CON TIPOS

11

INFERENCIA DE TIPOSEn el sistema de tipos à la Curry, los problemas

fundamentales de comprobación de tipos (type checking), tipificación (typability) y habitabilidad (inhabitation) son decidibles. Malecki descubrió que el problema de la tipificación se puede reducir al problema de la comprobación de tipos.

Hindley y Milner dan para el λ-cálculo à la Curry una función pp recursiva tal que para cada término a tipificable, pp(a) es un par principal de a que además falla si el término no es tipificable.

(1)Гa├ a : a

(2)Si Г├ a : entonces existe una sustitución

*≡ 1,… n := 1,…n tal que Гa* Г y ≡ a

Page 12: EL λ-CÁLCULO CON TIPOS

12

INFERENCIA DE TIPOS:UN ARGUMENTO

Para una expresión E y una función en C f = x.E que sea tipificable, existirá un tipo y un contexto Г que se le podrá asignar a nuestra función de la forma (en Haskell se utilizan los dos puntos :: para indicar la asignación de tipos)

Г├ x.E :: Г├ f :: que se le podrá aplicar el apartado (c) del lema de generación, obteniendo

Г,x :: ├ E :: ≡

REGLA I: Asignamos tipo al argumento y al resultado de la funciónde forma que para cierto contexto tendremos

Г,x :: ├ E :: Г├ f ::

Page 13: EL λ-CÁLCULO CON TIPOS

13

INFERENCIA DE TIPOS:UN ARGUMENTO

Ejemplo: Tenemos la ecuación f x = x. Por la aplicación de la REGLA I tenemos

Г,x ::├ x :: Г├ f ::

Pero como las variables tienen tipos únicos en el mismo contexto, entonces tenemos que ≡ . El menor contexto, que sería el contexto principal, que cumpla lo anterior es Г ≡ . El tipo principal sería , aunque podría haber otros como por ejemplo .

Page 14: EL λ-CÁLCULO CON TIPOS

14

INFERENCIA DE TIPOS:VARIOS ARGUMENTOS

Para una expresión E y una función en C f = x.(y.E) que sea tipificable, aplicando la REGLA I existirá un contexto y dos tipos de forma que:

Г,x :: ├ y.E :: Г ├ f ::

Aplicando el apartado (c) del lema de generación, existirán otros dos tipos y de forma que

Г,x :: ,y :: ├ E :: ≡

REGLA I: Asignamos tipos a los argumentos y al resultado de la función de forma que para cierto contexto tendremos

Г,x :: ,y :: ├ E :: Г ├ f ::

Page 15: EL λ-CÁLCULO CON TIPOS

15

INFERENCIA DE TIPOS:VARIOS ARGUMENTOS

Ejemplo: Tenemos la ecuación f x y = y x.

Asignando la REGLA I tenemosГ,x :: ,y :: ├ y x :: Г ├ f ::

Aplicando el apartado (b) del lema de generación tenemos queГ,x :: ,y :: ├ y :: ’ Г,x :: ,y :: ├ x :: ’

Si aplicamos la unicidad de tipos para variables debe tenerse ≡ ’ y = . Para obtener un par principal, podríamos tomar como contexto el vacío porque no hay más variables. La derivación se obtendría con el siguiente par principal:

├ f :: ( )

Page 16: EL λ-CÁLCULO CON TIPOS

16

INFERENCIA DE TIPOS:VARIOS ARGUMENTOS

Ejercicio 17.30: Infiere el tipo de la ecuación f x y = x y.

Asignando la REGLA I tenemosГ,x :: ,y :: ├ x y :: Г ├ f ::

Aplicando el apartado (b) del lema de generación tenemos queГ,x :: ,y :: ├ x :: ’ Г,x :: ,y :: ├ y :: ’

Si aplicamos la unicidad de tipos para variables debe tenerse ≡ ’ y = . Para obtener un par principal, podríamos tomar como contexto el vacío porque no hay más variables. La derivación se obtendría con el siguiente par principal:

├ f :: ( )

Page 17: EL λ-CÁLCULO CON TIPOS

17

A través del ejemplo anterior, obtenemos la siguiente regla:

Si E es una variable es necesario que aparezca en el contexto:

Esta regla es un caso particular interesante, y junto a la REGLA I y a la REGLA II son suficientes para inferir el tipo en muchos casos.

INFERENCIA DE TIPOS:VARIOS ARGUMENTOS

REGLA II: En el sistema λ-cálculo à la Curry, se cumple la propiedad

Г,f :: ├ f E :: .Г,f :: ├ E :: ^ ≡

REGLA II’: En el sistema λ-cálculo à la Curry, se cumple la propiedad

Г,x :: ,f :: ├ f x :: ≡

Page 18: EL λ-CÁLCULO CON TIPOS

18

INFERENCIA DE TIPOS:VARIOS ARGUMENTOS

Ejemplo: Vamos a inferir el tipo principal del operador de ecuación (.) f g x = f(g x), que nos da la composición de dos funciones. Asignando tipos a los argumentos y utilizando el resultado que nos da la REGLA I, tenemos

Г,f :: ,g :: ,x :: ├ f(g x) :: Г├ f ::

Aplicamos ahora la REGLA II, y para cierto tipo tendremosГ,f :: ,g :: ,x :: ├ g x :: ≡

Y aplicando ahora la REGLA II’, tenemos ≡ . Como no aparecen más variables, se puede tomar Г = , y tendríamos como un par principal:

├ (.) :: ( ) ( )

Page 19: EL λ-CÁLCULO CON TIPOS

19

INFERENCIA DE TIPOS:VARIOS ARGUMENTOS

Ejemplo: Consideremos la ecuación f x y = y(y x). Asignando la REGLA I, y teniendo en cuenta que sólo hay dos variables, podremos coger como contexto el vacío, y tendremos

x :: ,y :: ├ y(y x) :: ├ f ::

Si aplicamos ahora la REGLA II, tendremos un tipo tal quex :: ,y :: ├ y x :: ≡

Y aplicando ahora la REGLA II’, tendremos ≡ , que junto a ≡ nos da que todas las variables de tipo sean iguales, exceptuando , y tendremos el par:

├ f :: ( )

Page 20: EL λ-CÁLCULO CON TIPOS

20

INFERENCIA DE TIPOS (VAR. PREDEFINIDAS)

El proceso de compilación recoge toda la información necesaria para el proceso de inferencia de todas las ecuaciones del programa. Si se tiene una variable no definida y un contexto vacío, se produce el error. Ej: sea la función f x = h x :

Page 21: EL λ-CÁLCULO CON TIPOS

21

INFERENCIA DE TIPOS (VAR. PREDEFINIDAS)

Dos ejemplos de inferencia:f x = x ++ x

dos f = f . f

1 2 3

4 5

1 2 3

4 5

Page 22: EL λ-CÁLCULO CON TIPOS

22

INFERENCIA DE TIPOS EN PRESENCIA DE

RECURSIÓN Uso del combinador Y (puntos fijos) Sabemos que el tipo de Y es Y : (T T) T Supongamos la siguiente ecuación en λ-cálculo:

f = Y FF = λux. u x

f :: T y F:: TT F = λux. u x.

Regla Iu :: α, x :: β ├ u x :: γ ├ F :: α β γ Regla II’α ≡ β γ sustituyendo α en F nos queda:F :: (β γ) β γ f :: β γ

Page 23: EL λ-CÁLCULO CON TIPOS

23

INFERENCIA DE TIPOS EN PRESENCIA DE

RECURSIÓN Ejemplo: Encontrar el tipo más general de la ecuación

m x = m (m x)a) m = Y F

F m x = m (m x)Regla Im :: α, x :: β ├ m (m x) :: γ ├ F ::: α β γRegla IIm :: α, x :: β ├ m x :: δ α ≡ δ γRegla II’α ≡ β δ Igualdad de tiposδ γ ≡ β δ y por lo tanto γ ≡ β ≡ δ

F:: (δ δ) δ δ m :: δ δ

sabemos que F :: T T y m :: T

Page 24: EL λ-CÁLCULO CON TIPOS

24

INFERENCIA DE TIPOS EN PRESENCIA DE

RECURSIÓNEjemplo: Encontrar el tipo más general de la ecuación

m x = m (m x)b) m x = m (m x)

Regla Ix :: β├ m (m x) :: γ ├ m ::: β γ

Regla IIx :: β├ m x :: δ x :: β ├ m ::: δ γ

Regla II’x :: β├ m :: β δ x :: β ├ m ::: δ γ

Podemos suponer que la función aparece como una variable en el contexto. Suponiendo esta propiedad si podemos aplicar la unicidad de tipos βδ ≡ δγ

γ ≡ β ≡ δ y por tanto m :: δ δ

Page 25: EL λ-CÁLCULO CON TIPOS

25

INFERENCIA DE TIPOS EN PRESENCIA DE

PATRONES f (y : ys) = EAplicamos la Regla I, suponiendo que y:ys es una variable∆, (:) y ys :: α ├ E :: δ ∆ ├ f :: α δ

Como las variables y, ys son libres, deben aparecer en el contextoГ, y :: β, ys :: γ, (:) y ys :: α ├ E :: δ Г ├ f :: α δ

Г, y :: β, ys :: γ ├ (:) y ys :: α

Г, y :: β, ys :: γ, (:) y ys :: α ├ (:) :: β γ αComo sabemos que ├ (:) :: a [a] [a], podemos concluir que γ ≡ [β] ≡ αГ, y :: β, ys :: [β] ├ E :: δ Г ├ f :: [β] δ

Aplicaremos la regla I con la diferencia de que debemos asignar tipos a las variables de los patrones.

Page 26: EL λ-CÁLCULO CON TIPOS

26

INFERENCIA DE TIPOS EN PRESENCIA DE

PATRONESEjemplo:

data A a = Vacio | N (A a) a (A a)izdo (N i x d) = i

Aplico la Regla Ii :: A a, x :: a, d :: A a ├ i :: β ├ izdo :: Aa β

Por la unicidad de tipos A a ≡ βizdo :: Aa Aa

Page 27: EL λ-CÁLCULO CON TIPOS

27

INFERENCIA DE TIPOS EN PRESENCIA DE

PATRONESEjemplo:

foldr f z [] = zfoldr f z (x:xs) = f x (foldr f z xs)

foldr f z (x:xs) = f x (foldr f z xs)Aplicamos la Regla If :: α, z :: β, x :: γ, xs :: [γ] ├ f x (foldr f z xs) :: δ∆ ├ foldr f z xs :: δel tipo de f es α ≡ γ δ δ├ foldr :: (γ δ δ) β [γ] δ

foldr f z [] = z├ foldr :: τ ρ [ϖ] ρ

Unificamos con la solución de la ecuación anterior β ≡ρ≡ δ y ϖ ≡ γ, ├ foldr :: (γ δ δ) δ [γ] δ

Page 28: EL λ-CÁLCULO CON TIPOS

28

REGLAS ELEMENTALES PARA INFERENCIAS DE

TIPOS Regla de aplicación:

Regla de igualdad de tipos

f x :: τ(a) ├ Regla de aplicación

γ | ( x :: γ) ^ ( f :: γ τ)

e :: τ ^ e:: σ(i) ├ Igualdad de tipos

τ ≡ σ

Page 29: EL λ-CÁLCULO CON TIPOS

29

REGLAS ELEMENTALES PARA INFERENCIA DE

TIPOSEjemplo:

omega y = λ f f (f y)omega y f = f (f y)

Asignamos tipos diferentes a los argumentos y al cuerpoy :: α, f :: β, f (f y) :: γ omega :: α β γ

f (f y) :: γ(a) ├ Regla de aplicación

δ | ( fy :: δ ) ^ ( f :: δ γ)

( f :: β) ^ ( f :: δ γ)(i) ├ Igualdad de tipos

β ≡ (δ γ)

f y :: δ(a) ├ Regla de aplicación

α | ( y :: α ) ^ ( f :: α δ)

( f :: δ γ) ^ ( f :: α δ)(i) ├ Igualdad de tipos

(δ γ) ≡ (α δ)

( δ γ) = (α δ)(i) ├ Igualdad de tipos

(δ ≡ γ) ^ (α ≡ δ)

omega :: γ (γ γ) γ

Page 30: EL λ-CÁLCULO CON TIPOS

30

REGLAS ELEMENTALES PARA INFERENCIA DE

TIPOSEjemplo:

cosa f x = λg g f (f x g)cosa f x g = g f (f x g)

Asignamos tipos a los argumentos y al cuerpo de la funciónf :: α, x :: β, g :: γ, g f (f x g) :: δ cosa :: α β γ δg f (f x g) :: δ

(a) ├ Regla de aplicación τ | ( f x g :: τ ) ^ ( g f :: τ δ)f x g :: τ

(a) ├ Regla de aplicación γ | (g :: γ ) ^ ( f x :: γ τ )f x :: γ τ

(a) ├ Regla de aplicación β | (x :: β ) ^ ( f :: β (γ τ ))

Observemos que α ≡ (β (γ τ )) y que γ ≡ (α (τ δ)), el tipo de cosa no es correcto.

( f :: α) ^ ( f :: β (γ τ ))(i) ├ Igualdad de tipos

α ≡ (β (γ τ ))g f :: τ δ

(a) ├ Regla de aplicación α | (f :: α ) ^ ( g :: α (τ

δ) )(g :: γ) ^ ( g :: α (τ δ) )

(i) ├ Igualdad de tipos γ ≡ (α (τ δ))

Page 31: EL λ-CÁLCULO CON TIPOS

31

BIBLIOGRAFÍA RAZONANDO CON HASKELL: Un curso

sobre programación funcional - Blas C. Ruiz Jimenez, Francisco Gutiérrez López, Pablo Guerrero García, José E. Gallardo Ruíz - Universidad de Málaga - 2004

LAMBDA CALCULI WITH TYPES - Henk P. Barendregt - Catholic University Nijmegen - 1991