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 ) も合わせてご覧ください。

Hodaka Suzuki

August 04, 2022
Tweet

More Decks by Hodaka Suzuki

Other Decks in Programming

Transcript

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

    構造的 • 何を証明しているのかを宣言する必要があるので、見ただけで何を証明しているのかが apply-scriptsスタイルより読みやすい
  4. 6 証明の書き始め方 1. theory ◦ 理論名 ▪ ファイル名と合わせる必要がある 2. imports

    ◦ 読み込むライブラリを記述する 3. begin ◦ 以降に証明を書く 合わせる
  5. 9 Output thy これから証明する論理式 φ を宣言する。名前( a )をつけられる。証明できた φ を別の証明で使うときに名前を

    使って参照する。lemma と同じ意味を持つコマンドとして theorem, corollary, proposition がある。 lemma a: φ
  6. 13 Output rule メソッドを用いて、定理 thm を導入する。定理としてIsabelleにあらかじめ登録されているものや、自身で 導入したものを使用することができる。 定理 t1 rule

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

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

    φ は成り立つことがわかっているものでも、そうでないものでも良い。 assume a: φ1 [ and b: φ2 and … ]
  9. Output 17 thy show で指定した φ を証明するのに使う fact (b1 b2

    b3 …) を宣言する。assume で導入した仮定や、定理などが、 fact として使える。from に何を指定するかは、次の proof でどう refine するかによって決める。 from b1 [b2 b3 … ] from ab でもOK
  10. 19 from で指定した this ( A ∧ B ) を使って、ゴール

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

    をする。 from . . . show φ proof(rule thm) Output 定理 t1 証明しようとしているゴール from … show … に対して proof (rule t1) を用いると、帰結どうしのマッチに加え、前提どうしのマッチも 行い、refineされたゴールを生み出す。 refine マッチ refineでできた新しいゴール マッチ マッチ マッチ
  12. 23 rule による elimination 注意事項(1/2) - 失敗例 Output thy マッチする

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

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

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

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

    b から from b a に修正する rule による elimination 注意事項(2/2) - 修正 Output
  17. 30 assume で複数の仮定を導入する場合、this の中身は assume で導入した全ての仮定を同じ順番で指す thy Output と and

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

    by (rule conjI) の時点で No subgoals! なので m2 を指定する必要はない。 qed [m2]
  19. 33 factや定理への名前の付け方 (isar-ref.pdf p4-5 “Naming Conventions”より抜粋) • Lower-case が好まれる •

    “意味のない”名前として自然数が用いられる 名前を付けずに参照する方法 assume で導入した仮定を参照する方法の1つとして、バッククウォートで仮定を囲むことによって参照することができる。 thy TIPS ※ 本資料では、a, ab といったものも名前として用いている
  20. 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 - と書く
  21. 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 証明を打ち切るためのコマンド
  22. 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 を適用する。
  23. 45 proof (rule a, rule b, …), proof (rule a;

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

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

    show で指定するために、fix a::nat を使って 任意かつ固定された a を導入し、show に P a を指定している
  26. thy 49 任意かつ固定された x と、fact P x を導入する。obtain … where

    … が示すsubgoalの証明が必要。 Query obtain x where P x
  27. 53 thy moreover … ultimately … moreover は、calculation という専用の箱に fact

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

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

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

    False の時でも 命題 P ∨ ¬P が True になることを証明する流れになる。 proof (cases “P”) まで入力すると、Isabelle が証明のアウトラインを アウトプットパネルに出力してくれる。 アウトプットパネルのグレーでハイライトされた部分にカーソルを 合わせて、クリックすると証明が補完される。
  31. 1. eq_thm を使って帰結側の変数を置き換える 58 2. eq_thm の左辺と右辺を入れ換えたものを使って、帰結側の変数を置き換える thy thy unfolding

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

    .. j) eq_thm 等式 fact を使って前提や帰結の論理式に含まれる変数を置き換えるコマンド。 数字の指定がないときは (1) が指定されたものと見なされる。 1番目も2番目も両方置き換えたい時は (1 2) とする。
  33. 練習問題 • Exer4-1 ◦ moreover, ultimately を使って解いてみましょう • Exer4-2 ◦

    moreover, ultimately を使って解いてみましょう。穴埋め問題です。 • Exer4-3 • Exer4-4 • Exer4-5(難) 61
  34. 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 と同じ意味である。
  35. 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
  36. 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)