Subconjunto del cálculo lambda
En lógica matemática , teoría de categorías y ciencia informática , el cálculo kappa es un sistema formal para definir funciones de primer orden .
A diferencia del cálculo lambda , el cálculo kappa no tiene funciones de orden superior ; sus funciones no son objetos de primera clase . El cálculo kappa puede considerarse como "una reformulación del fragmento de primer orden del cálculo lambda tipificado". [1]
Debido a que sus funciones no son objetos de primera clase, la evaluación de expresiones de cálculo kappa no requiere cierres .
Definición
La definición que aparece a continuación ha sido adaptada de los diagramas de las páginas 205 y 207 de Hasegawa. [1]
Gramática
El cálculo kappa consta de tipos y expresiones, dados por la gramática siguiente:
En otras palabras,
- 1 es un tipo
- Si y son tipos entonces es un tipo.
- Cada variable es una expresión
- Si τ es un tipo entonces es una expresión
- Si τ es un tipo entonces es una expresión
- Si τ es un tipo y e es una expresión, entonces es una expresión
- Si y son expresiones entonces es una expresión
- Si x es una variable, τ es un tipo y e es una expresión, entonces es una expresión
Los subíndices y de id , ! , y a veces se omiten cuando pueden determinarse de forma inequívoca a partir del contexto.
La yuxtaposición se utiliza a menudo como abreviatura de una combinación y composición:
Reglas de mecanografía
En la presentación que se presenta aquí se utilizan secuencias ( ) en lugar de juicios hipotéticos para facilitar la comparación con el cálculo lambda de tipo simple. Esto requiere la regla Var adicional, que no aparece en Hasegawa [1].
En el cálculo kappa, una expresión tiene dos tipos: el tipo de su fuente y el tipo de su destino . La notación se utiliza para indicar que la expresión e tiene tipo de fuente y tipo de destino .
A las expresiones en el cálculo kappa se les asignan tipos de acuerdo con las siguientes reglas:
En otras palabras,
- Var: suponiendo que te permite concluir que
- Id: para cualquier tipo τ ,
- Bang: para cualquier tipo τ ,
- Comp: si el tipo de destino coincide con el tipo de origen, se pueden componer para formar una expresión con el tipo de origen y el tipo de destino.
- Ascensor: si , entonces
- Kappa: si podemos concluir que bajo el supuesto de que , entonces podemos concluir sin ese supuesto que
Igualdades
El cálculo kappa obedece a las siguientes igualdades:
- Neutralidad: Si entonces y
- Asociatividad: Si , , y , entonces .
- Terminalidad: Si y entonces
- Reducción de elevación:
- Reducción kappa: si x no es libre en h
Las dos últimas igualdades son reglas de reducción para el cálculo, reescribiéndose de izquierda a derecha.
Propiedades
El tipo1 puede considerarse como el tipo de unidad . Debido a esto, dos funciones cualesquiera cuyo tipo de argumento sea el mismo y cuyo tipo de resultado sea1 debe ser igual, ya que solo hay un único valor de tipo1 ambas funciones deben devolver ese valor para cada argumento ( Terminalidad ).
Las expresiones con tipo pueden considerarse como "constantes" o valores de "tipo básico"; esto se debe a que1 es el tipo de unidad, por lo que una función de este tipo es necesariamente una función constante. Nótese que la regla kappa permite abstracciones solo cuando la variable que se está abstrayendo tiene el tipo de algún τ . Este es el mecanismo básico que garantiza que todas las funciones sean de primer orden.
Semántica categórica
El cálculo kappa pretende ser el lenguaje interno de categorías contextualmente completas .
Ejemplos
Las expresiones con múltiples argumentos tienen tipos de origen que son árboles binarios "desequilibrados a la derecha". Por ejemplo, una función f con tres argumentos de tipos A, B y C y un tipo de resultado D tendrá tipo
Si definimos la yuxtaposición asociativa por la izquierda como una abreviatura de , entonces, suponiendo que , y , podemos aplicar esta función:
Dado que la expresión tiene tipo de fuente1 , es un "valor base" y puede pasarse como argumento a otra función. Si , entonces
Al igual que una función currificada de tipo en el cálculo lambda, es posible una aplicación parcial:
Sin embargo, no hay tipos superiores (es decir, ). Tenga en cuenta que debido a que el tipo de origen de fa no es1 , la siguiente expresión no puede tipificarse correctamente bajo los supuestos mencionados hasta ahora:
Debido a que la aplicación sucesiva se utiliza para múltiples argumentos, no es necesario conocer la aridad de una función para determinar su tipo; por ejemplo, si sabemos que entonces la expresión
- yo c
está bien tipificado siempre que j tenga tipo
- para algunos α
y β . Esta propiedad es importante al calcular el tipo principal de una expresión, algo que puede resultar difícil cuando se intenta excluir funciones de orden superior de los cálculos lambda tipados restringiendo la gramática de los tipos.
Historia
Barendregt introdujo originalmente [2] el término "completitud funcional" en el contexto del álgebra combinatoria. El cálculo kappa surgió de los esfuerzos de Lambek [3] por formular un análogo apropiado de la completitud funcional para categorías arbitrarias (véase Hermida y Jacobs, [4] sección 1). Hasegawa desarrolló posteriormente el cálculo kappa en un lenguaje de programación utilizable (aunque simple) que incluye aritmética sobre números naturales y recursión primitiva. [1] Las conexiones con flechas
fueron investigadas posteriormente [5] por Power, Thielecke y otros.
Variantes
Es posible explorar versiones del cálculo kappa con tipos subestructurales como lineales , afines y ordenados . Estas extensiones requieren eliminar o restringir la expresión. En tales circunstancias, el operador de tipo × no es un verdadero producto cartesiano y generalmente se escribe ⊗ para dejarlo en claro.
Referencias
- ^ abcd Hasegawa, Masahito (1995). "Descomposición del cálculo lambda tipado en un par de lenguajes de programación categóricos". En Pitt, David; Rydeheard, David E.; Johnstone, Peter (eds.). Category Theory and Computer Science . Apuntes de clase en informática. Vol. 953. Springer-Verlag Berlin Heidelberg. págs. 200–219. CiteSeerX 10.1.1.53.715 . doi :10.1007/3-540-60164-3_28. ISBN 978-3-540-60164-7. ISSN 0302-9743.
- Adam (31 de agosto de 2010). "¿Qué son las categorías κappa?". MathOverflow .
- ^ Barendregt, Hendrik Pieter, ed. (1 de octubre de 1984). El cálculo lambda: su sintaxis y semántica. Estudios de lógica y fundamentos de las matemáticas. Vol. 103 (edición revisada). Ámsterdam, Holanda Septentrional: Elsevier Science. ISBN 978-0-444-87508-2.
- ^ Lambek, Joachim (1 de agosto de 1973). "Completitud funcional de categorías cartesianas". Annals of Mathematical Logic . 6 (3–4) (publicado en marzo de 1974): 259–292. doi :10.1016/0003-4843(74)90003-5. ISSN 0003-4843.
- Adam (31 de agosto de 2010). "¿Qué son las categorías κappa?". MathOverflow .
- ^ Hermida, Claudio; Jacobs, Bart (diciembre de 1995). "Fibraciones con indeterminados: completitud contextual y funcional para cálculos lambda polimórficos". Estructuras matemáticas en informática . 5 (4): 501–531. doi :10.1017/S0960129500001213. ISSN 1469-8072. S2CID 3428512.
- ^ Poder, Juan; Thielecke, Hayo (1999). "Categorías cerradas Freyd y κ". En Wiedermann, Jiří; van Emde Boas, Peter ; Nielsen, Mogens (eds.). Autómatas, Lenguajes y Programación . Apuntes de conferencias sobre informática. vol. 1644. Springer-Verlag Berlín Heidelberg. págs. 625–634. CiteSeerX 10.1.1.42.2151 . doi :10.1007/3-540-48523-6_59. ISBN 978-3-540-66224-2. ISSN 0302-9743.