stringtranslate.com

Zurra

En matemáticas e informática , el curry es la técnica de traducir una función que toma múltiples argumentos en una secuencia de familias de funciones, cada una de las cuales toma un solo argumento.

En el ejemplo prototípico, se comienza con una función que toma dos argumentos, uno de y otro de, y produce objetos en La forma curtida de esta función trata el primer argumento como un parámetro, para crear una familia de funciones. La familia está organizada de modo que para cada objeto haya exactamente una función

En este ejemplo, ella misma se convierte en una función, que toma como argumento y devuelve una función que asigna cada uno a . La notación adecuada para expresar esto es detallada. La función pertenece al conjunto de funciones Mientras tanto, pertenece al conjunto de funciones Por lo tanto, algo que se asigna será del tipo Con esta notación, es una función que toma objetos del primer conjunto y devuelve objetos en el segundo conjunto. y por eso se escribe Este es un ejemplo un tanto informal; A continuación se dan definiciones más precisas de lo que se entiende por "objeto" y "función". Estas definiciones varían de un contexto a otro y toman diferentes formas, dependiendo de la teoría en la que se esté trabajando.

El curry está relacionado con la aplicación parcial , pero no es lo mismo . [1] [2] El ejemplo anterior se puede utilizar para ilustrar la aplicación parcial; es bastante parecido. La aplicación parcial es la función que toma el par y juntos como argumentos y devuelve. Usando la misma notación anterior, la aplicación parcial tiene la firma. Escrita de esta manera, se puede ver que la aplicación es adjunta al curry.

El curry de una función con más de dos argumentos se puede definir por inducción.

El curry es útil tanto en entornos prácticos como teóricos. En lenguajes de programación funcionales y muchos otros, proporciona una forma de gestionar automáticamente cómo se pasan los argumentos a funciones y excepciones. En informática teórica , proporciona una forma de estudiar funciones con múltiples argumentos en modelos teóricos más simples que proporcionan un solo argumento. El entorno más general para la noción estricta de curry y no curry se encuentra en las categorías monoidales cerradas , que sustentan una amplia generalización de la correspondencia de pruebas y programas de Curry-Howard con muchas otras estructuras, incluida la mecánica cuántica, los cobordismos y la teoría de cuerdas. . [3]

El concepto de curry fue introducido por Gottlob Frege , [4] [5] desarrollado por Moses Schönfinkel , [6] [5] [7] [8] [9] [10] [11] y desarrollado aún más por Haskell Curry . [8] [10] [12] [13]

Uncurrying es la doble transformación del curry y puede verse como una forma de desfuncionalización . Toma una función cuyo valor de retorno es otra función y genera una nueva función que toma como parámetros los argumentos para y y devuelve, como resultado, la aplicación de y posteriormente, a esos argumentos. El proceso se puede iterar.

Motivación

Currying proporciona una manera de trabajar con funciones que toman múltiples argumentos y usarlas en marcos donde las funciones pueden tomar solo un argumento. Por ejemplo, algunas técnicas analíticas sólo se pueden aplicar a funciones con un único argumento. Las funciones prácticas suelen tomar más argumentos que estos. Frege demostró que era suficiente proporcionar soluciones para el caso de un solo argumento, ya que era posible transformar una función con múltiples argumentos en una cadena de funciones de un solo argumento. Esta transformación es el proceso que ahora se conoce como curry. [14] Todas las funciones "ordinarias" que normalmente se pueden encontrar en el análisis matemático o en la programación de computadoras se pueden cursar. Sin embargo, hay categorías en las que no es posible hacer curry; Las categorías más generales que permiten el curry son las categorías monoidales cerradas .

Algunos lenguajes de programación casi siempre utilizan funciones al curry para lograr múltiples argumentos; Ejemplos notables son ML y Haskell , donde en ambos casos todas las funciones tienen exactamente un argumento. Esta propiedad se hereda del cálculo lambda , donde las funciones de múltiples argumentos generalmente se representan en forma curry.

