nagoya matsuri 2013 ぐだぐだagda

28
ぐだぐだAgda なごやまつり @chiguri 御清聴誠に感謝しております!

Upload: sosuke-moriguchi

Post on 25-May-2015

969 views

Category:

Documents


2 download

DESCRIPTION

Slide used in Nagoya (Chi-)Matsuri

TRANSCRIPT

Page 1: Nagoya Matsuri 2013 ぐだぐだAgda

ぐだぐだAgda

なごやちまつり

@chiguri

御清聴誠に感謝しております!

Page 2: Nagoya Matsuri 2013 ぐだぐだAgda

または

御清聴誠に感謝しております!

Page 3: Nagoya Matsuri 2013 ぐだぐだAgda

経験したのが7年前なだけの Coqユーザーが Agdaを仕事で 半年使っただけ

御清聴誠に感謝しております!

Page 5: Nagoya Matsuri 2013 ぐだぐだAgda

お前誰だよ

• 3月に無事博士号を 取得した元学生

• パンダ –鶏付き

• 通称chiguri

• 今神奈川大学

御清聴誠に感謝しております!

Page 6: Nagoya Matsuri 2013 ぐだぐだAgda

昨日のProofSummitで

• Abellaをべらべらしゃべった –これこそぐだぐだだった気もする

御清聴誠に感謝しております!

Page 7: Nagoya Matsuri 2013 ぐだぐだAgda

発表までの流れ

• 4月末に@tmiya_さん、@bleisさん、@kyon_mmさんと東京でお食事した

• 5月に@kyon_mmさんのつぶやきによりまつりの存在を知った

• 登録して数日後、発表者になっていた

御清聴誠に感謝しております!

Page 8: Nagoya Matsuri 2013 ぐだぐだAgda

なごやといえば?

• こわい

• なごやか

• まさかり

• きょん×ぶれ

• 関数型

• 証明 御清聴誠に感謝しております!

つまり

Agda Coq

Epigram などなど

爆発しろー

異論は 認める

Page 9: Nagoya Matsuri 2013 ぐだぐだAgda

さる事情から

• 仕事でAgdaを使うことに

• 今までCoqだったのに

• とりあえずAgdaの話をしよう

御清聴誠に感謝しております!

Page 10: Nagoya Matsuri 2013 ぐだぐだAgda

Agdaなグループ

• 今いる場所は、実にAgdaな グループ –Agda Implementors’ Meetingに行っている

• 開発に近い人が・・・ –ウカツなこと言えない!

–コワイ!

御清聴誠に感謝しております!

Page 11: Nagoya Matsuri 2013 ぐだぐだAgda

Wikipediaより

御清聴誠に感謝しております!

職場で隣に

います

Page 12: Nagoya Matsuri 2013 ぐだぐだAgda

おまけ:Agdaを Google先生に聞くと

• Agodaホテルの宣伝がでる –何度か試したせいで手元で出ない

御清聴誠に感謝しております!

Page 13: Nagoya Matsuri 2013 ぐだぐだAgda

脱線した

御清聴誠に感謝しております!

Page 14: Nagoya Matsuri 2013 ぐだぐだAgda

チュートリアル

• Agdaにももちろんある –しかも開発者謹製!

•ちょっと不親切な部分もある

–構文に関する説明があまりないので

–よくあるエラーでも書いてくれると非常に助かるのだけど・・・

御清聴誠に感謝しております!

Page 15: Nagoya Matsuri 2013 ぐだぐだAgda

AgdaとCoqの違い

• 文法・開発言語 (OCaml vs. Haskell)

• 型体系(pCIC vs. Martin-Löf)

• 構造的帰納法(有無)

• 証明(tactic vs. term)

御清聴誠に感謝しております!

Page 16: Nagoya Matsuri 2013 ぐだぐだAgda

コード紹介

• データ型の宣言とかHaskellほとんどそのまま

• 関数の定義もほとんどそのまま

御清聴誠に感謝しております!

Page 17: Nagoya Matsuri 2013 ぐだぐだAgda

パターンマッチ

• 関数の定義部で行う –依存型の処理もここで行う

• case文どこ行った!!

御清聴誠に感謝しております!

Page 18: Nagoya Matsuri 2013 ぐだぐだAgda

仕様と証明

• Curry-Howard対応を厳密に使うAgdaは、 –仕様は型として

–証明は項として

記述する

御清聴誠に感謝しております!

Page 19: Nagoya Matsuri 2013 ぐだぐだAgda

Coqでいうrewrite相当

• 「あとこれを等式で書き換えるだけ」

• 等価性のパターンマッチ –パターンマッチを書く場所と同じレベルでrewriteという記述があるが、まだよくわかっていない

御清聴誠に感謝しております!

Page 20: Nagoya Matsuri 2013 ぐだぐだAgda

パターンマッチの列

• 3つのbool値をそれぞれパターンマッチすると –2×2×2=8回分岐

•しかもその分岐の後が同じ(ように見える式)だとなんかこうもやもや

• 短く書きたいなあ・・・

御清聴誠に感謝しております!

Page 21: Nagoya Matsuri 2013 ぐだぐだAgda

パラメータの関係

• 引数に.(式)と書くとその引数を他の引数を使って表現できる –例)同じ値しか引数に来ない、リストの

長さが渡される、などなど

• チュートリアルに例がいくつかある

が、どうやって関係性を解決しているのかよく分からない –便利なのは間違いないのだが

御清聴誠に感謝しております!

Page 22: Nagoya Matsuri 2013 ぐだぐだAgda

でも実は

• 仕事では全く困ってない

• せいぜいときどき依存型が 出てくるだけだから –その意味ではプログラミングしやすいので問題ない

御清聴誠に感謝しております!

Page 23: Nagoya Matsuri 2013 ぐだぐだAgda

仕事でAgda

• 証明?→No

• 依存型プログラミング?→ 多分No(若干Yes?)

• じゃあなによ?

御清聴誠に感謝しております!

Page 24: Nagoya Matsuri 2013 ぐだぐだAgda

D-Caseというものを少々

御清聴誠に感謝しております!

Page 25: Nagoya Matsuri 2013 ぐだぐだAgda

D-Case in Agda

• Agda wikiからたどれる –Windowsのみインストーラで提供

• しかもJava7をインストールしていると止められる(Java6以前を要求)

• D-Caseとは –議論の流れを表したもの

–多くは図 • 特にここでは木構造の図

御清聴誠に感謝しております!

Page 26: Nagoya Matsuri 2013 ぐだぐだAgda

AgdaからD-Caseを作る

• Agdaの型システムによって – 分岐の網羅性 – パラメータの依存関係

などが検査・表現できる • 通常、議論は

– 厳密でない – 形式的に書きづらい

ため、postulate(仮定)を多用する – 結果として証明はあまり書けない

御清聴誠に感謝しております!

Page 27: Nagoya Matsuri 2013 ぐだぐだAgda

だから

• まだ私は生きています

• まさかりはやめて!

御清聴誠に感謝しております!

Page 28: Nagoya Matsuri 2013 ぐだぐだAgda

以上です

御清聴誠に感謝しております!