stringtranslate.com

Cálculo kappa

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,

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,

Igualdades

El cálculo kappa obedece a las siguientes igualdades:

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

  1. ^ 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 .
  2. ^ 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.
  3. ^ 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 .
  4. ^ 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.
  5. ^ 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.