Coq a le type Prop de preuve des propositions non pertinentes qui sont rejetées lors de l'extraction. Quelle est la raison de cela si nous utilisons Coq uniquement pour les preuves. Prop est imprédicatif, donc Prop: Prop, cependant, Coq déduit automatiquement les index d'univers et nous pouvons utiliser le type (i) à la place partout. Il semble que Prop complique beaucoup tout.
J'ai lu qu'il y avait des raisons philosophiques pour séparer Set et Prop dans le livre de Luo, cependant, je ne les ai pas trouvées dans le livre. Que sont-ils?
coq
dependent-type
Konstantin Solomatov
la source
la source
Réponses:
est très utile pour l'extraction de programme car il nous permet de supprimer des parties de code inutiles. Par exemple, pour extraire un algorithmetri nous prouvons la déclaration « pour chaque liste ℓ il y a une liste k tel que k est ordonnée et k est un permutatiom de ℓ ». Si nous écrivons ceci en Coq et extrayons sans utiliser P r o p , nous aurons:Prop ℓ k k k ℓ Prop
sort
verify
et vérifie qu'elle est triée, etpi
pi
Bien que le contenu supplémentaire ne soit pas totalement inutile, dans de nombreuses applications, nous souhaitons nous en débarrasser et le conserverProp k k ℓ ℓ k
sort
. Ceci peut être accompli si nous utilisons à l' état « k est ordonnée » et « k est une permutation de ℓ », mais pas « pour tous ℓ il y a k ».En général, une manière commune au code extrait est de considérer une déclaration de la forme∀x:A.∃y:B.ϕ(x,y) where x is input, y is output, and ϕ(x,y) explains what it means for y to be a correct output. (In the above example A and B are the types of lists and ϕ(ℓ,k) is "k is ordered and k is a permutation of ℓ .") If ϕ is in Prop then extraction gives a map f:A→B such that ϕ(x,f(x)) holds for all x∈A . If ϕ is in Set then we also get a function g such that g(x) is the proof that ϕ(x,f(x)) holds, for all x∈A . Often the proof is computationally useless and we prefer to get rid of it, especially when it is nested deeply inside some other statement. Prop gives us the possibility to do so.
la source
is inconsistent. Usually you want to keep the possibility to add the excluded middle, so one solution is to keep large elimination and make Prop predicative. The other is to suppress large elimination.
Coq did both! They renamed the predicative Prop to Set, and disabled large elimination in Prop.
The expressiveness gained by impredicativity is "reassuring" in the sense 99% of "reasonable" mathematics can be formalized with it, and it is known to be consistent relative to set theory. This makes it likely they won't weaken it to something like Agda, which only has predicative universes.
la source
Prop : Prop
, that would be inconsistent. Rather quantifications over all propositions is again a proposition.Even if you are not interested in extracting programs, the fact that
Prop
is impredicative allows you to build some models which you can't build using a predicative tower of universes. IIRC Thorsten Altenkirch has a model of System F using Coq's impredicativity.la source