Slide 1

Slide 1 text

Isar勉強会 1 DeNA SWET 鈴木 穂高

Slide 2

Slide 2 text

対象読者 Isar初めての方 2 使用するリポジトリ https://github.com/DeNA/IsarTutorial ● IsarTutorial.thy ○ 資料に書かれているサンプルスクリプト全て ○ 練習問題 ● IsarTutorial_Answer.thy ○ 練習問題の解答例 使用するIsabelle ● Isabelle2021-1 (December 2021) ○ 2022年7月時点での最新版 ○ https://www.cl.cam.ac.uk/research/hvg/Isabelle/index.html からDL可能 ○ OSXであれば、brew install --cask isabelle でインストールすることも可能

Slide 3

Slide 3 text

目次 ● p04 - Isarの紹介 ● p08 - lemma, proof, rule, assume, show, from, by, qed ● p35 - have, assumes, shows, next ● p47 - fix, obtain ● p52 - moreover, ultimately, cases, subst ● p62 - induction, also, finally 3

Slide 4

Slide 4 text

Isarとは ● 構造的に証明を記述するための言語 ● Intelligible semiautomated reasoningの略 4 Isarで書かれた証明の特徴 ● 構造的 ● 何を証明しているのかを宣言する必要があるので、見ただけで何を証明しているのかが apply-scriptsスタイルより読みやすい

Slide 5

Slide 5 text

5 apply-scripts Isar

Slide 6

Slide 6 text

6 証明の書き始め方 1. theory ○ 理論名 ■ ファイル名と合わせる必要がある 2. imports ○ 読み込むライブラリを記述する 3. begin ○ 以降に証明を書く 合わせる

Slide 7

Slide 7 text

7 ウィンドウの説明 1. セオリーパネル ○ 証明を書くためのパネル 2. アウトプットパネル ○ 証明すべきゴールが表示されるパネル ○ 赤枠の “Proof state” のチェックと “Output”の選択をすると表示される 1 2

Slide 8

Slide 8 text

8 ウィンドウの説明 赤枠の”Auto update”にチェックをつけると アウトプットパネルには、カーソル位置におけるゴールが 表示される。カーソルを動かすとアウトプットパネルも 自動で更新される。 カーソル

Slide 9

Slide 9 text

9 Output thy これから証明する論理式 φ を宣言する。名前( a )をつけられる。証明できた φ を別の証明で使うときに名前を 使って参照する。lemma と同じ意味を持つコマンドとして theorem, corollary, proposition がある。 lemma a: φ

Slide 10

Slide 10 text

10 Output thy メソッド m1 を用いて、現在のゴールをrefineする。m1 でrefineの仕方を指定する。アウトプットパネルには、 m1 によってrefineされた新たなゴールが表示される。 proof m1 →導入により、 から 証明する命題を 変更 に変更

Slide 11

Slide 11 text

11 thm は thm_name を指定して定理を確認するためのコマンド。 thm thm_name 前提 帰結 thy Output 推論規則だと以下のようになる

Slide 12

Slide 12 text

12 本チュートリアルでよく使う定理 thy

Slide 13

Slide 13 text

13 Output rule メソッドを用いて、定理 thm を導入する。定理としてIsabelleにあらかじめ登録されているものや、自身で 導入したものを使用することができる。 定理 t1 rule thm 証明しようとしているゴール proof (rule t1) は帰結どうしをマッチさせることにより、refineされたゴールを生み出す refine マッチ refineでできた新しいゴール

Slide 14

Slide 14 text

14 Output rule thm Output カーソル 証明しようとしているゴール thy 定理 refineでできた新しいゴール マッチ proof (rule impI) でrefineする ?のついた変数は型が一致する任意の項にマッチする ?P は に置き換わり、 ?Q は に置き換わる。

Slide 15

Slide 15 text

15 Output thy 仮定 φ を導入する。名前( a )をつけられる。直前に導入した仮定は this で参照することができる。 φ は成り立つことがわかっているものでも、そうでないものでも良い。 assume a: φ1 [ and b: φ2 and … ]

Slide 16

Slide 16 text

16 Output thy 証明するゴール φ を宣言する。名前( a )をつけられる。 φ ではどんな論理式でも宣言できるわけではなく、証明しようとしているゴールしか宣言できない(詳細p18)。 show a: φ

Slide 17

Slide 17 text

Output 17 thy show で指定した φ を証明するのに使う fact (b1 b2 b3 …) を宣言する。assume で導入した仮定や、定理などが、 fact として使える。from に何を指定するかは、次の proof でどう refine するかによって決める。 from b1 [b2 b3 … ] from ab でもOK

