fbpx
Wikipedia

Lógica combinatoria

La lógica combinatoria es la lógica última y como tal puede ser un modelo simplificado del cómputo, usado en la teoría de la computabilidad (el estudio de qué puede ser computado) y la teoría de la prueba (el estudio de qué se puede probar matemáticamente).

Introducción

La teoría, a causa de su simplicidad, captura las características esenciales de la naturaleza del cómputo. La lógica combinatoria (LC) es el fundamento del cálculo lambda, al eliminar el último tipo de variable de éste: la variable lambda. En LC las expresiones lambda (usadas para permitir la abstracción funcional) son substituidas por un sistema limitado de combinadores, las funciones primitivas que no contienen ninguna variable libre (ni ligada). Es fácil transformar expresiones lambda en expresiones combinatorias, y puesto que la reducción de un combinador es más simple que la reducción lambda, LC se ha utilizado como la base para la puesta en práctica de algunos lenguajes de programación funcionales no-estrictos en software y hardware.

Sumario del cálculo lambda

El cálculo lambda se refiere a objetos llamados lambda-términos, que son cadenas de símbolos de una de las formas siguientes:

  • v
  • λv.E1
  • (E1 E2)

donde v es un nombre de variable tomado de un conjunto infinito predefinido de nombres de variables, y E1 y E2 son lambda-términos. Los términos de la forma λv.E1 son llamadas abstracciones. La variable ν se llama el parámetro formal de la abstracción, y E1 es el cuerpo de la abstracción.

El término λv.E1 representa la función que, si es aplicada a un argumento, liga el parámetro formal v al argumento y entonces computa el valor resultante de E1--- esto es, retorna E1, con cada ocurrencia de ν substituido por el argumento.

Los términos de la forma (E1 E2) son llamados aplicaciones. Las aplicaciones modelan la invocación o ejecución de una función: La función representada por E1 es invocada, con E2 como su argumento, y se computa el resultado. Si E1 (a veces llamado el aplicando) es una abstracción, el término puede ser reducido: E2, el argumento, se puede substituir en el cuerpo de E1 en lugar del parámetro formal de E1, y el resultado es un nuevo término lambda que es equivalente al antiguo. Si un término lambda no contiene ningún subtérmino de la forma (λv.E1 E2) entonces no puede ser reducido, y se dice que está en forma normal.

La expresión E[a/v] representa el resultado de tomar el término E y substituyendo todas las ocurrencias libres de v por el a. Escribimos así

(λv.E a) ⇒ E[a/v] 

por convención, tomamos (b c d... z) como abreviatura para (... (((a b) c) d)... z). (Regla de asociación por izquierda).

La motivación para esta definición de la reducción es que captura el comportamiento esencial de todas las funciones matemáticas. Por ejemplo, considérese la función que computa el cuadrado de un número. Se puede escribir el cuadrado de x es x*x (usando "*" para indicar la multiplicación.) x aquí es el parámetro formal de la función. Para evaluar el cuadrado para un argumento particular, digamos 3, lo insertamos en la definición en lugar del parámetro formal:

El cuadrado de 3 es 3*3

para evaluar la expresión que resulta 3*3, tendríamos que recurrir a nuestro conocimiento de la multiplicación y del número 3. Puesto que cualquier cómputo es simplemente una composición de la evaluación de funciones adecuadas con argumentos primitivos adecuados, este principio simple de substitución es suficiente para capturar el mecanismo esencial del cómputo. Por otra parte, en el cálculo lambda, nociones tales como '3' y '*' puede ser representado sin ninguna necesidad de operadores primitivos externamente definidos o de constantes. Es posible identificar los términos que en el cálculo lambda, cuando están interpretados convenientemente, se comportan como el número 3 y el operador de la multiplicación.

