SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
ぐだぐだAgda
なごやちまつり
@chiguri
御清聴誠に感謝しております!
または
御清聴誠に感謝しております!
経験したのが7年前なだけの
Coqユーザーが
Agdaを仕事で
半年使っただけ
御清聴誠に感謝しております!
タイトル
• タイトルはcamlspotter様のブ
ログ記事「経験15年の
OCaml ユーザーが Haskell
を仕事で半年使ってみた」の
もじり
–あんなにすごい内容じゃないです
御清聴誠に感謝しております!
お前誰だよ
• 3月に無事博士号を
取得した元学生
• パンダ
–鶏付き
• 通称chiguri
• 今神奈川大学
御清聴誠に感謝しております!
昨日のProofSummitで
• Abellaをべらべらしゃべった
–これこそぐだぐだだった気もする
御清聴誠に感謝しております!
発表までの流れ
• 4月末に@tmiya_さん、@bleis
さん、@kyon_mmさんと東京
でお食事した
• 5月に@kyon_mmさんのつぶや
きによりまつりの存在を知った
• 登録して数日後、発表者になっ
ていた
御清聴誠に感謝しております!
なごやといえば?
• こわい
• なごやか
• まさかり
• きょん×ぶれ
• 関数型
• 証明
御清聴誠に感謝しております!
つまり
Agda
Coq
Epigram
などなど
爆発しろー
異論は
認める
さる事情から
• 仕事でAgdaを使うことに
• 今までCoqだったのに
• とりあえずAgdaの話をしよう
御清聴誠に感謝しております!
Agdaなグループ
• 今いる場所は、実にAgdaな
グループ
–Agda Implementors’ Meetingに
行っている
• 開発に近い人が・・・
–ウカツなこと言えない!
–コワイ!
御清聴誠に感謝しております!
Wikipediaより
御清聴誠に感謝しております!
職場で
隣に
います
おまけ:Agdaを
Google先生に聞くと
• Agodaホテルの宣伝がでる
–何度か試したせいで手元で出ない
御清聴誠に感謝しております!
脱線した
御清聴誠に感謝しております!
チュートリアル
• Agdaにももちろんある
–しかも開発者謹製!
• ちょっと不親切な部分もある
–構文に関する説明があまりないので
–よくあるエラーでも書いてくれると非常
に助かるのだけど・・・
御清聴誠に感謝しております!
AgdaとCoqの違い
• 文法・開発言語
(OCaml vs. Haskell)
• 型体系(pCIC vs. Martin-Löf)
• 構造的帰納法(有無)
• 証明(tactic vs. term)
御清聴誠に感謝しております!
コード紹介
• データ型の宣言とかHaskellほ
とんどそのまま
• 関数の定義もほとんどそのま
ま
御清聴誠に感謝しております!
パターンマッチ
• 関数の定義部で行う
–依存型の処理もここで行う
• case文どこ行った!!
御清聴誠に感謝しております!
仕様と証明
• Curry-Howard対応を厳密に
使うAgdaは、
–仕様は型として
–証明は項として
記述する
御清聴誠に感謝しております!
Coqでいうrewrite相当
• 「あとこれを等式で書き換え
るだけ」
• 等価性のパターンマッチ
–パターンマッチを書く場所と同じ
レベルでrewriteという記述がある
が、まだよくわかっていない
御清聴誠に感謝しております!
パターンマッチの列
• 3つのbool値をそれぞれパター
ンマッチすると
–2×2×2=8回分岐
• しかもその分岐の後が同じ(ように
見える式)だとなんかこうもやもや
• 短く書きたいなあ・・・
御清聴誠に感謝しております!
パラメータの関係
• 引数に.(式)と書くとその引数を他の
引数を使って表現できる
– 例)同じ値しか引数に来ない、リストの
長さが渡される、などなど
• チュートリアルに例がいくつかある
が、どうやって関係性を解決してい
るのかよく分からない
– 便利なのは間違いないのだが
御清聴誠に感謝しております!
でも実は
• 仕事では全く困ってない
• せいぜいときどき依存型が
出てくるだけだから
–その意味ではプログラミングしや
すいので問題ない
御清聴誠に感謝しております!
仕事でAgda
• 証明?→No
• 依存型プログラミング?→
多分No(若干Yes?)
• じゃあなによ?
御清聴誠に感謝しております!
D-Caseというものを少々
御清聴誠に感謝しております!
D-Case in Agda
• Agda wikiからたどれる
–Windowsのみインストーラで提供
• しかもJava7をインストールしていると
止められる(Java6以前を要求)
• D-Caseとは
–議論の流れを表したもの
–多くは図
• 特にここでは木構造の図
御清聴誠に感謝しております!
AgdaからD-Caseを作る
• Agdaの型システムによって
– 分岐の網羅性
– パラメータの依存関係
などが検査・表現できる
• 通常、議論は
– 厳密でない
– 形式的に書きづらい
ため、postulate(仮定)を多用する
– 結果として証明はあまり書けない
御清聴誠に感謝しております!
だから
• まだ私は生きています
• まさかりはやめて!
御清聴誠に感謝しております!
以上です
御清聴誠に感謝しております!

Más contenido relacionado

Más de Sosuke MORIGUCHI

ProofSummit2014 : VSTでCの検証
ProofSummit2014 : VSTでCの検証ProofSummit2014 : VSTでCの検証
ProofSummit2014 : VSTでCの検証Sosuke MORIGUCHI
 
Curry-Howard同型から単純型付ラムダ計算の項を作る
Curry-Howard同型から単純型付ラムダ計算の項を作るCurry-Howard同型から単純型付ラムダ計算の項を作る
Curry-Howard同型から単純型付ラムダ計算の項を作るSosuke MORIGUCHI
 

Más de Sosuke MORIGUCHI (6)

fibsを読む
fibsを読むfibsを読む
fibsを読む
 
ProofSummit2014 : VSTでCの検証
ProofSummit2014 : VSTでCの検証ProofSummit2014 : VSTでCの検証
ProofSummit2014 : VSTでCの検証
 
A/F/C-orientation
A/F/C-orientationA/F/C-orientation
A/F/C-orientation
 
Proof Summit 2012
Proof Summit 2012Proof Summit 2012
Proof Summit 2012
 
Curry-Howard同型から単純型付ラムダ計算の項を作る
Curry-Howard同型から単純型付ラムダ計算の項を作るCurry-Howard同型から単純型付ラムダ計算の項を作る
Curry-Howard同型から単純型付ラムダ計算の項を作る
 
Cartesian Closed Category
Cartesian Closed CategoryCartesian Closed Category
Cartesian Closed Category
 

Nagoya Matsuri 2013 ぐだぐだAgda