Diferencia entre revisiones de «Lógica combinatoria»
Contenido eliminado Contenido añadido
si, se que es notación, es sólo para que PR:CW no lo reconozca como fallo |
m Bot: Quitando negritas en los encabezados (PR:CW); cambios cosméticos |
||
Línea 2:
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 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.
== 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''
Línea 13:
* ''(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.
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.
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). ('''[[Magma (álgebra)#
La motivación para esta definición de la reducción es que captura el comportamiento esencial de todas las funciones matemáticas.
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.
El cálculo lambda es computacionalmente equivalente en poder a muchos otros modelos plausibles para el cómputo (máquinas de Turing incluidas);
''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''.
== 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.
=== Términos combinatorios ===
Un término combinatorio tiene una de las formas siguientes:
*
*
* ''(E1 E2)''
donde V es una variable, P es una de las funciones primitivas, E1 y E2 son términos combinatorios.
=== Ejemplos de combinadores ===
El ejemplo más simple de un combinador es '''I''', el combinator '''identidad''', definido por
Línea 52:
('''I''' ''x'') = ''x''
para todos los términos ''x''. otro combinator simple es '''K''', que produce funciones constantes:
(('''K''' ''x'') ''y'') = ''x''
para todos los términos ''x'' y ''y''. O, siguiendo la misma convención para el uso múltiple que en el cálculo lambda,
Línea 62:
('''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:
Línea 71:
= ''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:
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
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.
''T''[''V''] => ''V''
''T''[(''E1'' ''E2'')] => (''T''[''E1''] ''T''[''E2''])
Línea 89:
''T''[λ''x''.(''E1'' ''E2'')] => ('''S''' ''T''[λ''x''.''E1''] ''T''[λ''x''.''E2''])
==== Conversión de un término lambda a un término combinatorio equivalente ====
Por ejemplo, convertiremos el término lambda λ''x''.λ''y''.(''y'' ''x'')) a un combinador:
Línea 104:
= ('''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)
Línea 116:
= (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λ''x''.λ''y''.(''y'' ''x'').
[[Cota superior asintótica|Θ]](3<sup>''n''</sup>).
==== Explicación de la transformación ''T''[ ] ====
La transformación ''T''[ ] es motivada por un deseo de eliminar la abstracción.
Las primeras dos reglas son también simples:
Son las reglas 5 y 6 las que tienen interés.
λ''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''].
(''E1'' ''E2'')[''a''/''x''] = (''E1''[''a''/''x''] ''E2''[''a''/''x''])
Línea 144:
('''S''' ''T''[''λx''.''E1''] ''T''[''λx''.''E2''])
evidentemente cumple el objetivo.
=== 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:
Línea 154:
''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.
Tomando esta simplificación en cuenta, el ejemplo arriba se convierte en:
Línea 173:
= (''y'' ''x'')
semejantemente, la versión original de la transformación ''T''[ ]
==== los combinadores B, C de Curry ====
Los combinadores '''S''', '''K''' se encuentran ya en [[Moses Schoenfinkel
('''C''' ''a'' ''b'' ''c'') = (''a'' ''c'' ''b'')
Línea 185:
Usando estos combinadores, podemos extender las reglas para la transformación como sigue:
#
#
#
#
#
#
#
#
Usando los combinadores '''B''' y '''C''', la transformación de
Línea 217:
=== Conversión reversa ===
La conversión ''L''[ ] de términos combinatorios a términos
trivial:
Línea 227:
''L''[(''E1'' ''E2'')] = (''L''[''E1''] ''L''[''E2''])
Nótese, sin embargo, que esta transformación no es la transformación
== 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.
equivalente a la indecidibilidad de los correspondientes problemas para términos lambda.
Primero, obsérvese que el término
Línea 247:
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
tal que
Línea 254:
(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''' =
Ahora sea
Línea 260:
''Z'' = ('''C''' ('''C''' ('''B''' '''N''' ('''S''' '''I''' '''I''')) '''A''') '''I''')
y consideremos el término
('''S''' '''I''' '''I''' ''Z'')
Línea 272:
Ahora debemos aplicar '''N''' a ('''S''' '''I''' '''I''' ''Z'').
O bien ('''S''' '''I''' '''I''' ''Z'') tiene una forma normal, o no la tiene.
('''N''' ('''S''' '''I''' '''I''' ''Z'') '''A''' '''I''')
Línea 278:
= '''A'''
pero '''A''' ''no'' tiene una forma normal, por tanto tenemos una contradicción.
('''N''' ('''S''' '''I''' '''I''' ''Z'') '''A''' '''I''')
Línea 285:
'''I'''
lo que significa que la forma normal de ('''S''' '''I''' '''I''' ''Z'') es simplemente '''I''', otra contradicción.
== Véase también ==
Línea 293:
*[[paradoja de Curry]]
== Referencias ==
*Las definiciones de '''C''' y '''B''' aquí usadas son las tradicionales desde hace '''75 años'''. [http://www.sadl.uleth.ca/gsdl/cgi-bin/library?e=d-000-00---0curry--00-0-0-0prompt-10---4------0-1l--1-en-50---20-full-combinator--00001-001-1-0utfZz-8-00&a=d&d=T290115A.1&p=small Papel (literalmente) de Haskell Curry: 15 January 1929, ítem A. Page 2 of 13.]
Línea 304:
*[http://www.fing.edu.uy/inco/grupos/mf/TPPSF/Teoricos/CFPTT_T4.ppt ídem PPT]
son todos nestors▼
[[Categoría:Lógica matemática]]
▲son todos nestors
[[de:Kombinatorische Logik]]
|