Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Isar勉強会

 Isar勉強会

DeNA SWETメンバー向けにIsar勉強会を開催しました。
その時に使った資料です。

練習問題リポジトリ: https://github.com/DeNA/IsarTutorial

ブログ記事 ( https://swet.dena.com/entry/2022/08/04/181425 ) も合わせてご覧ください。

693ed679c8dde3eccbc682ff44f357e1?s=128

Hodaka Suzuki

August 04, 2022
Tweet

More Decks by Hodaka Suzuki

Other Decks in Programming

Transcript

  1. Isar勉強会 1 DeNA SWET 鈴木 穂高

  2. 対象読者 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 でインストールすることも可能
  3. 目次 • 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
  4. Isarとは • 構造的に証明を記述するための言語 • Intelligible semiautomated reasoningの略 4 Isarで書かれた証明の特徴 •

    構造的 • 何を証明しているのかを宣言する必要があるので、見ただけで何を証明しているのかが apply-scriptsスタイルより読みやすい
  5. 5 apply-scripts Isar

  6. 6 証明の書き始め方 1. theory ◦ 理論名 ▪ ファイル名と合わせる必要がある 2. imports

    ◦ 読み込むライブラリを記述する 3. begin ◦ 以降に証明を書く 合わせる
  7. 7 ウィンドウの説明 1. セオリーパネル ◦ 証明を書くためのパネル 2. アウトプットパネル ◦ 証明すべきゴールが表示されるパネル

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

  9. 9 Output thy これから証明する論理式 φ を宣言する。名前( a )をつけられる。証明できた φ を別の証明で使うときに名前を

    使って参照する。lemma と同じ意味を持つコマンドとして theorem, corollary, proposition がある。 lemma a: φ
  10. 10 Output thy メソッド m1 を用いて、現在のゴールをrefineする。m1 でrefineの仕方を指定する。アウトプットパネルには、 m1 によってrefineされた新たなゴールが表示される。 proof

    m1 →導入により、 から 証明する命題を 変更 に変更
  11. 11 thm は thm_name を指定して定理を確認するためのコマンド。 thm thm_name 前提 帰結 thy

    Output 推論規則だと以下のようになる
  12. 12 本チュートリアルでよく使う定理 thy

  13. 13 Output rule メソッドを用いて、定理 thm を導入する。定理としてIsabelleにあらかじめ登録されているものや、自身で 導入したものを使用することができる。 定理 t1 rule

    thm 証明しようとしているゴール proof (rule t1) は帰結どうしをマッチさせることにより、refineされたゴールを生み出す refine マッチ refineでできた新しいゴール
  14. 14 Output rule thm Output カーソル 証明しようとしているゴール thy 定理 refineでできた新しいゴール

    マッチ proof (rule impI) でrefineする ?のついた変数は型が一致する任意の項にマッチする ?P は に置き換わり、 ?Q は に置き換わる。
  15. 15 Output thy 仮定 φ を導入する。名前( a )をつけられる。直前に導入した仮定は this で参照することができる。

    φ は成り立つことがわかっているものでも、そうでないものでも良い。 assume a: φ1 [ and b: φ2 and … ]
  16. 16 Output thy 証明するゴール φ を宣言する。名前( a )をつけられる。 φ ではどんな論理式でも宣言できるわけではなく、証明しようとしているゴールしか宣言できない(詳細p18)。

    show a: φ
  17. Output 17 thy show で指定した φ を証明するのに使う fact (b1 b2

    b3 …) を宣言する。assume で導入した仮定や、定理などが、 fact として使える。from に何を指定するかは、次の proof でどう refine するかによって決める。 from b1 [b2 b3 … ] from ab でもOK
  18. 18 証明するゴール φ を宣言する。名前( a )をつけられる。 φ ではどんな論理式でも宣言できるわけではなく、証明しようとしているゴールしか宣言できない。 show a:

    φ assume が不適切だと show が fail する show で宣言する論理式が不適切だと fail する
  19. 19 from で指定した this ( A ∧ B ) を使って、ゴール

    B ∧ A をrefineする。 ゴールを宣言して、proof で refine するのを繰り返していく。 Output thy
  20. 20 fact を指定して rule メソッドを使う場合、rule は elimination も行う。elimination は次のように refine

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

    from . . . show φ proof (rule thm)
  22. 22 指定した fact の中にマッチできないものがあってはならない。 rule による elimination 注意事項(1/2) 定理 t1

    証明しようとしているゴール マッチする前提がないとエラーになる
  23. 23 rule による elimination 注意事項(1/2) - 失敗例 Output thy マッチする

    マッチする c がマッチ conjE の前提にマッチしないので失敗している。
  24. 24 Output thy マッチする マッチする conjE の前提にマッチしない c を from

    から取り除く。 rule による elimination 注意事項(1/2) - 修正
  25. 25 fact を指定する順番は、マッチさせる定理の前提と同じ順番でないといけない。 rule による elimination 注意事項(2/2) 定理 t1 証明しようとしているゴール

    factとして1番目に指定しているQ2と、 定理の前提の2番目のX2をマッチさせることはできない。 同様に、factとして2番目に指定しているQ1と、 定理の前提の1番目のX1をマッチさせることはできない。
  26. 26 thy ?P にマッチするのは b、 ?Q にマッチするのは a なのに、a b

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

    b から from b a に修正する rule による elimination 注意事項(2/2) - 修正 Output
  28. Output 28 thy メソッド m1 によって証明を終えるためのコマンド。 メソッドは2つ指定でき、そうした場合 m1 を適用してできたゴールに m2

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

    を適用して証明を終える。 by m1 [m2] 赤枠の部分は次のようにも書ける
  30. 30 assume で複数の仮定を導入する場合、this の中身は assume で導入した全ての仮定を同じ順番で指す thy Output と and

    をつけた場合でも、 this の指すものは assume “B” “A” と変わらない。 の場合、this の指すものは “A” になる。 補足
  31. Output 31 thy 残っているゴールを assumption と m2 を適用して証明を終える。proof と対にして使う。 今回は

    by (rule conjI) の時点で No subgoals! なので m2 を指定する必要はない。 qed [m2]
  32. 32 前ページの qed の時点で No subgoals! なので、この qed も引数を指定する必要はない。 Output

    thy
  33. 33 factや定理への名前の付け方 (isar-ref.pdf p4-5 “Naming Conventions”より抜粋) • Lower-case が好まれる •

    “意味のない”名前として自然数が用いられる 名前を付けずに参照する方法 assume で導入した仮定を参照する方法の1つとして、バッククウォートで仮定を囲むことによって参照することができる。 thy TIPS ※ 本資料では、a, ab といったものも名前として用いている
  34. 練習問題 • Exer1-1 • Exer1-2 34 thy Exer1-2 ヒント 外側のproofで導入したfactを参照することができる

    練習問題と解答例の場所はp2をご覧ください。
  35. 35 thy 任意の論理式を証明するときには have を使う。 show で指定されたゴールに必要な中間ゴールを証明するときに用いる。 have a: φ

  36. 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 - と書く
  37. 37 複数の subgoal を証明する必要があるとき、各証明の区切りとして next コマンドを用いる。 context(factなど)は next を挟んで共有されない。 Output

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

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

  40. 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 証明を打ち切るためのコマンド
  41. 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 を適用する。
  42. Query thy 42 Print Context で現在位置で参照できる fact や定理を見られる。 ?thesis は現在証明しようとしている帰結を指す。

    TIPS (3/3)
  43. 43 then, “.”, ?thesis の使用例 with, “..” の使用例 thy thy

  44. 44 of, where の使用例 thy

  45. 45 proof (rule a, rule b, …), proof (rule a;

    rule b; …) の使用例 thy thy 1番目のゴールに assumption を適用して証明完了にし、残った2番目のゴールに assumption を適用する thy 1番目のゴールと2番目のゴール同時に assumption を適用する
  46. 練習問題 • Exer2-1 • Exer2-2 • Exer2-3 • Exer2-4 •

    Exer2-5 自動証明を使うと簡単なので自動証明なしで解いてみましょう。 46
  47. 47 任意かつ固定された変数を導入する。 任意の値について証明するときは、固定された変数を導入して証明を進めることが多い。 Output thy fix x P y を

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

    で指定できない
  49. thy 49 任意かつ固定された x と、fact P x を導入する。obtain … where

    … が示すsubgoalの証明が必要。 Query obtain x where P x
  50. thy 50 Print Context で現在位置で参照できる fact や定理を見られる。 赤枠で囲んだところをチェックし、Apply ボタンを押すと表示される。 Query

    TIPS
  51. 練習問題 • Exer3-1 • Exer3-2 • Exer3-3 ◦ obtain を使わずに証明してみましょう

    • Exer3-4(難) 51
  52. 52 thy thy moreover を使うと、後で参照するfactに名前をつけなくてよくなる moreover … ultimately …

  53. 53 thy moreover … ultimately … moreover は、calculation という専用の箱に fact

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

    fact を詰め込む。 moreover は、note calculation = calculation this と同じ意味である。
  55. 55 thy moreover … ultimately … ultimately は、calculation に fact

    を詰め込むのと同時に、calculation に詰め込まれた全ての fact を使って 証明することを示す。ultimately は moreover from calculation と同じ意味である。 Output
  56. 56 cases Output thy 場合分けをして証明する。cases “P” を使うと、P が True のときでも

    False の時でも 命題 P ∨ ¬P が True になることを証明する流れになる。 proof (cases “P”) まで入力すると、Isabelle が証明のアウトラインを アウトプットパネルに出力してくれる。 アウトプットパネルのグレーでハイライトされた部分にカーソルを 合わせて、クリックすると証明が補完される。
  57. 57 TIPS Query thy Print Context で、 cases により更新された context

    を参照できる。
  58. 1. eq_thm を使って帰結側の変数を置き換える 58 2. eq_thm の左辺と右辺を入れ換えたものを使って、帰結側の変数を置き換える thy thy unfolding

    eq_thm, symmetric 等式 fact を使って前提や帰結の論理式に含まれる変数を置き換えるコマンド。
  59. 1. factを使って帰結側の変数を置き換える 59 2. factを使って帰結側の2番目の変数だけを置き換える thy thy subst (asm) (i

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

    2) とする。 thy thy subst (asm) (i .. j) eq_thm 等式 fact を使って前提や帰結の論理式に含まれる変数を置き換えるコマンド。
  61. 練習問題 • Exer4-1 ◦ moreover, ultimately を使って解いてみましょう • Exer4-2 ◦

    moreover, ultimately を使って解いてみましょう。穴埋め問題です。 • Exer4-3 • Exer4-4 • Exer4-5(難) 61
  62. 62 thy induction メソッドは帰納法で証明を進めるためのメソッド。 Output induction 自動証明メソッド アウトプットパネルのグレーでハイライトされた部分を クリックすると証明が補完される。

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

    induction hypotheses の略。
  64. 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 と同じ意味である。
  65. 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
  66. 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)
  67. 練習問題 • Exer5-1 67

  68. 参考文献 • 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