Мне было интересно, может ли порядок объявлений индуктивного типа иметь значение.
Например, в Coq вы можете определить Nat
либо:
Inductive Nat :=
| O : Nat
| S : Nat -> Nat.
или
Inductive Nat :=
| S : Nat -> Nat
| O : Nat.
Возможно, это изменит порядок параметров в автоматически сгенерированном элиминаторе, но это не имеет большого значения.
Что мне интересно, так это то, можно ли написать декларацию
Inductive typewhereordermatters :=
| cons1 : type1
| cons2 : type2.
где type2
зависимый тип, в зависимости от cons1
? (и в этом случае запись объявлений в другом порядке не будет иметь никакого смысла, поскольку type2
будет ссылаться на то, cons1
чего еще не существует).