Slide 18

Slide 18 text

18 証明するゴール φ を宣言する。名前( a )をつけられる。 φ ではどんな論理式でも宣言できるわけではなく、証明しようとしているゴールしか宣言できない。 show a: φ assume が不適切だと show が fail する show で宣言する論理式が不適切だと fail する

Slide 19

Slide 19 text

19 from で指定した this ( A ∧ B ) を使って、ゴール B ∧ A をrefineする。 ゴールを宣言して、proof で refine するのを繰り返していく。 Output thy

Slide 20

Slide 20 text

20 fact を指定して rule メソッドを使う場合、rule は elimination も行う。elimination は次のように refine をする。 from . . . show φ proof(rule thm) Output 定理 t1 証明しようとしているゴール from … show … に対して proof (rule t1) を用いると、帰結どうしのマッチに加え、前提どうしのマッチも 行い、refineされたゴールを生み出す。 refine マッチ refineでできた新しいゴール マッチ マッチ マッチ

Slide 21

Slide 21 text

21 Output thy fact を指定して rule メソッドを使う場合、rule は elimination も行う。 from . . . show φ proof (rule thm)

Slide 22

Slide 22 text

22 指定した fact の中にマッチできないものがあってはならない。 rule による elimination 注意事項(1/2) 定理 t1 証明しようとしているゴール マッチする前提がないとエラーになる

Slide 23

Slide 23 text

23 rule による elimination 注意事項(1/2) - 失敗例 Output thy マッチする マッチする c がマッチ conjE の前提にマッチしないので失敗している。

Slide 24

Slide 24 text

24 Output thy マッチする マッチする conjE の前提にマッチしない c を from から取り除く。 rule による elimination 注意事項(1/2) - 修正

Slide 25

Slide 25 text

25 fact を指定する順番は、マッチさせる定理の前提と同じ順番でないといけない。 rule による elimination 注意事項(2/2) 定理 t1 証明しようとしているゴール factとして1番目に指定しているQ2と、 定理の前提の2番目のX2をマッチさせることはできない。 同様に、factとして2番目に指定しているQ1と、 定理の前提の1番目のX1をマッチさせることはできない。

Slide 26

Slide 26 text

26 thy ?P にマッチするのは b、 ?Q にマッチするのは a なのに、a b の順番で from に指定しているため失敗している rule による elimination 注意事項(2/2) - 失敗例 Output

Slide 27

Slide 27 text

27 thy ?P にマッチするのは b、 ?Q にマッチするのは a なので、from a b から from b a に修正する rule による elimination 注意事項(2/2) - 修正 Output

Slide 28

Slide 28 text

Output 28 thy メソッド m1 によって証明を終えるためのコマンド。 メソッドは2つ指定でき、そうした場合 m1 を適用してできたゴールに m2 を適用して証明を終える。 by m1 [m2]

Slide 29

Slide 29 text

Output 29 thy メソッド m1 によって証明を終えるためのコマンド。 メソッドは2つ指定でき、そうした場合 m1 を適用してできたゴールに m2 を適用して証明を終える。 by m1 [m2] 赤枠の部分は次のようにも書ける

Slide 30

Slide 30 text

30 assume で複数の仮定を導入する場合、this の中身は assume で導入した全ての仮定を同じ順番で指す thy Output と and をつけた場合でも、 this の指すものは assume “B” “A” と変わらない。 の場合、this の指すものは “A” になる。 補足

Slide 31

Slide 31 text

Output 31 thy 残っているゴールを assumption と m2 を適用して証明を終える。proof と対にして使う。 今回は by (rule conjI) の時点で No subgoals! なので m2 を指定する必要はない。 qed [m2]

Slide 32

Slide 32 text

32 前ページの qed の時点で No subgoals! なので、この qed も引数を指定する必要はない。 Output thy

Slide 33

Slide 33 text

33 factや定理への名前の付け方 (isar-ref.pdf p4-5 “Naming Conventions”より抜粋) ● Lower-case が好まれる ● “意味のない”名前として自然数が用いられる 名前を付けずに参照する方法 assume で導入した仮定を参照する方法の1つとして、バッククウォートで仮定を囲むことによって参照することができる。 thy TIPS ※ 本資料では、a, ab といったものも名前として用いている

Slide 34

Slide 34 text

練習問題 ● Exer1-1 ● Exer1-2 34 thy Exer1-2 ヒント 外側のproofで導入したfactを参照することができる 練習問題と解答例の場所はp2をご覧ください。

Slide 35

Slide 35 text

