En matemáticas e informática , un cálculo lambda tipado es un formalismo tipado que utiliza el símbolo lambda () para denotar la abstracción de función anónima. En este contexto, los tipos suelen ser objetos de naturaleza sintáctica que se asignan a términos lambda; la naturaleza exacta de un tipo depende del cálculo considerado (véase tipos más adelante). Desde cierto punto de vista, los cálculos lambda tipados pueden verse como refinamientos del cálculo lambda no tipado , pero desde otro punto de vista, también pueden considerarse la teoría más fundamental y el cálculo lambda no tipado un caso especial con un solo tipo. [ 1 ]
Los cálculos lambda tipados son fundamentales para los lenguajes de programación y constituyen la base de lenguajes de programación funcional tipados como ML y Haskell , y, de forma más indirecta, de lenguajes de programación imperativos tipados . Los cálculos lambda tipados desempeñan un papel importante en el diseño de sistemas de tipos para lenguajes de programación; en este caso, la tipabilidad suele reflejar propiedades deseables del programa (por ejemplo, que el programa no provoque una violación de acceso a la memoria).
Los cálculos lambda tipados están estrechamente relacionados con la lógica matemática y la teoría de la demostración a través del isomorfismo de Curry-Howard y pueden considerarse como el lenguaje interno de ciertas clases de categorías . Por ejemplo, el cálculo lambda tipado simple es el lenguaje de las categorías cartesianas cerradas (CCC). [ 2 ]
Tipos de cálculos lambda tipados
Se han estudiado varios cálculos lambda tipados. El cálculo lambda tipado simple tiene solo un constructor de tipos , la flechay sus únicos tipos son los tipos básicos y los tipos de función.El sistema T extiende el cálculo lambda simplemente tipado con un tipo de números naturales y recursión primitiva de orden superior ; en este sistema, todas las funciones demostrablemente computables en la aritmética de Peano son definibles. El sistema F permite el polimorfismo mediante la cuantificación universal sobre todos los tipos; desde una perspectiva lógica, puede describir todas las funciones que son demostrablemente totales en lógica de segundo orden . Los cálculos lambda con tipos dependientes son la base de la teoría de tipos intuicionista , el cálculo de construcciones y el marco lógico (LF), un cálculo lambda puro con tipos dependientes. Basándose en el trabajo de Berardi sobre sistemas de tipos puros , Henk Barendregt propuso el cubo lambda para sistematizar las relaciones de los cálculos lambda puramente tipados (incluidos el cálculo lambda simplemente tipado, el sistema F, el LF y el cálculo de construcciones). [ 3 ]
Algunos cálculos lambda tipados introducen una noción de subtipado , es decir, sies un subtipo de, entonces todos los términos de tipotambién tienen tipo. Los cálculos lambda tipados con subtipado son el cálculo lambda simplemente tipado con tipos conjuntivos y el sistema F <: .
Todos los sistemas mencionados hasta ahora, con la excepción del cálculo lambda sin tipado, son fuertemente normalizadores : todos los cálculos terminan. Por lo tanto, no pueden describir todas las funciones computables por Turing . [ 4 ] Como otra consecuencia, son consistentes como lógica, es decir, hay tipos no habitados. Sin embargo, existen cálculos lambda tipados que no son fuertemente normalizadores. Por ejemplo, el cálculo lambda con tipado dependiente con un tipo de todos los tipos (Tipo : Tipo) no es normalizador debido a la paradoja de Girard . Este sistema es también el sistema de tipos puros más simple, un formalismo que generaliza el cubo lambda. Los sistemas con combinadores de recursión explícitos, como el " Lenguaje de programación para funciones computables " (PCF) de Plotkin , no son normalizadores, pero no están pensados para ser interpretados como una lógica. De hecho, PCF es un lenguaje de programación funcional tipado prototípico, donde los tipos se utilizan para asegurar que los programas se comporten bien, pero no necesariamente que terminen.
Aplicaciones a los lenguajes de programación
En programación informática , las rutinas (funciones, procedimientos, métodos) de los lenguajes de programación fuertemente tipados se corresponden estrechamente con las expresiones lambda tipadas. [ 5 ]
Véase también
- Cálculo kappa : un análogo del cálculo lambda tipado que excluye funciones de orden superior.
Notas
- ↑ Brandl, Helmut (27 de abril de 2024). "Cálculo Lambda Tipado / Cálculo de Construcciones" (PDF) . Cálculo de Construcciones . Recuperado el 27 de abril de 2024 .
- ↑ Lambek, J .; Scott, PJ (1986), Introducción a la lógica categórica de orden superior , Cambridge University Press , ISBN 978-0-521-35653-4, MR 0856915
- ↑ Barendregt, Henk (1991). "Introducción a los sistemas de tipos generalizados" . Journal of Functional Programming . 1 (2): 125– 154. doi : 10.1017/S0956796800020025 . hdl : 2066/17240 . ISSN 0956-7968 .
- ↑ ya que se demostró que el problema de la parada para esta última clase era indecidible.
- ↑ "Qué debes saber antes de debatir sobre sistemas de tipos | Ovid [ blogs.perl.org ] " . blogs.perl.org . Consultado el 26 de abril de 2024 .
Lecturas adicionales
- Barendregt, Henk (1992). «Cálculos lambda con tipos» . En Abramsky, S. (ed.). Antecedentes: Estructuras computacionales . Manual de lógica en informática. Vol. 2. Oxford University Press. pp. 117–309 . ISBN 9780198537618.
- Brandl, Helmut (2022). Cálculo de construcciones / Cálculo lambda tipado
- Cálculo lambda
- Lógica en informática
- Teoría de la computación
- teoría de tipos