@yoshihiro503
2017年 7月 23日
@yoshihiro503 | |
株式会社ドワンゴ | コンテンツ基盤開発部 |
名古屋大学 | 客員JK |
たとえばこんなん
Fixpoint map{A B:Type}(f: A->B)(xs: list A):=
match xs with
| [] => []
| x :: xs => f x :: map f xs
end.
Theorem map_nth :
forall (A B:Type) i (f: A->B) xs x,
nth xs i = Some x ->
nth (map f xs) i = Some (f x).
リスト xs
の i
番目が x
だったら、map f xs
の i
番目は f x
こんな感じ
induction i; (destruct xs; [discriminate |]).
- intros x Heq. now inversion Heq.
- simpl. now auto.
次のプログラミング言語のコードへ変換する
停止性が自明な場合は Fixpoint
で大丈夫だが、ちょっとでも非自明ならば Function
コマンドを使う。
Recdef
モジュールのインポートを忘れずに。
u : { user | age user > 18}
{x = y} + {x <> y}
coqdoc (HTML, PDF)
Coqのソースコードから証明報告書を自動生成
$ opam install coq
社内の証明支援器のチャンネルに所属しよう。