Enviar búsqueda
Cargar
証明プログラミング超入門
•
28 recomendaciones
•
11,055 vistas
Kyoko Kadowaki
Seguir
20150124若手の会@明治大学中野キャンパス
Leer menos
Leer más
Ciencias
Denunciar
Compartir
Denunciar
Compartir
1 de 21
Descargar ahora
Descargar para leer sin conexión
Recomendados
証明プログラミング入門2
証明プログラミング入門2
Kyoko Kadowaki
ラムダ計算入門
ラムダ計算入門
Eita Sugimoto
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
Coqチュートリアル
Coqチュートリアル
Yoshihiro Mizoguchi
動的計画法を極める!
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
型安全性入門
型安全性入門
Akinori Abe
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
Recomendados
証明プログラミング入門2
証明プログラミング入門2
Kyoko Kadowaki
ラムダ計算入門
ラムダ計算入門
Eita Sugimoto
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
Coqチュートリアル
Coqチュートリアル
Yoshihiro Mizoguchi
動的計画法を極める!
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
型安全性入門
型安全性入門
Akinori Abe
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
Yuta Kikuchi
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
Kazuhide Okamura
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
自動定理証明の紹介
自動定理証明の紹介
Masahiro Sakai
知識グラフの埋め込みとその応用 (第10回ステアラボ人工知能セミナー)
知識グラフの埋め込みとその応用 (第10回ステアラボ人工知能セミナー)
STAIR Lab, Chiba Institute of Technology
lsh
lsh
Shunsuke Aihara
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
trmr
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai
例外設計における大罪
例外設計における大罪
Takuto Wada
楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり
MITSUNARI Shigeo
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
Fixstars Corporation
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
すごいCoq入門
すごいCoq入門
真一 北原
Anomaly Detector で遊ぼう♪ with Azure Time Series Insights
Anomaly Detector で遊ぼう♪ with Azure Time Series Insights
Kazumi IWANAGA
Más contenido relacionado
La actualidad más candente
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
Yuta Kikuchi
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
Kazuhide Okamura
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
自動定理証明の紹介
自動定理証明の紹介
Masahiro Sakai
知識グラフの埋め込みとその応用 (第10回ステアラボ人工知能セミナー)
知識グラフの埋め込みとその応用 (第10回ステアラボ人工知能セミナー)
STAIR Lab, Chiba Institute of Technology
lsh
lsh
Shunsuke Aihara
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
trmr
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai
例外設計における大罪
例外設計における大罪
Takuto Wada
楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり
MITSUNARI Shigeo
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
Fixstars Corporation
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
La actualidad más candente
(20)
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
自動定理証明の紹介
自動定理証明の紹介
知識グラフの埋め込みとその応用 (第10回ステアラボ人工知能セミナー)
知識グラフの埋め込みとその応用 (第10回ステアラボ人工知能セミナー)
lsh
lsh
中3女子でもわかる constexpr
中3女子でもわかる constexpr
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
関数プログラミング入門
関数プログラミング入門
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
例外設計における大罪
例外設計における大罪
楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
暗号技術の実装と数学
暗号技術の実装と数学
Similar a 証明プログラミング超入門
すごいCoq入門
すごいCoq入門
真一 北原
Anomaly Detector で遊ぼう♪ with Azure Time Series Insights
Anomaly Detector で遊ぼう♪ with Azure Time Series Insights
Kazumi IWANAGA
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
mirer
20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer
Kazuaki Matsuo
読書会Vol6
読書会Vol6
Mari Takahashi
20120529 アジャイルサムライ読書会第6回
20120529 アジャイルサムライ読書会第6回
株式会社コネクトスター(ConnectStar Co., Ltd.)
プログラマ人生論
プログラマ人生論
ymmt
Similar a 証明プログラミング超入門
(7)
すごいCoq入門
すごいCoq入門
Anomaly Detector で遊ぼう♪ with Azure Time Series Insights
Anomaly Detector で遊ぼう♪ with Azure Time Series Insights
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer
読書会Vol6
読書会Vol6
20120529 アジャイルサムライ読書会第6回
20120529 アジャイルサムライ読書会第6回
プログラマ人生論
プログラマ人生論
証明プログラミング超入門
1.
証明プログラミング超入門 2015/01/24 情報科学若手の会冬の陣 門脇 香子(@kdxu)
2.
自己紹介 • 門脇 香子
(@kdxu) • お茶の水女子大学 浅井研 M1 • 好きなもの : 型と自転車と音楽 • http://kodoku.tokyo
3.
概要 • 証明プログラミングとは? • Agda
による例(布教) 目標 : 高校数学レベルの簡単な証明 • (時間が余れば)ライブコーディング
4.
証明プログラミングとは? • ある種の性質を保障したプログラムが書ける 数学の定理を証明したり,停止性などの性質が保障された コンパイラなどを実装できる • コードの停止性,正当性などを証明できる 活用例
: OpenSSLの脆弱性の発見 CompCert(安全性が保証されたCコンパイラ) • テストではなく証明で正しさを保証する! • 安全,COOL,AWESOME !
5.
Agda について • もっとも有名な定理証明支援系の1つ •
依存型という型を使用できる • Coq より「プログラミング言語」寄り • Syntax としては Haskell に近い • 証明を項として表し直接操作する
6.
インストール&セットアップ • 要 Haskell-Platform •
$ cabal install agda • $ agda-mode setup • 推奨エディタはAquamacsだそうです
7.
書いてみよう • まずA1.agdaというファイルを作り module A1
agda と先頭に書く.(ファイル名と同じにする) • C-c C-l でloadできます
8.
まずは型定義 • data で新しい型を定義できる •
indent に注意しましょう • Set の部分集合としてのBool型という意味
9.
まずは型定義 • 自然数の型 • ペアノの公理による定義 •
zeroがNat型ということと,xがNat型ならsuc x もNat型だということを示している
10.
関数定義 • 普通の足し算の定義 • (suc
m) + n = (suc (m + n)) • C-c C-n で関数を評価できます
11.
関数定義 • 中値記法もできます
12.
関数定義
13.
何か証明してみよう • Nat 型と
Bool 型の簡単な定義はできた • ここでなにか簡単な定理を証明してみます • 同値性の証明をするならば同値関係のデータ型が必 要(equality) -> どのように定義するのか?
14.
同値性 • 2つのものが同じということは,以下のように定義できる • 例
: zero (suc zero) はダメ x x の形をしていない.型はあるが,値が存在しない なので,reflという型にならない • reflにハマる値が存在するか で定義できる
15.
定理 = 関数 •
例えば 0 + n n を示したい -> 返り値がreflとなるように関数を書ければよい • 関数の型は (n : Nat) -> (0 + n n) となる • ここで suc 関数に対する再帰的処理が必要になる
16.
定理 = 関数 •
これを Agda は 型が等しい と判断してくれない • ここで suc 関数に対する再帰的処理が必要になる • 一般的に定理を再帰的に示す関数 cong を定義
17.
証明完了! • zero と
suc nで場合分けしている (C-c C-c n) zero の場合は zero + zero は zeroなので直ちにrefl suc n の場合は n に関して再帰的に証明をする
18.
Tips : 依存型 •
Agda では依存型(Dependent Types)という型が使えます • 「値に依存する型」を作ることができる型 • 例 Vec N 型 • 型の段階で長さの比較や空リスト判定を保証できる
19.
おすすめ教材 • 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/)
20.
研究紹介 • 私は今日紹介した Agda
という言語を用いて安全 な型推論器を構成しています • 依存型の性質を用いて型変数の番号をうまく管理す ることで,セルの書き換えを用いずにUnification を行うことにより実装しています • https://github.com/kdxu/InferAgda
21.
おわり 証明ができると世界が開けます. 証明プログラミングを楽しみましょう!
Descargar ahora