Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Coq intro.
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
L
March 19, 2021
Technology
2.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Coq intro.
L
March 19, 2021
Transcript
27 slides
Coq 入門 L
実行環境 Coq 本体は GitHub のリリースページから入手可能 インストールすると,CoqIDEという開発環境も含まれている VSCode を使っている人は,VSCoq という拡張機能がCoqIDEのほぼ上位互換になっ ていて便利
サンプルコード
CoqIDE の使い方 証明を書いて Ctrl+↓ で1命令ずつ読み込む.Ctrl+→でカーソルまで読み込む. VSCoq なら Ctrl を Alt
に置き換える.
簡単な例 Variable Entity : Type. Variables human mortal : Entity
-> Prop. Variable socrates : Entity. Hypothesis hm : forall x, human x -> mortal x. Hypothesis hs : human socrates. Theorem ms : mortal socrates. Proof. apply hm. apply hs. Qed. Print ms. Variable:ある型をもつ値をとりあ えず置く. Hypothesis:その命題を証明なし で認める. A->B:A型の変数を受け取ってB 型の値を返す関数. hm:人は必ず死ぬ. hs:ソクラテスは人だ. ms:ソクラテスは必ず死ぬ.
Print ms. まで実行すると出力画面に ms = hm socrates hs : mortal
socrates と表示される. 証明の本体は,「mortal socrates」型の値になっている.
@命題論理 @Coq 命題 型 証明 値 含意(A ならば B) A
-> B etc. このような対応を カリ― - ハワード同型対応 と呼ぶ.
カリ―ハワード同型対応 例:含意 A⇒B という命題に Aである という命題を組み合わせると B という命題になる 対応 f:A→B
という関数に a∈A という値を代入した f(a) は B 型の値になる
Coq の計算の仕組みは 型付きラムダ計算 に基づいている. 具体的には,CoC に Inductive 型を加えた CIC という計算理論を採用している.
また,Coq の論理体系は始めの状態では直観主義論理. 古典論理の命題を証明したければ公理に排他律を加えればよい.
Inductive Coq の整数型(nat) は Inductive 型として定義される. Inductive nat : Set
:= O : nat | S : nat -> nat Inductive 型は,その型が構成される方法を記述する. nat の場合は「O は nat,nat に S を作用させたものも nat,それだけが nat」
Definition(再帰無しの定義) Definition 名前 (パラメータ : 型) : 型 := 定義.
パラメータの型が推論できるときは型を省略可.
Fixpoint(再帰ありの定義) 書き方は Definition と同じ ・引数の1つがもとの引数より小さくなっている ・無限降下しない の2つがCoqに分かるように書かれていないとコンパイルエラーになる.
自然数(nat) の和はFixpoint で書かれている. Nat.add = fix add (n m :
nat) {struct n} : nat := match n with | 0 => m | S p => S (add p m) end : nat -> nat -> nat {struct n} でどの変数について帰納 的か示してやると丁寧. match n with は場合分け 0 か,S に nat を作用させたものとし て表せるか
Compute Compute 計算式. で計算結果をコンソールに表示する Eval simpl in 計算式. でも計算してくれるが,Compute の方が深くまで求めてくれる.
Check, Print Check 項. でその項の型をコンソールに表示する. About 名前. でさらに詳しい情報(定義されているファイル名,推論する引数)を表示する. Print 名前.
で定義なども表示される.
Locate Locate “記号”. でその記号が何の略記なのか調べられる. Locate 名前. で定義されているファイルを調べられる.
Section, Module スコープを区切るもの. Section A. ~ End A.
Variable(s), Hypothesis, Axiom いずれも証明なしに命題を仮定するもの. Axiom だけが Section を超えて影響を持つ.
fun 名前なし関数を作る. 例: Definition n_adder n : nat -> nat
:= fun m => n + m. n を受け取って,「nを加える関数」を返す n_adder
Theorem Theorem 名前 (変数名 : 型) : 型. Proof. 証明
Qed. Lemma, Corollary, Example などでも全く同じ(人間のためのエイリアス)
証明でつかえるタクティック(一部) intros:命題中の ”forall n” を ”ある n” に置き換える,“A -> B”
を “A Ͱ B” に置き換える destruct:場合分けで定義されているものを場合ごとに分割する induction:帰納法.Inductive 型に対して有効. inversion:f x = f y という仮定から x = y を導けたり,仮定に False があれば証明終了で きたりする. rewrite:仮定をつかって示したい命題を書き換える. apply:仮定を適用する. simpl. / reflexivity.:自明な変形をする/自明な変形で証明を終わらせる.
Coq には標準ライブラリに加えて,SSReflect,MathComp という強力なライブラリがあ る.(この2つは現在は同じライブラリとしてまとめられている.) このライブラリを読み込むことで,定理だけでなく新しいタクティックまで導入することが できる.
SSReflect で導入できるタクティック(一部) move=>:intros と同じ. move: :“A Ͱ B” を “A
-> B” に置き換える. apply=>:apply した後 move=> する. apply::move: した後 apply する. case.:destruct と同じ. elim.:induction と同じ. by [].:reflexivity. と同じ.
Coq の効用 ・とても長大で,全てを人間が検査することが難しい証明の正しさを保証できる.(例.四 色定理,奇数位数定理) ・ソフトウェアにバグがないことを保証できる.(例:CompCert)
正しさの証明の例 Euclid の互除法
Coq の難点(?) ・Coq で証明できてもその気持ちはわからない ・人間の直観に頼った証明はできない とはいえ有用なツールには違いない
参考文献 ・https://www.math.nagoya-u.ac.jp/~garrigue/lecture/2011_AW/ ・ソフトウェアの基礎 (proofcafe.org) ・萩原学/アフェルト・レナルド『Coq/SSReflect/MathComp による定理証明』(森北出版 ,2018)
おまけ TopProver コンテスト自体は非活性化してしまっているが問題は残っているので, Coq での証明に慣れたい人におすすめ.
More Decks by L
See All by L
Ti𝑘Z入門
sglpk
0
3.3k
Other Decks in Technology
See All in Technology
仕様と現実の間で落とし所を探るリモートMCPの認証・認可 — Sansanの認証基盤における課題と実践
sansantech
PRO
2
280
【dbts2026】AIエージェントの 判断と探索を変える、 データベース エンジニアリング― 既存DBの処理と依存関係から作る、オペレーショナルオントロジー ―
shisyu_gaku
0
290
SSFの現在地 ― CAEP/RISCからAI Identityへ
oidfj
0
430
Steering と Hook (チームの決まりを守らせる) | 目指せ Kiro マスター 06
inariku
PRO
2
110
Go初心者のクラウドエンジニアが、デプロイを通して旨味を知っていく話
ryudai
1
190
これからのデータエンジニアの役割について考える / Rethinking the Role of Data Engineers in the AI Era
okiyuki99
0
440
cdkd (CDK Direct)
gotok365
4
300
AWS構成から考えるWebセキュリティ ― WordPressの構築経験から考える公開範囲と更新運用【JAWS FESTA 2026 in AKITA】
cscengineer
PRO
2
420
狙われているAPIの脆弱性!今こそ手をつけるべき根本的な対策とは?
nagix
0
120
2026 Apache Flink Community Checkpoint
rmetzger
0
250
会社説明資料_最新版
demaecan
0
32k
顧客合意を取りながら進めるAWSコスト削減の実践
optim
0
160
Featured
See All Featured
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
1
240
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Building an army of robots
kneath
307
47k
The SEO Collaboration Effect
kristinabergwall1
1
620
The Limits of Empathy - UXLibs8
cassininazir
2
780
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
590
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
550
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
BBQ
matthewcrist
90
10k