El cálculo lambda es computacionalmente equivalente en poder a muchos otros modelos plausibles para el cómputo (máquinas de Turing incluidas); es decir, cualquier cálculo que se pueda lograr en cualesquiera de estos otros modelos se puede expresar en el cálculo lambda, y viceversa. Según la tesis de Church-Turing, ambos modelos pueden expresar cualquier cómputo posible. Quizás parezca sorprendente que el cálculo lambda pueda representar cualquier cómputo concebible usando solamente las nociones simples de abstracción funcional y aplicación basado en la substitución textual simple de términos por variables. Pero aún más notable es que incluso la abstracción no es requerible. La Lógica Combinatoria es un modelo del cómputo equivalente al cálculo lambda, pero sin la abstracción.

Cálculos Combinatorios

Puesto que la abstracción es la única manera de fabricar funciones en el cálculo lambda, algo debe sustituirlo en el cálculo combinatorio. En vez de la abstracción, el cálculo combinatorio proporciona un conjunto limitado de funciones primitivas y de las cuales las otras funciones pueden ser construidas.

Términos combinatorios

Un término combinatorio tiene una de las formas siguientes:

  • V
  • P
  • (E1 E2)

donde V es una variable, P es una de las funciones primitivas, E1 y E2 son términos combinatorios. Las funciones primitivas mismas son combinadores, o funciones que no contienen ninguna variable libre.

Ejemplos de combinadores

El ejemplo más simple de un combinador es I, el combinator identidad, definido por

(I x) = x 

para todos los términos x. otro combinator simple es K, que produce funciones constantes: (K x) es la función que, para cualquier argumento, devuelve x, así que decimos

((K x) y) = x 

para todos los términos x e y. O, siguiendo la misma convención para el uso múltiple que en el cálculo lambda,

(K x y) = x 

Un tercer combinador es S, que es una versión generalizada de la aplicación:

 (S x y z) = (x z (y z)) 

S aplica x a y después de substituir primero a z en cada uno de ellos.

Dados S y K, aun el mismo I es innecesario, puesto que puede ser construido por los otros dos:

 ((S K K) x) = (S K K x) = (K x (K x)) = x 

para cualquier término x. Nótese que aunque ((S K K) x) = (I x) para cualquier x, (S K K) en sí mismo no es igual a I. Decimos que los términos son extensionalmente iguales.

La igualdad extensional

La igualdad extensional captura la noción matemática de la igualdad de funciones: que dos funciones son 'iguales' si producen siempre los mismos resultados para las mismos argumentos. En contraste, los términos mismos capturan la noción de igualdad intensional de funciones: que dos funciones son 'iguales' solamente si tienen implementaciones idénticas. Hay muchas maneras de implementar una función identidad; (S K K) e I están entre estas maneras. (S K S) es otro. Utilizaremos la palabra equivalente para indicar la igualdad extensional, reservando igual para los términos combinatorios idénticos.

Un combinador más interesante es el combinador de punto fijo o combinator Y, que se puede utilizar para implementar la recursión.

Completitud de la base S-K

Es, quizás, un hecho asombroso que S y K se puedan componer para producir los combinadores que son extensionalmente iguales a cualquier término lambda, y por lo tanto, por la tesis de Church, a cualquier función computable. La prueba es presentar una transformación, T[ ], que convierte un término arbitrario lambda en un combinador equivalente. T[ ] puede ser definido como sigue:

T[V] ⇒ V

T[(E1 E2)] ⇒ (T[E1] T[E2])

Tx.E] ⇒ (K E) (si x no está libre en E)

Tx.x] ⇒ I

Txy.E] ⇒ Tx.Ty.E]] (si x está libre en E)

Tx.(E1 E2)] ⇒ (S Tx.E1] Tx.E2])

Conversión de un término lambda a un término combinatorio equivalente

