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勉強会
    1
    DeNA SWET 鈴木 穂高

    View Slide

  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 でインストールすることも可能

    View Slide

  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

    View Slide

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

    View Slide

  5. 5
    apply-scripts Isar

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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 - と書く

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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
    証明を打ち切るためのコマンド

    View Slide

  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 を適用する。

    View Slide

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

    View Slide

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

    View Slide

  44. 44
    of, where の使用例
    thy

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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 と同じ意味である。

    View Slide

  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

    View Slide

  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)

    View Slide

  67. 練習問題
    ● Exer5-1
    67

    View Slide

  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

    View Slide