2016-11-08 3 views
2

Ich frage mich, ob es eine Möglichkeit gibt, den Beweis Begriff (serialisiert über Print oder nicht) auf einer Ebene über den aktuellen Kontext (oder nur auf Primitiven) zu erhalten. Zum Beispiel Ausführen der folgendenEntpacken eines Beweisbegriffs in Coq

From mathcomp Require Import odd_order.PFsection14. 
Print Feit_Thompson. 

Ergebnisse in

Feit_Thompson = 
fun (gT : fingroup.FinGroup.type) 
    (G : fingroup.group_of (gT:=gT) 
     (ssreflect.Phant 
      (fingroup.FinGroup.arg_sort 
       (fingroup.FinGroup.base gT)))) => 
BGsection7.minSimpleOdd_ind no_minSimple_odd_group (gT:=gT) 
    (G:=G) 
    : forall (gT : fingroup.FinGroup.type) 
     (G : fingroup.group_of (gT:=gT) 
       (ssreflect.Phant 
        (fingroup.FinGroup.arg_sort 
         (fingroup.FinGroup.base gT)))), 
     is_true 
     (ssrnat.odd 
      (fintype.CardDef.card 
       (T:=fingroup.FinGroup.arg_finType 
        (fingroup.FinGroup.base gT)) 
       (ssrbool.mem 
        (finset.SetDef.pred_of_set 
        (fingroup.gval G))))) -> 
     is_true (nilpotent.solvable (fingroup.gval G)) 

aber ich mag die Kennungen (Theoreme und Definitionen) im Beweis Begriff wie no_minSimple_odd_group ihren Beweis verwendete Begriffe entfalten. Ich vermute, dass die Undurchsichtigkeit von Theoremen und Lemmas ein Hindernis für diesen Zweck darstellen könnte.

Die naive Lösung, die ich mir vorstellen kann, ist die rekursive Abfrage jeder Kennung über Print. Oder eine weniger naive (und weniger ideal wegen der Änderung der Sprache, die den Beweis Begriff darstellt) Lösung, über Programm-Extraktion.

+1

Würde 'Print All Dependencies Feit_Thompson.' Ihnen helfen? –

+0

definitiv hilfreich für das rekursive Drucken (meine naive Lösung), aber ich denke nicht, dass dies die Beweisbedingungen (Lambda-Begriffe) selbst zeigt. – Falcon

+1

Sie finden [this] (https://sympa.inria.fr/sympa/arc/coq-club/2016-11/msg00062.html) coq-clubs Thread nützlich. Sie erwähnen das Plugin [template-coq] (https://github.com/gmalecha/template-coq). –

Antwort

1

Ich bin mir nicht sicher, ob es einen direkten Weg gibt, aber es wäre nicht zu schwer zu implementieren, auf dieser Ebene ist die Deckkraft nur ein Flag und kann umgangen werden.

Allerdings frage ich mich, was Sie erreichen möchten?

Beachten Sie, dass die meisten Beweisbeweise, die auf diese Weise erhalten werden, nur schwer zu handhaben sind, besonders das Entfalten führt schnell zu einem schlechteren Exponentialgrößenauftrieb.

+0

Ja, sie könnten sehr groß sein, abhängig von der Menge der Konstanten, an denen die Entfaltung aufhört, aber ich möchte in der Lage sein, den gleichen Beweisterm bei verschiedenen Mengen von Primitiven (Konstanten) zu untersuchen. – Falcon

+0

Nach einem kurzen Blick bin ich mir fast sicher, dass du ein Plugin schreiben musst, das die 'Eval red' Taktik erweitert, um noch mehr zu entfalten, wenn du diese Funktionalität willst. – ejgallego

+1

danke für den Zeiger. Ich bin neugierig auf die Interaktion mit Coq programmgesteuert (als OCaml-Bibliothek?). Könnten Sie mir Referenzen vorschlagen? – Falcon