Por ejemplo, convertiremos el término lambda λxy.(y x)) a un combinador:

 T[λx.λy.(y x)] = T[λx.T[λy.(y x)] ]   (por 5) = T[λx.(S T[λy.y] T[λy.x])]  (por 6) = T[λx.(S I T[λy.x])]  (por 4) = T[λx.(S I (K x))]  (por 3) = (S T[λx.(S I)] T[λx.(K x)])  (por 6) = (S (K (S I)) T[λx.(K x)])  (por 3) = (S (K (S I)) (S T[λx.K] T[λx.x])) (por 6) = (S (K (S I)) (S (K K) T[λx.x])) (por 3) = (S (K (S I)) (S (K K) I))  (por 4) 

si aplicamos este combinator a cualesquiera dos términos x y y, reduce como sigue:

 (S (K (S I)) (S (K K) I) x y) = (K (S I) x (S (K K) I x) y) = (S I (S (K K) I x) y) = (I y (S (K K) I x y)) = (y (S (K K) I x y)) = (y (K K x (I x) y)) = (y (K (I x) y)) = (y (I x)) = (y x) 

La representación combinatoria, (S (K (S I)) (S (K K) I)) es mucho más larga que la representación como término lambdaλxy.(y x). Esto es típico. En general, la construcción de T[ ] puede ampliar un término lambda de la longitud n a un término combinatorio de la longitud Θ(3n).

Explicación de la transformación T[ ]

La transformación T[ ] es motivada por un deseo de eliminar la abstracción. Dos casos especiales, reglas 3 y 4, son triviales: λx.x es claramente equivalente a I, y λx.E es claramente equivalente a (K E) si x no aparece libre en E.

Las primeras dos reglas son también simples: Las variables se convierten en sí mismas, y las aplicaciones permitidas en términos combinatorios, son convertidas los combinadores simplemente convirtiendo el aplicando y el argumento a combinadores.

Son las reglas 5 y 6 las que tienen interés. La regla 5 dice simplemente esto: para convertir una abstracción compleja a un combinador, debemos primero convertir su cuerpo a un combinator, y después eliminamos la abstracción. La regla 6 elimina realmente la abstracción.

λx.(E1E2) es una función que toma un argumento, digamos a, y lo substituye en el término lambda (E1 E2) en lugar de x, dando (E1 E2)[a/x]. Pero substituir a en (E1 E2) en lugar de x es precisamente igual que sustituirlo en E1 y E2, así que

 (E1 E2)[a/x] = (E1[a/x] E2[a/x]) 


 (λx.(E1 E2) a) = ((λx.E1 a) (λx.E2 a))   = (S λx.E1 λx.E2 a)   = ((S λx.E1 λx.E2) a) 

Por igualdad extensional,

 λx.(E1 E2) = (S λx.E1 λx.E2) 

Por lo tanto, para encontrar un combinador equivalente a λx.(E1 E2), es suficiente encontrar un combinador equivalente a (S λx.E1 λx.E2), y

 (S T[λx.E1] T[λx.E2]) 

evidentemente cumple el objetivo. E1 y E2 contienen cada uno estrictamente menos aplicaciones que (E1 E2), así que la repetición debe terminar en un término lambda sin aplicación ninguna-ni una variable, ni un término de la forma λx.E.

Simplificaciones de la transformación

η-reducción

Los combinadores generados por la transformación T[ ] pueden ser hechos más pequeños si consideramos la regla de η-reducción:

 T[λx.(E x)] = T[E] (si x no está libre en E) 

λx.(E x) es la función que toma un argumento, x, y aplica la función E a él; esto es extensionalmente igual a la función E misma. Es por lo tanto suficiente convertir E a la forma combinatoria. Tomando esta simplificación en cuenta, el ejemplo arriba se convierte en:

 T[λx.λy.(y x)] = ... = (S (K (S I)) T[λx.(K x)])  
 = (S (K (S I)) K)  (por η-reducción) 

Este combinador es equivalente al anterior, más largo:

 (S (K (S I)) K x y) = (K (S I) x (K x) y) = (S I (K x) y) = (I y (K x y)) = (y (K x y)) = (y x) 

semejantemente, la versión original de la transformación T[ ] transformó la función identidad λf.λx.(f x) en (S (S (K S) (S (K K) I)) (K I)). Con la regla de η-reducción, λf.λx.(f x) se transformó en I.

