El sistema F (también conocido como cálculo lambda polimórfico o cálculo lambda de segundo orden ) es un cálculo lambda tipado que introduce, al cálculo lambda tipado simple , un mecanismo de cuantificación universal sobre tipos. El sistema F formaliza el polimorfismo paramétrico en lenguajes de programación , constituyendo así la base teórica de lenguajes como Haskell y ML . Fue descubierto independientemente por el lógico Jean-Yves Girard (1972) y el informático John C. Reynolds .
Mientras que el cálculo lambda tipado simple tiene variables que abarcan términos y ligaduras para ellos, el Sistema F además tiene variables que abarcan tipos y ligaduras para ellos. Como ejemplo, el hecho de que la función identidad pueda tener cualquier tipo de la forma A → A se formalizaría en el Sistema F como la declaración
dóndees una variable de tipo . La mayúsculase utiliza tradicionalmente para denotar funciones de nivel de tipo, a diferencia de la minúsculaque se utiliza para funciones de nivel de valor. (El superíndicesignifica que la variable ligada x es de tipoLa expresión que aparece después de los dos puntos es del tipo de la expresión lambda que la precede.
Como sistema de reescritura de términos , el Sistema F es fuertemente normalizador . Sin embargo, la inferencia de tipos en el Sistema F (sin anotaciones de tipo explícitas) es indecidible . Bajo el isomorfismo de Curry-Howard , el Sistema F corresponde a la lógica intuicionista proposicional de segundo orden . El Sistema F puede considerarse parte del cubo lambda , junto con cálculos lambda tipados aún más expresivos, incluidos aquellos con tipos dependientes .
Según Girard, la "F" en Sistema F fue elegida al azar. [ 1 ]
Reglas de mecanografía
Las reglas de tipado del Sistema F son las del cálculo lambda simplemente tipado con la adición de lo siguiente:
dóndeson tipos,es una variable de tipo yen el contexto indica queestá ligado. La primera regla es la de aplicación, y la segunda es la de abstracción. [ 2 ] [ 3 ]
Lógica y predicados
ElEl tipo se define como: , dóndees una variable de tipo . Esto significa:es el tipo de todas las funciones que toman como entrada un tipo α y dos expresiones de tipo α , y producen como salida una expresión de tipo α (nótese que consideramosser asociativo por la derecha .)
Las dos definiciones siguientes para los valores booleanosyse utilizan, extendiendo la definición de booleanos de Church :
(Tenga en cuenta que las dos funciones anteriores requieren tres argumentos , no dos . Los dos últimos deben ser expresiones lambda, pero el primero debe ser un tipo. Este hecho se refleja en el hecho de que el tipo de estas expresiones es; el cuantificador universal que une α corresponde a Λ que une alfa en la expresión lambda misma. Además, tenga en cuenta quees una abreviatura conveniente para, pero no es un símbolo del Sistema F en sí mismo, sino más bien un "metasimbo". Del mismo modo,yTambién son "metasimbos", abreviaturas convenientes, de "ensamblajes" del Sistema F (en el sentido de Bourbaki ); de lo contrario, si tales funciones pudieran nombrarse (dentro del Sistema F), entonces no habría necesidad del aparato de expresiones lambda capaz de definir funciones de forma anónima ni del combinador de punto fijo , que sortea esa restricción.
Luego, con estos dos-términos, podemos definir algunos operadores lógicos (que son de tipo):
Tenga en cuenta que en las definiciones anteriores,es un argumento de tipo para, especificando que los otros dos parámetros que se dan ason de tipo. Al igual que en las codificaciones de Church, no es necesario usar una función IFTHENELSE , ya que se puede usar directamente-términos tipificados como funciones de decisión. Sin embargo, si se solicita uno:
lo haré. Un predicado es una función que devuelve unvalor de tipo. El predicado más fundamental es ISZERO que devuelvesi y solo si su argumento es el numeral eclesiástico 0 :
Además, el cuantificador existencial (y por lo tanto los tipos existenciales) se pueden implementar en el sistema F de la siguiente manera: [ 4 ] [ 5 ]
Estructuras del sistema F
El sistema F permite que las construcciones recursivas se incrusten de forma natural, de manera similar a la teoría de tipos de Martin-Löf . Las estructuras abstractas ( S ) se crean mediante constructores . Estas son funciones tipificadas como:
- .
La recursividad se manifiesta cuando S mismo aparece dentro de uno de los tipos.. Si tienes m de estos constructores, puedes definir el tipo de S como:
Por ejemplo, los números naturales se pueden definir como un tipo de dato inductivo N con constructores
El tipo de sistema F correspondiente a esta estructura es Los términos de este tipo comprenden una versión mecanografiada de los numerales eclesiásticos , los primeros de los cuales son:
Si invertimos el orden de los argumentos currificados ( es decir,), entonces el numeral de Church para n es una función que toma una función f como argumento y devuelve la n -ésima potencia de f . Es decir, un numeral de Church es una función de orden superior : toma una función f de un solo argumento y devuelve otra función de un solo argumento.
Uso en lenguajes de programación
La versión del Sistema F utilizada en este artículo es un cálculo con tipado explícito, o de estilo Church. La información de tipado contenida en los términos λ simplifica la verificación de tipos . Joe Wells (1994) resolvió un "problema abierto embarazoso" al demostrar que la verificación de tipos es indecidible para una variante de estilo Curry del Sistema F, es decir, una que carece de anotaciones de tipado explícitas. [ 6 ] [ 7 ]
El resultado de Wells implica que la inferencia de tipos para el Sistema F es imposible. Una restricción del Sistema F conocida como " Hindley-Milner ", o simplemente "HM", sí tiene un algoritmo de inferencia de tipos sencillo y se utiliza para muchos lenguajes de programación funcional con tipado estático, como Haskell 98 y la familia ML . Con el tiempo, a medida que las restricciones de los sistemas de tipos de estilo HM se han hecho evidentes, los lenguajes han evolucionado progresivamente hacia lógicas más expresivas para sus sistemas de tipos. GHC , un compilador de Haskell, va más allá de HM (desde 2008) y utiliza el Sistema F extendido con igualdad de tipos no sintáctica; [ 8 ] las características no HM en el sistema de tipos de OCaml incluyen GADT . [ 9 ] [ 10 ]
El isomorfismo de Girard-Reynolds
En la lógica intuicionista de segundo orden , el cálculo lambda polimórfico de segundo orden (F2) fue descubierto por Girard (1972) e independientemente por Reynolds (1974). [ 11 ] Girard demostró el teorema de representación : que en la lógica de predicados intuicionista de segundo orden (P2), las funciones de los números naturales a los números naturales que pueden demostrarse totales forman una proyección de P2 en F2. [ 11 ] Reynolds demostró el teorema de abstracción : que cada término en F2 satisface una relación lógica, que puede incrustarse en las relaciones lógicas P2. [ 11 ] Reynolds demostró que una proyección de Girard seguida de una incrustación de Reynolds forman la identidad, es decir, el isomorfismo de Girard-Reynolds . [ 11 ]
Sistema F ω
Mientras que el Sistema F corresponde al primer eje del cubo lambda de Barendregt , el Sistema F ω o el cálculo lambda polimórfico de orden superior combina el primer eje (polimorfismo) con el segundo eje ( operadores de tipo ); es un sistema diferente y más complejo.
El sistema F ω puede definirse inductivamente en una familia de sistemas, donde la inducción se basa en los tipos permitidos en cada sistema:
- tipos de permisos:
- (el tipo de tipos) y
- dóndey(el tipo de funciones que transforman tipos en tipos, donde el tipo de argumento es de orden inferior)
En el límite, podemos definir el sistemaser
Es decir, F ω es el sistema que permite funciones de tipos a tipos donde el argumento (y el resultado) pueden ser de cualquier orden.
Tenga en cuenta que, si bien F ω no impone restricciones en el orden de los argumentos en estas asignaciones, sí restringe el universo de los argumentos para estas asignaciones: deben ser tipos en lugar de valores. El sistema F ω no permite asignaciones de valores a tipos ( tipos dependientes ), aunque sí permite asignaciones de valores a valores (abstracción), asignaciones de tipos a valores (abstracción) y asignaciones de tipos a tipos (abstracción a nivel de tipos).
Sistema F < :
El sistema F < : , pronunciado "F-sub", es una extensión del sistema F con subtipado . El sistema F < : ha sido de vital importancia para la teoría de los lenguajes de programación desde la década de 1980 porque el núcleo de los lenguajes de programación funcional , como los de la familia ML , admite tanto el polimorfismo paramétrico como el subtipado de registros , que se puede expresar en el sistema F < : . [ 12 ] [ 13 ]
Véase también
- Tipos existenciales : las contrapartes cuantificadas existencialmente de los tipos universales.
- Sistema U
- cubo Lambda
Notas
- ↑ Girard, Jean-Yves (1986). "El sistema F de tipos variables, quince años después". Theoretical Computer Science . 45 : 160. doi : 10.1016/0304-3975(86)90044-7 .
Sin embargo, en [3] se demostró que las reglas obvias de conversión para este sistema, llamado F por casualidad, estaban convergiendo.
- ↑ Harper R. " Fundamentos prácticos de los lenguajes de programación, segunda edición" . págs. 142–3 .
- ↑ Geuvers H, Nordström B, Dowek G. "Pruebas de programas y formalización de las matemáticas" (PDF) . pág. 51.
- ↑ Xavier Leroy, ¿Programación = demostración? La correspondencia Curry-Howard en la actualidad, Lecciones en el Collège de France, Lección 2, pág. 15, 21/11/2018 https://xavierleroy.org/CdF/2018-2019/2.pdf
- ↑ "CS 4110: Lenguajes de Programación y Lógica - Lección 26: Tipos Existenciales" (PDF) . Facultad de Informática y Ciencias de la Información Ann S. Bowers de Cornell . Departamento de Ciencias de la Computación, Universidad de Cornell. 2018. Archivado (PDF) del original el 26 de septiembre de 2025. Consultado el 8 de noviembre de 2025 .
- ↑ Wells, JB (2005-01-20). "Intereses de investigación de Joe Wells" . Universidad Heriot-Watt.
- ↑ Wells, JB (1999). "La tipabilidad y la verificación de tipos en System F son equivalentes e indecidibles" . Annals of Pure and Applied Logic . 98 ( 1–3 ): 111–156 . doi : 10.1016/S0168-0072(98)00047-5 ."El proyecto Church: la tipabilidad y la verificación de tipos en el sistema F son equivalentes e indecidibles" . 29 de septiembre de 2007. Archivado del original el 29 de septiembre de 2007.
- ↑ "System FC: restricciones de igualdad y coerciones" . gitlab.haskell.org . Consultado el 8 de julio de 2019 .
- ↑ "Notas de la versión OCaml 4.00.1" . ocaml.org . 5 de octubre de 2012. Consultado el 23 de septiembre de 2019 .
- ↑ "Manual de referencia de OCaml 4.09" . 11 de septiembre de 2012. Consultado el 23 de septiembre de 2019 .
- 1 2 3 4 Philip Wadler (2005) El isomorfismo de Girard-Reynolds (segunda edición) Universidad de Edimburgo , Lenguajes de programación y fundamentos en Edimburgo
- ↑ Cardelli, Luca; Martini, Simone; Mitchell, John C.; Scedrov, Andre (1994). "Una extensión del sistema F con subtipado". Information and Computation, vol. 9. North Holland, Ámsterdam. pp. 4–56 . doi : 10.1006/inco.1994.1013 .
- ↑ Pierce, Benjamin (2002). Tipos y lenguajes de programación . MIT Press. ISBN 978-0-262-16209-8.Capítulo 26: Cuantificación acotada
Referencias
- Girard, Jean-Yves (1971). "Una extensión de la interpretación de Gödel à l'Analyse, et son Application à l'Élimination des Coupures dans l'Analyse et la Théorie des Types". Actas del Segundo Simposio de Lógica Escandinava . Ámsterdam. págs. 63– 92. doi : 10.1016/S0049-237X(08)70843-7 .
- Girard, Jean-Yves (1972), Interprétation fonctionnelle et elimination des coupures de l'arithmétique d'ordre supérieur (tesis doctoral) (en francés), Université Paris 7.
- Reynolds, John (1974). Hacia una teoría de la estructura de tipos (PDF) .
- Girard, Jean-Yves; Lafont, Yves; Taylor, Paul (1989). Pruebas y tipos . Cambridge University Press. ISBN 978-0-521-37181-0.
- Wells, JB (1994). «La tipabilidad y la verificación de tipos en el cálculo lambda de segundo orden son equivalentes e indecidibles». Actas del 9.º Simposio Anual IEEE sobre Lógica en Ciencias de la Computación (LICS) . págs. 176-185 . doi : 10.1109/LICS.1994.316068 . ISBN 0-8186-6310-3.Versión Postscript
Lecturas adicionales
- Pierce, Benjamin (2002). "V Polymorphism Cap. 23. Universal Types, Cap. 25. An ML Implementation of System F" . Types and Programming Languages . MIT Press. pp. 339–362 , 381–388 . ISBN 0-262-16209-1.
Enlaces externos
- Resumen del Sistema F de Franck Binard.
- Sistema F ω : el caballo de batalla de los compiladores modernos por Greg Morrisett
- 1971 en informática
- 1974 en informática
- Cálculo lambda
- teoría de tipos
- Polimorfismo (informática)
- Lógica