2015-09-20 10 views
7

Ich habe viele Coq-Taktiken gesehen, die sich in der Funktion überlappen.Gibt es eine minimale vollständige Taktik in Coq?

Zum Beispiel, wenn Sie den genauen Abschluss in der Hypothese haben, können Sie assumption, apply, exact, trivial, und vielleicht andere. Andere Beispiele sind destruct und induction für nicht induktive Typen (??).

Meine Frage ist:

Gibt es einen minimal Satz von Grunde Taktik (das schließt auto und seine dergleichen), die abgeschlossen ist, in dem Sinne, dass dieser Satz jede Coq beweisen verwendet werden kann, -beweisbare Sätze über Funktionen von natürlichen Zahlen?

Die Taktik in diesem minimalen vollständigen Satz wäre ideal grundlegend, so dass jeder nur eine (oder zwei) Funktion ausführt und man leicht verstehen kann, was er tut.

+3

Wegen des Curry-Howard-Isomorphismus entspricht jeder Beweis, den Sie mit einer Taktik konstruieren können, einem Begriff. Somit ist die "exakte" Taktik ausreichend, um ein Ziel zu beweisen. Wenn Sie den Begriff nicht auf einmal erstellen möchten, können Sie stattdessen "verfeinern" verwenden. –

Antwort

6

Ein Beweis in Coq ist nur ein Begriff des richtigen Typs. Taktiken helfen Ihnen, diese Begriffe zu bilden, indem Sie kleinere Unterbegriffe in komplexere unterteilen. Daher würde der minimale Satz von grundlegenden Taktiken nur die Taktik exact enthalten, wie Konstantin erwähnte.

Die Taktik refine ermöglicht es Ihnen, direkt Proofterme zu geben, aber mit Löchern, die zu Unterzielen führen. Grundsätzlich ist jede Taktik nur ein Beispiel für die refine Taktik.

Wenn Sie jedoch zunächst nur eine minimale Menge von Taktik betrachten wollen, würde ich intro{s}, exists, reflexivity, symmetry, apply, rewrite, revert, destruct und induction betrachtet. inversion könnte auch ziemlich schnell nützlich sein.

+0

'reflexivität' ist nur' apply eq_refl', wenn Sie keine Setoids verwenden, und Symmetrie ist auch eine Anwendung; exists ist 'constructor', was wiederum nur' apply' ist. Verwenden Sie häufig "Zurück"? Auf der anderen Seite wären "rewrite" und "simpl" wahrscheinlich gute Ergänzungen zu dieser Liste. –

+2

Man könnte sagen "Rewrite" sagen, es ist nur ein Lemma mit der richtigen Form anwenden. Wie ich schon sagte, fällt alles auf "verfeinern" (direkt den Probedruck schreiben). Aber ich gebe zu, 'rewrite' sollte in der Liste stehen. Ich benutze oft eine Rückstellung, weil ich eine Menge Induktion mit abhängigen Typen mache, wo es sehr hilft. – Vinz

+2

Ah, abhängige Typen würden eine Menge '' revert''s verwenden, tatsächlich: 'rewrite' ist in der Tat oft nur eine Anwendung eines induktiven Prinzips, aber ich benutze das praktisch nie. –