El curry está relacionado con la aplicación parcial , pero no es lo mismo . [1] [2] En la práctica, la técnica de programación de cierres se puede utilizar para realizar una aplicación parcial y una especie de curry, ocultando argumentos en un entorno que viaja con la función curry.

Historia

El "Curry" en "Currying" es una referencia al lógico Haskell Curry , quien usó el concepto ampliamente, pero Moses Schönfinkel tuvo la idea seis años antes que Curry. [10] Se ha propuesto el nombre alternativo "Schönfinkelisation". [15] En el contexto matemático, el principio se remonta a 1893 por Frege . [4] [5]

El origen de la palabra "curry" no está claro. David Turner dice que la palabra fue acuñada por Christopher Strachey en sus notas de clase de 1967 Conceptos fundamentales en lenguajes de programación , [16] pero aunque se menciona el concepto y se menciona a Curry en el contexto de funciones de orden superior, la palabra "currying" no aparecen en las notas y Curry no está asociado con el concepto. [7] John C. Reynolds definió "currying" en un artículo de 1972, pero no afirmó haber acuñado el término. [8]

Definición

El curry se entiende más fácilmente si se comienza con una definición informal, que luego puede moldearse para adaptarse a muchos ámbitos diferentes. Primero, hay que establecer alguna notación. La notación denota todas las funciones desde hasta . Si es tal función, escribimos . Denotemos los pares ordenados de los elementos de y respectivamente, es decir, el producto cartesiano de y . Aquí, y pueden ser conjuntos, o pueden ser tipos, o pueden ser otros tipos de objetos, como se explora a continuación.

Dada una función

,

curry construye una nueva función

.

Es decir, toma un argumento de tipo y devuelve una función de tipo . Se define por

para de tipo y de tipo . Luego también escribimos

Uncurrying es la transformación inversa y se entiende más fácilmente en términos de su adjunto derecho, la función

Teoría de conjuntos

En teoría de conjuntos , la notación se utiliza para denotar el conjunto de funciones del conjunto al conjunto . Currying es la biyección natural entre el conjunto de funciones de a y el conjunto de funciones de al conjunto de funciones de a . En símbolos:

De hecho, es esta biyección natural la que justifica la notación exponencial para el conjunto de funciones. Como es el caso en todos los casos de curry, la fórmula anterior describe un par de funtores adjuntos : para cada conjunto fijo , el funtor se deja adjunto al funtor .

En la categoría de conjuntos , el objeto se llama objeto exponencial .

Espacios funcionales

En la teoría de espacios funcionales , como en el análisis funcional o la teoría de la homotopía , comúnmente uno está interesado en funciones continuas entre espacios topológicos . Se escribe (el funtor Hom ) para el conjunto de todas las funciones desde hasta y se usa la notación para denotar el subconjunto de funciones continuas. Aquí está la biyección.

mientras que sin cursar es el mapa inverso. Si al conjunto de funciones continuas de a se le da la topología compacta-abierta , y si el espacio es localmente compacto de Hausdorff , entonces

es un homeomorfismo . Este también es el caso cuando , y se generan de forma compacta , [17] : capítulo 5  [18] aunque hay más casos. [19] [20]

Un corolario útil es que una función es continua si y sólo si su forma curry es continua. Otro resultado importante es que el mapa de aplicación , generalmente llamado "evaluación" en este contexto, es continuo (tenga en cuenta que eval es un concepto estrictamente diferente en informática).

es continuo cuando es compacto-abierto y localmente compacto Hausdorff. [21] Estos dos resultados son fundamentales para establecer la continuidad de la homotopía , es decir, cuándo es el intervalo unitario , por lo que puede considerarse como una homotopía de dos funciones desde hasta , o, de manera equivalente, un camino único (continuo) en .

Topología algebraica

En topología algebraica , el curry sirve como ejemplo de la dualidad de Eckmann-Hilton y, como tal, juega un papel importante en una variedad de entornos diferentes. Por ejemplo, el espacio en bucle se suma a suspensiones reducidas ; esto se escribe comúnmente como

