Nagoya Matsuri 2013 ぐだぐだAgda
-
Upload
sosuke-moriguchi -
Category
Documents
-
view
969 -
download
2
description
Transcript of Nagoya Matsuri 2013 ぐだぐだAgda
ぐだぐだ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(仮定)を多用する – 結果として証明はあまり書けない
御清聴誠に感謝しております!
だから
• まだ私は生きています
• まさかりはやめて!
御清聴誠に感謝しております!
以上です
御清聴誠に感謝しております!