Я определил векторные типы для типа A
, используя функции как fin n -> A
. Я не могу придумать способ объединения векторов без прохождения индуктивных векторов.
Я использую определение конечных множеств:
Fixpoint fin (k : nat) : Type :=
match k with
| 0 => False
| S k => option (fin k)
end.
Затем я определяю векторы размером k
как функции fin k -> A
.
Как я могу объединить такие векторы?
concat {A : Type} (n m : nat) (v1 : fin n -> A) (v2 : fin m -> A) (i : fin (n + m)) : A
Я пробовал сопоставление с образцом на n
, но, похоже, тогда не признается, что i
имеет тип fin m
, тогда в случае 0
.
Я думаю, это хорошо известное определение, но я не смог найти этот вариант векторов. Возможно, переход от этого типа к векторам в библиотеке Coq, объединение там, а затем возвращение - это вариант, но я хотел бы иметь более прямой подход.