calculo lambda

Download Calculo Lambda

Post on 13-Jun-2015

658 views

Category:

Documents

8 download

Embed Size (px)

TRANSCRIPT

Universidad Nacional del Nordeste Faculta de Ciencias Exactas Naturales y Agrimensura

Programacin III Programacin Funcional

HistoriaSus orgenes provienen del Clculo Lambda (-clculo), una teora matemtica elaborada por Alonzo Church como apoyo a sus estudios sobre computabilidad en la dcada de 1930. Church us el clculo lambda en 1936 para resolver el Entscheidungsproblem Church prob que no haba algoritmo que pudiese ser considerado como una "solucin" al Entscheidungsproblem. Independientemente el mismo ao, Turing prueba lo mismo con su Mquina de Turing.

Alonzo Church (1903-1995)

Ms HistoriaDavid Hilbert, siguiendo con su programa con el cual propone desafos a los matemticos (23 Problemas de Hilbert del 1900), formula 3 preguntas en 1928, la tercera de las cuales se conoce como: Hilbert's Entscheidungsproblem. El Entscheidungsproblem: es el reto en lgica simblica de encontrar un algoritmo general que decida si una frmula del clculo de primer orden es lgicamente vlida. El teorema de completitud de Gdel, postula que una formula lgica es lgicamente vlida si y solo s, para cada interpretacin, la misma es verdadera.David Hilbert (1862-1943)

http://www.answers.com/topic/hilbert-s-problems http://www.answers.com/topic/entscheidungsproblem-1

Clculo Lambda IEl clculo lambda es un sistema formal diseado para investigar:la definicin de funcin, la aplicacin de una funcin, la recursividad.

Por ejemplo, si una funcin f es definida por la ecuacin f(x)=t, donde t es algn trmino que contiene a x, entonces la aplicacin f(u) devuelve el valor t[x:=u], que resulta de sustituir u en cada aparicin de x en t. Si f(x)=x*x, entonces f(3)=3*3=9.

Clculo Lambda IILa principal caracterstica del clculo lambda es su simplicidad, ya que permite efectuar solo dos operaciones: Abstraccin funcional: Definir funciones de un solo argumento y con un cuerpo especifico, denotado por la siguiente terminologa: x.B. Aplicacin de funcin: Aplicar alguna de las funciones definidas sobre un argumento real (A). Es decir (x.B) A. Ejemplos: ( x. x + 2) 3

5 ( x. x + 2) 3 3+2 5

( f. f 3) ( x. x + 2)

Clculo Lambda SintaxisConsideramos un conjunto finito de variables {a, b, c, ..., x, y, z}. El conjunto de todas las -expresiones por la siguiente gramtica libre de contexto en BNF. ::= | ( .) | ( )

Abstraccin Aplicacin

Las dos primeras reglas generan funciones y la tercera, describe la aplicacin de una funcin a un argumento. Ejemplos x.x x.(y.y) f.f (x.x)

http://www.answers.com/topic/lambda-calculus

Convenciones sintcticasConvenciones sintcticas para hacer ms sencillas las expresiones1. 2. 3. 4.

La aplicacin va a ser asociativa por la izquierda: (((MN )P )Q ) MNPQ La abstraccin es asociativa por la derecha: (x.(y.M)) x.y.M La aplicacin es prioritaria sobre la abstraccin: (x.(MN)) x.MN Se puede suprimir smbolos en abstracciones consecutivas: x. y. ... z.M xy ... z.M

mbito de variablesEl mbito de un identificador es la porcin de un programa donde el identificador es accesible. La abstraccin x.E introduce a la variable x cuyo mbito es la expresin E vinculando a todas las variables x que ocurran en E. En este caso, decimos que x est vinculada en la abstraccin x.E. La abstraccin es similar a los argumentos formales de una funcin en el cuerpo de la funcin.