donde es el conjunto de clases de homotopía de aplicaciones , y es la suspensión de A , y es el espacio de bucle de A. En esencia, la suspensión puede verse como el producto cartesiano de con el intervalo unitario, módulo una relación de equivalencia para convertir el intervalo en un bucle. Luego, la forma al curry asigna el espacio al espacio de funciones desde bucles hacia , es decir, desde hacia . [21] Entonces es el funtor adjunto que asigna suspensiones a espacios de bucle, y sin cursar es el dual. [21]

La dualidad entre el cono de mapeo y la fibra de mapeo ( cofibración y fibración ) [17] : capítulos 6,7  puede entenderse como una forma de curry, que a su vez conduce a la dualidad de las secuencias largas exactas y coexactas de Puppe .

En álgebra homológica , la relación entre currying y uncurrying se conoce como adjunción tensor-hom . Aquí surge un giro interesante: el funtor Hom y el funtor producto tensorial podrían no alcanzar una secuencia exacta ; esto lleva a la definición del funtor Ext y del funtor Tor .

Teoría del dominio

En teoría del orden , es decir, la teoría de redes de conjuntos parcialmente ordenados , es una función continua cuando a la red se le da la topología de Scott . [22] Las funciones continuas de Scott se investigaron por primera vez en el intento de proporcionar una semántica para el cálculo lambda (ya que la teoría de conjuntos ordinaria es inadecuada para hacer esto). De manera más general, las funciones continuas de Scott ahora se estudian en la teoría de dominios , que abarca el estudio de la semántica denotacional de los algoritmos informáticos. Tenga en cuenta que la topología de Scott es bastante diferente de muchas topologías comunes que uno podría encontrar en la categoría de espacios topológicos ; la topología de Scott suele ser más fina y no sobria .

La noción de continuidad hace su aparición en la teoría de tipos de homotopía , donde, en términos generales, dos programas de computadora pueden considerarse homotópicos, es decir, calculan los mismos resultados, si pueden refactorizarse "continuamente" de uno a otro.

cálculos lambda

En informática teórica , el curry proporciona una forma de estudiar funciones con múltiples argumentos en modelos teóricos muy simples, como el cálculo lambda , en el que las funciones solo toman un único argumento. Considere una función que toma dos argumentos y tiene el tipo , lo que debe entenderse en el sentido de que x debe tener el tipo , y debe tener el tipo y la función en sí devuelve el tipo . La forma al curry de f se define como

¿ Dónde está el abstractor del cálculo lambda? Dado que el curry toma como entrada funciones con el tipo , se concluye que el tipo de curry en sí es

El operador → a menudo se considera asociativo por la derecha , por lo que el tipo de función al curry a menudo se escribe como . Por el contrario, la aplicación de la función se considera asociativa por la izquierda , por lo que equivale a

.

Es decir, los paréntesis no son necesarios para eliminar la ambigüedad del orden de la aplicación.

Las funciones curadas se pueden utilizar en cualquier lenguaje de programación que admita cierres ; sin embargo, las funciones no cursivas generalmente se prefieren por razones de eficiencia, ya que la sobrecarga de la aplicación parcial y la creación de cierres se puede evitar para la mayoría de las llamadas a funciones.

Teoría de tipos

En teoría de tipos , la idea general de un sistema de tipos en informática se formaliza en un álgebra de tipos específica. Por ejemplo, al escribir , la intención es que y sean tipos , mientras que la flecha es un constructor de tipos , específicamente, el tipo de función o tipo de flecha. De manera similar, el producto cartesiano de tipos lo construye el constructor de tipos de producto .

El enfoque teórico de tipos se expresa en lenguajes de programación como ML y los lenguajes derivados e inspirados en él: CaML , Haskell y F# .

