Decidabilidad de inferencia de tipos y verificación de tipos en MLTT

9
  1. En una teoría intuitiva de tipos: parte predictiva de Martin-Löf, se demuestra que la comprobación de tipo es decidible sujeto a ser escribible en primer lugar, demostrando un teorema de normalización para términos de tipo cerrado. Por otro lado, lo he visto escrito en varios lugares (Wikipedia, Nördstrom, etc.) que la verificación de tipos en MLTT (intensional) es decidible; ¿están restringiendo implícitamente a términos que se pueden escribir?una:UNAuna

  2. ¿Se sabe algo acerca de la capacidad de decisión de inferencia de tipos o verificación de tipos en MLTT intensivo si no nos limitamos a los términos que se pueden escribir? Por ejemplo, tal vez hay un proceso de decisión que reconoce términos no tipificables, por ejemplo, normalizando a una forma que no corresponde a ninguno de los constructores, o mostrando que no hay una secuencia no periódica de reducciones para ningún término no tipificable.

    No he podido encontrar mucho en la literatura.

Josh Chen
fuente

Respuestas:

9

Ciertamente el problema de decisión

Dado un (pre) término ¿Existe un tipo A tal que a : A sea ​​derivable en MLTT?unaUNAuna:UNA

A veces escrito (y llamado el problema de inferencia de tipos ) es decidible, lo que quiere decir que no importa si un está bien escrito o no para obtener una respuesta. De hecho, ¡todos los verificadores de pruebas basados ​​en MLTT implementan alguna versión de este algoritmo de decisión!una : ?una

Obviamente, el problema en un contexto que no esté vacía ( ) Es decidible, así, por lo general que necesita para resolver este último para resolver el anterior.Γuna : ?

Esto debería responder a las preguntas 1 y 2. El algoritmo no implica normalizar , lo que en general sería una mala noticia, ya que es indecidible si un término sin tipo se normaliza a algo. Sin embargo, el algoritmo de comprobación de tipos no involucrar a la normalización de los tipos , que son de construcción bien-escrito ellos mismos.una

Como resultado, la normalización de términos bien tipados es una condición necesaria para que el problema de inferencia de tipo sea decidible.

Es posible que desee consultar Nordström, Petersson y Smith para una introducción.


No conozco ninguna descripción genérica de un algoritmo de inferencia de tipos para normalizar las teorías de tipos, aunque Pollack ofrece una descripción bastante buena (aunque el estado del arte ha mejorado) en Typechecking en Pure Type Systems .

cody
fuente
¿Qué hay de los pretipos (términos que denotan un tipo)? Puede valer la pena aclarar su estado también.
Andrej Bauer
Gracias Cody, ¿te refieres a los algoritmos de verificación de tipo implementados por asistentes de pruebas como ALF y Coq? Según tengo entendido, esos son algoritmos para las variantes específicas de MLTT en las que se basan (CIC para Coq, algo más para ALF), pero no tengo claro cómo se pueden usar para verificar el MLTT específico de '73. En particular, si la jerarquía del universo u otras diferencias en detalles pueden cambiar algo ...
Josh Chen
... ¿O los algoritmos son lo suficientemente generales como para cubrir estas diferencias? Tengo problemas para encontrar resultados en tal generalidad; Todo lo que parece estar apareciendo en mi búsqueda de literatura son resultados muy específicos, a menudo especialmente adaptados a la teoría subyacente de algún asistente de pruebas.
Josh Chen el
1
@JoshChen los algoritmos son en su núcleo muy generales, ya que implican una búsqueda dirigida por tipo, alternando con pasos de normalización en términos bien escritos, como explicó Andrej. Desgraciadamente, no conozco una descripción genérica del algoritmo, aunque agregaré una referencia parcial a mi respuesta.
cody
1
@JoshChen No aclaran, pero pueden estar refiriéndose a inferir tipos para términos de "estilo curry", para los cuales la inferencia es indecidible. Entro
cody
8

Me gustaría complementar la respuesta con cody mediante una observación general que transmita mi comprensión de por qué funcionan los algoritmos de verificación de tipo.

Para una amplia clase de teorías de tipo, la verificación de tipo o inferencia se realiza de tal manera que nunca intentemos normalizar un término, a menos que hayamos establecido de antemano que está bien escrito. Del mismo modo, nunca intentamos normalizar un tipo, a menos que ya hayamos establecido que es un tipo. Debido a esto, podemos estar seguros de que la normalización terminará (lo que requiere una prueba por separado).

Uno tiene que mirar algoritmos específicos y ver que realmente funcionan de esta manera, pero lo hacen. Solo quería decir qué los hace funcionar. O mejor, esa es la razón por la que dejan de funcionar.

Andrej Bauer
fuente