(3.5)CoqCoqでの帰納法の仕組みについて、ちょっとだけ。再定義してみてください。(3.4)Coq別の問題を証明してみましょう。使わないでやってみよう、という問題ですが、気にせずringを使って解いちゃいますので、ネタバレにはなっていないはず...。(3.3)CoqCoqさんは非常に賢いので、実は、今回くらいの証明は自動でやってくれます。(3.2)Coqx=0の場合は終わったので、残ったゴールはこれです。xこれを証明するには...なにか、このくらいはさっきImportしたArith標準ライブラリで証明されていないでしょうか。(3.1)Coq前回、andやorなどの命題が"Inductive"で作られてることをご紹介しました。Coqでは、命題だけでなく、自然数やリストなどなど、普通のデータ型も、Inductiveで定義します。(3)Coqこのペースだと、なかなかCoqの一番面白いところ(とわたしが思うところ)に行き着かないので、今回は全力ですっ飛ばして、必要な細かい話を全部片付けちゃおうと思います。次回が面白くなるはずです。今回は、主に、自然数やリストにまつわる証明の巻。(2.6)Coqもう今回の内容でInductiveの扱いは完璧...!といいたいところなんですが、「再帰的なInductive」の証明テクニックの解説が実はまだ残っています。次は多分それについて書きたいなあと思っています。それかFalse周りの証明をさらにいろいろ。(2.5)Coq何度か繰り返しているように、andやorやFalseは、Coqに組み込みの摩訶不思議な何かではなく、ユーザー定義できる命題です。andやorに使える証明方法は、他のInductive命題にもそのまま使えます。試しに他に何か自作してみましょう。こんなの考えてみました。(2.4)Coq「コンストラクタがあるならデストラクタはないんですか」あるのです。これを語らなくては話が終わりません。コンストラクタの逆の話なので、例題も逆にしましょう。ド・モルガンの法則は逆向きにも成り立ちます。どっちがいいかは人間が頑張って考える。(2.2)Coq「プログラミング言語としてみると」さっきの証明は何をやっていたことになるんでしょう。"Inductive"は、ユーザー定義の新しい命題を定義するのでした。ユーザー定義の新しい型を作る機能が対応します。(2.1)Coqandとorとnotを分けて説明するのが面倒くさいので、いきなり全部入りの定理を例にしましょう。今回のお題はド・モルガンの法則です。(2)Coq第2回です。前回は「forall」と「->」の扱い方でした。(->)」以外の定番の論理演算、「and」「or」「not」のお話です。使った定理の証明、をお届けしました。これってあまり直感的ではない気がするのですよね。(1.4)Coq別の例をやってみたいと思います。Sコンビネータと呼ばれる定理です。R.いきなりexactで書いてもいいんですが、順を追ってやっていきましょう。(1.3)Coqところで、HaskellやOCamlなどの関数型言語をご存じの方なら100倍高速にCoqを理解できる!というショートカットのご紹介です。以下、この節限定で、説明にHaskellが混じります。(1.2)Coqいくつか細かい捕捉。introintrosと同じひっぺがし作業を1回だけやる単数形にすると「1回だけやる」意味になります。