Cálculo ?
Creado por A. Church y S.C. Kleene en 1930 para establecer una teoría formal de funciones computables
Permitió demostrar por primera vez un teorema de indecibilidad: no hay úna función ? que permita establecer la equivalencia de dos funciones ?
Ha dado lugar a los lenguajes de programación funcionales, como Lisp
Expresiones ?
Variables x
E ::= V | … V ::= x | y | z | …
Funciones ?y.yy
E ::= V | F | … F ::= ?V.E
Aplicación de funciones (?y.yy)x
xy x(?y.yy) (?y.yy) (?x.xx)
E ::= V | F | EE | (E)
Funciones ?
La operación que da lugar a ?x.E a partir de una expresión E se llama abstracción ?
Ejemplo:
?y.yy es una abstracción de yy mediante la variable y
Semántica: Sustitución
(?y.(yzy))?x.u ? (?x.u)z(?x.u) ? u?x.u
Aplicación de Funciones ?: Ejemplos
(?x.(xx))z ? ?
(?x.?y.x y)z ? ?
(?x.(x ?y.y))?u.v ? ?
Funciones ?: Semántica, II
Todas las expresiones ? representan funciones de un argumento (que a su vez es una función de un argumento), cuyos valores son también funciones de un argumento
Las expresiones ? se pueden ver como funciones de dos argumentos:
E1 se puede interpretar como la función que a las expresiones E2 y E3 les hace corresponder la expresión E1E2E3
Funciones ?: Ejemplos
?x.x es la función identidad, que a cada función le hace corresponder ella misma
?x.y es la función con valor constante la función y
?x.?y.x es la función que a cada función x le hace corresponder la función constante x
?x.?y.y es la función constante identidad
Funciones ?: Ejemplos, II
?x.?y.x también se puede ver como una función de dos argumentos x e y: la proyección sobre el primer argumento, ?1.
Ejemplo: ((?x.?y.x)u)z ? (?y.u)z ? u
Análogamente, ?x.?y.y se puede ver como la proyección ?2.
En general cualquier expresión ? se puede ver como una función de un número arbitrario de argumentos
Cálculo ?: Visión global
El Cálculo ? se puede ver como un lenguaje de definición de funciones cuyos únicos tipos de datos primitivos son las funciones ? (no hay números ni cadenas de caracteres), y que incluye un mecanismo de evaluación de las funciones basado en sustitución de variables por expresiones.
En particular, todas las funciones ? tienen un argumento que representa a su vez otra función ? y sus imágenes son a su vez funciones ?.
Sintaxis del Cálculo ?: Precedencia
La gramática que hemos construido es ambigua
Se desambigua modificando la gramática, bien sea exigiendo la utilización de paréntesis o en base a precedencias
Es una situación similar a la que ocurre en la aritmética con las sumas y productos, pero algo diferente porque el operador ? es prefijo y el operador de aplicación no tiene un símbolo propio.
Sintaxis del Cálculo ?: Precedencia
La aplicación de funciones tiene mayor precedencia que la abstracción.
Ejemplo: ?x.yz es una función cuyo valor constante es yz, o sea que equivale a ?x.(yz)
En caso de aplicaciones consecutivas de expresiones, se asocian por la izquierda
Ejemplo:
(?x.?y.xy)(?u.v)z ? ((?x.(?y.(xy)))(?u.v))z
Desambiguación explícita de expresiones
Se pone directamente un paréntesis rodeando a cada función ? que no lo tiene. El paréntesis se abre inmediatamente antes de la ? y se cierra lo más a la derecha posible
Normalmente esto es suficiente para poder leer la expresión sin ambigüedad.
Ejemplo:
z?w.(?u.zxu)?v.wv ?
z(?w.(?u.zxu)(?v.wv))
Desambiguación explícita de expresiones, II
Se marcan como desambiguadas las variables que no están en la cabecera de una función ?:
z(?w.(?u.z x u)(?v.w v))
Desambiguación explícita de expresiones, III
Se marcan como desambiguadas las subexpresiones que son concatenación de otras dos ya desambiguadas, agrupándolas de izquierda a derecha mediante paréntesis.
z(?w.(?u.((zx)u))(?v.(wv)))
Desambiguación explícita de expresiones, IV
Se marcan como desambiguadas las funciones lambda cuyo cuerpo está desambiguado.
z(?w.(?u.((zx)u)) (?v.(wv)))
Desambiguación explícita de expresiones, V
Las dos reglas anteriores se aplican de forma consecutiva en cualquier orden posible.
z(?w.((?u.((zx)u))(?v.(wv))))
z(?w.((?u.((zx)u))(?v.(wv))))
Escritura de expresiones ?
La principal precaución al escribir expresiones ? es cuando se quiere aplicar la composición de dos funciones a otra expresión.
Por ejemplo, para escribir el resultado de aplicar la expresión E al resultado de aplicar la expresión F a la expresión G, se tienen que poner paréntesis, quedando E(FG). Si escribiéramos EFG sin paréntesis la expresión resultante denotaría lo mismo que (EF)G
Página siguiente |