何はともあれ、Theorem ex01 という行にカーソルを進めてほしい。 そこまでいってから、C-c C-return と打つと、Coqシステムがその行まで の定義や証明を処理してくれる。処理済みの部分は色が変わる。
そして、 Theorem ex01...という行まで色が変わったら、 emacsのウィンドウが2つになり、PropLogic.v というファイルを見ている 部分と、*goals* という名称のバッファとになる。 この*goals* には「現在、まだ証明されていない(あなたが証明すべき)もの」 が列挙されている。最初の時点では、証明すべきものは、1つだけであり、 それを意味する 「1 subgoals」 という表示がでているはずである。
1 subgoals, subgoal 1 (ID 85) ============================ [P] |- Pここで === の下が、証明すべきもので、この場合、講義資料の P |- P を意味している。(|-の左辺は列なので、実装の都合上、 リストをあらわす [...]で囲うことにした。)
つまり、現在は、P |- P を証明すべきだということである。
そこで、証明を構成する。証明は「下から上へ」作っていく。 この証明は assume 命令を使えば一発で解けてしまうので、 PropLogic.v の Theorem ex01... Proof. のあとに assume. と入力する。 (というか、これは既に入力してある。) そこで、この assume. の行を実行するため、C-c C-n とタイプする。 一回タイプすると、Proof. の行が実行され、もう一回タイプすると、 assume. が実行される。その瞬間に、*goals*バッファに変化がおこり、 上記のゴールが消えて、
No more subgoals. (dependent evars:)という表示に変更される。(バッファ名も *response* になるが、 その辺は気にしなくてよい。) これで、証明は終わりである。
ただし、若干面倒くさいのだが、証明が終わったことを意味する。 Qed.という命令も実行しないといけない。そこで、C-c C-n をもう一回 タイプする。今度は、
ex01 is definedという表示になり、定理ex01が証明されたことがわかる。(証明が 終了したのに defined と表示されるとは一体どういうことだ、と思う人が いるかもしれないが、ここでは、こんなものだとおもってほしい。)