はじめに
久々に Coq で遊びたくなったので、M1 Mac にインストールしてみた。 最近の Coq は VSCode で書くのが主流?らしいが、今回は Emacs + Proof-General で環境構築を行う。
環境構築の方法
基本的にbrew
やmelpa
などの package 管理システムになるべく依存した形で環境構築を行う。
はじめに、Coq
のインストール(–build-from-source をつけないとcoqtop
実行時にエラーが出た。)
brew install coq --build-from-source
GUI 版 Emacs のインストール
brew install emacs --cask
Emacs の設定
次は Emacs の設定を行う。
Emacs の設定ファイルは~/.emacs.d/init.el
に記載する。
まずはmelpa
(Emacs のプラグインのパッケージマネージャー)のセットアップを行う。
~/.emacs.d/init.el
に以下を記載し、
(require 'package)
(let* ((no-ssl (and (memq system-type '(windows-nt ms-dos))
(not (gnutls-available-p))))
(proto (if no-ssl "http" "https")))
(add-to-list 'package-archives
(cons "melpa" (concat proto "://melpa.org/packages/")) t))
(package-initialize)
emacs を起動して
M-x package-refresh-contents RET ← 初回のみ実行
を実行する。
次に、~/.emacs.d/init.el
に以下を記載し、
(setq proof-splash-enable nil)
(custom-set-variables
'(coq-prog-name "/opt/homebrew/bin/coqtop")
'(package-selected-packages
(quote
(company-coq company proof-general)))
'(proof-three-window-enable t))
(add-hook 'coq-mode-hook 'company-coq-mode)
emacs を起動して
M-x package-install-selected-packages RET
を実行する。 これで環境構築が完了。
おまけ
ssreflect のインストール
brew install ssreflect --build-from-source
参考: SSReflect ノート
ProofGeneral で使うキーバインド
キー | 動作 |
---|---|
C-c C-n | 次の.まで進む |
C-c C-u | 次の.まで進む |
C-c C-Enter | カーソル位置まで進める |
ヒルベルトの公理系を示す。
久々の Coq なのでウォーミングアップとしてヒルベルトの公理系を証明してみる。
From mathcomp
Require Import ssreflect.
Require Import Classical.
Section Coq_test.
Variable A B C:Prop.
Lemma H1: A->(B->A).
Proof.
move => //.
Qed.
Lemma H2: (A->(B->C))->((A->B)->(A->C)).
Proof.
move => x y z.
apply x => //.
apply y => //.
Qed.
Lemma H3: (~C-> ~A)->(A->C).
Proof.
move => x y.
specialize (classic C).
elim => z //.
specialize (x z).
contradiction.
Qed.
End Coq_test.
感想
- CoqIDE もいいけど、Emacs + ProofGeneral + company-coq をやると最強になる。