Classe de fonctions calculables par Coq

22

Puisqu'il ne permet pas le calcul non terminal, Coq n'est pas nécessairement Turing-complete. Quelle est la classe de fonctions que Coq peut calculer? (en existe-t-il une caractérisation intéressante?)

Steve
la source

Réponses:

18

Benjamin Werner a prouvé l'interprétabilité mutuelle de ZFC avec d'innombrables inaccessibles et le calcul des constructions inductives, dans son article Sets in Types, Types in Sets .

Cela signifie, en gros, que toute fonction dont on peut montrer qu'elle est totale dans ZFC avec un nombre innombrable d'inaccessibles peut être définie dans Coq. Donc, à moins que vous ne soyez un théoricien des ensembles travaillant sur de grands cardinaux, il est peu probable qu'aucune fonction calculable que vous ayez jamais souhaitée ne puisse être définie dans Coq.

Neel Krishnaswami
la source
7
Sauf un interprète Coq ...
Jules
6
En fait, vous pouvez implémenter un interpréteur Coq (en effet, des fonctions récursives générales arbitraires) à l'intérieur de Coq. Si CIC est cohérent, vous ne pourrez pas prouver que l'interprète est une fonction totale, bien sûr, mais vous pouvez certainement l'implémenter.
Neel Krishnaswami
2
Vous pouvez utiliser la monade d'élévation constructive, , pour écrire des fonctions récursives générales. Votre vérificateur de type aura alors le type \ mathsf {context} \ to \ mathsf {term} \ to \ mathsf {type} \ to \ mathsf {bool} _ \ bot . Il s'agit essentiellement de l'approche Bove / Capretta. (Voir aussi Benton, Kennedy et Varming, «Some Domain Theory and Denotational Semantics in Coq», dl.acm.org/citation.cfm?id=1616077.1616090. )Aνα.A+αcontexttermtypebool
Neel Krishnaswami
1
@Neel: c'est de la triche. Et pour une bonne raison, sinon nous aurions une incohérence.
Andrej Bauer
2
C'est de la triche parce que la fonction d'évaluation est censée évaluer les choses, pas vous donner une non-réponse.
Andrej Bauer