El enfoque de la teoría de tipos proporciona un complemento natural al lenguaje de la teoría de categorías , como se analiza a continuación. Esto se debe a que las categorías, y específicamente las categorías monoidales , tienen un lenguaje interno , siendo el cálculo lambda de tipo simple el ejemplo más destacado de dicho lenguaje. Es importante en este contexto, porque se puede construir a partir de un único constructor de tipo, el tipo flecha. El curry confiere entonces a la lengua un tipo de producto natural. La correspondencia entre objetos en categorías y tipos permite que los lenguajes de programación se reinterpreten como lógicas (a través de la correspondencia Curry-Howard ) y como otros tipos de sistemas matemáticos, como se explora más adelante a continuación.

Lógica

Según la correspondencia Curry-Howard , la existencia de curry y no curry es equivalente al teorema lógico , ya que las tuplas ( tipo de producto ) corresponden a la conjunción en lógica y el tipo de función corresponde a la implicación.

El objeto exponencial en la categoría de las álgebras de Heyting normalmente se escribe como implicación material . Las álgebras distributivas de Heyting son álgebras booleanas y el objeto exponencial tiene la forma explícita , lo que deja claro que el objeto exponencial realmente es una implicación material . [23]

Teoría de categorías

Las nociones anteriores de currying y uncurrying encuentran su declaración más general y abstracta en la teoría de categorías . El curry es una propiedad universal de un objeto exponencial y da lugar a una adjunción en categorías cerradas cartesianas . Es decir, existe un isomorfismo natural entre los morfismos de un producto binario y los morfismos de un objeto exponencial .

Esto se generaliza a un resultado más amplio en categorías monoidales cerradas : Currying es la afirmación de que el producto tensorial y el Hom interno son funtores adjuntos ; es decir, para cada objeto existe un isomorfismo natural :

Aquí, Hom denota el functor Hom (externo) de todos los morfismos en la categoría, mientras que denota el functor hom interno en la categoría monoide cerrada. Para la categoría de conjuntos , los dos son iguales. Cuando el producto es el producto cartesiano, entonces el hom interno se convierte en el objeto exponencial .

El curry puede descomponerse de dos maneras. Una es si una categoría no está cerrada y, por lo tanto, carece de un funtor hom interno (posiblemente porque hay más de una opción para dicho funtor). Otra forma es si no es monoidal y, por lo tanto, carece de producto (es decir, carece de una forma de escribir pares de objetos). Las categorías que tienen productos y homs internos son exactamente las categorías monoidales cerradas.

El establecimiento de categorías cerradas cartesianas es suficiente para la discusión de la lógica clásica ; la configuración más general de categorías monoidales cerradas es adecuada para la computación cuántica . [24]

La diferencia entre estos dos es que el producto de las categorías cartesianas (como la categoría de conjuntos , órdenes parciales completas o álgebras de Heyting ) es solo el producto cartesiano ; se interpreta como un par ordenado de elementos (o una lista). El cálculo lambda escrito simplemente es el lenguaje interno de las categorías cerradas cartesianas; y es por esta razón que los pares y las listas son los tipos principales en la teoría de tipos de LISP , Scheme y muchos lenguajes de programación funcionales .

Por el contrario, el producto de categorías monoidales (como el espacio de Hilbert y los espacios vectoriales del análisis funcional ) es el producto tensorial . El lenguaje interno de tales categorías es la lógica lineal , una forma de lógica cuántica ; el sistema de tipos correspondiente es el sistema de tipos lineales . Tales categorías son adecuadas para describir estados cuánticos entrelazados y, de manera más general, permiten una amplia generalización de la correspondencia de Curry-Howard con la mecánica cuántica , los cobordismos en topología algebraica y la teoría de cuerdas . [3] El sistema de tipo lineal y la lógica lineal son útiles para describir primitivas de sincronización , como bloqueos de exclusión mutua y el funcionamiento de máquinas expendedoras.

Contraste con la aplicación de funciones parciales.

El curry y la aplicación de funciones parciales a menudo se combinan. [1] [2] Una de las diferencias significativas entre los dos es que una llamada a una función parcialmente aplicada devuelve el resultado de inmediato, no otra función en la cadena de curry; esta distinción se puede ilustrar claramente para funciones cuya aridad es mayor que dos. [25]

Dada una función de tipo , el curry produce . Es decir, mientras que una evaluación de la primera función podría representarse como , la evaluación de la función curry se representaría como , aplicando cada argumento por turno a una función de un solo argumento devuelta por la invocación anterior. Tenga en cuenta que después de llamar a , nos queda una función que toma un solo argumento y devuelve otra función, no una función que toma dos argumentos.

Por el contrario, la aplicación parcial de funciones se refiere al proceso de fijar una cantidad de argumentos a una función, produciendo otra función de menor aridad. Dada la definición anterior, podríamos arreglar (o 'vincular') el primer argumento, produciendo una función de tipo . La evaluación de esta función podría representarse como . Tenga en cuenta que el resultado de la aplicación de una función parcial en este caso es una función que toma dos argumentos.

Intuitivamente, la aplicación de función parcial dice "si corrige el primer argumento de la función, obtiene una función de los argumentos restantes". Por ejemplo, si la función div representa la operación de división x / y , entonces div con el parámetro x fijo en 1 (es decir, div 1) es otra función: la misma que la función inv que devuelve el inverso multiplicativo de su argumento, definido por inv ( y ) = 1/ y .

La motivación práctica para la aplicación parcial es que muy a menudo las funciones obtenidas al proporcionar algunos, pero no todos, los argumentos de una función son útiles; por ejemplo, muchos idiomas tienen una función u operador similar a plus_one. La aplicación parcial facilita la definición de estas funciones, por ejemplo, creando una función que representa el operador de suma con 1 enlazado como primer argumento.

La aplicación parcial puede verse como la evaluación de una función curry en un punto fijo, por ejemplo, dado y luego o simplemente donde curry el primer parámetro de f.

Así, la aplicación parcial se reduce a una función de curry en un punto fijo. Además, una función curry en un punto fijo es (trivialmente) una aplicación parcial. Para mayor evidencia, tenga en cuenta que, dada cualquier función , una función puede definirse de manera que . Por tanto, cualquier aplicación parcial puede reducirse a una única operación de curry. Como tal, el curry se define más adecuadamente como una operación que, en muchos casos teóricos, a menudo se aplica de forma recursiva, pero que es teóricamente indistinguible (cuando se considera como una operación) de una aplicación parcial.

Entonces, una aplicación parcial puede definirse como el resultado objetivo de una única aplicación del operador curry en algún orden de las entradas de alguna función.

Ver también

Referencias

  1. ^ abc cdiggins (24 de mayo de 2007). "¡¿Currying! = ¿Aplicación parcial generalizada?". Lambda the Ultimate: el blog sobre lenguajes de programación .
  2. ^ abc "La aplicación de función parcial no se cursa". El bloque sin tallar . 7 de agosto de 2020. Archivado desde el original el 23 de octubre de 2016.
  3. ^ ab Báez, John C.; Quédate, Mike (6 de junio de 2009). "Física, topología, lógica y computación: una piedra de Rosetta". En Coecke, Bob (ed.). Nuevas estructuras para la física (PDF) . Apuntes de conferencias de física. vol. 813: Nuevas estructuras para la física. Berlín, Heidelberg: Springer (publicado el 5 de julio de 2010). págs. 95-172. arXiv : 0903.0340 . doi :10.1007/978-3-642-12821-9_2. ISBN 978-3-642-12821-9. S2CID  115169297. Archivado desde el original (PDF) el 5 de diciembre de 2022.
  4. ^ ab Frege, Gottlob (1893). "artículo 36". Grundgesetze der arithmetik (en alemán). Libro de las colecciones de la Universidad de Wisconsin - Madison, digitalizado por Google el 26 de agosto de 2008. Jena: Hermann Pohle. págs. 54–55.
  5. ^ abc Quine, WV (1967). "Introducción a 1924 de Moses Schönfinkel "Sobre los componentes básicos de la lógica matemática"". En van Heijenoort, Jean (ed.). De Frege a Gödel: un libro de consulta en lógica matemática, 1879-1931 . Harvard University Press. págs. 355–357. ISBN 9780674324497.
  6. ^ Schönfinkel, Moses (septiembre de 1924) [Presentado en la Mathematischen Gesellschaft (Sociedad Matemática) de Göttingen el 7 de diciembre de 1920. Recibido por Mathematische Annalen el 15 de marzo de 1924]. Escrito en Moscú. "Über die Bausteine ​​der mathematischen Logik" [Sobre los componentes básicos de la lógica matemática] (PDF) . Annalen Matemáticas . ¿Berlín?: Springer. 92 (3–4): 305–316. doi :10.1007/BF01448013. S2CID  118507515.
  7. ^ ab Strachey, Christopher (abril de 2000) [Este artículo constituye la sustancia de un curso de conferencias impartidas en la Escuela Internacional de Verano sobre Programación Informática en Copenhague en agosto de 1967]. "Conceptos fundamentales en lenguajes de programación". Computación simbólica y de orden superior . 13 : 11–49. CiteSeerX 10.1.1.332.3161 . doi :10.1023/A:1010000313106. ISSN  1573-0557. S2CID  14124601. Existe un dispositivo originado por Schönfinkel, para reducir operadores con varios operandos a la aplicación sucesiva de operadores de un solo operando. 
  8. ^ abc Publicado originalmente como Reynolds, John C. (1 de agosto de 1972). "Intérpretes de definición para lenguajes de programación de orden superior". En Rosemary Shields (ed.). Actas de la conferencia anual de ACM - ACM '72. vol. 2. Prensa ACM. págs. 717–740. doi :10.1145/800194.805852. ISBN 9781450374927. S2CID  163294. En la última línea hemos utilizado un truco llamado Currying (en honor al lógico H. Curry) para resolver el problema de introducir una operación binaria en un lenguaje donde todas las funciones deben aceptar un único argumento. (El árbitro comenta que aunque el "curry" es más sabroso, el "Schönfinkeling" podría ser más exacto).Republicado como Reynolds, John C. (1998). "Intérpretes definitorios para lenguajes de programación de orden superior". Computación simbólica y de orden superior . Boston: Editores académicos de Kluwer. 11 (4): 363–397. doi :10.1023/A:1010027404223. 13 - vía Universidad de Syracuse: Facultad de Ingeniería y Ciencias de la Computación - Antiguos departamentos, centros, institutos y proyectos.
  9. ^ Sloneger, Kenneth; Kurtz, Barry L. (1995). "Funciones al curry, 5.1: conceptos y ejemplos, capítulo 5: el cálculo Lambda". Sintaxis formal y semántica de los lenguajes de programación: un enfoque de laboratorio (PDF) . Compañía editorial Addison-Wesley. pag. 144.ISBN _ 0-201-65697-3.
  10. ^ abc Curry, Haskell B. (1980). Barbias, Jon; Keisler, H. Jerome; Kunen, Kenneth (eds.). "Algunos aspectos filosóficos de la lógica combinatoria". El Simposio de Kleene: Actas del Simposio celebrado del 18 al 24 de junio de 1978 en Madison, Wisconsin, EE. UU. (Estudios de lógica y fundamentos de las matemáticas) . Estudios de Lógica y Fundamentos de las Matemáticas. Compañía editorial de Holanda Septentrional, sello de Elsevier. 101 : 85-101. doi :10.1016/S0049-237X(08)71254-0. ISBN 9780444853455. ISSN  0049-237X. S2CID  117179133. Algunos lógicos contemporáneos llaman a esta forma de ver una función "currying", porque la usé ampliamente; pero Schönfinkel tuvo la idea unos seis años antes que yo.
  11. ^ "Curry Schonfinkelling". Wiki del repositorio de patrones de Portland . Cunningham & Cunningham, Inc. 6 de mayo de 2012.
  12. ^ Barendregt, Henk; Barendsen, Erik (marzo de 2000) [diciembre de 1998]. Introducción al cálculo Lambda (PDF) (edición revisada). pag. 8.
  13. ^ Curry, Haskell; Feys, Robert (1958). Lógica combinatoria . vol. Yo (2 ed.). Ámsterdam, Países Bajos: Compañía Editorial de Holanda Septentrional.
  14. ^ Hutton, Graham; Jones, Mark P., eds. (noviembre de 2002). "Preguntas frecuentes sobre comp.lang.functional, 3. Temas técnicos, 3.2. Currying". Ciencias de la Computación de la Universidad de Nottingham .
  15. ^ Heim, Irene; Kratzer, Angelika (2 de enero de 1998). Semántica en gramática generativa (PDF) . Malden, Massachusetts: Blackwell Publishers, una editorial de Wiley. ISBN 0-631-19712-5.{{cite book}}: CS1 maint: date and year (link)
  16. ^ Turner, David (1 de junio de 1997). "¿Lenguaje de programación, Currying o Schonfinkeling?, n.º 9/14". Foro de lenguajes de programación informática . Archivado desde el original el 3 de marzo de 2022 . Consultado el 3 de marzo de 2022 .
  17. ^ ab mayo, Jon Peter (1999). Un curso conciso en topología algebraica (PDF) . Conferencias de matemáticas en Chicago. Chicago, Illinois: University of Chicago Press. págs. 39–55. ISBN 0-226-51183-9. OCLC  41266205.
  18. ^ "espacio topológico generado de forma compacta". nLaboratorio . 28 de mayo de 2023.
  19. ^ Tillotson, J.; Booth, Peter I. (marzo de 1980) [Recibido el 2 de octubre de 1978, revisado el 29 de junio de 1979, publicado el 1 de mayo de 1980]. Escrito en la Memorial University de Terranova. "Categorías monoidales cerradas, cartesianas cerradas y convenientes de espacios topológicos" (PDF) . Revista Pacífico de Matemáticas . Berkeley, California: Editores de ciencias matemáticas. 88 (1): 35–53. doi :10.2140/pjm.1980.88.35. eISSN  1945-5844. ISSN  0030-8730.
  20. ^ "categoría conveniente de espacios topológicos". nLaboratorio . 11 de agosto de 2023.
  21. ^ abc Rotman, Joseph Jonah (1988). "Capítulo 11". Una introducción a la topología algebraica. Textos de posgrado en matemáticas; 119. Nueva York: Springer-Verlag. ISBN 978-0-387-96678-6. OCLC  17383909.
  22. ^ Barendregt, Hendrik Pieter (1984). "Teoremas 1.2.13, 1.2.14". El cálculo lambda: su sintaxis y semántica . Estudios de lógica y fundamentos de las matemáticas. vol. 103 (ed. Rev.). Holanda Septentrional, una huella de Elsevier. ISBN 978-0-444-87508-2.
  23. ^ Mac Lane, Saunders; Moerdijk, Ieke (1992). "Capítulo I. Categorías de Funtores; secciones 7. Cálculo proposicional, 8. Álgebras de Heyting y 9. Cuantificadores como adjuntos". Gavillas en geometría y lógica: una primera introducción a la teoría del topos . Nueva York: Springer-Verlag, parte de Springer Science & Business Media. págs. 48–57. ISBN 978-0-387-97710-2.
  24. ^ Abramsky, Sansón; Coecke, Bob (5 de marzo de 2007). "Una semántica categórica de los protocolos cuánticos". Lógica en Ciencias de la Computación (LICS 2004): Actas, 19º Simposio Anual IEEE, Turku, Finlandia, 2004] . Prensa de la Sociedad de Computación IEEE. arXiv : quant-ph/0402130 . doi :10.1109/LICS.2004.1319636.
  25. ^ Lee, G. Kay (15 de mayo de 2013). "Programación funcional en 5 minutos". Diapositivas .

enlaces externos