Ich habe mich gefragt, ob die Reihenfolge der induktiven Deklarationen von Bedeutung sein kann.
In Coq können Sie beispielsweise Folgendes definieren Nat
:
Inductive Nat :=
| O : Nat
| S : Nat -> Nat.
oder
Inductive Nat :=
| S : Nat -> Nat
| O : Nat.
Dies wird möglicherweise die Reihenfolge der Parameter im automatisch generierten Eliminator ändern, aber das ist keine große Sache.
Ich frage mich, ob es möglich ist, eine Erklärung wie zu schreiben
Inductive typewhereordermatters :=
| cons1 : type1
| cons2 : type2.
Wo type2
ist ein abhängiger Typ, abhängig von cons1
? (und in diesem Fall hätte das Schreiben der Erklärungen in der anderen Reihenfolge keine Bedeutung, da type2
sich darauf beziehen würde, cons1
welche noch nicht existiert).
quelle
circle
Typsloop
hängt der Typ des Konstruktors vombase
Konstruktor ab.Ist die Bestellung wichtig, wie Sie fragen? Nein.
Aber ist die Reihenfolge für die Funktionsweise des Proof-Assistenten völlig irrelevant? Wieder nein. In Matita, ein Beweis Assistenten sehr ähnlich Coq, in dem die Reihenfolge Bauer in einer induktiven Definition geschrieben tut Angelegenheit für die Typprüfung, speziell wenn Art einer Übereinstimmung Ausdruck zu überprüfen.
Matita muss zuerst überprüfen, ob alle Konstruktoren im Hauptteil des Spiels abgeglichen werden. Dazu werden die Konstruktoren in der Reihenfolge durchlaufen, in der sie deklariert sind. Dann muss der eigentliche Übereinstimmungsausdruck in umgekehrter Reihenfolge überprüft werden, wobei zuerst der Fall für den zuletzt deklarierten Konstruktor überprüft wird. Dieser Typ wird dann ausgeführt und verwendet, um die anderen Fälle zu überprüfen.
Dies wird sehr oft beim Schreiben eines großen Übereinstimmungsausdrucks angezeigt. Sie möchten zuerst die einfachen Fälle ausfüllen und schwierigere Fälle unter einem Platzhalter belassen. Überprüfen Sie regelmäßig, was Sie geschrieben haben, um sicherzustellen, dass es sinnvoll ist. Manchmal kann Matita den Typ des unvollständigen Übereinstimmungsausdrucks nicht ableiten, tut dies jedoch recht gerne, wenn Sie den Fall für den letzten im induktiven Typ definierten Konstruktor ausfüllen.
Ich nehme an, obwohl ich nicht sicher bin, dass Coq etwas Ähnliches tut.
quelle