En matemáticas y ciencias de la computación teórica , una teoría de tipos es la presentación formal de un sistema de tipos específico . [a] La teoría de tipos es el estudio académico de los sistemas de tipos.
Algunas teorías de tipos sirven como alternativas a la teoría de conjuntos como fundamento de las matemáticas . Dos teorías de tipos influyentes que se han propuesto como fundamentos son:
La mayoría de los sistemas informáticos de redacción de pruebas utilizan una teoría de tipos como base . Uno de los más comunes es el Cálculo de construcciones inductivas de Thierry Coquand .
La teoría de tipos fue creada para evitar una paradoja en una ecuación matemática basada en la teoría de conjuntos ingenua y la lógica formal . La paradoja de Russell (descrita por primera vez en Los fundamentos de la aritmética de Gottlob Frege ) es que, sin axiomas propios, es posible definir el conjunto de todos los conjuntos que no son miembros de sí mismos; este conjunto se contiene a sí mismo y no se contiene a sí mismo. Entre 1902 y 1908, Bertrand Russell propuso varias soluciones a este problema.
En 1908, Russell llegó a una teoría ramificada de tipos junto con un axioma de reducibilidad , ambos aparecidos en los Principia Mathematica de Whitehead y Russell publicados en 1910, 1912 y 1913. Este sistema evitaba las contradicciones sugeridas en la paradoja de Russell al crear una jerarquía de tipos y luego asignar a cada entidad matemática concreta un tipo específico. Las entidades de un tipo dado se construían exclusivamente a partir de subtipos de ese tipo, [b] impidiendo así que una entidad se definiera utilizándose a sí misma. Esta resolución de la paradoja de Russell es similar a los enfoques adoptados en otros sistemas formales, como la teoría de conjuntos de Zermelo-Fraenkel . [3]
La teoría de tipos es particularmente popular en conjunción con el cálculo lambda de Alonzo Church . Un ejemplo temprano notable de teoría de tipos es el cálculo lambda de tipos simples de Church . La teoría de tipos de Church [4] ayudó al sistema formal a evitar la paradoja de Kleene-Rosser que afligía al cálculo lambda original sin tipos. Church demostró [c] que podía servir como base de las matemáticas y se lo denominó lógica de orden superior .
En la literatura moderna, la "teoría de tipos" se refiere a un sistema tipificado basado en el cálculo lambda. Un sistema influyente es la teoría de tipos intuicionista de Per Martin-Löf , que se propuso como base para las matemáticas constructivas . Otro es el cálculo de construcciones de Thierry Coquand , que se utiliza como base en Coq , Lean y otros asistentes de pruebas por computadora . La teoría de tipos es un área activa de investigación, una de cuyas direcciones es el desarrollo de la teoría de tipos de homotopía .
El primer asistente de pruebas por ordenador, llamado Automath , utilizó la teoría de tipos para codificar las matemáticas en un ordenador. Martin-Löf desarrolló específicamente la teoría de tipos intuicionista para codificar todas las matemáticas y que sirviera como una nueva base para las matemáticas. Actualmente se están realizando investigaciones sobre los fundamentos matemáticos utilizando la teoría de tipos de homotopía .
Los matemáticos que trabajaban en la teoría de categorías ya tenían dificultades para trabajar con la teoría de conjuntos de Zermelo-Fraenkel, ampliamente aceptada . Esto condujo a propuestas como la Teoría elemental de la categoría de conjuntos (ETCS) de Lawvere. [6] La teoría de tipos de homotopía continúa en esta línea utilizando la teoría de tipos. Los investigadores están explorando las conexiones entre los tipos dependientes (especialmente el tipo identidad) y la topología algebraica (específicamente la homotopía ).
Gran parte de la investigación actual sobre la teoría de tipos se basa en comprobadores de pruebas , asistentes de pruebas interactivos y demostradores de teoremas automáticos . La mayoría de estos sistemas utilizan una teoría de tipos como base matemática para codificar pruebas, lo que no es sorprendente, dada la estrecha conexión entre la teoría de tipos y los lenguajes de programación:
Muchas teorías de tipos están respaldadas por LEGO e Isabelle . Isabelle también respalda fundamentos además de las teorías de tipos, como ZFC . Mizar es un ejemplo de un sistema de prueba que solo respalda la teoría de conjuntos.
Cualquier análisis de programas estáticos , como los algoritmos de verificación de tipos en la fase de análisis semántico del compilador , tiene una conexión con la teoría de tipos. Un buen ejemplo es Agda , un lenguaje de programación que utiliza UTT (teoría unificada de tipos dependientes de Luo) para su sistema de tipos.
El lenguaje de programación ML fue desarrollado para manipular teorías de tipos (ver LCF ) y su propio sistema de tipos fue fuertemente influenciado por ellas.
La teoría de tipos también se utiliza ampliamente en las teorías formales de la semántica de los lenguajes naturales , [7] [8] especialmente la gramática de Montague [9] y sus descendientes. En particular, las gramáticas categoriales y las gramáticas de pregrupos utilizan ampliamente los constructores de tipos para definir los tipos ( sustantivo , verbo , etc.) de las palabras.
La construcción más común toma los tipos básicos y para individuos y valores de verdad , respectivamente, y define el conjunto de tipos recursivamente de la siguiente manera:
Un tipo complejo es el tipo de funciones de entidades de tipo a entidades de tipo . Por lo tanto, se tienen tipos como que se interpretan como elementos del conjunto de funciones de entidades a valores de verdad, es decir, funciones indicadoras de conjuntos de entidades. Una expresión de tipo es una función de conjuntos de entidades a valores de verdad, es decir, un (función indicadora de un) conjunto de conjuntos. Este último tipo se toma de manera estándar como el tipo de cuantificadores del lenguaje natural , como everybody o nobody ( Montague 1973, Barwise y Cooper 1981). [10]
La teoría de tipos con registros es un marco de representación semántica formal que utiliza registros para expresar los tipos de la teoría de tipos . Se ha utilizado en el procesamiento del lenguaje natural , principalmente en semántica computacional y sistemas de diálogo . [11] [12]
Gregory Bateson introdujo una teoría de tipos lógicos en las ciencias sociales; sus nociones de doble vínculo y niveles lógicos se basan en la teoría de tipos de Russell.
Una teoría de tipos es una lógica matemática , es decir, es una colección de reglas de inferencia que dan como resultado juicios . La mayoría de las lógicas tienen juicios que afirman "La proposición es verdadera" o "La fórmula es una fórmula bien formada ". [13] Una teoría de tipos tiene juicios que definen tipos y los asignan a una colección de objetos formales, conocidos como términos. Un término y su tipo a menudo se escriben juntos como .
Un término en lógica se define recursivamente como un símbolo de constante , variable o aplicación de función , donde un término se aplica a otro término. Los símbolos de constante pueden incluir el número natural , el valor booleano y funciones como la función sucesora y el operador condicional . Por lo tanto, algunos términos pueden ser , , y .
La mayoría de las teorías de tipos tienen 4 juicios:
Los juicios pueden derivarse de suposiciones. Por ejemplo, se podría decir "suponiendo que es un término del tipo y es un término del tipo , se sigue que es un término del tipo ". Tales juicios se escriben formalmente con el símbolo del torniquete .
Si no hay suposiciones, no habrá nada a la izquierda del torniquete.
La lista de supuestos que aparece a la izquierda es el contexto de la sentencia. Las letras griegas mayúsculas, como y , son opciones comunes para representar algunos o todos los supuestos. Por lo tanto, los 4 juicios diferentes se escriben generalmente de la siguiente manera.
Algunos libros de texto utilizan un triple signo igual para enfatizar que se trata de una igualdad de juicio y, por lo tanto, de una noción extrínseca de igualdad. [14] Los juicios imponen que cada término tiene un tipo. El tipo restringirá qué reglas se pueden aplicar a un término.
Las reglas de inferencia de una teoría de tipos indican qué juicios se pueden hacer, en función de la existencia de otros juicios. Las reglas se expresan como una deducción de estilo Gentzen utilizando una línea horizontal, con los juicios de entrada requeridos sobre la línea y el juicio resultante debajo de la línea. [15] Por ejemplo, la siguiente regla de inferencia establece una regla de sustitución para la igualdad de juicio. Las reglas son sintácticas y funcionan reescribiendo . Las metavariables , , , , y pueden consistir en términos y tipos complejos que contienen muchas aplicaciones de funciones, no solo símbolos individuales.
Para generar un juicio particular en la teoría de tipos, debe haber una regla para generarlo, así como reglas para generar todas las entradas requeridas de esa regla, y así sucesivamente. Las reglas aplicadas forman un árbol de prueba , donde las reglas superiores no necesitan suposiciones. Un ejemplo de una regla que no requiere ninguna entrada es una que establece el tipo de un término constante. Por ejemplo, para afirmar que hay un término de tipo , se escribiría lo siguiente.
En general, la conclusión deseada de una prueba en teoría de tipos es la de habitabilidad del tipo . [16] El problema de decisión de habitabilidad del tipo (abreviado por ) es:
La paradoja de Girard muestra que la presencia de tipos está estrechamente relacionada con la consistencia de un sistema de tipos con correspondencia Curry-Howard. Para que sea sólido, un sistema de este tipo debe tener tipos no presentes.
Una teoría de tipos suele tener varias reglas, incluidas las siguientes:
Además, para cada tipo "por regla", hay 4 tipos diferentes de reglas.
Para encontrar ejemplos de reglas, un lector interesado puede consultar el Apéndice A.2 del libro Teoría de tipos de homotopía , [14] o leer la Teoría de tipos intuicionista de Martin-Löf. [17]
El marco lógico de una teoría de tipos guarda cierta similitud con la lógica intuicionista o constructiva. Formalmente, la teoría de tipos suele citarse como una implementación de la interpretación de Brouwer-Heyting-Kolmogorov de la lógica intuicionista. [17] Además, se pueden establecer conexiones con la teoría de categorías y los programas informáticos .
Cuando se utilizan como base, ciertos tipos se interpretan como proposiciones (enunciados que se pueden demostrar), y los términos que habitan en el tipo se interpretan como pruebas de esa proposición. Cuando algunos tipos se interpretan como proposiciones, existe un conjunto de tipos comunes que se pueden usar para conectarlos y hacer un álgebra booleana a partir de tipos. Sin embargo, la lógica no es lógica clásica sino lógica intuicionista , es decir, no tiene la ley del tercio excluido ni la doble negación .
Bajo esta interpretación intuicionista, existen tipos comunes que actúan como operadores lógicos:
Como la ley del tercero excluido no se cumple, no hay término de tipo . Asimismo, la doble negación no se cumple, por lo que no hay término de tipo .
Es posible incluir la ley del tercio excluido y la doble negación en una teoría de tipos, mediante una regla o una suposición. Sin embargo, los términos pueden no ser computados hasta llegar a los términos canónicos y ello interferirá con la capacidad de determinar si dos términos son, en términos de juicio, iguales entre sí. [ cita requerida ]
Per Martin-Löf propuso su teoría de tipos intuicionista como base para las matemáticas constructivas . [13] Las matemáticas constructivas requieren que, al probar que "existe un con la propiedad ", se construya un particular y una prueba de que tiene la propiedad . En la teoría de tipos, la existencia se logra utilizando el tipo de producto dependiente, y su prueba requiere un término de ese tipo.
Un ejemplo de una prueba no constructiva es la prueba por contradicción . El primer paso es asumir que no existe y refutarlo por contradicción. La conclusión de ese paso es "no es el caso que no existe". El último paso es, por doble negación, concluir que existe. Las matemáticas constructivas no permiten el último paso de eliminar la doble negación para concluir que existe. [18]
La mayoría de las teorías de tipos propuestas como fundamentos son constructivas, y esto incluye la mayoría de las que utilizan los asistentes de demostración. [ cita requerida ] Es posible agregar características no constructivas a una teoría de tipos, mediante reglas o suposiciones. Estas incluyen operadores sobre continuaciones como call with current continuation . Sin embargo, estos operadores tienden a romper propiedades deseables como la canonicidad y la parametricidad .
La correspondencia Curry-Howard es la similitud observada entre la lógica y los lenguajes de programación. La implicación en la lógica es que "A B" se parece a una función del tipo "A" al tipo "B". Para una variedad de lógicas, las reglas son similares a las expresiones en los tipos de un lenguaje de programación. La similitud va más allá, ya que las aplicaciones de las reglas se parecen a los programas en los lenguajes de programación. Por lo tanto, la correspondencia a menudo se resume como "pruebas como programas".
La oposición entre términos y tipos también puede verse como una oposición entre implementación y especificación . Mediante la síntesis de programas , (la contraparte computacional de) la integración de tipos puede utilizarse para construir (todos o partes de) programas a partir de la especificación dada en forma de información de tipos. [19]
Muchos programas que trabajan con teoría de tipos (por ejemplo, los demostradores de teoremas interactivos) también realizan inferencia de tipos, lo que les permite seleccionar las reglas que el usuario desea, con menos acciones por parte del usuario.
Artículo principal: Teoría de categorías
Aunque la motivación inicial de la teoría de categorías estaba muy alejada del fundacionalismo, ambos campos resultaron tener profundas conexiones. Como escribe John Lane Bell : "De hecho, las categorías pueden ser vistas como teorías de tipos de un cierto tipo; este hecho por sí solo indica que la teoría de tipos está mucho más relacionada con la teoría de categorías que con la teoría de conjuntos". En resumen, una categoría puede ser vista como una teoría de tipos al considerar sus objetos como tipos (o clases), es decir, "a grandes rasgos, una categoría puede ser considerada como una teoría de tipos despojada de su sintaxis". De este modo se desprenden varios resultados significativos: [20]
La interacción, conocida como lógica categórica , ha sido tema de investigación activa desde entonces; véase, por ejemplo, la monografía de Jacobs (1999).
La teoría de tipos de homotopía intenta combinar la teoría de tipos y la teoría de categorías. Se centra en las igualdades, especialmente las igualdades entre tipos. La teoría de tipos de homotopía se diferencia de la teoría de tipos intuicionista principalmente por su manejo del tipo de igualdad. En 2016, se propuso la teoría de tipos cúbicos, que es una teoría de tipos de homotopía con normalización. [21] [22]
Los tipos más básicos se denominan átomos, y un término cuyo tipo es un átomo se conoce como término atómico. Los términos atómicos comunes incluidos en las teorías de tipos son los números naturales , a menudo notados con el tipo , los valores lógicos booleanos ( / ), notados con el tipo , y las variables formales , cuyo tipo puede variar. [16] Por ejemplo, los siguientes pueden ser términos atómicos.
Además de los términos atómicos, la mayoría de las teorías de tipos modernas también permiten funciones . Los tipos de función introducen un símbolo de flecha y se definen de forma inductiva : si y son tipos, entonces la notación es el tipo de una función que toma un parámetro de tipo y devuelve un término de tipo . Los tipos de esta forma se conocen como tipos simples . [16]
Algunos términos pueden declararse directamente como de tipo simple, como el siguiente término, , que toma dos números naturales en secuencia y devuelve un número natural.
Estrictamente hablando, un tipo simple solo permite una entrada y una salida, por lo que una lectura más fiel del tipo anterior es que es una función que toma un número natural y devuelve una función de la forma . Los paréntesis aclaran que no tiene el tipo , que sería una función que toma una función de números naturales y devuelve un número natural. La convención es que la flecha es asociativa hacia la derecha , por lo que los paréntesis pueden eliminarse del tipo de . [16]
Se pueden construir nuevos términos de función utilizando expresiones lambda , y se denominan términos lambda. Estos términos también se definen de forma inductiva: un término lambda tiene la forma , donde es una variable formal y es un término, y su tipo se anota , donde es el tipo de , y es el tipo de . [16] El siguiente término lambda representa una función que duplica un número natural de entrada.
La variable es y (implícito a partir del tipo del término lambda) debe tener tipo . El término tiene tipo , lo que se ve al aplicar la regla de inferencia de aplicación de función dos veces. Por lo tanto, el término lambda tiene tipo , lo que significa que es una función que toma un número natural como argumento y devuelve un número natural.
A menudo se hace referencia a un término lambda [d] como una función anónima porque carece de nombre. El concepto de funciones anónimas aparece en muchos lenguajes de programación.
El poder de las teorías de tipos está en especificar cómo se pueden combinar los términos mediante reglas de inferencia . [4] Las teorías de tipos que tienen funciones también tienen la regla de inferencia de aplicación de función : si es un término de tipo , y es un término de tipo , entonces la aplicación de a , a menudo escrito , tiene tipo . Por ejemplo, si uno conoce las notaciones de tipo , , y , entonces las siguientes notaciones de tipo se pueden deducir de la aplicación de función. [16]
Los paréntesis indican el orden de las operaciones ; sin embargo, por convención, la aplicación de la función se deja asociativa , por lo que los paréntesis se pueden eliminar cuando sea apropiado. [16] En el caso de los tres ejemplos anteriores, todos los paréntesis podrían omitirse de los dos primeros, y el tercero podría simplificarse a .
Las teorías de tipos que admiten términos lambda también incluyen reglas de inferencia conocidas como -reducción y -reducción. Estas generalizan la noción de aplicación de funciones a términos lambda. Simbólicamente, se escriben
La primera reducción describe cómo evaluar un término lambda: si se aplica una expresión lambda a un término , se reemplaza cada ocurrencia de en con . La segunda reducción hace explícita la relación entre expresiones lambda y tipos de función: si es un término lambda, entonces debe ser que es un término de función porque se está aplicando a . Por lo tanto, la expresión lambda es equivalente a simplemente , ya que ambas toman un argumento y se aplican a él. [4]
Por ejemplo, el siguiente término puede ser -reducido.
En las teorías de tipos que también establecen nociones de igualdad para tipos y términos, existen reglas de inferencia correspondientes de -igualdad e -igualdad. [16]
El tipo vacío no tiene términos. El tipo se escribe normalmente o . Un uso del tipo vacío es la demostración de la habitabilidad del tipo . Si para un tipo , es consistente derivar una función del tipo , entonces es deshabitado , es decir, no tiene términos.
El tipo unidad tiene exactamente 1 término canónico. El tipo se escribe o y el término canónico único se escribe . El tipo unidad también se utiliza en pruebas de habitabilidad de tipos. Si para un tipo , es consistente derivar una función de tipo , entonces está habitada , es decir, debe tener uno o más términos.
El tipo booleano tiene exactamente 2 términos canónicos. El tipo se escribe normalmente o o . Los términos canónicos suelen ser y .
Los números naturales suelen implementarse al estilo de la aritmética de Peano . Existe un término canónico para el cero. Los valores canónicos mayores que cero utilizan aplicaciones iteradas de una función sucesora .
Algunas teorías de tipos permiten que los tipos de términos complejos, como funciones o listas, dependan de los tipos de sus argumentos. Por ejemplo, una teoría de tipos podría tener el tipo dependiente , que debería corresponder a listas de términos, donde cada término debe tener el tipo . En este caso, tiene el tipo , donde denota el universo de todos los tipos en la teoría.
Algunas teorías también permiten que los tipos dependan de términos en lugar de tipos. Por ejemplo, una teoría podría tener el tipo , donde es un término de tipo que codifica la longitud del vector . Esto permite una mayor especificidad y seguridad de tipo : las funciones con restricciones de longitud de vector o requisitos de coincidencia de longitud, como el producto escalar , pueden codificar este requisito como parte del tipo. [24]
Existen problemas fundamentales que pueden surgir a partir de tipos dependientes si una teoría no es cuidadosa con las dependencias permitidas, como la paradoja de Girard . El lógico Henk Barendegt introdujo el cubo lambda como marco para estudiar diversas restricciones y niveles de tipificación dependiente. [25]
El tipo de producto depende de dos tipos, y sus términos se escriben comúnmente como pares ordenados o con el símbolo . El par tiene el tipo de producto , donde es el tipo de y es el tipo de . El tipo de producto se define generalmente con funciones eliminadoras y .
Además de los pares ordenados, este tipo se utiliza para los conceptos de conjunción lógica e intersección .
El tipo suma depende de dos tipos y se escribe comúnmente con el símbolo o . En los lenguajes de programación, los tipos suma pueden denominarse uniones etiquetadas . El tipo se define generalmente con constructores y , que son inyectivos , y una función eliminadora tal que
El tipo suma se utiliza para los conceptos de disyunción y unión lógica .
Dos dependencias de tipo comunes , los tipos de producto dependiente y suma dependiente, permiten que la teoría codifique la lógica intuicionista BHK al actuar como equivalentes a la cuantificación universal y existencial ; esto se formaliza mediante la correspondencia de Curry-Howard . [24] Como también se conectan con productos y sumas en la teoría de conjuntos , a menudo se escriben con los símbolos y , respectivamente. [17] Los tipos de producto dependiente y suma aparecen comúnmente en tipos de funciones y se incorporan con frecuencia en lenguajes de programación. [26]
Por ejemplo, considere una función que toma a y un término de tipo , y devuelve la lista con el elemento al final. La anotación de tipo de dicha función sería , que se puede leer como "para cualquier tipo , pase a y un , y devuelva un ".
Los tipos de suma se observan en pares dependientes , donde el segundo tipo depende del valor del primer término. Esto surge de manera natural en la informática, donde las funciones pueden devolver diferentes tipos de salidas en función de la entrada. Por ejemplo, el tipo booleano suele definirse con una función eliminator , que toma tres argumentos y se comporta de la siguiente manera.
El tipo de retorno de esta función depende de su entrada. Si la teoría de tipos permite tipos dependientes, entonces es posible definir una función tal que
El tipo de puede entonces escribirse como .
Siguiendo la noción de correspondencia Curry-Howard, el tipo identidad es un tipo introducido para reflejar la equivalencia proposicional , a diferencia de la equivalencia juiciosa (sintáctica) que la teoría de tipos ya proporciona.
Un tipo de identidad requiere dos términos del mismo tipo y se escribe con el símbolo . Por ejemplo, si y son términos, entonces es un tipo posible. Los términos canónicos se crean con una función de reflexividad, . Para un término , la llamada devuelve el término canónico que habita en el tipo .
Las complejidades de la igualdad en la teoría de tipos la convierten en un tema de investigación activo; la teoría de tipos de homotopía es un área de investigación notable que se ocupa principalmente de la igualdad en la teoría de tipos.
Los tipos inductivos son una plantilla general para crear una gran variedad de tipos. De hecho, todos los tipos descritos anteriormente y más se pueden definir utilizando las reglas de los tipos inductivos. Dos métodos para generar tipos inductivos son la inducción-recursión y la inducción-inducción . Un método que solo utiliza términos lambda es la codificación Scott .
Algunos asistentes de prueba , como Coq y Lean , se basan en el cálculo para construcciones inductivas, que es un cálculo de construcciones con tipos inductivos.
La base más comúnmente aceptada para las matemáticas es la lógica de primer orden con el lenguaje y los axiomas de la teoría de conjuntos de Zermelo-Fraenkel con el axioma de elección , abreviado como ZFC. Las teorías de tipos que tienen suficiente expresividad también pueden actuar como base de las matemáticas. Existen varias diferencias entre estos dos enfoques.
Los defensores de la teoría de tipos también señalarán su conexión con las matemáticas constructivas a través de la interpretación BHK , su conexión con la lógica a través del isomorfismo Curry-Howard y sus conexiones con la teoría de categorías .
Los términos suelen pertenecer a un único tipo. Sin embargo, existen teorías que definen la "subtipificación".
El cálculo se lleva a cabo mediante la aplicación repetida de reglas. Muchos tipos de teorías son fuertemente normalizadoras , lo que significa que cualquier orden de aplicación de las reglas siempre terminará en el mismo resultado. Sin embargo, algunas no lo son. En una teoría de tipo normalizador, las reglas de cálculo unidireccionales se denominan "reglas de reducción" y la aplicación de las reglas "reduce" el término. Si una regla no es unidireccional, se denomina "regla de conversión".
Algunas combinaciones de tipos son equivalentes a otras combinaciones de tipos. Cuando las funciones se consideran "exponenciación", las combinaciones de tipos se pueden escribir de manera similar a las identidades algebraicas. [26] Por lo tanto, , , , , .
La mayoría de las teorías de tipos no tienen axiomas . Esto se debe a que una teoría de tipos se define por sus reglas de inferencia. Esto es una fuente de confusión para las personas familiarizadas con la teoría de conjuntos, donde una teoría se define tanto por las reglas de inferencia para una lógica (como la lógica de primer orden ) como por axiomas sobre conjuntos.
A veces, una teoría de tipos añade algunos axiomas. Un axioma es un juicio que se acepta sin derivación mediante las reglas de inferencia. A menudo se añaden para garantizar propiedades que no se pueden añadir de forma clara mediante las reglas.
Los axiomas pueden causar problemas si introducen términos sin una manera de calcularlos. Es decir, los axiomas pueden interferir con la propiedad normalizadora de la teoría de tipos. [27]
Algunos axiomas comúnmente encontrados son:
El axioma de elección no necesita ser añadido a la teoría de tipos, porque en la mayoría de las teorías de tipos puede ser derivado de las reglas de inferencia. Esto se debe a la naturaleza constructiva de la teoría de tipos, donde probar que un valor existe requiere un método para calcular el valor. El axioma de elección es menos poderoso en la teoría de tipos que en la mayoría de las teorías de conjuntos, porque las funciones de la teoría de tipos deben ser computables y, al estar impulsadas por la sintaxis, el número de términos en un tipo debe ser contable. (Véase Axioma de elección § En matemáticas constructivas .)
(x,y) -> x^5+y
como una función anónima. [23]{{cite journal}}
: CS1 maint: DOI inactive as of November 2024 (link)