Dependently Typed Metaprogramming (in Agda) メモ (3) tabulate

Permalink: 2013-11-14 11:45:00+09:00 by tu1978 in tags: Agda

まだExercise 1.5の続き。

tabulate : forall {n X} -> (Fin n -> X) -> Vec X n
tabulate {n} f = ?

を完成させる。{n}0としてC-cC-cをして、後はひたすらC-cC-aをすると、型としては正しい式が完成する。

tabulate {zero} f = <>
tabulate {suc y} f = f fzero , tabulate (\ _ -> f fzero)

というもの。fにずっとfzeroを与えたものをn個集めたVecを答えとしている。でも多分これは問題の答えとしては期待通りのものではない。イメージとしては、fにfzero, fsuc fzero, fsuc (fsuc fzero), ... を引数に与えたものをn個集めたものを得たい。つまり、f 0, f 1 ...

more…

Dependently Typed Metaprogramming (in Agda) メモ (2) 有限集合Finについて

Permalink: 2013-11-13 14:25:00+09:00 by tu1978 in tags: Agda

Dependently Typed Metaprogramming (in Agda) メモの続き。

Exercise 1.5では、有限集合を表す型Finを定義している。

data Fin : N -> Set where
   fzero : {n : N} -> Fin (suc n)
   fsuc : {n : N} -> Fin n -> Fin (suc n)

ここで、fzero, fsucとしたのは、自然数の型で使用しているzero, sucと区別しやすいようにするため。

有限集合Finは、依存型言語で良く取り上げられる例題のようだが、理解するのは簡単ではないように思う。次のように考えると良いと分かった:

まず、Fin 0という型の要素があるか?と考えると、fzero, fsucどちらの構成子も、構成される型はFin (suc n)の形であるから、実際はFin ...

more…

Dependently Typed Metaprogramming (in Agda) メモ

Permalink: 2013-11-13 09:42:00+09:00 by tu1978 in tags: Agda

Dependently Typed Metaprogramming (in Agda)のメモ

Agdaの編集方法:
Emacsのagda-modeを使えば、TeXの感覚で記号を入力できる。例:
太字のN : \bn
下付の数字 : _0, _1など
× : \times
→ : \rightarrow

それと型構成子×は、open import Data.Productを書かないと使えなかった。また、最初はData.Productが開けなかったので、(custom-set-variables '(agda2-include-dirs (quote ("." "agda-lib-folder/src"))))を.emacs.elに追加する必要があった。

------------------------------------
C-cC-lで現在開いているagdaファイルをロードしてチェックしてくれる。

zip : forall {n S T} -> Vec S n -> Vec T n -> Vec (S × T) n ...

more…