En informática , Programming Computable Functions (PCF) es un lenguaje funcional tipado introducido por Gordon Plotkin en 1977, [1] basado en material previo no publicado de Dana Scott . [nota 1] Puede considerarse una versión extendida del cálculo lambda tipado o una versión simplificada de lenguajes funcionales tipados modernos como ML o Haskell .
Robin Milner fue el primero en proponer un modelo completamente abstracto para PCF . [2] Sin embargo, dado que el modelo de Milner se basaba esencialmente en la sintaxis de PCF, se consideró poco satisfactorio. [3] Los dos primeros modelos completamente abstractos que no empleaban sintaxis se formularon durante la década de 1990. Estos modelos se basan en la semántica de juegos [4] [5] y en las relaciones lógicas de Kripke. [6] Durante un tiempo se creyó que ninguno de estos modelos era completamente satisfactorio, ya que no eran efectivamente presentables. Sin embargo, Ralph Loader demostró que no podía existir un modelo completamente abstracto efectivamente presentable, ya que la cuestión de la equivalencia de programas en el fragmento finitario de PCF no es decidible. [7]
Sintaxis
Los tipos de PCF se definen inductivamente como
- nat es un tipo
- Para los tipos σ y τ , existe un tipo σ → τ
Un contexto es una lista de pares x : σ , donde x es un nombre de variable y σ es un tipo, de modo que ningún nombre de variable se duplique. A continuación, se definen los juicios de tipificación de términos en contexto de la forma habitual para las siguientes construcciones sintácticas:
- Variables (si x : σ es parte de un contexto Γ , entonces Γ ⊢ x : σ )
- Aplicación (de un término de tipo σ → τ a un término de tipo σ )
- λ-abstracción
- El combinador de punto fijo Y (que forma términos de tipo σ a partir de términos de tipo σ → σ )
- Las operaciones sucesora ( succ ) y predecesora ( pred ) sobre nat y la constante 0
- El condicional if con la regla de tipificación:
- ( aquí los nat se interpretarán como booleanos con una convención como cero que denota verdad y cualquier otro número que denota falsedad)
Semántica
Semántica denotacional
Una semántica relativamente sencilla para el lenguaje es el modelo Scott . En este modelo,
- Los tipos se interpretan como ciertos dominios .
- (los números naturales con un elemento inferior adjunto, con el orden plano)
- se interpreta como el dominio de las funciones continuas de Scott desde hasta , con ordenamiento puntual.
- Un contexto se interpreta como el producto
- Los términos en contexto se interpretan como funciones continuas.
- Los términos variables se interpretan como proyecciones.
- La abstracción y aplicación de Lambda se interpretan haciendo uso de la estructura cartesiana cerrada de la categoría de dominios y funciones continuas.
- Y se interpreta tomando el punto menos fijo del argumento.
Este modelo no es completamente abstracto para PCF; pero sí lo es para el lenguaje obtenido al agregar un operador paralelo o a PCF. [4] : 293
Notas
- ^ "PCF es un lenguaje de programación para funciones computables, basado en LCF, la lógica de funciones computables de Scott". [1] Programación de funciones computables es utilizado por (Mitchell 1996). También se lo conoce como Programación con funciones computables o Lenguaje de programación para funciones computables .
Referencias
- ^ ab Plotkin, Gordon D. (1977). "LCF considerado como un lenguaje de programación" (PDF) . Theoretical Computer Science . 5 (3): 223–255. doi : 10.1016/0304-3975(77)90044-5 .
- ^ Milner, Robin (1977). "Modelos completamente abstractos de cálculos λ tipados" (PDF) . Theoretical Computer Science . 4 : 1–22. doi :10.1016/0304-3975(77)90053-6. hdl : 20.500.11820/731c88c6-cdb1-4ea0-945e-f39d85de11f1 .
- ^ Ong, C.-HL (1995). "Correspondencia entre semántica operacional y denotacional: el problema de abstracción completa para PCF". En Abramsky, S.; Gabbay, D.; Maibau, TSE (eds.). Handbook of Logic in Computer Science . Oxford University Press. págs. 269–356. Archivado desde el original el 7 de enero de 2006. Consultado el 19 de enero de 2006 .
- ^ ab Hyland, JME y Ong, C.-HL (2000). "Sobre la abstracción completa para PCF". Información y computación . 163 (2): 285–408. doi : 10.1006/inco.2000.2917 .
- ^ Abramsky, S., Jagadeesan, R. y Malacaria, P. (2000). "Abstracción completa para PCF". Información y computación . 163 (2): 409–470. doi : 10.1006/inco.2000.2930 .
{{cite journal}}: CS1 maint: multiple names: authors list (link) - ^ O'Hearn, PW y Riecke, J. G (1995). "Relaciones lógicas de Kripke y PCF". Información y computación . 120 (1): 107–116. doi : 10.1006/inco.1995.1103 .
- ^ Loader, R. (2001). "La PCF finitaria no es decidible". Ciencias Informáticas Teóricas . 266 (1–2): 341–364. doi : 10.1016/S0304-3975(00)00194-8 .
- Scott, Dana S. (1969). "Una alternativa de teoría de tipos a CUCH, ISWIM, OWHY" (PDF) . Manuscrito inédito .Apareció como Scott, Dana S. (1993). "Una alternativa de teoría de tipos a CUCH, ISWIM, OWHY". Theoretical Computer Science . 121 : 411–440. doi : 10.1016/0304-3975(93)90095-b .
- Mitchell, John C. (1996). "El lenguaje PCF". Fundamentos para lenguajes de programación . ISBN 9780262133210.
Enlaces externos
- Introducción a RealPCF
- Analizador léxico y analizador sintáctico para PCF escrito en SML