Variables libres y ligadasVariables LigadasUna variable x se dice ligada (o asociada) en una expresin E si aparece en el mbito de una abstraccin de variable instanciable x.

Bound[x] = {} Bound[x.E] = Bound[E] {x} Bound[E1 E2] = Bound[E1] Bound[E2]Ejemplo: (y.x (x.x y))La primera x es libre y la otras dos ligadas. Las dos y son ligadas.

Variables LigadasBound[y.x (x.x y)] = Bound[x (x.x y)] {y} = Bound[x] Bound[(x.x y)] {y} = { } Bound[(x.x y)] {y} = { } Bound[x y] {x} {y} = { } Bound[x] Bound[y] {x} {y} = { } { } { } {x} {y} = {x, y} Bound[xy.x] = Bound[x.(y.x)] = Bound[y.x] {x} = {y} {x} = {y, x}

Variables libres y ligadasVariables LibresUna variable se dice libre en E si tiene ocurrencias que no estn ligadas en E. El conjunto de las variables libres de una expresin E se pueden definir recursivamente como sigue:Free[x] Free[x.E] Free[E1 E2] = {x} = Free[E] {x} = Free[E1] Free[E2]

Ejemplos: Free[x.x(y.xyz)] = {z} Free[xy.x] =

Variables LibresFree[x.x (y.xyz)] = Free[x (y.xyz)] {x} = Free[x] Free[(y.xyz)] {x} = {x} Free[xyz] {y} {x} = {x} Free[x] Free[y] Free[z] {y} {x} = {x} {x} {y} {z} {y} {x} = {x, y, z} {y} {x} = {x, z} {x} = {z} Free[xy.x] = Free[x(y.x)] = Free[y.x] {x} =

Variables libres y ligadasSupongamos la expresin: (xy.(x y) y) Las dos primeras ocurrencias de y son ligadas pero la tercera es libre.Las primeras son los parmetros donde sern insertados los argumentos a los cuales se aplique la funcin. La tercera denota un valor no especificado que puede tomar una forma arbitraria (un argumento).

Relacin de equivalenciaEl conjunto de todas las expresiones lambda se denomina . Sobre este conjunto se define una relacin de equivalencia basada en la idea que dos expresiones pueden denotar la misma funcin. Esta relacin de equivalencia se define mediante reglas de clculo que hacen cumplir las propiedades:Reflexiva: M M Simtrica: M N N M Transitiva: M N y N P M P

Semntica OperacionalLa evaluacin de una expresin se compone de pasos de reduccin donde cada uno de los pasos se obtiene por reescritura: e e Se parte de un estado inicial (expresin inicial) y mediante un proceso de reescritura se obtiene un estado final (expresin final) Cada reduccin de e, reemplaza cierta subexpresin de acuerdo con ciertas reglas; tales subexpresiones se llaman redex (reducible expression). Se considera finalizado el cmputo cuando ya no aparecen ms redexes.

-reduccionesLas reglas de reescritura que se utilizan para reescribir un redex son:-REDUCCIN -REDUCCIN o -CONVERSIN -REDUCCIN -REDUCCIN

