0
私はCoq用語言語で書かれた "列挙型"関数を持っています。この関数は、enumerate
関数が使用されているときはいつも、明示的に指定する必要があるので、使用するのは面倒です(リスト内の要素の型はA
です)。パラメータとしてA
を明示的に渡す必要を避ける方法はありますか?明示的な型を持たないCoq多型関数
(* [a, b] -> [(0,a), (1,b)] *)
Fixpoint enumerate (A : Type) (l : list A) : list (nat * A) :=
let empty : (list (nat * A)) := nil in
let incr_pair xy := match xy with
| (x, y) => ((S x), y)
end in
match l with
| nil => empty
| (x :: xs) => (O, x) :: (map incr_pair (enumerate A xs))
end.
は、私はいくつかの追加の構文は正確にA
が何であるかを識別して、おそらく
Fixpoint enumerate (l : list A) : list (nat * A) := ...
ようなものを書くことができるようにしたいです。
Coq用語の言語は、Gallinaと呼ばれます。 – eponier