Zastanawiałem się, czy kolejność deklaracji typu indukcyjnego może mieć znaczenie.
Na przykład w Coq możesz zdefiniować Nat
:
Inductive Nat :=
| O : Nat
| S : Nat -> Nat.
lub
Inductive Nat :=
| S : Nat -> Nat
| O : Nat.
Być może zmieni to kolejność parametrów w automatycznie generowanym eliminatorze, ale to nie jest wielka sprawa.
Zastanawiam się, czy można napisać taką deklarację
Inductive typewhereordermatters :=
| cons1 : type1
| cons2 : type2.
gdzie type2
jest zależny typ, w zależności od cons1
? (w tym przypadku napisanie deklaracji w innej kolejności nie miałoby żadnego znaczenia, ponieważ type2
odnosi się do cons1
tego, o czym jeszcze nie ma).
źródło
circle
, typu zloop
konstruktora zależy odbase
konstruktora.Czy zamówienie ma znaczenie tak, jak pytasz? Nie.
Ale czy kolejność jest całkowicie nieistotna dla funkcjonowania asystenta dowodu? Znowu nie. W Maticie, asystencie sprawdzającym bardzo podobnym do Coq, kolejność, w jakiej konstruktory są zapisywane w definicji indukcyjnej, ma znaczenie dla sprawdzania typu, szczególnie podczas sprawdzania typu wyrażenia dopasowania.
Matita musi najpierw sprawdzić, czy wszystkie konstruktory są dopasowane w treści meczu. Odbywa się to poprzez przełączanie konstruktorów w kolejności, w jakiej zostały zadeklarowane. Następnie przychodzi sprawdzenie typu właściwego wyrażenia dopasowania, co dzieje się w odwrotnej kolejności, najpierw sprawdzając wielkość liter dla ostatniego zadeklarowanego konstruktora. Ten typ jest następnie przeprowadzany i wykorzystywany do sprawdzania innych przypadków.
To bardzo często pojawia się podczas pisania wyrażenia o dużym dopasowaniu. Najpierw chcesz wypełnić proste sprawy, pozostawiając trudniejsze sprawy pod znakiem wieloznacznym, okresowo sprawdzaj, co napisałeś, aby upewnić się, że ma to sens. Czasami Matita nie jest w stanie wywnioskować typu niepełnego wyrażenia dopasowania, ale całkiem chętnie to zrobi, jeśli wypełnisz przypadek ostatniego konstruktora zdefiniowanego w typie indukcyjnym.
Zakładam, choć nie jestem pewien, że Coq robi coś podobnego.
źródło