35 thy 任意の論理式を証明するときには have を使う。 show で指定されたゴールに必要な中間ゴールを証明するときに用いる。 have a: φ

Slide 36

Slide 36 text

36 lemma を assumes, shows を使って書くことができる。assumes で導入した仮定は assms という名前がつく。 thy assumes, shows fact として登録される assumes で導入した仮定は assms(n) で参照できる assms(1) は を、assms(2) は を指す。 from と同じ意味。from assms(1) show “B ∧ C” と解釈すれば良い。 thy refineしない場合は、proof - と書く

Slide 37

Slide 37 text

37 複数の subgoal を証明する必要があるとき、各証明の区切りとして next コマンドを用いる。 context(factなど)は next を挟んで共有されない。 Output thy next

Slide 38

Slide 38 text

38 thy 複数の subgoal を証明する必要があるとき、各証明の区切りとして next コマンドを用いる。 context(factなど)は next を挟んで共有されない。 next

Slide 39

Slide 39 text

39 next の代わりに { … } を使っても良い。 thy { }

Slide 40

Slide 40 text

then = from this 40 thus = then show hence = then have with facts = from facts and this . = by this .. = by standard from facts (have|show) φ = (have|show) φ using facts TIPS (1/3) standard: 自動証明メソッドの一つ。context から rule の引数になりうるものを集めて rule を適用する。 sorry 証明したことにして次に進むためのコマンド 証明したことにした式はfactとして使える oops 証明を打ち切るためのコマンド

Slide 41

Slide 41 text

rule a を2回適用する。 41 proof proof - メソッドを適用しない場合は - をつける。 引数なしの場合、proof standard と同じ。 proof (rule a, rule b, …) 複数のメソッドを順に適用する。 proof ((rule a)+) TIPS (2/3) 定理中の変数に値を当てはめる 定理を当てはめて推論を前向きに進める sledgehammer Isabelleが自動で証明を進めるコマンド。 proof (rule a; rule b, …) 1番目のsubgoalに rule a を適用し、新しくできた各ゴールに rule b を適用する。

Slide 42

Slide 42 text

Query thy 42 Print Context で現在位置で参照できる fact や定理を見られる。 ?thesis は現在証明しようとしている帰結を指す。 TIPS (3/3)

Slide 43

Slide 43 text

43 then, “.”, ?thesis の使用例 with, “..” の使用例 thy thy

Slide 44

Slide 44 text

44 of, where の使用例 thy

Slide 45

Slide 45 text

45 proof (rule a, rule b, …), proof (rule a; rule b; …) の使用例 thy thy 1番目のゴールに assumption を適用して証明完了にし、残った2番目のゴールに assumption を適用する thy 1番目のゴールと2番目のゴール同時に assumption を適用する

Slide 46

Slide 46 text

練習問題 ● Exer2-1 ● Exer2-2 ● Exer2-3 ● Exer2-4 ● Exer2-5 自動証明を使うと簡単なので自動証明なしで解いてみましょう。 46

Slide 47

Slide 47 text

47 任意かつ固定された変数を導入する。 任意の値について証明するときは、固定された変数を導入して証明を進めることが多い。 Output thy fix x P y を show で指定するために、fix a::nat を使って 任意かつ固定された a を導入し、show に P a を指定している

Slide 48

Slide 48 text

48 任意かつ固定された変数を導入する。 任意の値について証明するときは、固定された変数を導入して証明を進めることが多い。 Output thy fix x fix で導入した変数を用いないと show で指定できない

Slide 49

Slide 49 text

thy 49 任意かつ固定された x と、fact P x を導入する。obtain … where … が示すsubgoalの証明が必要。 Query obtain x where P x

Slide 50

Slide 50 text

thy 50 Print Context で現在位置で参照できる fact や定理を見られる。 赤枠で囲んだところをチェックし、Apply ボタンを押すと表示される。 Query TIPS

Slide 51

Slide 51 text

練習問題 ● Exer3-1 ● Exer3-2 ● Exer3-3 ○ obtain を使わずに証明してみましょう ● Exer3-4(難) 51

Slide 52

Slide 52 text

52 thy thy moreover を使うと、後で参照するfactに名前をつけなくてよくなる moreover … ultimately …

Slide 53

Slide 53 text

53 thy moreover … ultimately … moreover は、calculation という専用の箱に fact を詰め込む。 moreover は、note calculation = calculation this と同じ意味である。 Output

Slide 54

Slide 54 text

54 thy moreover … ultimately … Output moreover は、calculation という専用の箱に fact を詰め込む。 moreover は、note calculation = calculation this と同じ意味である。

Slide 55

Slide 55 text

