Coq hat eine Art Prop of Proof irrelevante Aussagen, die während der Extraktion verworfen werden. Was ist der Grund dafür, wenn wir Coq nur für Proofs verwenden? Prop ist aussagekräftig, daher leitet Coq jedoch automatisch Universumsindizes ein, und wir können stattdessen überall Type (i) verwenden. Es scheint, dass Prop alles sehr kompliziert macht.
Ich habe gelesen, dass es in Luos Buch philosophische Gründe gibt, Set und Prop zu trennen, aber ich habe sie nicht in dem Buch gefunden. Was sind Sie?
coq
dependent-type
Konstantin Solomatov
quelle
quelle
Antworten:
P r o p ist sehr nützlich für das Extrahieren von Programmen, da es uns ermöglicht, Teile von Code zu löschen, die unbrauchbar sind. Um zum Beispiel einen Sortieralgorithmus extrahieren wir die Aussage beweisen würden „für jede Liste ℓ gibt es eine Liste k , so dass k bestellt und k ist eine permutatiom von l “. Wenn wir dies in Coq aufschreiben und ohne P r o p extrahieren, erhalten wir:Prop ℓ k k k ℓ Prop
sort
verify
pi
pi
Während das zusätzliche Zeug nicht völlig nutzlos ist, wollen wir es in vielen Anwendungen loswerden und einfach behaltenProp k k ℓ ℓ k
sort
. Dies kann erreicht werden, wenn wir mit P r o p angeben, " k ist geordnet" und " k ist eine Permutation von ℓ ", aber nicht "für alle ℓ gibt es k ".Im Allgemeinen besteht eine übliche Methode zum Extrahieren von Code darin, eine Anweisung der Form ∀ x : A zu betrachten.∃ y : B.ϕ ( x , y ) wobei x eingegeben wird, y ausgegeben wird und ϕ ( x , y ) erklärt, was es bedeutet, dass y eine korrekte Ausgabe ist. (In dem obigen Beispiel A und B sind die Arten von Listen und φ ( l , k ) ist " k bestellt wirdund k ist eine Permutation von l ") Wenn φ in ist P r o p dann Extraktion eine Karte gibt f :∀x:A.∃y:B.ϕ(x,y) x y ϕ(x,y) y A B ϕ(ℓ,k) k k ℓ ϕ Prop A → B so, dass ϕ ( x , f ( x ) ) für alle x ∈ A gilt . Wenn φ in ist S e t dann bekommen wir auch eine Funktion g , so dass g ( x ) ist der Beweisdass φ ( x , f ( x ) ) gilt, für alle x ∈ Af:A→B ϕ(x,f(x)) x∈A ϕ Set g g(x) ϕ(x,f(x)) x∈A . Oft ist der Beweis rechnerisch nutzlos und wir ziehen es vor, ihn loszuwerden, besonders wenn er tief in einer anderen Anweisung verschachtelt ist. P r o p gibt uns die Möglichkeit dazu.Prop
Hinzugefügt am 29.07.2015: Es gibt eine Frage, ob wir P r o p ganz vermeiden könnten, indem wir automatisch "nutzlos extrahierten Code" wegoptimieren . Bis zu einem gewissen Grad können wir das tun, zum Beispiel ist der gesamte Code, der aus dem negativen Fragment der Logik extrahiert wurde (Material, das aus dem leeren Typ, dem Einheitentyp und den Produkten besteht), unbrauchbar, da er nur um die Einheit herumgemischt wird. Bei der Verwendung von P r o p müssen jedoch echte Designentscheidungen getroffen werden . Hier ist ein Beispiel simpe, wobei Σ bedeutet , dass wir in sind T y p e und ∃ bedeutet , dass wir in P r o p . Wenn wir aus extrahierenProp Prop Σ Type ∃ Prop Πn:NΣb:{0,1}Σk:Nn=2⋅k+b
quelle
PropProp is impredicative, which create a very expressive proof system. However it is "too" expressive in the following sense:
impredicative Prop+large elimination+excluded middle
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.
quelle
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.quelle