# HG changeset patch # User atton # Date 1487054703 -32400 # Node ID c195713cf7d7e3a76082a34c60fcebdf894af42e # Parent 137aae675a94c079e2a96dd110141f63204ba87b Update slide diff -r 137aae675a94 -r c195713cf7d7 presentation/slide.html --- a/presentation/slide.html Tue Feb 14 15:03:04 2017 +0900 +++ b/presentation/slide.html Tue Feb 14 15:45:03 2017 +0900 @@ -86,7 +86,7 @@ @@ -129,22 +129,7 @@
-

本発表ではモデル検査的アプローチについて中心に見ていきます

- - - -
-
- -

モデル検査的アプローチについての流れ

+

モデル検査的アプローチについての流れ

-

メタ計算

+

メタ計算

-

赤黒木

+

赤黒木

-

仕様の記述とその確認

+

仕様の記述とその確認

-

チェックする仕様

+

チェックする仕様

__code verifySpecificationFinish(struct Context* context) {
@@ -405,7 +390,7 @@
           
  • 赤黒木の状態の保存、挿入、チェック、次の状態の列挙、赤黒木の再現……
  • -
  • その度に仕様の式は成り立つかをチェックする
  • +
  • 挿入する度に仕様の式が成り立つかをチェック
  • ノーマルレベルのコードを検証用に変更せず検証可能
  • @@ -456,6 +441,57 @@
    +

    Agda における証明

    +
      +
    • Curry-Howard Isomorphism による型付きラムダ計算と自然演繹の対応 +
        +
      • 自然演繹: 命題、ならば、かつ、または、で構成される証明システム
      • +
      +
    • +
    • 論理式は型に相当して、証明はその値の導出
    • +
    • 三段論法の証明は以下のようになる +
        +
      • 「((A ならば B) かつ (B ならば C)) ならば (A ならば C)
      • +
      +
    • +
    + +
    f : {A B C : Set} -> ((A -> B) × (B -> C)) -> (A -> C)
    +f = \p x -> (snd p) ((fst p) x)
    +
    + + +
    +
    + +

    Agda における等式の証明

    +
      +
    • Agda では等式も証明できる +
        +
      • 依存型という型を変数として扱える型システムを持つ
      • +
      • 型を取って型を返す型などが定義可能
      • +
      +
    • +
    • 等式の証明は両方が同じ項に簡約されることを示せば良い
    • +
    • 自然数の加法の交換法則は以下のようになる
    • +
    + +
    addSym : (n m : Nat) -> n + m ≡ m + n
    +addSym O       O   = refl
    +addSym O    (S m)  = cong S (addSym O m)
    +addSym (S n)   O   = cong S (addSym n O)
    +addSym (S n) (S m) = begin
    +  (S n) + (S m)  ≡⟨ refl ⟩
    +  S (n + S m)    ≡⟨ cong S (addSym n (S m)) ⟩
    +  S ((S m) + n)  ≡⟨ addToRight (S m) n ⟩
    +  S (m + S n)    ≡⟨ refl ⟩
    +  (S m) + (S n)  ∎
    +
    + + +
    +
    +

    Agda と DataSegment

    • CbC の DataSegment は Agda のレコード型 @@ -503,7 +539,7 @@
    -

    メタレベルの型付け

    +

    メタレベルの型付け

    • メタ計算とは通常のレベルとは区別された計算
    • 任意の通常のレベルの計算を扱えなくてはならない @@ -524,7 +560,7 @@
    -

    Agda 上のメタ計算

    +

    Agda 上のメタ計算

    • ノーマルレベルの型を保持したままメタレベルの計算を利用できる
        @@ -549,6 +585,34 @@
    +

    Agda 上で証明できた性質

    +
      +
    • CodeSegment の合成則
    • +
    + +
    comp-associative : > (a : CodeSegment A B) (b : CodeSegment C D) (c : CodeSegment E F)
    +                   -> csComp  c (csComp b a) ≡ csComp  (csComp c b) a
    +comp-associative (cs _) (cs _) (cs _) = refl
    +-- c . (b . a) ≡ (c . b) . a
    +
    + +
      +
    • スタックの操作についての性質
    • +
    + +
    push-pop-type : ℕ -> ℕ  -> ℕ -> Element ℕ -> Set₁
    +push-pop-type n e x s = M.exec (M.csComp (M.cs popOnce) (M.cs pushOnce)) meta ≡ meta
    +-- goto (pop . push) mds ≡ mds
    +
    +n-push-pop-type : ℕ ->  ℕ  -> ℕ -> SingleLinkedStack ℕ -> Set₁
    +n-push-pop-type n cn ce st = M.exec (M.csComp (n-pop  n) (n-push n)) meta ≡ meta
    +-- goto (pop*n . push*n) mds ≡ mds
    +
    + + +
    +
    +

    Agda 上に CbC を記述した成果

    • 部分型で CbC の型付けができた
    • @@ -568,13 +632,13 @@
    -

    まとめ

    +

    まとめ

    • Continuation based C 言語を対象にした二種類の検証アプローチ
    • モデル検査的なアプローチ
      • 継続を上書きして可能な状態を数え上げるメタ計算ライブラリ akasha を実装
      • -
      • 有限の要素数まで保証できた
      • +
      • 有限の要素数まで検証できた
    • 証明的なアプローチ @@ -590,20 +654,19 @@
    -

    今後の課題

    +

    今後の課題

    • より大きなサイズの赤黒木の検証
    • 赤黒木の挿入に関する性質を証明する
    • 部分型を利用してCbCを型付け
    • 依存型をCbC に導入して自身を証明可能にする
    • -
    • 型情報から stub を自動生成すkる
    -

    発表履歴

    +

    発表履歴

    • Agda 入門.
        diff -r 137aae675a94 -r c195713cf7d7 presentation/slide.md --- a/presentation/slide.md Tue Feb 14 15:03:04 2017 +0900 +++ b/presentation/slide.md Tue Feb 14 15:45:03 2017 +0900 @@ -21,12 +21,6 @@ * 型システムを通して CbC の形式的な定義を得る * SingleLinkedStack の性質の証明 -# 本発表ではモデル検査的アプローチについて中心に見ていきます -* 修士論文の内部の比率は半分半分くらい -* 定理証明の方は説明する内容が多くて複雑 -* モデル検査的アプローチは過去論文を提出したもの - * なのでそちらをメインで発表します - # モデル検査的アプローチについての流れ * 既存のモデル検査器について * Continuation based C (CbC) 言語について @@ -153,7 +147,7 @@ # チェックする仕様 * 赤黒木の高さに関する仕様に以下のものがある * 木をルートから辿った際に最も長い経路は最も短い経路の高々2倍に収まる -* 以下のような条件式を仕様として CbC で定義、検証できる +* 以下のような条件式を仕様として CbC で定義できる ``` __code verifySpecificationFinish(struct Context* context) { @@ -171,7 +165,7 @@ * メタ計算としてプログラムの状態を数え上げる * goto された時に挿入される要素の組み合わせを全て列挙して実行する * 赤黒木の状態の保存、挿入、チェック、次の状態の列挙、赤黒木の再現…… - * その度に仕様の式は成り立つかをチェックする + * 挿入する度に仕様の式が成り立つかをチェック * ノーマルレベルのコードを検証用に変更せず検証可能 ![akashaPut](./images/akashaPut.svg){:width="50%"} @@ -194,6 +188,38 @@ * しかし CbC の形式的な定義が無いために今はできない * Agda 上に CbC を定義することで形式的な定義を得る +# Agda における証明 +* Curry-Howard Isomorphism による型付きラムダ計算と自然演繹の対応 + * 自然演繹: 命題、ならば、かつ、または、で構成される証明システム +* 論理式は型に相当して、証明はその値の導出 +* 三段論法の証明は以下のようになる + * 「((A ならば B) かつ (B ならば C)) ならば (A ならば C) + +``` +f : {A B C : Set} -> ((A -> B) × (B -> C)) -> (A -> C) +f = \p x -> (snd p) ((fst p) x) +``` + +# Agda における等式の証明 +* Agda では等式も証明できる + * 依存型という型を変数として扱える型システムを持つ + * 型を取って型を返す型などが定義可能 +* 等式の証明は両方が同じ項に簡約されることを示せば良い +* 自然数の加法の交換法則は以下のようになる + +``` +addSym : (n m : Nat) -> n + m ≡ m + n +addSym O O = refl +addSym O (S m) = cong S (addSym O m) +addSym (S n) O = cong S (addSym n O) +addSym (S n) (S m) = begin + (S n) + (S m) ≡⟨ refl ⟩ + S (n + S m) ≡⟨ cong S (addSym n (S m)) ⟩ + S ((S m) + n) ≡⟨ addToRight (S m) n ⟩ + S (m + S n) ≡⟨ refl ⟩ + (S m) + (S n) ∎ +``` + # Agda と DataSegment * CbC の DataSegment は Agda のレコード型 * 名前付きの値が複数ある(C の構造体) @@ -255,6 +281,29 @@ ; c' = 0 ; next = (N.cs id)}) ``` +# Agda 上で証明できた性質 +* CodeSegment の合成則 + +``` +comp-associative : > (a : CodeSegment A B) (b : CodeSegment C D) (c : CodeSegment E F) + -> csComp c (csComp b a) ≡ csComp (csComp c b) a +comp-associative (cs _) (cs _) (cs _) = refl +-- c . (b . a) ≡ (c . b) . a +``` + +* スタックの操作についての性質 + +``` +push-pop-type : ℕ -> ℕ -> ℕ -> Element ℕ -> Set₁ +push-pop-type n e x s = M.exec (M.csComp (M.cs popOnce) (M.cs pushOnce)) meta ≡ meta +-- goto (pop . push) mds ≡ mds + +n-push-pop-type : ℕ -> ℕ -> ℕ -> SingleLinkedStack ℕ -> Set₁ +n-push-pop-type n cn ce st = M.exec (M.csComp (n-pop n) (n-push n)) meta ≡ meta +-- goto (pop*n . push*n) mds ≡ mds +``` + + # Agda 上に CbC を記述した成果 * 部分型で CbC の型付けができた * メタ計算をきちんと階層化できた @@ -266,7 +315,7 @@ * Continuation based C 言語を対象にした二種類の検証アプローチ * モデル検査的なアプローチ * 継続を上書きして可能な状態を数え上げるメタ計算ライブラリ akasha を実装 - * 有限の要素数まで保証できた + * 有限の要素数まで検証できた * 証明的なアプローチ * 証明支援系 Agda 上で CbC のプログラムを定義して直接証明 * 部分型を利用して CbC を型付け @@ -277,7 +326,6 @@ * 赤黒木の挿入に関する性質を証明する * 部分型を利用してCbCを型付け * 依存型をCbC に導入して自身を証明可能にする -* 型情報から stub を自動生成すkる # 発表履歴 * Agda 入門. diff -r 137aae675a94 -r c195713cf7d7 presentation/slide.pdf.html --- a/presentation/slide.pdf.html Tue Feb 14 15:03:04 2017 +0900 +++ b/presentation/slide.pdf.html Tue Feb 14 15:45:03 2017 +0900 @@ -70,7 +70,7 @@ @@ -113,22 +113,7 @@
    -

    本発表ではモデル検査的アプローチについて中心に見ていきます

    -
      -
    • 修士論文の内部の比率は半分半分くらい
    • -
    • 定理証明の方は説明する内容が多くて複雑
    • -
    • モデル検査的アプローチは過去論文を提出したもの -
        -
      • なのでそちらをメインで発表します
      • -
      -
    • -
    - - -
    -
    - -

    モデル検査的アプローチについての流れ

    +

    モデル検査的アプローチについての流れ

    • 既存のモデル検査器について
    • Continuation based C (CbC) 言語について
    • @@ -250,7 +235,7 @@
    -

    メタ計算

    +

    メタ計算

    • とある計算を実現するための計算
    • ネットワーク接続、例外処理、メモリ確保、並列処理など
    • @@ -304,7 +289,7 @@
    -

    赤黒木

    +

    赤黒木

    • データの保存に用いる二分木
    • 特に赤黒木はノードが持つ赤か黒の色を使って木のバランスを取る @@ -337,7 +322,7 @@
    -

    仕様の記述とその確認

    +

    仕様の記述とその確認

    • 「バランスが取れている」とは何かを表現できる必要がある
        @@ -355,14 +340,14 @@
    -

    チェックする仕様

    +

    チェックする仕様

    • 赤黒木の高さに関する仕様に以下のものがある
      • 木をルートから辿った際に最も長い経路は最も短い経路の高々2倍に収まる
    • -
    • 以下のような条件式を仕様として CbC で定義、検証できる
    • +
    • 以下のような条件式を仕様として CbC で定義できる
    __code verifySpecificationFinish(struct Context* context) {
    @@ -389,7 +374,7 @@
               
  • 赤黒木の状態の保存、挿入、チェック、次の状態の列挙、赤黒木の再現……
  • -
  • その度に仕様の式は成り立つかをチェックする
  • +
  • 挿入する度に仕様の式が成り立つかをチェック
  • ノーマルレベルのコードを検証用に変更せず検証可能
  • @@ -440,6 +425,57 @@
    +

    Agda における証明

    +
      +
    • Curry-Howard Isomorphism による型付きラムダ計算と自然演繹の対応 +
        +
      • 自然演繹: 命題、ならば、かつ、または、で構成される証明システム
      • +
      +
    • +
    • 論理式は型に相当して、証明はその値の導出
    • +
    • 三段論法の証明は以下のようになる +
        +
      • 「((A ならば B) かつ (B ならば C)) ならば (A ならば C)
      • +
      +
    • +
    + +
    f : {A B C : Set} -> ((A -> B) × (B -> C)) -> (A -> C)
    +f = \p x -> (snd p) ((fst p) x)
    +
    + + +
    +
    + +

    Agda における等式の証明

    +
      +
    • Agda では等式も証明できる +
        +
      • 依存型という型を変数として扱える型システムを持つ
      • +
      • 型を取って型を返す型などが定義可能
      • +
      +
    • +
    • 等式の証明は両方が同じ項に簡約されることを示せば良い
    • +
    • 自然数の加法の交換法則は以下のようになる
    • +
    + +
    addSym : (n m : Nat) -> n + m ≡ m + n
    +addSym O       O   = refl
    +addSym O    (S m)  = cong S (addSym O m)
    +addSym (S n)   O   = cong S (addSym n O)
    +addSym (S n) (S m) = begin
    +  (S n) + (S m)  ≡⟨ refl ⟩
    +  S (n + S m)    ≡⟨ cong S (addSym n (S m)) ⟩
    +  S ((S m) + n)  ≡⟨ addToRight (S m) n ⟩
    +  S (m + S n)    ≡⟨ refl ⟩
    +  (S m) + (S n)  ∎
    +
    + + +
    +
    +

    Agda と DataSegment

    • CbC の DataSegment は Agda のレコード型 @@ -487,7 +523,7 @@
    -

    メタレベルの型付け

    +

    メタレベルの型付け

    • メタ計算とは通常のレベルとは区別された計算
    • 任意の通常のレベルの計算を扱えなくてはならない @@ -508,7 +544,7 @@
    -

    Agda 上のメタ計算

    +

    Agda 上のメタ計算

    • ノーマルレベルの型を保持したままメタレベルの計算を利用できる
        @@ -533,6 +569,34 @@
    +

    Agda 上で証明できた性質

    +
      +
    • CodeSegment の合成則
    • +
    + +
    comp-associative : > (a : CodeSegment A B) (b : CodeSegment C D) (c : CodeSegment E F)
    +                   -> csComp  c (csComp b a) ≡ csComp  (csComp c b) a
    +comp-associative (cs _) (cs _) (cs _) = refl
    +-- c . (b . a) ≡ (c . b) . a
    +
    + +
      +
    • スタックの操作についての性質
    • +
    + +
    push-pop-type : ℕ -> ℕ  -> ℕ -> Element ℕ -> Set₁
    +push-pop-type n e x s = M.exec (M.csComp (M.cs popOnce) (M.cs pushOnce)) meta ≡ meta
    +-- goto (pop . push) mds ≡ mds
    +
    +n-push-pop-type : ℕ ->  ℕ  -> ℕ -> SingleLinkedStack ℕ -> Set₁
    +n-push-pop-type n cn ce st = M.exec (M.csComp (n-pop  n) (n-push n)) meta ≡ meta
    +-- goto (pop*n . push*n) mds ≡ mds
    +
    + + +
    +
    +

    Agda 上に CbC を記述した成果

    • 部分型で CbC の型付けができた
    • @@ -552,13 +616,13 @@
    -

    まとめ

    +

    まとめ

    • Continuation based C 言語を対象にした二種類の検証アプローチ
    • モデル検査的なアプローチ
      • 継続を上書きして可能な状態を数え上げるメタ計算ライブラリ akasha を実装
      • -
      • 有限の要素数まで保証できた
      • +
      • 有限の要素数まで検証できた
    • 証明的なアプローチ @@ -574,20 +638,19 @@
    -

    今後の課題

    +

    今後の課題

    • より大きなサイズの赤黒木の検証
    • 赤黒木の挿入に関する性質を証明する
    • 部分型を利用してCbCを型付け
    • 依存型をCbC に導入して自身を証明可能にする
    • -
    • 型情報から stub を自動生成すkる
    -

    発表履歴

    +

    発表履歴

    • Agda 入門.