los combinadores B, C de Curry

Los combinadores S, K se encuentran ya en Schönfinkel (aunque el símbolo C se usaba por el actual K) Curry introdujo el uso de B, C, W (y K), ya antes de su tesis doctoral de 1930. En Lógica combinatoria T. I, Se ha vuelto a S, K pero se muestra, (vía algoritmos de Markov) que el uso de B y C pueden simplificar muchas reducciones. Esto parece haberse utilizado mucho después por David Turner, cuyo nombre ha quedado ligado a su uso computacional. Se introducen dos nuevos combinadores:

 (C a b c) = (a c b) (B a b c) = (a (b c)) 

Usando estos combinadores, podemos extender las reglas para la transformación como sigue:

  1. T[V] ⇒ V
  2. T[(E1 E2)] ⇒ (T[E1] T[E2])
  3. T[λx.E] ⇒ (K E) (if xno está libre en E)
  4. T[λx.x] ⇒ I
  5. T[λx.λy.E] ⇒ T[λx.T[λy.E]] (si x está libre en E)
  6. T[λx.(E1 E2)] ⇒ (S T[λx.E1] T[λx.E2]) (si x está libre tanto en E1 como en E2)
  7. T[λx.(E1 E2)] ⇒ (C T[λx.E1] E2) (si x está libre en E1 pero no en E2)
  8. T[λx.(E1 E2)] ⇒ (B E1 T[λx.E2]) (si x está libre en E2 pero no en E1)

Usando los combinadores B y C, la transformación de λx.λy.(y x) se ve así:

 T[λx.λy.(y x)] = T[λx.T[λy.(y x)]] = T[λx.(C T[λy.y] x)] (por la regla 7) = T[λx.(C I x)] = (C I) (η-reducción) = C*(notación canónica tradicional: X* = XI) = I'(notación canónica tradicional: X' = CX) 

Y, ciertamente, (C I x y) se reduce a (y x):

 (C I x y) = (I y x) = (y x) 


La motivación aquí es que B y C son versiones limitadas de S. En tanto S toma un valor y lo substituye tanto en el aplicando como en el argumento antes de efectuar la aplicación, C realiza la substitución sólo en el aplicando, y B sólo en el argumento.

Conversión reversa

La conversión L[ ] de términos combinatorios a términos lambda es trivial:

 L[I] = λx.x L[K] = λx.λy.x L[C] = λx.λy.λz.(x z y) L[B] = λx.λy.λz.(x (y z)) L[S] = λx.λy.λz.(x z (y z)) L[(E1 E2)] = (L[E1] L[E2]) 

Nótese, sin embargo, que esta transformación no es la transformación inversa de ninguna de las versiones de T[ ] que se han visto.

Indecidibilidad del Cálculo Combinatorio

Es indecidible cuándo un término combinatorio general tiene forma normal; cuando dos términos combinatorios son equivalentes, etc. Esto es equivalente a la indecidibilidad de los correspondientes problemas para términos lambda. No obstante, una prueba directa es como sigue:

Primero, obsérvese que el término

 A = (S I I (S I I)) 

no tiene forma normal, porque se reduce a sí mismo en tres pasos, como sigue:

 (S I I (S I I)) = (I (S I I) (I (S I I))) = (S I I (I (S I I))) = (S I I (S I I)) 

y claramente ningún otro orden de reducción puede hacer la expresión más corta.

Ahora, supongamos que N fuera un combinador para detectar formas normales, tal que

 (N x) ⇒ T, si x tiene forma normal  F, en caso contrario. 

