Data.Vec
があるので、私たちはVec
が何であるかを知っています。Agdaの `Vec`に安全な` length`関数を書く方法は?
NatとVecが同型であることを証明したいと思います。
は私はNATがVecをに変換できることを証明機能正常に作成されました:
ℕ→vec : (n : ℕ) → Vec ⊤ n
ℕ→vec zero = []
ℕ→vec (suc a) = tt ∷ ℕ→vec a
私は、対応するvec→ℕ
を書くしようとしていたときにしばらく、私は失敗しました。
私はこのような何かを書きたい(それはコンパイルされませんが、それは読みやすいです):最初のコードで
vec→ℕ : ∀ {n} → Vec ⊤ n → (n : ℕ)
vec→ℕ [] = zero
vec→ℕ (tt ∷ a) = suc (vec→ℕ a)
は、引数、戻り値の長さが正確であることを保証しています。 しかし、最初の引数の長さが正確に戻り値であることを確認するにはどうすればよいですか?
ありがとうございました!私が実在するタイプの仕事の仕組みを見ているのは初めてです!あなたの答えは私の問題を完全に解決しました! :D – ice1000