-reduccinSe llaman -reduccin a la regla que transforma constantes. Se describe con Ejemplo( (+ 1 2) ( 4 1) ( 3 ( 4 1) 3 3 9

-conversinDefiniremos la relacin de -reduccin (o conversin) como sigue: x.M y.M[x:=y] si y Free(M). La -reduccin es formalizar que si renombramos variables ligadas de -expresiones, stas no cambian (mientras no utilicemos variables libres para la sustitucin).

-reduccinLa -reduccin es el proceso de copia del argumento sobre el cuerpo de la abstraccin, reemplazando todas las ocurrencias de la variable instanciable por el argumento. (x.M) N [x:=N] M La -expresion (x.M) N es un -redex, es decir, se puede reducir mediante una -reduccin. Ser muy importante disponer de una correcta definicin de sustitucin si se usa para formalizar la reduccin, puesto que esta puede introducir inconsistencias. Otras notaciones: [N/x] M M[x:=N] x:=N.e

-reduccin Ejemplos(x. * x x) 2 (x. * x x) 2 (x.x y) (z.z) (* 2 2) 4 (z.z) y (y. * 7 y) 8 4

y *78

((xy. * x y) 7) 8 56 (f.f 3) (x.+ x 1) 4

(x.+ x 1) 3

+31

-reduccin EjerciciosReducir las siguientes expresiones: (v.((z.z) x)) ((x.((x.x) y) z)

-reduccinLa -reduccin (tambin llamada extensionalidad) expresa la idea de que dos funciones son lo mismo si dan el mismo resultado para todos sus argumentos. x.M x M La -expresin x.M x es un -redex, es decir, se puede reducir mediante una -reduccin. Tambin se dice que M se expande o se extiende a x.M x. Ejemplos: xy.+ y x x.(y.y) x y.+ y y.y +

Equivalencia de ExpresionesDefinicin: En -clculo dos -expresiones M y N que slo difieren en sus variables ligadas son equivalentes. Ejemplo : M = x.y.y N = x.z.z MN

es equivalente a

SustitucinLa sustitucin de x por N en M (denotada por [x:=N]M) es el resultado de cambiar en el -termino M, todas las apariciones de la variable libre x por un -termino N.[x:=N] x [x:=N] y [x:=N](P Q) [x:=N](x.P) [x:=N](y.P) N y [x:=N]P [x:=N]Q x.P y.([x:=N]P)

si x y (porque x est ligada en P) si x y

Captura de Variables IRealizar el proceso de reduccin en la siguiente expresin: (x.(x.x) (+ 1 x)) 1

1(x.(x.x) (+ 1 x)) 1 [x:=1](x.x) [x:=1](+ 1 x) (x.1) (+ 1 1) (x.1) 2 1

2(x.(x.x) (+ 1 x)) 1 [x:=1](x.x) [x:=1](+ 1 x) (x.x) (+ 1 1) (x.x) 2 2

Captura de Variables IISustituir el trmino z por la variable x. (x.(x.z)) z [x:=z] (x.z) (z.z) ?? Se convirti la funcin constante (x.z) en una funcin identidad.

Captura de Variables IIIAl sustituir y en el cuerpo de la abstraccin (reduccin), la ocurrencia libre de y reemplazar a x, transformndose en ligada:

(xy.(x y) y)

= y . ( y y )

El conflicto ocurre cuando en : [x:=N] y . P y ocurre libre en N; y (Ser necesario sustituir N en P (porque tiene variables x libres); las y libres de N se ligarn x ocurre libre en P en y . P)

Sustitucin SeguraUna sustitucin segura es aquella en la que no se produce ninguna captura de variables. Formalmente: Para la sustitucin:

[x:=N]PSe ha de cumplir la condicin suficiente:

Bound (P) Free (N) = Si esto ocurre ser necesario hacer una -conversin: cambio de nombre de variables:

(xy.(x y) y) (xz.(x z) y)

= z. ( y z)

Sustitucin: redefinicinPodramos redefinir la sustitucin usando la nocin de -equvalencia y evitar de este modo la captura de variables.[x:=N] x [x:=N] y [x:=N](P Q) [x:=N](x.P) [x:=N](y.P) [x:=N](y.P) N y [x:=N]P [x:=N]Q x.P y.([x:=N]P) z.([x:=N]([y:=z]P))

si x y (porque x est ligada en P) si x y ; y Free(N) si x y ; y Free(N) ; z Free(N) Free (P)

RedexUn redex es un termino de la forma: x.M N La abstraccin funcional representa la funcin a aplicar y el trmino N el argumento efectivo. Un redex representa la idea de un cmputo que est por realizarse.

Forma NormalDada una -expresin nos interesa