(Donde T y F son las transformaciones de las definiciones convencionales en cálculo lambda de verdadero y falso, λx.λy.x y λx.λy.y. Las versiones combinatorias tienen T = K y F = (K I) = 0 = K'.)

Ahora sea

 Z = (C (C (B N (S I I)) A) I) 

y consideremos el término (S I I Z). Tiene (S I I Z) una forma normal? La tiene si y sólo si:

 (S I I Z) = (I Z (I Z)) = (Z (I Z)) = (Z Z) = (C (C (B N (S I I)) A) I Z)  (definición de Z) = (C (B N (S I I)) A Z I) = (B N (S I I) Z A I) = (N (S I I Z) A I) 

Ahora debemos aplicar N a (S I I Z). O bien (S I I Z) tiene una forma normal, o no la tiene. Si tuviera forma normal, entonces se reduce como sigue:

 (N (S I I Z) A I) = (K A I)   (definición de N) = A 

pero A no tiene una forma normal, por tanto tenemos una contradicción. Pero si (S I I Z) no tiene una forma normal, se reduce como sigue:

 (N (S I I Z) A I) = (K I A I)   (definición de N) = (I I) I 

lo que significa que la forma normal de (S I I Z) es simplemente I, otra contradicción. Por tanto, el hipotético combinador de forma normal N no puede existir.

Véase también

  •   Datos: Q1481571

lógica, combinatoria, lógica, combinatoria, lógica, última, como, puede, modelo, simplificado, cómputo, usado, teoría, computabilidad, estudio, qué, puede, computado, teoría, prueba, estudio, qué, puede, probar, matemáticamente, Índice, introducción, sumario, . La logica combinatoria es la logica ultima y como tal puede ser un modelo simplificado del computo usado en la teoria de la computabilidad el estudio de que puede ser computado y la teoria de la prueba el estudio de que se puede probar matematicamente Indice 1 Introduccion 2 Sumario del calculo lambda 3 Calculos Combinatorios 3 1 Terminos combinatorios 3 2 Ejemplos de combinadores 3 2 1 La igualdad extensional 3 3 Completitud de la base S K 3 3 1 Conversion de un termino lambda a un termino combinatorio equivalente 3 3 2 Explicacion de la transformacion T 3 4 Simplificaciones de la transformacion 3 4 1 h reduccion 3 4 2 los combinadores B C de Curry 3 5 Conversion reversa 4 Indecidibilidad del Calculo Combinatorio 5 Vease tambienIntroduccion EditarLa teoria a causa de su simplicidad captura las caracteristicas esenciales de la naturaleza del computo La logica combinatoria LC es el fundamento del calculo lambda al eliminar el ultimo tipo de variable de este la variable lambda En LC las expresiones lambda usadas para permitir la abstraccion funcional son substituidas por un sistema limitado de combinadores las funciones primitivas que no contienen ninguna variable libre ni ligada Es facil transformar expresiones lambda en expresiones combinatorias y puesto que la reduccion de un combinador es mas simple que la reduccion lambda LC se ha utilizado como la base para la puesta en practica de algunos lenguajes de programacion funcionales no estrictos en software y hardware Sumario del calculo lambda EditarEl calculo lambda se refiere a objetos llamados lambda terminos que son cadenas de simbolos de una de las formas siguientes v lv E1 E1 E2 donde v es un nombre de variable tomado de un conjunto infinito predefinido de nombres de variables y E1 y E2 son lambda terminos Los terminos de la forma lv E1 son llamadas abstracciones La variable n se llama el parametro formal de la abstraccion y E1 es el cuerpo de la abstraccion El termino lv E1 representa la funcion que si es aplicada a un argumento liga el parametro formal v al argumento y entonces computa el valor resultante de E1 esto es retorna E1 con cada ocurrencia de n substituido por el argumento Los terminos de la forma E1 E2 son llamados aplicaciones Las aplicaciones modelan la invocacion o ejecucion de una funcion La funcion representada por E1 es invocada con E2 como su argumento y se computa el resultado Si E1 a veces llamado el aplicando es una abstraccion el termino puede ser reducido E2 el argumento se puede substituir en el cuerpo de E1 en lugar del parametro formal de E1 y el resultado es un nuevo termino lambda que es equivalente al antiguo Si un termino lambda no contiene ningun subtermino de la forma lv E1 E2 entonces no puede ser reducido y se dice que esta en forma normal La expresion E a v representa el resultado de tomar el termino E y substituyendo todas las ocurrencias libres de v por el a Escribimos asi lv E a E a v por convencion tomamos b c d z como abreviatura para a b c d z Regla de asociacion por izquierda La motivacion para esta definicion de la reduccion es que captura el comportamiento esencial de todas las funciones matematicas Por ejemplo considerese la funcion que computa el cuadrado de un numero Se puede escribir el cuadrado de x es x x usando para indicar la multiplicacion x aqui es el parametro formal de la funcion Para evaluar el cuadrado para un argumento particular digamos 3 lo insertamos en la definicion en lugar del parametro formal El cuadrado de 3 es 3 3para evaluar la expresion que resulta 3 3 tendriamos que recurrir a nuestro conocimiento de la multiplicacion y del numero 3 Puesto que cualquier computo es simplemente una composicion de la evaluacion de funciones adecuadas con argumentos primitivos adecuados este principio simple de substitucion es suficiente para capturar el mecanismo esencial del computo Por otra parte en el calculo lambda nociones tales como 3 y puede ser representado sin ninguna necesidad de operadores primitivos externamente definidos o de constantes Es posible identificar los terminos que en el calculo lambda cuando estan interpretados convenientemente se comportan como el numero 3 y el operador de la multiplicacion El calculo lambda es computacionalmente equivalente en poder a muchos otros modelos plausibles para el computo maquinas de Turing incluidas es decir cualquier calculo que se pueda lograr en cualesquiera de estos otros modelos se puede expresar en el calculo lambda y viceversa Segun la tesis de Church Turing ambos modelos pueden expresar cualquier computo posible Quizas parezca sorprendente que el calculo lambda pueda representar cualquier computo concebible usando solamente las nociones simples de abstraccion funcional y aplicacion basado en la substitucion textual simple de terminos por variables Pero aun mas notable es que incluso la abstraccion no es requerible La Logica Combinatoria es un modelo del computo equivalente al calculo lambda pero sin la abstraccion Calculos Combinatorios EditarPuesto que la abstraccion es la unica manera de fabricar funciones en el calculo lambda algo debe sustituirlo en el calculo combinatorio En vez de la abstraccion el calculo combinatorio proporciona un conjunto limitado de funciones primitivas y de las cuales las otras funciones pueden ser construidas Terminos combinatorios Editar Un termino combinatorio tiene una de las formas siguientes V P E1 E2 donde V es una variable P es una de las funciones primitivas E1 y E2 son terminos combinatorios Las funciones primitivas mismas son combinadores o funciones que no contienen ninguna variable libre Ejemplos de combinadores Editar El ejemplo mas simple de un combinador es I el combinator identidad definido por I x x para todos los terminos x otro combinator simple es K que produce funciones constantes K x es la funcion que para cualquier argumento devuelve x asi que decimos K x y x para todos los terminos x e y O siguiendo la misma convencion para el uso multiple que en el calculo lambda K x y x Un tercer combinador es S que es una version generalizada de la aplicacion S x y z x z y z S aplica x a y despues de substituir primero a z en cada uno de ellos Dados S y K aun el mismo I es innecesario puesto que puede ser construido por los otros dos S K K x S K K x K x K x x para cualquier termino x Notese que aunque S K K x I x para cualquier x S K K en si mismo no es igual a I Decimos que los terminos son extensionalmente iguales La igualdad extensional Editar La igualdad extensional captura la nocion matematica de la igualdad de funciones que dos funciones son iguales si producen siempre los mismos resultados para las mismos argumentos En contraste los terminos mismos capturan la nocion de igualdad intensional de funciones que dos funciones son iguales solamente si tienen implementaciones identicas Hay muchas maneras de implementar una funcion identidad S K K e I estan entre estas maneras S K S es otro Utilizaremos la palabra equivalente para indicar la igualdad extensional reservando igual para los terminos combinatorios identicos Un combinador mas interesante es el combinador de punto fijo o combinator Y que se puede utilizar para implementar la recursion Completitud de la base S K Editar Es quizas un hecho asombroso que S y K se puedan componer para producir los combinadores que son extensionalmente iguales a cualquier termino lambda y por lo tanto por la tesis de Church a cualquier funcion computable La prueba es presentar una transformacion T que convierte un termino arbitrario lambda en un combinador equivalente T puede ser definido como sigue T V VT E1 E2 T E1 T E2 T lx E K E si x no esta libre en E T lx x IT lx ly E T lx T ly E si x esta libre en E T lx E1 E2 S T lx E1 T lx E2 Conversion de un termino lambda a un termino combinatorio equivalente Editar Por ejemplo convertiremos el termino lambda lx ly y x a un combinador T lx ly y x T lx T ly y x por 5 T lx S T ly y T ly x por 6 T lx S I T ly x por 4 T lx S I K x por 3 S T lx S I T lx K x por 6 S K S I T lx K x por 3 S K S I S T lx K T lx x por 6 S K S I S K K T lx x por 3 S K S I S K K I por 4 si aplicamos este combinator a cualesquiera dos terminos x y y reduce como sigue S K S I S K K I x y K S I x S K K I x y S I S K K I x y I y S K K I x y y S K K I x y y K K x I x y y K I x y y I x y x La representacion combinatoria S K S I S K K I es mucho mas larga que la representacion como termino lambdalx ly y x Esto es tipico En general la construccion de T puede ampliar un termino lambda de la longitud n a un termino combinatorio de la longitud 8 3n Explicacion de la transformacion T Editar La transformacion T es motivada por un deseo de eliminar la abstraccion Dos casos especiales reglas 3 y 4 son triviales lx x es claramente equivalente a I y lx E es claramente equivalente a K E si x no aparece libre en E Las primeras dos reglas son tambien simples Las variables se convierten en si mismas y las aplicaciones permitidas en terminos combinatorios son convertidas los combinadores simplemente convirtiendo el aplicando y el argumento a combinadores Son las reglas 5 y 6 las que tienen interes La regla 5 dice simplemente esto para convertir una abstraccion compleja a un combinador debemos primero convertir su cuerpo a un combinator y despues eliminamos la abstraccion La regla 6 elimina realmente la abstraccion lx E1E2 es una funcion que toma un argumento digamos a y lo substituye en el termino lambda E1 E2 en lugar de x dando E1 E2 a x Pero substituir a en E1 E2 en lugar de x es precisamente igual que sustituirlo en E1 y E2 asi que E1 E2 a x E1 a x E2 a x lx E1 E2 a lx E1 a lx E2 a S lx E1 lx E2 a S lx E1 lx E2 a Por igualdad extensional lx E1 E2 S lx E1 lx E2 Por lo tanto para encontrar un combinador equivalente a lx E1 E2 es suficiente encontrar un combinador equivalente a S lx E1 lx E2 y S T lx E1 T lx E2 evidentemente cumple el objetivo E1 y E2 contienen cada uno estrictamente menos aplicaciones que E1 E2 asi que la repeticion debe terminar en un termino lambda sin aplicacion ninguna ni una variable ni un termino de la forma lx E Simplificaciones de la transformacion Editar h reduccion Editar Los combinadores generados por la transformacion T pueden ser hechos mas pequenos si consideramos la regla de h reduccion T lx E x T E si x no esta libre en E lx E x es la funcion que toma un argumento x y aplica la funcion E a el esto es extensionalmente igual a la funcion E misma Es por lo tanto suficiente convertir E a la forma combinatoria Tomando esta simplificacion en cuenta el ejemplo arriba se convierte en T lx ly y x S K S I T lx K x S K S I K por h reduccion Este combinador es equivalente al anterior mas largo S K S I K x y K S I x K x y S I K x y I y K x y y K x y y x semejantemente la version original de la transformacion T transformo la funcion identidad lf lx f x en S S K S S K K I K I Con la regla de h reduccion lf lx f x se transformo en I los combinadores B C de Curry Editar Los combinadores S K se encuentran ya en Schonfinkel aunque el simbolo C se usaba por el actual K Curry introdujo el uso de B C W y K ya antes de su tesis doctoral de 1930 En Logica combinatoria T I Se ha vuelto a S K pero se muestra via algoritmos de Markov que el uso de B y C pueden simplificar muchas reducciones Esto parece haberse utilizado mucho despues por David Turner cuyo nombre ha quedado ligado a su uso computacional Se introducen dos nuevos combinadores C a b c a c b B a b c a b c Usando estos combinadores podemos extender las reglas para la transformacion como sigue T V V T E1 E2 T E1 T E2 T lx E K E if xno esta libre en E T lx x I T lx ly E T lx T ly E si x esta libre en E T lx E1 E2 S T lx E1 T lx E2 si x esta libre tanto en E1 como en E2 T lx E1 E2 C T lx E1 E2 si x esta libre en E1 pero no en E2 T lx E1 E2 B E1 T lx E2 si x esta libre en E2 pero no en E1 Usando los combinadores B y C la transformacion de lx ly y x se ve asi T lx ly y x T lx T ly y x T lx C T ly y x por la regla 7 T lx C I x C I h reduccion C notacion canonica tradicional X XI I notacion canonica tradicional X CX Y ciertamente C I x y se reduce a y x C I x y I y x y x La motivacion aqui es que B y C son versiones limitadas de S En tanto S toma un valor y lo substituye tanto en el aplicando como en el argumento antes de efectuar la aplicacion C realiza la substitucion solo en el aplicando y B solo en el argumento Conversion reversa Editar La conversion L de terminos combinatorios a terminos lambda es trivial L I lx x L K lx ly x L C lx ly lz x z y L B lx ly lz x y z L S lx ly lz x z y z L E1 E2 L E1 L E2 Notese sin embargo que esta transformacion no es la transformacion inversa de ninguna de las versiones de T que se han visto Indecidibilidad del Calculo Combinatorio EditarEs indecidible cuando un termino combinatorio general tiene forma normal cuando dos terminos combinatorios son equivalentes etc Esto es equivalente a la indecidibilidad de los correspondientes problemas para terminos lambda No obstante una prueba directa es como sigue Primero observese que el termino A S I I S I I no tiene forma normal porque se reduce a si mismo en tres pasos como sigue S I I S I I I S I I I S I I S I I I S I I S I I S I I y claramente ningun otro orden de reduccion puede hacer la expresion mas corta Ahora supongamos que N fuera un combinador para detectar formas normales tal que N x T si x tiene forma normal F en caso contrario Donde T y F son las transformaciones de las definiciones convencionales en calculo lambda de verdadero y falso lx ly x y lx ly y Las versiones combinatorias tienen T K y F K I 0 K Ahora sea Z C C B N S I I A I y consideremos el termino S I I Z Tiene S I I Z una forma normal La tiene si y solo si S I I Z I Z I Z Z I Z Z Z C C B N S I I A I Z definicion de Z C B N S I I A Z I B N S I I Z A I N S I I Z A I Ahora debemos aplicar N a S I I Z O bien S I I Z tiene una forma normal o no la tiene Si tuviera forma normal entonces se reduce como sigue N S I I Z A I K A I definicion de N A pero A no tiene una forma normal por tanto tenemos una contradiccion Pero si S I I Z no tiene una forma normal se reduce como sigue N S I I Z A I K I A I definicion de N I I I lo que significa que la forma normal de S I I Z es simplemente I otra contradiccion Por tanto el hipotetico combinador de forma normal N no puede existir Vease tambien EditarHaskell CurryParadoja de Curry Datos Q1481571Obtenido de https es wikipedia org w index php title Logica combinatoria amp oldid 103096805, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos