En matemáticas e informática , el currying 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óneso requiere dos argumentos, uno dey uno dey produce objetos enLa forma currificada de esta función trata el primer argumento como un parámetro, de modo que crea una familia de funciones.La familia está organizada de tal manera que para cada objetoenHay exactamente una función, de tal manera que para cualquieren,.
En este ejemplo,En sí mismo se convierte en una función que tomacomo argumento, y devuelve una función que asigna cadaaLa notación adecuada para expresar esto es verbosa. La funciónpertenece al conjunto de funciones Mientras tanto,pertenece al conjunto de funcionesPor lo tanto, algo que mapeaaserá del tipoCon esta notación,es una función que toma objetos del primer conjunto y devuelve objetos del segundo conjunto, y así se escribeEste es un ejemplo algo informal; a continuación se ofrecen definiciones más precisas de lo que se entiende por "objeto" y "función". Estas definiciones varían según el contexto y adoptan diferentes formas, dependiendo de la teoría con la que se trabaje.
El currying 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 similar. La aplicación parcial es la funcióneso toma la parejayjuntos como argumentos y devuelveUtilizando la misma notación que arriba, la aplicación parcial tiene la firmaEscrito de esta manera, la aplicación puede verse como adjunta al currying.
La currificación de una función con más de dos argumentos se puede definir por inducción.
El currying resulta útil tanto en contextos prácticos como teóricos. En lenguajes de programación funcional , y en muchos otros, proporciona una forma de gestionar automáticamente cómo se pasan los argumentos a las funciones y las excepciones . En informática teórica , permite estudiar funciones con múltiples argumentos en modelos teóricos más sencillos que solo proporcionan un argumento. El contexto más general para la noción estricta de currying y descurrying se encuentra en las categorías monoidales cerradas , que sustentan una vasta generalización de la correspondencia de Curry-Howard entre demostraciones y programas a una correspondencia con muchas otras estructuras, incluyendo 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 posteriormente por Haskell Curry . [ 8 ] [ 10 ] [ 12 ] [ 13 ]
El descurrificado es la transformación dual del currificado y puede verse como una forma de desfuncionalización . Toma una funcióncuyo valor de retorno es otra funcióny produce una nueva funciónque toma como parámetros los argumentos para ambosyy devuelve, como resultado, la aplicación dey posteriormente,, a esos argumentos. El proceso puede repetirse.
Motivación
El currying proporciona una forma de trabajar con funciones que toman múltiples argumentos y utilizarlas en marcos donde las funciones podrían tomar solo un argumento. Por ejemplo, algunas técnicas analíticas solo se pueden aplicar a funciones con un solo argumento. Las funciones prácticas frecuentemente toman más argumentos que este. 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 ahora conocido como currying. [ 14 ] Todas las funciones "ordinarias" que se pueden encontrar típicamente en el análisis matemático o en la programación de computadoras pueden currificarse. Sin embargo, hay categorías en las que el currying no es posible; las categorías más generales que permiten el currying son las categorías monoidales cerradas .
Algunos lenguajes de programación casi siempre utilizan funciones currificadas para manejar 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 con múltiples argumentos suelen representarse en forma currificada.
El currying 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 currying, ocultando argumentos en un entorno que viaja con la función currificada.
Historia
El término «Curry» en «Currying» hace referencia al lógico Haskell Curry , quien utilizó el concepto extensamente, 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 al trabajo de Frege en 1893. [ 4 ] [ 5 ]
No está claro quién acuñó el término "currying". David Turner afirma que Christopher Strachey lo hizo en sus apuntes de clase de 1967, " Fundamental Concepts in Programming Languages" [ 16 ] , pero esa fuente introduce el concepto como "un dispositivo originado por Schönfinkel" y no utiliza el término "currying", mientras que Curry se menciona más adelante en el contexto de funciones de orden superior [ 7 ] . John C. Reynolds definió "currying" en un artículo de 1972, pero no afirmó haberlo acuñado [ 8 ].
Definición
El currying se entiende mejor comenzando con una definición informal, que luego se puede adaptar para ajustarse a muchos dominios diferentes. Primero, hay que establecer cierta notación. La notacióndenota todas las funciones dea. Sies tal función, escribimos. Dejardenotan los pares ordenados de los elementos deyrespectivamente, es decir, el producto cartesiano dey. Aquí,yPueden ser conjuntos, o pueden ser tipos, o pueden ser otro tipo de objetos, como se explora a continuación.
Dada una función
- ,
El currying construye una nueva función.
- .
Eso es,toma un argumento de tipoy devuelve una función de tipoSe define por
parade tipoyde tipoLuego también escribimos
El descurrying 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ónse utiliza para denotar el conjunto de funciones del conjuntoal conjunto. El currying es la biyección natural entre el conjuntode funciones deay el conjuntode funciones deal conjunto de funciones dea. En símbolos:
De hecho, es esta biyección natural la que justifica la notación exponencial para el conjunto de funciones. Como ocurre en todos los casos de currificación, la fórmula anterior describe un par adjunto de functores : para cada conjunto fijo, el functores adjunto izquierdo al functor.
En la categoría de conjuntos , el objetose denomina 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 , uno suele estar interesado en funciones continuas entre espacios topológicos . Uno escribe(el functor Hom ) para el conjunto de todas las funciones deay utiliza la notaciónpara denotar el subconjunto de funciones continuas. Aquí,es la biyección
mientras que el descurrying es el mapa inverso. Si el conjuntode funciones continuas dease le da la topología compacta-abierta , y si el espacioes localmente compacto Hausdorff , entonces
es un homeomorfismo . Este también es el caso cuando,yse 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 solo si su forma currificada es continua. Otro resultado importante es que el mapa de aplicación , generalmente llamado "evaluación" en este contexto, es continuo (nótese que eval es un concepto estrictamente diferente en ciencias de la computación). Es decir,
es continuo cuandoes compacto-abierto yHausdorff localmente compacto. [ 21 ] Estos dos resultados son fundamentales para establecer la continuidad de la homotopía , es decir, cuandoes el intervalo unitario, de modo quepuede pensarse como una homotopía de dos funciones dea, o, equivalentemente, un único camino (continuo) en.
Topología algebraica
En topología algebraica , la currificación sirve como ejemplo de la dualidad de Eckmann-Hilton y, como tal, desempeña un papel importante en una variedad de contextos diferentes. Por ejemplo, el espacio de lazos es adjunto a suspensiones reducidas ; esto se escribe comúnmente como
dóndees el conjunto de clases de homotopía de mapas, yes la suspensión de A yes el espacio de bucle de A. En esencia, la suspensiónpuede verse como el producto cartesiano decon el intervalo unitario, módulo una relación de equivalencia para convertir el intervalo en un bucle. La forma currificada entonces mapea el espacioal espacio de funciones desde bucles en, es decir, desdeen. [ 21 ] Entonceses el functor adjunto que mapea suspensiones a espacios de lazos, y la descurrificación 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 currificación, que a su vez conduce a la dualidad de las secuencias de Puppe exactas y coexactas largas .
En álgebra homológica , la relación entre currificación y descurrificación se conoce como adjunción tensorial-hom . Aquí surge un giro interesante: el functor Hom y el functor de producto tensorial podrían no ser una sucesión exacta ; esto lleva a la definición del functor Ext y el functor Tor .
teoría de dominios
En la teoría del orden , la teoría de retículos de conjuntos parcialmente ordenados ,es una función continua cuando la red tiene 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 hacerlo). De manera más general, las funciones continuas de Scott se estudian ahora en la teoría de dominios , que abarca el estudio de la semántica denotacional de los algoritmos informáticos. Nótese que la topología de Scott es bastante diferente de muchas topologías comunes que se pueden encontrar en la categoría de espacios topológicos ; la topología de Scott es típicamente más fina y no es sobria .
La noción de continuidad aparece en la teoría de tipos homotópicos , donde, en términos generales, dos programas informáticos pueden considerarse homotópicos, es decir, calculan los mismos resultados, si pueden ser refactorizados "continuamente" de uno al otro.
Cálculos lambda
En la informática teórica , el currying 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. Consideremos una funcióntomando dos argumentos y teniendo el tipo, lo que debe entenderse como que x debe tener el tipo, y debe tener el tipoy la función misma devuelve el tipo. La forma currificada de f se define como
dóndees el abstractor del cálculo lambda. Dado que curry toma, como entrada, funciones con el tipo, se concluye que el tipo de curry en sí es
El operador → se considera a menudo asociativo por la derecha , por lo que el tipo de función currificadaa menudo se escribe como. Por el contrario, la aplicación de funciones se considera asociativa por la izquierda , de modo quees equivalente a
- .
Es decir, los paréntesis no son necesarios para desambiguar el orden de la aplicación.
Las funciones currificadas pueden utilizarse en cualquier lenguaje de programación que admita cierres ; sin embargo, por razones de eficiencia, generalmente se prefieren las funciones no currificadas, ya que así se puede evitar la sobrecarga de la aplicación parcial y la creación de cierres para la mayoría de las llamadas a funciones.
teoría de tipos
En la teoría de tipos , la idea general de un sistema de tipos en informática se formaliza en un álgebra específica de tipos. Por ejemplo, al escribir, la intención es queyson tipos , mientras que la flechaes un constructor de tipos , específicamente, el tipo de función o tipo flecha. De manera similar, el producto cartesianode tipos se construye mediante el constructor de tipos de producto.
El enfoque basado en la teoría de tipos se expresa en lenguajes de programación como ML y en los lenguajes derivados e inspirados por él: Caml , Haskell y F# .
El enfoque de la teoría de tipos complementa de forma natural el lenguaje de la teoría de categorías , como se explica más adelante. Esto se debe a que las categorías, y en concreto las categorías monoidales , poseen un lenguaje interno , siendo el cálculo lambda con tipado simple el ejemplo más destacado. Este lenguaje es importante en este contexto, ya que puede construirse a partir de un único constructor de tipos: el tipo flecha. La currificación dota entonces al lenguaje de un tipo de producto natural. La correspondencia entre objetos en categorías y tipos permite entonces reinterpretar los lenguajes de programación como lógicas (mediante la correspondencia de Curry-Howard ) y como otros tipos de sistemas matemáticos, como se explora con más detalle a continuación.
Lógica
Según la correspondencia de Curry-Howard , la existencia de currying y descurrying es equivalente al teorema lógico(también conocida como exportación ), 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 exponencialen la categoría de álgebras de Heyting normalmente se escribe como implicación materialLas álgebras de Heyting distributivas son álgebras booleanas , y el objeto exponencial tiene la forma explícita, dejando así claro que el objeto exponencial es realmente una implicación material . [ 23 ]
Teoría de categorías
Las nociones anteriores de currificación y descurrificación encuentran su formulación más general y abstracta en la teoría de categorías . La currificación es una propiedad universal de un objeto exponencial y da lugar a una adjunción en categorías cartesianas cerradas . Es decir, existe un isomorfismo natural entre los morfismos de un producto binario.y los morfismos a un objeto exponencial.
Esto se generaliza a un resultado más amplio en categorías monoidales cerradas : la currificación es la afirmación de que el producto tensorial y el Hom interno son functores adjuntos ; es decir, para cada objetoExiste un isomorfismo natural :
Aquí, Hom denota el functor Hom (externo) de todos los morfismos en la categoría, mientras quedenota el functor interno hom en la categoría monoidal cerrada. Para la categoría de conjuntos , ambos son iguales. Cuando el producto es el producto cartesiano, entonces el interno homse convierte en el objeto exponencial.
La currificación puede fallar de dos maneras. Una es si una categoría no es cerrada y, por lo tanto, carece de un functor interno hom (posiblemente porque hay más de una opción para dicho functor). Otra es si no es monoidal y, por lo tanto, carece de un producto (es decir, carece de una forma de escribir pares de objetos). Las categorías que sí tienen productos y homs internos son precisamente las categorías monoidales cerradas.
La configuración de categorías cartesianas cerradas 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 ambos radica en que el producto para categorías cartesianas (como la categoría de conjuntos , los órdenes parciales completos o las álgebras de Heyting ) es simplemente el producto cartesiano ; se interpreta como un par ordenado de elementos (o una lista). El cálculo lambda tipado es el lenguaje interno de las categorías cartesianas cerradas; y es por esta razón que los pares y las listas son los tipos primarios en la teoría de tipos de LISP , Scheme y muchos lenguajes de programación funcional .
Por el contrario, el producto para 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 lineal . Estas categorías son adecuadas para describir estados cuánticos entrelazados y, más generalmente, permiten una vasta generalización de la correspondencia de Curry-Howard a la mecánica cuántica , a los cobordismos en topología algebraica y a la teoría de cuerdas . [ 3 ] El sistema de tipos lineal y la lógica lineal son útiles para describir primitivas de sincronización , como cerraduras de exclusión mutua y el funcionamiento de máquinas expendedoras.
Contraste con la aplicación de funciones parciales
El currying y la aplicación parcial de funciones a menudo se confunden. [ 1 ] [ 2 ] Una de las diferencias significativas entre ambos es que una llamada a una función parcialmente aplicada devuelve el resultado inmediatamente, no otra función en la cadena de currying; esta distinción se puede ilustrar claramente para funciones cuya aridad es mayor que dos. [ 25 ]
Dada una función de tipo, curry produce. Es decir, mientras que una evaluación de la primera función podría representarse comoLa evaluación de la función currificada se representaría como, aplicando cada argumento a su vez a una función de un solo argumento devuelta por la invocación anterior. Tenga en cuenta que después de llamarNos queda una función que toma un solo argumento y devuelve otra función, no una función que toma dos argumentos.
En cambio, la aplicación parcial de funciones se refiere al proceso de fijar un número de argumentos a una función, produciendo otra función de menor aridad. Dada la definición deArriba, podríamos fijar (o 'vincular') el primer argumento, produciendo una función de tipoLa evaluación de esta función podría representarse comoTenga en cuenta que el resultado de la aplicación parcial de la función en este caso es una función que toma dos argumentos.
Intuitivamente, la aplicación parcial de funciones dice: "si fijas el primer argumento de la función, obtienes 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 radica en que, con frecuencia, las funciones obtenidas al proporcionar algunos, pero no todos, los argumentos a una función resultan útiles; por ejemplo, muchos lenguajes cuentan con una función u operador similar a plus_one. La aplicación parcial facilita la definición de estas funciones, por ejemplo, mediante la creación de una función que represente el operador de suma con el límite 1 como primer argumento.
La aplicación parcial puede verse como la evaluación de una función currificada en un punto fijo, por ejemplo, dadoyentonceso simplementedóndecurries f primer parámetro.
Por lo tanto, la aplicación parcial se reduce a una función currificada en un punto fijo. Además, una función currificada en un punto fijo es (trivialmente) una aplicación parcial. Para obtener más evidencia, observe que, dada cualquier función, una funciónpuede definirse de tal manera quePor lo tanto, cualquier aplicación parcial puede reducirse a una única operación de curry. En consecuencia, se define mejor el curry como una operación que, en muchos casos teóricos, se aplica recursivamente, pero que, teóricamente, es indistinguible (cuando se considera como una operación) de una aplicación parcial.
Así pues, una aplicación parcial puede definirse como el resultado objetivo de una única aplicación del operador curry sobre algún ordenamiento de las entradas de alguna función.
Véase también
Referencias
- 1 2 3 cdiggins (24 de mayo de 2007). "¿Currying != Aplicación parcial generalizada?!" . Lambda the Ultimate: El blog de lenguajes de programación .
- 1 2 3 "La aplicación parcial de funciones no es currificación" . The Uncarved Block . 7 de agosto de 2020. Archivado del original el 23 de octubre de 2016.
- 1 2 Baez, John C.; Stay, Mike (6 de junio de 2009). «Física, topología, lógica y computación: una piedra Rosetta». En Coecke, Bob (ed.). Nuevas estructuras para la física (PDF) . Lecture Notes in Physics. Vol. 813: Nuevas estructuras para la física. Berlín, Heidelberg: Springer (publicado el 5 de julio de 2010). pp. 95–172 . arXiv : 0903.0340 . doi : 10.1007/978-3-642-12821-9_2 . ISBN 978-3-642-12821-9. S2CID 115169297 . Archivado del original (PDF) el 5 de diciembre de 2022.
- ^ 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 .
- 1 2 3 Quine, WV (1967). "Introducción a "Sobre los bloques de construcción de la lógica matemática" de Moses Schönfinkel, 1924En van Heijenoort, Jean (ed.). De Frege a Gödel: Un libro de referencia en lógica matemática, 1879-1931 . Harvard University Press. págs. 355–357 . ISBN 9780674324497.
- ↑ 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]. "Über die Bausteine der mathematischen Logik" [ Sobre los componentes básicos de la lógica matemática ] (PDF) . Annalen Matemáticas . 92 ( 3-4 ). Berlín: Springer: 305– 316. doi : 10.1007/BF01448013 . S2CID 118507515 .
- 1 2 Strachey, Christopher (abril de 2000) [Este artículo constituye la esencia de un curso de conferencias impartidas en la Escuela Internacional de Verano de Programación de Computadoras en Copenhague en agosto de 1967.]. " Conceptos fundamentales en lenguajes de programación" . Higher-Order and Symbolic Computation . 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.
- 1 2 3 Publicado originalmente como Reynolds, John C. (1 de agosto de 1972). "Intérpretes definicionales para lenguajes de programación de orden superior" . En Shields, Rosemary (ed.). Actas de la conferencia anual de la ACM - ACM '72 . Vol. 2. ACM Press. págs. 717–740 . doi : 10.1145/800194.805852 . ISBN 9781450374927S2CID 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 revisor comenta que , si bien
«Currying» suena mejor, «Schönfinkeling» podría ser más preciso).
Republicado como Reynolds, John C. (1998). "Intérpretes definicionales para lenguajes de programación de orden superior" . Higher-Order and Symbolic Computation . 11 (4). Boston: Kluwer Academic Publishers: 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. - ↑ Slonneger, Kenneth; Kurtz, Barry L. (1995). «Funciones currificadas, 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 basado en el laboratorio (PDF) . Addison-Wesley Publishing Company. pág. 144. ISBN 0-201-65697-3.
- 1 2 3 Curry, Haskell B. (1980). Barwise, Jon; Keisler, H. Jerome; Kunen, Kenneth (eds.). "Algunos aspectos filosóficos de la lógica combinatoria". El Simposio Kleene: Actas del Simposio celebrado del 18 al 24 de junio de 1978 en Madison, Wisconsin, EE. UU. (Estudios en lógica y fundamentos de las matemáticas) . Estudios en lógica y fundamentos de las matemáticas. 101. North-Holland Publishing Company, sello editorial de Elsevier: 85–101 . doi : 10.1016/S0049-237X(08)71254-0 . ISBN 9780444853455ISSN 0049-237X . S2CID 117179133. Algunos lógicos contemporáneos llaman a esta forma de ver una función "
currying", porque la utilicé ampliamente; pero Schönfinkel tuvo la idea unos 6 años antes que yo.
- ↑ "Currying Schonfinkelling" . Wiki del repositorio de patrones de Portland . Cunningham & Cunningham, Inc. 6 de mayo de 2012.
- ^ Barendregt, Henk; Barendsen, Erik (marzo de 2000) [diciembre de 1998]. Introducción al cálculo Lambda (PDF) ( edición revisada). pag. 8.
- ↑ Curry, Haskell ; Feys, Robert (1958). Lógica combinatoria . Vol. I (2.ª ed.). Ámsterdam, Países Bajos: North-Holland Publishing Company.
- ↑ Hutton, Graham; Jones, Mark P., eds. (noviembre de 2002). "Preguntas frecuentes sobre comp.lang.functional, 3. Temas técnicos, 3.2. Currificación" . Departamento de Informática de la Universidad de Nottingham .
- ↑ Heim, Irene; Kratzer, Angelika (2 de enero de 1998). Semántica en la gramática generativa (PDF) . Malden, Massachusetts: Blackwell Publishers, un sello editorial de Wiley. ISBN 0-631-19712-5.
- ↑ Turner, David (1 de junio de 1997). "Lenguaje de programación, ¿currying o Schonfinkeling?, n.° 9/14" . Computer Programming Language Forum . Archivado del original el 3 de marzo de 2022. Recuperado el 3 de marzo de 2022 .
- 1 2 de mayo, Jon Peter (1999). Un curso conciso de topología algebraica (PDF) . Conferencias de matemáticas de Chicago. Chicago, Ill.: University of Chicago Press. pp. 39–55 . ISBN 0-226-51183-9OCLC 41266205
- ↑ "espacio topológico generado de forma compacta" . nLab . 28 de mayo de 2023.
- ↑ 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 Universidad Memorial de Terranova. "Categorías monoidales cerradas, cartesianas cerradas y convenientes de espacios topológicos" (PDF) . Pacific Journal of Mathematics . 88 (1). Berkeley, California: Mathematical Sciences Publishers: 35– 53. doi : 10.2140/pjm.1980.88.35 . eISSN 1945-5844 . ISSN 0030-8730 .
- ↑ "categoría conveniente de espacios topológicos" . nLab . 11 de agosto de 2023.
- 1 2 3 Rotman, Joseph Jonah (1988). «Capítulo 11». Introducción a la topología algebraica . Textos de posgrado en matemáticas; 119. Nueva York: Springer-Verlag. ISBN 978-0-387-96678-6OCLC 17383909
- ↑ 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. revisada). North-Holland, un sello editorial de Elsevier. ISBN 978-0-444-87508-2.
- ↑ Mac Lane, Saunders ; Moerdijk, Ieke (1992). «Capítulo I. Categorías de functores; secciones 7. Cálculo proposicional, 8. Álgebras de Heyting y 9. Cuantificadores como adjuntos» . Haz en geometría y lógica: una primera introducción a la teoría de topos . Nueva York: Springer-Verlag, parte de Springer Science & Business Media. págs. 48–57 . ISBN 978-0-387-97710-2.
- ↑ Abramsky, Samson; Coecke, Bob (5 de marzo de 2007). «Una semántica categórica de protocolos cuánticos». Logic in Computer Science (LICS 2004): Actas del 19.º Simposio Anual del IEEE, Turku, Finlandia, 2004] . IEEE Computer Society Press. págs. 415–425 . arXiv : quant-ph/0402130 . doi : 10.1109/LICS.2004.1319636 . ISBN 978-0-7695-2192-3.
- ↑ Lee, G. Kay (15 de mayo de 2013). "Programación funcional en 5 minutos" . Diapositivas .
Enlaces externos
- Funciones de orden superior
- Programación funcional
- Cálculo lambda