37
べらべらAbella @chiguri ProofSummit2013 御清聴誠に感謝しております!

ProofSummit2013 べらべらAbella

Embed Size (px)

DESCRIPTION

Explanation of (a small portion of) Abella proof assistant in Japanese.

Citation preview

Page 1: ProofSummit2013 べらべらAbella

べらべらAbella

@chiguri

ProofSummit2013

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

Page 2: ProofSummit2013 べらべらAbella

お前誰だよ

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

•パンダ –鶏付き

•通称chiguri

•今神奈川大学

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

Page 3: ProofSummit2013 べらべらAbella

明日のなごやちまつりで

•ぐだぐだとAgdaを話す予定

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

Page 4: ProofSummit2013 べらべらAbella

7月某日

• ML:「Abella2.0出たよ」

• chiguri:「ふうん・・・今度調べよっと」 (結局ほとんど 調べてません)

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

Page 5: ProofSummit2013 べらべらAbella

数日後

• 「ProofSummitで話せ?」

•「Yes, Sir!」

9割くらい フィクションです

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

Page 6: ProofSummit2013 べらべらAbella

二つの偶然が重なり

• Abellaを話すことにした – ちまつりでAgda話すし

–去年のCPPにも出てきたし

–ちょっと使ったことあるし

•一応今も使ってる

• うまく話せるか分からないけど

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

Page 7: ProofSummit2013 べらべらAbella

今日の話の視点

•主にCoqユーザから見たAbella –特にプログラミング側

• 2.0?なんの話ですかね。

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

Page 8: ProofSummit2013 べらべらAbella

Abellaって?

• http://abella-prover.org/

•ミネソタ大・INRIA Saclay・Ecole Polytechniqueで開発 –実装はOCaml(OPAMで入る)

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

Page 9: ProofSummit2013 べらべらAbella

Abellaの原理

•論理型プログラミング言語と論理による証明器 –二段階論理(two-level logic)

–c.f. Coq/Agdaは関数型言語 » 構成的型理論とCurry-Howard対応って言わないとダメです?

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

Page 10: ProofSummit2013 べらべらAbella

Abellaの二段階論理

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

λ-Prolog

System G

Specification Logic

Reasoning Logic

Page 11: ProofSummit2013 べらべらAbella

今回の話は

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

λ-Prolog

System G

Specification Logic

Reasoning Logic

Page 12: ProofSummit2013 べらべらAbella

Specification Logic

• λ-Prologのサブセット –もう少し詳しく言うと、hereditary Harrop Formulaとlambda-tree syntax

•だけどここでは説明しない

–目的はそこじゃない

–hereditary~は英語のwikipediaにある

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

Page 13: ProofSummit2013 べらべらAbella

Coqerから見たAbella

• 論理型言語だけど、慣れれば 大したことない –少し覚えれば関数っぽく書ける

• Coqで意味をPropで書くようなもの

• 証明は慣れないが、そこはなんとかする –エラーメッセージもマニュアルもあまり親切じゃない

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

Page 14: ProofSummit2013 べらべらAbella

Abellaのソース構成

• xxx.sig –signature:型、コンストラクタ、述語の型宣言

• xxx.mod –module:述語の推論規則

• xxx.thm –theorem:性質の証明

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

Page 15: ProofSummit2013 べらべらAbella

Abellaの型

• 型の宣言 –kind nat type.

• コンストラクタの宣言 –type z nat.

–type s nat -> nat.

• 名称の最初は大文字不可

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

Page 16: ProofSummit2013 べらべらAbella

注意

•型は代数的データ構造とほぼ同じだが、構造帰納法は使えない –その場合「natである」という述語を作る必要がある

•原則として「述語に関する帰納法」しか使えない

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

Page 17: ProofSummit2013 べらべらAbella

Abellaの述語

•述語の型: 引数 -> 引数 -> ... -> o

• oが命題を表す型 –o ≈ CoqにおけるProp

• Reasoning logicではpropという型が

–引数を与えると命題として使える

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

Page 18: ProofSummit2013 べらべらAbella

例えばこんな

•シグネチャ

–type is_nat nat -> o.

–type even nat -> bool -> o.

•推論

–is_nat z.

–is_nat (s N) :- is_nat N.

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

Page 19: ProofSummit2013 べらべらAbella

特徴を二つ

• 資料作成のやる気時間の問題

• Coqerがうらやましいなあ、と思うやつ

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

