工学部情報学科

計算と論理 (科目コード 90860)

日時 火曜日2限(10:30〜12:00)
場所 総合研究7号館情報1講義室
担当教員:五十嵐 淳 (igarashi)
オフィスアワー:月曜日 17:00〜18:00 (総合研究7号館224)
(その他の時間は要アポイントメント)
担当TA: 福田 陽介

お知らせ

講義内容(シラバスより)

数理論理学の基礎と,数理論理学を用いた計算機プログラムの検証について講述する.また,講義を補完するため,証明支援系(計算機上で数学的証明を行うシステム)である Coq を用いた演習を行う.

講義スケジュールと配布資料

回数date内容(予定)資料宿題
110/3 導入, Basics.v スライド0, スライド1 テキスト Preface.v, Basics.v の予習,Coq 環境の構築,課題提出システム登録
210/10 Basics.v, Induction.v スライド2 演習問題(締切 10/17 10:30: Basics.v の nandb, andb3, factorial, blt_nat, plus_id_exercise, andb_true_elim2)
310/17 Induction.v(つづき), 単純型付ラムダ計算 配布資料1 演習問題(締切 10/31 10:30: Induction.v の basic_induction, double_plus, beq_nat_refl)
410/24 単純型付ラムダ計算(つづき)
510/31 Lists.v スライド3 演習問題(締切 11/14 10:30: Lists.v の snd_fst_is_swap, list_funs, list_exercises, beq_natlist, hd_error)
611/7 Poly.v スライド4 演習問題(締切 11/21 10:30: Poly.v の poly_exercises, split, flat_map, currying)
711/14 System F, Tactics.v 配布資料2, スライド5
811/21 Tactics.v, Logic.v スライド6 演習問題(締切 12/5 10:30: Tactics.v の apply_exercises1, inversion_ex3, inversion_ex6, plus_n_n_injective, beq_nat_true, destruct_eqn_practice)
911/28 教室での演習 問題集
1012/5 Logic.v 演習問題(締切 12/26 10:30: Logic.v の and_assoc, or_distributes_over_and, contrapositive, not_both_true_and_false, dist_exists_or, in_app_iff, beq_nat_false_iff)
1112/12 自然演繹と Coq 配布資料3
1212/19 (休講)
1312/26 IndProp.v スライド7 演習問題(締切 1/19 10:30: IndProp.v の ev_double, inversion_practice, ev_sum, le_exercises の一部 (le_trans と O_le_n と le_plus_l), leb_iff
141/9 教室での演習
151/30 カリーハワード同型対応,ProofObjects.v 配布資料4, スライド8
期末試験2/6

自習の進め方(宿題について)

  1. 教科書の該当する章のファイルを Proof General (もしくは CoqIDE) で読み込む.
  2. Coq への読み込みコマンドを使いながら教科書を読み進める.
  3. 練習問題の指示に従ってファイルを書き換える(解答を埋める).
  4. Coq に読み込ませてみて,背景が青(緑)になれば無事に Coq のチェックに通った,ということ.(それでもエラーになる場合があります.下記 FAQ 参照.)
  5. 宿題提出システムを使って該当ファイルを zip したものをアップロードする.

FAQ

Proof General, CoqIDE の操作

機能 Proof General CoqIDE (メニュー操作)
一歩読み進める(Coq にテキストの内容を送信) C-c C-n Navigation → Forward
一歩戻る (undo) C-c C-u Navigation → Backward
カーソル位置まで進む(戻る) C-c RET Navigation → Go to
ファイル末尾まで読み込む C-c C-b Navigation → End
証明すべき命題(ゴール)を表示 C-c C-p
既になされた証明・定義を表示 C-c C-t
SearchAbout C-c C-a C-a Queries → SearchAbout (F2)

リソース

教科書
本講義用 lf-201710.zip (MD5SUM: 11e145790d5e5b367ef0b56e3dafd67e): Benjamin C. Pierce 他著 Software Foundations シリーズ 第1巻 Logical Foundations (本家は時おりバージョンアップがあるので使わないでください.)
参考書
ボランティアによる教科書の和訳版(元になった版は2011年版です.内容の食い違いについては教科書の記述を優先します.)
Coq: INRIA の公式サイト
ProofGeneral
emacs から Coq を操作するためのソフトウェア. Version 4.4.1~pre 以降を使ってください. Ubuntu は zesty (16.10) 以降にはパッケージがあります. macOS の Homebrew にも proof-general パッケージがあります.
Company-Coq
ProofGeneral の拡張集. forall と打つと ∀ で表示されたりするのでうれしい. 自動補完などもできる.

五十嵐 淳