狠狠撸

狠狠撸Share a Scribd company logo
証明プログラミング超入门
~述語論理を添えて~
2015/03/27
門脇 香子(@kdxu)
1
自己紹介
? 門脇 香子 (@kdxu)
? お茶の水女子大学 浅井研(M1)
? 研究はコンパイラの定式化
? 趣味でゲーム開発
みなさん証明は好きですか?
概要
? 証明プログラミングとは?
? Agda による例?
1. ふつうの証明?
2. 命題論理と述語論理
証明プログラミングとは?
? ある種の性質を保障したプログラムが書ける?
数学の定理を証明したり,停止性などの性質が保障された
コンパイラなどを実装できる
? コードの停止性,正当性などを証明できる?
活用例 : OpenSSLの脆弱性の発見 ?
??? CompCert(安全性が保証されたCコンパイラ)
? テストではなく証明で正しさを保証する
? TDDからPDDへ(Proof-Driven-Development!)
Agda について
? もっとも有名な定理証明支援系の1つ
? 依存型という型を使用できる
? Syntax としては Haskell に近い
? 証明を項として表し直接操作する
インストール&セットアップ
? 適当にググる?
$ cabal install agda?
$ agda-mode setup
? AgdaWikiを見ましょう
书いてみよう
まずは型定義
? data で新しい型を定義できる
? indent に注意
? Set の部分集合としてのBool型という意味
まずは型定義
? 自然数の型
? ペアノの公理による定義
? zeroがNat型ということと,xがNat型ならsuc x
もNat型だということを示している
関数定义
? 普通の足し算の定義
? (suc m) + n = (suc (m + n))
? C-c C-n で関数を評価できます
関数定义
? 中値記法もできます
関数定义
何か証明してみよう
? Nat 型と Bool 型の簡単な定義はできた
? ここでなにか簡単な定理を証明する
? 同値性の証明をするならば同値関係のデータ型が必
要(equality)?
-> どのように定義するのか?
同値性
? 2つのものが同じということは,以下のように定義できる
? 例 : zero (suc zero) はダメ?
x x の形をしていない.型はあるが,値が存在しない?
なので,re?という型にならない
? re?になりうる値が存在するか で同値性が定義できる
定理は関数
? 例えば 0 + n n を示したい?
-> 返り値がre?となるように関数を書ければよい
? 関数の型は?
(n : Nat) → (0 + n n)?
となる
? ここで suc 関数に対する再帰的処理が必要になる
定理 = 関数
? これを Agda は 型が等しい と判断してくれない
? ここで suc 関数に対する再帰的処理が必要になる
? 一般的に定理を再帰的に示す関数 cong
(congruence : 合同の意)を定義?
証明完了!
? zero と suc nで場合分けしている (C-c C-c n)?
zero の場合は zero + zero は zeroなので直ちにre??
suc n の場合は n に関して再帰的に証明をする
Tips : 依存型
? Agda では依存型(Dependent Types)という型が使えます
? 「値に依存する型」を作ることができる型
? 例 Vec N 型 - 長さを型レベルで保持しているリスト
? 型の段階で長さの比較や空リスト判定を保証できる
本题に入ります
今日の目的
? 一階述語論理をAgdaで表現し,何かを証明する
? 一階述語論理って?そもそも述語論理って?
今日の目的
? 一階述語論理をAgdaで表現し,何かを証明する
? 一階述語論理って?そもそも述語論理って?
命題論理
? 述語論理は命題論理の拡張
? 命題論理 : P → Q ,? P Q みたいなやつ?
命題変数(P,Qなど)を原子式(それ以上分解できな
い命題)とした推論体系
? 推論の性質によりさまざまな論理体系がある
命題論理の構文要素
? 原子式 : P,Q,R …
? 真理値 真(?)または偽( )
? 結合子 : ?, , など
? これらを組み合わせてさまざまな論理式をつくる
一階述語論理
? 個体の量化のみを許す述語論理?
具体的には,古典論理に?
- 原子論理式?
- 量化?
が加わっている.
一階述語論理
? 量子論理式?
例 : P x y z …
? 項を関係として表す
量化
? 「すべての x において ~である」「~を満たす x
が存在する」
? 全称量化( ),存在量化( )
一階述語論理 at Agda
https://gist.github.com/KDXU/3ecf21603abe9e9a409e
量化
? 「すべての x において ~である」「~を満たす x
が存在する」
? 全称量化( ),存在量化( )
一階述語論理式の例
? 例 : y x Loves(x,y)?
? Everyone in the world is loved by at least
one person
? 例2 : x y Loves(x,y)?
? There is a person who loves everyone in the
world
おすすめ教材
? Ulf Norell 氏の Dependently Typed Programming in
Agda ?
(http://www.cse.chalmers.se/ ulfn/darcs/AFP08/
LectureNotes/AgdaIntro.pdf)
? Brutal [Meta]Introduction to Dependent Types in
Agda ?
(http://oxij.org/note/BrutalDepTypes/)
? お茶大製「みんなのAgda wiki」?
(http://agda.wiki.fc2.com/)
? 私は今日紹介した Agda という言語を用いて証明
付きの型推論器を構成しています
? 実装 : https://github.com/kdxu/InferAgda
おわり
証明プログラミングを楽しみましょう!

More Related Content

What's hot (20)

プログラミングコンテストでの动的计画法
プログラミングコンテストでの动的计画法プログラミングコンテストでの动的计画法
プログラミングコンテストでの动的计画法
Takuya Akiba
?
ラムダ计算入门
ラムダ计算入门ラムダ计算入门
ラムダ计算入门
Eita Sugimoto
?
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
?
『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算
MITSUNARI Shigeo
?
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
?
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
?
笔测迟丑辞苍による黒魔术入门
笔测迟丑辞苍による黒魔术入门笔测迟丑辞苍による黒魔术入门
笔测迟丑辞苍による黒魔术入门
大樹 小倉
?
研究発表を準备する(2022年版)
研究発表を準备する(2022年版)研究発表を準备する(2022年版)
研究発表を準备する(2022年版)
Takayuki Itoh
?
勉强か?趣味か?人生か?―プログラミングコンテストとは
勉强か?趣味か?人生か?―プログラミングコンテストとは勉强か?趣味か?人生か?―プログラミングコンテストとは
勉强か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
?
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
?
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
Tokoroten Nakayama
?
Coq Tutorial
Coq TutorialCoq Tutorial
Coq Tutorial
tmiya
?
书くネタが颁辞辩しかない
书くネタが颁辞辩しかない书くネタが颁辞辩しかない
书くネタが颁辞辩しかない
Masaki Hara
?
教师なしオブジェクトマッチング(第2回ステアラボ人工知能セミナー)
教师なしオブジェクトマッチング(第2回ステアラボ人工知能セミナー)教师なしオブジェクトマッチング(第2回ステアラボ人工知能セミナー)
教师なしオブジェクトマッチング(第2回ステアラボ人工知能セミナー)
STAIR Lab, Chiba Institute of Technology
?
颁辞辩チュートリアル
颁辞辩チュートリアル颁辞辩チュートリアル
颁辞辩チュートリアル
Yoshihiro Mizoguchi
?
3分でわかる多项分布とディリクレ分布
3分でわかる多项分布とディリクレ分布3分でわかる多项分布とディリクレ分布
3分でわかる多项分布とディリクレ分布
Junya Saito
?
锄办-厂狈础搁碍蝉の仕组みについて
锄办-厂狈础搁碍蝉の仕组みについて锄办-厂狈础搁碍蝉の仕组みについて
锄办-厂狈础搁碍蝉の仕组みについて
Shouki Tsuda
?
滨罢系エンジニアのためのプレゼンテーション入门
滨罢系エンジニアのためのプレゼンテーション入门滨罢系エンジニアのためのプレゼンテーション入门
滨罢系エンジニアのためのプレゼンテーション入门
Masahito Zembutsu
?
优れた研究论文の书き方―7つの提案
优れた研究论文の书き方―7つの提案优れた研究论文の书き方―7つの提案
优れた研究论文の书き方―7つの提案
Masanori Kado
?
プログラミングコンテストでの动的计画法
プログラミングコンテストでの动的计画法プログラミングコンテストでの动的计画法
プログラミングコンテストでの动的计画法
Takuya Akiba
?
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
?
『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算
MITSUNARI Shigeo
?
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
?
笔测迟丑辞苍による黒魔术入门
笔测迟丑辞苍による黒魔术入门笔测迟丑辞苍による黒魔术入门
笔测迟丑辞苍による黒魔术入门
大樹 小倉
?
研究発表を準备する(2022年版)
研究発表を準备する(2022年版)研究発表を準备する(2022年版)
研究発表を準备する(2022年版)
Takayuki Itoh
?
勉强か?趣味か?人生か?―プログラミングコンテストとは
勉强か?趣味か?人生か?―プログラミングコンテストとは勉强か?趣味か?人生か?―プログラミングコンテストとは
勉强か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
?
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
?
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
Tokoroten Nakayama
?
Coq Tutorial
Coq TutorialCoq Tutorial
Coq Tutorial
tmiya
?
书くネタが颁辞辩しかない
书くネタが颁辞辩しかない书くネタが颁辞辩しかない
书くネタが颁辞辩しかない
Masaki Hara
?
教师なしオブジェクトマッチング(第2回ステアラボ人工知能セミナー)
教师なしオブジェクトマッチング(第2回ステアラボ人工知能セミナー)教师なしオブジェクトマッチング(第2回ステアラボ人工知能セミナー)
教师なしオブジェクトマッチング(第2回ステアラボ人工知能セミナー)
STAIR Lab, Chiba Institute of Technology
?
3分でわかる多项分布とディリクレ分布
3分でわかる多项分布とディリクレ分布3分でわかる多项分布とディリクレ分布
3分でわかる多项分布とディリクレ分布
Junya Saito
?
锄办-厂狈础搁碍蝉の仕组みについて
锄办-厂狈础搁碍蝉の仕组みについて锄办-厂狈础搁碍蝉の仕组みについて
锄办-厂狈础搁碍蝉の仕组みについて
Shouki Tsuda
?
滨罢系エンジニアのためのプレゼンテーション入门
滨罢系エンジニアのためのプレゼンテーション入门滨罢系エンジニアのためのプレゼンテーション入门
滨罢系エンジニアのためのプレゼンテーション入门
Masahito Zembutsu
?
优れた研究论文の书き方―7つの提案
优れた研究论文の书き方―7つの提案优れた研究论文の书き方―7つの提案
优れた研究论文の书き方―7つの提案
Masanori Kado
?

Viewers also liked (8)

エニグマ暗号とは何だったのか
エニグマ暗号とは何だったのかエニグマ暗号とは何だったのか
エニグマ暗号とは何だったのか
Takahiro (Poly) Horikawa
?
「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
Junpei Tsuji
?
フーリエ変换と画像圧缩の仕组み
フーリエ変换と画像圧缩の仕组みフーリエ変换と画像圧缩の仕组み
フーリエ変换と画像圧缩の仕组み
yuichi takeda
?
ゆとりが数週间で颁++を始めるようです
ゆとりが数週间で颁++を始めるようですゆとりが数週间で颁++を始めるようです
ゆとりが数週间で颁++を始めるようです
Eric Sartre
?
20170920_FinSumWorkshop_ZaisanNet
20170920_FinSumWorkshop_ZaisanNet20170920_FinSumWorkshop_ZaisanNet
20170920_FinSumWorkshop_ZaisanNet
Shirabe Ogino
?
為替と株の予测の话
為替と株の予测の话為替と株の予测の话
為替と株の予测の话
Kentaro Imajo
?
Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御
Ryosuke Okuta
?
今さら闻けないカーネル法とサポートベクターマシン
今さら闻けないカーネル法とサポートベクターマシン今さら闻けないカーネル法とサポートベクターマシン
今さら闻けないカーネル法とサポートベクターマシン
Shinya Shimizu
?
「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
Junpei Tsuji
?
フーリエ変换と画像圧缩の仕组み
フーリエ変换と画像圧缩の仕组みフーリエ変换と画像圧缩の仕组み
フーリエ変换と画像圧缩の仕组み
yuichi takeda
?
ゆとりが数週间で颁++を始めるようです
ゆとりが数週间で颁++を始めるようですゆとりが数週间で颁++を始めるようです
ゆとりが数週间で颁++を始めるようです
Eric Sartre
?
20170920_FinSumWorkshop_ZaisanNet
20170920_FinSumWorkshop_ZaisanNet20170920_FinSumWorkshop_ZaisanNet
20170920_FinSumWorkshop_ZaisanNet
Shirabe Ogino
?
為替と株の予测の话
為替と株の予测の话為替と株の予测の话
為替と株の予测の话
Kentaro Imajo
?
Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御
Ryosuke Okuta
?
今さら闻けないカーネル法とサポートベクターマシン
今さら闻けないカーネル法とサポートベクターマシン今さら闻けないカーネル法とサポートベクターマシン
今さら闻けないカーネル法とサポートベクターマシン
Shinya Shimizu
?

Similar to 証明フ?ロク?ラミンク?入门2 (13)

読书会痴辞濒6
読书会痴辞濒6読书会痴辞濒6
読书会痴辞濒6
Mari Takahashi
?
20120529 アジャイルサムライ読書会第6回
20120529 アジャイルサムライ読書会第6回20120529 アジャイルサムライ読書会第6回
20120529 アジャイルサムライ読書会第6回
株式会社コネクトスター(ConnectStar Co., Ltd.)
?
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
mirer
?
TypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdfTypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdf
Ryo Higashigawa
?
20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer
Kazuaki Matsuo
?
ヒンシツ大学セミナー ゴール指向の測定と品質保証活動 -メトリクス解説およびGqm法のワークショップ-
ヒンシツ大学セミナー ゴール指向の測定と品質保証活動 -メトリクス解説およびGqm法のワークショップ-ヒンシツ大学セミナー ゴール指向の測定と品質保証活動 -メトリクス解説およびGqm法のワークショップ-
ヒンシツ大学セミナー ゴール指向の測定と品質保証活動 -メトリクス解説およびGqm法のワークショップ-
Hironori Washizaki
?
Should bee
Should beeShould bee
Should bee
Reo Mori
?
マイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karateマイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karate
Takanori Suzuki
?
テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523
dnoguchi
?
プログラマ人生论
プログラマ人生论プログラマ人生论
プログラマ人生论
ymmt
?
笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版
笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版
笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版
Katsuhiro Morishita
?
歩行解析のデジタルツインと規定になる概念モデル - Modeling & Transformation
歩行解析のデジタルツインと規定になる概念モデル - Modeling & Transformation歩行解析のデジタルツインと規定になる概念モデル - Modeling & Transformation
歩行解析のデジタルツインと規定になる概念モデル - Modeling & Transformation
Knowledge & Experience
?
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
Shuji Morisaki
?
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
mirer
?
TypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdfTypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdf
Ryo Higashigawa
?
20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer
Kazuaki Matsuo
?
ヒンシツ大学セミナー ゴール指向の測定と品質保証活動 -メトリクス解説およびGqm法のワークショップ-
ヒンシツ大学セミナー ゴール指向の測定と品質保証活動 -メトリクス解説およびGqm法のワークショップ-ヒンシツ大学セミナー ゴール指向の測定と品質保証活動 -メトリクス解説およびGqm法のワークショップ-
ヒンシツ大学セミナー ゴール指向の測定と品質保証活動 -メトリクス解説およびGqm法のワークショップ-
Hironori Washizaki
?
マイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karateマイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karate
Takanori Suzuki
?
テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523
dnoguchi
?
プログラマ人生论
プログラマ人生论プログラマ人生论
プログラマ人生论
ymmt
?
笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版
笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版
笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版
Katsuhiro Morishita
?
歩行解析のデジタルツインと規定になる概念モデル - Modeling & Transformation
歩行解析のデジタルツインと規定になる概念モデル - Modeling & Transformation歩行解析のデジタルツインと規定になる概念モデル - Modeling & Transformation
歩行解析のデジタルツインと規定になる概念モデル - Modeling & Transformation
Knowledge & Experience
?
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
Shuji Morisaki
?

証明フ?ロク?ラミンク?入门2