55 thy moreover … ultimately … ultimately は、calculation に fact を詰め込むのと同時に、calculation に詰め込まれた全ての fact を使って 証明することを示す。ultimately は moreover from calculation と同じ意味である。 Output

Slide 56

Slide 56 text

56 cases Output thy 場合分けをして証明する。cases “P” を使うと、P が True のときでも False の時でも 命題 P ∨ ¬P が True になることを証明する流れになる。 proof (cases “P”) まで入力すると、Isabelle が証明のアウトラインを アウトプットパネルに出力してくれる。 アウトプットパネルのグレーでハイライトされた部分にカーソルを 合わせて、クリックすると証明が補完される。

Slide 57

Slide 57 text

57 TIPS Query thy Print Context で、 cases により更新された context を参照できる。

Slide 58

Slide 58 text

1. eq_thm を使って帰結側の変数を置き換える 58 2. eq_thm の左辺と右辺を入れ換えたものを使って、帰結側の変数を置き換える thy thy unfolding eq_thm, symmetric 等式 fact を使って前提や帰結の論理式に含まれる変数を置き換えるコマンド。

Slide 59

Slide 59 text

1. factを使って帰結側の変数を置き換える 59 2. factを使って帰結側の2番目の変数だけを置き換える thy thy subst (asm) (i .. j) eq_thm 等式 fact を使って前提や帰結の論理式に含まれる変数を置き換えるコマンド。 数字の指定がないときは (1) が指定されたものと見なされる。 1番目も2番目も両方置き換えたい時は (1 2) とする。

Slide 60

Slide 60 text

3. factを使って前提側の変数を置き換える 60 4. factを使って前提側の2番目の変数だけを置き換える 数字の指定がないときは (1) が指定されたものと見なされる。 1番目も2番目も両方置き換えたい時は (1 2) とする。 thy thy subst (asm) (i .. j) eq_thm 等式 fact を使って前提や帰結の論理式に含まれる変数を置き換えるコマンド。

Slide 61

Slide 61 text

練習問題 ● Exer4-1 ○ moreover, ultimately を使って解いてみましょう ● Exer4-2 ○ moreover, ultimately を使って解いてみましょう。穴埋め問題です。 ● Exer4-3 ● Exer4-4 ● Exer4-5(難) 61

Slide 62

Slide 62 text

62 thy induction メソッドは帰納法で証明を進めるためのメソッド。 Output induction 自動証明メソッド アウトプットパネルのグレーでハイライトされた部分を クリックすると証明が補完される。

Slide 63

Slide 63 text

63 thy induction メソッドは帰納法で証明を進めるためのメソッド。 Output induction fact が追加されている。 自動証明しない場合はこれらのfactを使って証明を進める。 IHは induction hypotheses の略。

Slide 64

Slide 64 text

64 thy also … finally … 推移律(例: ?r = ?s ⟹ ?s = ?t ⟹ ?r = ?t )を用いて等式や不等式を繋げて証明したいときに便利な記法。 1番目の also は note calculation = this、n番目の also は note calculation = trans [OF calculation this]、 finally は also from calculation と同じ意味である。

Slide 65

Slide 65 text

65 also … finally … 推移律(例: ?r = ?s ⟹ ?s = ?t ⟹ ?r = ?t )を用いて等式や不等式を繋げて証明したいときに便利な記法。 1番目の also は note calculation = this、n番目の also は note calculation = trans [OF calculation this]、 finally は also from calculation と同じ意味である。 thy 直前の等式・不等式などの右辺を指す。 赤枠で囲まれた … は b を指す。 also, finally を使わずに書き直した証明 (cal は calculation のこと) thy

Slide 66

Slide 66 text

66 also … finally … 推移律(例: ?r = ?s ⟹ ?s = ?t ⟹ ?r = ?t )を用いて等式や不等式を繋げて証明したいときに便利な記法。 1番目の also は note calculation = this、n番目の also は note calculation = trans [OF calculation this]、 finally は also from calculation と同じ意味である。 thy 直前の等式・不等式などの右辺を指す。 赤枠で囲まれた … は b を指す。 also, finally を使わずに書き直した証明 (cal は calculation のこと) thy trans[OF cal this] が a = c になる解説 (OF の説明はp41)

Slide 67

Slide 67 text

練習問題 ● Exer5-1 67

Slide 68

Slide 68 text

参考文献 ● prog-prove ○ https://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/Isabelle2021-1/doc/prog-prove.pdf ● リファレンスマニュアル ○ https://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/Isabelle2021-1/doc/isar-ref.pdf ● Jedit ○ https://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/Isabelle2021-1/doc/jedit.pdf 68