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

ProofSummit2013 べらべらAbella

May 25, 2015

Download

Documents

Explanation of (a small portion of) Abella proof assistant in Japanese.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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の証明時に面倒なことを回避

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