Page 20: ProofSummit2013 べらべらAbella

特徴1

•高階抽象構文(HOAS)が 使える –Isabelleユーザは知ってるはず

• Isabelle/HOLで使えるらしい

–CoqやAgdaでは不可能

• Positivity conditionに引っかかる

• Parametric HOASがあるにはあるが、あの

使いにくさときたら・・・ぶつぶつ

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

Page 21: ProofSummit2013 べらべらAbella

HOAS

•表現したい言語の変数を使っている言語の変数で表す –例:ラムダ計算の変数をλ-Prologの変数で表現

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

Page 22: ProofSummit2013 べらべらAbella

ラムダ計算を言語で 表現するとき

•変数どうしよう? –頭の痛い問題の一つ

–文字列?

–自然数? • de Bruijn index?

•束縛関係や置き換えの面倒くささがエラーとつらみを誘う

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

Page 23: ProofSummit2013 べらべらAbella

ラムダ式の束縛

• λx. xを考えると、ほしいのは –λの後のxと後ろのxが関係する

–置換するときは後ろのxが置き換えられる

–画面出力?置いておいてください。

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

Page 24: ProofSummit2013 べらべらAbella

じゃあ

• fun x : term => x – termはλ項とする

–型はterm -> term •何かλ項を与えるとそれがそのまま返ってくる

• 一応ラベルとしてコンストラクタを使用する – lam (fun x : term => x)

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

Page 25: ProofSummit2013 べらべらAbella

λ項の定義

•適用 –app : term * term -> term

•抽象 –lam : (term -> term) -> term

•以上!

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

Page 26: ProofSummit2013 べらべらAbella

λ-Prologでは

•適用しか書かない・・・ –不思議とどの例を見ても抽象が見あたらない

–多分書ける・・・はず・・・

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

Page 27: ProofSummit2013 べらべらAbella

HOASは

•別にラムダ式には限らない –変数束縛を記述言語に任せるのが本質

–局所変数などを表現するのも可能

•言語などの表現に限る気はする

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

Page 28: ProofSummit2013 べらべらAbella

特徴2

•推論、終わらなくてもいいよ

•えっ

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

Page 29: ProofSummit2013 べらべらAbella

お馬鹿なeven

• even z t.

• even (s N) B :- odd N B.

• odd z f.

• odd N B :- even (s N) B

• 1より大きい自然数で推論不能 –お馬鹿なのはoddだけど

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

Page 30: ProofSummit2013 べらべらAbella

evenと何かの 乗算結果はeven

•お馬鹿なevenでもこれが証明できる –証明が変なのだが

•普通なら、「同じ値を二回足したら偶数」などの補題が必要

• 0のケースしか出ない

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

Page 31: ProofSummit2013 べらべらAbella

どういうことか

•推論が仮定にある

•推論ができる

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

Page 32: ProofSummit2013 べらべらAbella

つまり

• even N tという仮定があるとしたら、 –推論が終わって

–判定がtとなる

–そんなNだった

•ということ –そうじゃないNなんて知らない

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

Page 33: ProofSummit2013 べらべらAbella

全域性

• forall N, {is_nat N} -> exists B, {is_bool B} -> {even N B}

–「全ての入力(と思ってる変数)に対して出力(と思ってる何か)が存在する」 • これだけでは必ず停止するとも一意になるとも言っていないが

– is_natに関する帰納法を用いて証明する • existsの位置を間違えると帰納法が使えないので注意

• is_bool忘れたら証明が進まないのでさらに注意

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

Page 34: ProofSummit2013 べらべらAbella

今日の話はこんなところ

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

Page 35: ProofSummit2013 べらべらAbella

他にも

• Reasoning Logicの側ではnabla-quantifierという面白いものも –常に「今まで出てきた値と異なる」ものを表す

• Lispのgensymみたいなことができる

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

Page 36: ProofSummit2013 べらべらAbella

2.0何が変わった?

• 高階仕様がサポートされたよ • 文脈依存の命題の証明が変わったよ

• 日本語でおk(特に後者) •アナウンス英語ですけどね •例がexamplesのどこかにある(だけ)らしいのだが始めて5分であきらめた

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

Page 37: ProofSummit2013 べらべらAbella

Abellaでやってること

•昔(といっても二年前)作った計算の合流性の証明 –HOAS便利すぐる

–Complete Developmentという 手法を使おうとしているが・・・

• parallel betaの証明時に面倒なことを回避

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