¿Es cierto que agregar axiomas al CIC podría tener influencias negativas en el contenido computacional de definiciones y teoremas? Entiendo que, en el comportamiento normal de la teoría, cualquier término cerrado se reducirá a su forma canónica normal, por ejemplo, si es verdadero, entonces debe reducirse a un término de la forma . Pero cuando postulamos un axioma, digamos la función axioma de extensionalidad , simplemente agregamos una nueva constante al sistemafunext
eso solo "mágicamente" produce una prueba de de cualquier prueba de , sin ningún significado computacional ( en el sentido de que no podemos extraer ningún código de ellos? )
Pero, ¿por qué es esto "malo"?
Porque funext
, leí en esta entrada de coq y en esta pregunta de mathoverflow que hará que el sistema pierda la canonicidad o la verificación decidible. La entrada de coq parece presentar un buen ejemplo, pero todavía me gustaría obtener más referencias al respecto, y de alguna manera no puedo encontrar ninguna.
¿Cómo es que agregar axiomas adicionales podría causar que CIC tenga un comportamiento peor? Cualquier ejemplo práctico sería genial. (Por ejemplo, ¿el axioma de la univalencia?) Me temo que esta pregunta es demasiado blanda, pero si alguien pudiera arrojar algo de luz sobre esos temas o darme algunas referencias, ¡sería genial!
PD: La entrada de Coq menciona que "Thierry Coquand ya observó que la coincidencia de patrones sobre familias intensivas es inconsistente con la extensionalidad a mediados de los años 90". ¿Alguien sabe en qué papel o algo?
Prop
en los asistentes de prueba Coq, que corresponden a afirmaciones puramente lógicas; Prop-Irrelevance corresponde ignorar la estructura interna de las pruebas de esas declaraciones) son iguales, se puede hacer principalmente sin preocuparse más por ellas, no necesita afectar el cálculo, pero debe hacerse con cuidado para no hacer que el sistema tampoco sea inconsistente.Para entender por qué extender un probador de teoremas con algunos axiomas puede causar problemas, también es interesante ver cuándo es benigno hacerlo. Se me ocurren dos casos y ambos tienen que ver con el hecho de que no nos importa el comportamiento computacional de los postulados.
En la teoría de tipo observacional, es posible postular una prueba de cualquier coherencia
Prop
sin perder la canonicidad. De hecho, todas las pruebas se consideran iguales y el sistema hace cumplir esto al negarse por completo a mirar los términos. Como consecuencia, el hecho de que una prueba fue construida a mano o simplemente postulada no tiene ninguna consecuencia. Un ejemplo típico sería la prueba de la "cohesión": si tenemos una prueba deeq
queA = B : Type
a continuación, para cualquiert
tipoA
,t == coerce A B eq t
dondecoerce
simplemente transporta a lo largo de un período de prueba de una igualdad.En MLTT, uno puede postular cualquier axioma negativo constante sin pérdida de canonicidad . La intuición detrás de esto es que los axiomas negativos (axiomas de la forma
A -> False
) solo se usan para descartar ramas irrelevantes. Si el axioma es consistente, entonces solo se puede usar en ramas que de hecho son irrelevantes y, por lo tanto, nunca se tomarán al evaluar los términos.fuente
Un ejemplo práctico de un axioma que se comporta mal se pregunta, ¿qué pasa con esto?
El documento de Coquand mencionado podría ser [1], donde muestra que la ITT dependiente (teoría de tipo intuicionista de Martin-Löf) extendida con coincidencia de patrones le permite probar UIP (axioma de unicidad de las pruebas de identidad ). Más tarde, Streicher y Hoffmann [2] presentan un modelo de ITT que falsifica UIP. Por lo tanto, la coincidencia de patrones no es una extensión conservadora de ITT.
T. Coquand, coincidencia de patrones con tipos dependientes .
M. Hofmann, T. Streicher, La interpretación grupal de la teoría de tipos .
fuente