Mercurial > hg > Papers > 2018 > nozomi-master
comparison presentation/slide.html @ 122:c195713cf7d7
Update slide
author | atton <atton@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 14 Feb 2017 15:45:03 +0900 |
parents | 137aae675a94 |
children | 81978a9122f0 |
comparison
equal
deleted
inserted
replaced
121:137aae675a94 | 122:c195713cf7d7 |
---|---|
84 | 84 |
85 <div class='slide '> | 85 <div class='slide '> |
86 <!-- === begin markdown block === | 86 <!-- === begin markdown block === |
87 | 87 |
88 generated by markdown/1.2.0 on Ruby 2.3.3 (2016-11-21) [x86_64-darwin16] | 88 generated by markdown/1.2.0 on Ruby 2.3.3 (2016-11-21) [x86_64-darwin16] |
89 on 2017-02-14 15:02:42 +0900 with Markdown engine kramdown (1.13.0) | 89 on 2017-02-14 15:44:26 +0900 with Markdown engine kramdown (1.13.0) |
90 using options {} | 90 using options {} |
91 --> | 91 --> |
92 | 92 |
93 <!-- _S9SLIDE_ --> | 93 <!-- _S9SLIDE_ --> |
94 <h1 id="section">プログラミング言語とソフトウェアの信頼性</h1> | 94 <h1 id="section">プログラミング言語とソフトウェアの信頼性</h1> |
127 | 127 |
128 | 128 |
129 </div> | 129 </div> |
130 <div class='slide '> | 130 <div class='slide '> |
131 <!-- _S9SLIDE_ --> | 131 <!-- _S9SLIDE_ --> |
132 <h1 id="section-2">本発表ではモデル検査的アプローチについて中心に見ていきます</h1> | 132 <h1 id="section-2">モデル検査的アプローチについての流れ</h1> |
133 <ul> | |
134 <li>修士論文の内部の比率は半分半分くらい</li> | |
135 <li>定理証明の方は説明する内容が多くて複雑</li> | |
136 <li>モデル検査的アプローチは過去論文を提出したもの | |
137 <ul> | |
138 <li>なのでそちらをメインで発表します</li> | |
139 </ul> | |
140 </li> | |
141 </ul> | |
142 | |
143 | |
144 </div> | |
145 <div class='slide '> | |
146 <!-- _S9SLIDE_ --> | |
147 <h1 id="section-3">モデル検査的アプローチについての流れ</h1> | |
148 <ul> | 133 <ul> |
149 <li>既存のモデル検査器について</li> | 134 <li>既存のモデル検査器について</li> |
150 <li>Continuation based C (CbC) 言語について</li> | 135 <li>Continuation based C (CbC) 言語について</li> |
151 <li>CbC における CodeSegment と DataSegment を用いたプログラミングスタイル</li> | 136 <li>CbC における CodeSegment と DataSegment を用いたプログラミングスタイル</li> |
152 <li>CbC とメタ計算について</li> | 137 <li>CbC とメタ計算について</li> |
264 | 249 |
265 | 250 |
266 </div> | 251 </div> |
267 <div class='slide '> | 252 <div class='slide '> |
268 <!-- _S9SLIDE_ --> | 253 <!-- _S9SLIDE_ --> |
269 <h1 id="section-4">メタ計算</h1> | 254 <h1 id="section-3">メタ計算</h1> |
270 <ul> | 255 <ul> |
271 <li>とある計算を実現するための計算</li> | 256 <li>とある計算を実現するための計算</li> |
272 <li>ネットワーク接続、例外処理、メモリ確保、並列処理など</li> | 257 <li>ネットワーク接続、例外処理、メモリ確保、並列処理など</li> |
273 <li>CbC は通常レベルの計算とメタ計算を分離して考える | 258 <li>CbC は通常レベルの計算とメタ計算を分離して考える |
274 <ul> | 259 <ul> |
318 | 303 |
319 | 304 |
320 </div> | 305 </div> |
321 <div class='slide '> | 306 <div class='slide '> |
322 <!-- _S9SLIDE_ --> | 307 <!-- _S9SLIDE_ --> |
323 <h1 id="section-5">赤黒木</h1> | 308 <h1 id="section-4">赤黒木</h1> |
324 <ul> | 309 <ul> |
325 <li>データの保存に用いる二分木</li> | 310 <li>データの保存に用いる二分木</li> |
326 <li>特に赤黒木はノードが持つ赤か黒の色を使って木のバランスを取る | 311 <li>特に赤黒木はノードが持つ赤か黒の色を使って木のバランスを取る |
327 <ul> | 312 <ul> |
328 <li>ルートノードと葉ノードの色は黒</li> | 313 <li>ルートノードと葉ノードの色は黒</li> |
351 | 336 |
352 | 337 |
353 </div> | 338 </div> |
354 <div class='slide '> | 339 <div class='slide '> |
355 <!-- _S9SLIDE_ --> | 340 <!-- _S9SLIDE_ --> |
356 <h1 id="section-6">仕様の記述とその確認</h1> | 341 <h1 id="section-5">仕様の記述とその確認</h1> |
357 <ul> | 342 <ul> |
358 <li>「バランスが取れている」とは何かを表現できる必要がある | 343 <li>「バランスが取れている」とは何かを表現できる必要がある |
359 <ul> | 344 <ul> |
360 <li>実行可能な CbC の条件式を使った assert になる</li> | 345 <li>実行可能な CbC の条件式を使った assert になる</li> |
361 </ul> | 346 </ul> |
369 | 354 |
370 | 355 |
371 </div> | 356 </div> |
372 <div class='slide '> | 357 <div class='slide '> |
373 <!-- _S9SLIDE_ --> | 358 <!-- _S9SLIDE_ --> |
374 <h1 id="section-7">チェックする仕様</h1> | 359 <h1 id="section-6">チェックする仕様</h1> |
375 <ul> | 360 <ul> |
376 <li>赤黒木の高さに関する仕様に以下のものがある | 361 <li>赤黒木の高さに関する仕様に以下のものがある |
377 <ul> | 362 <ul> |
378 <li>木をルートから辿った際に最も長い経路は最も短い経路の高々2倍に収まる</li> | 363 <li>木をルートから辿った際に最も長い経路は最も短い経路の高々2倍に収まる</li> |
379 </ul> | 364 </ul> |
380 </li> | 365 </li> |
381 <li>以下のような条件式を仕様として CbC で定義、検証できる</li> | 366 <li>以下のような条件式を仕様として CbC で定義できる</li> |
382 </ul> | 367 </ul> |
383 | 368 |
384 <pre><code>__code verifySpecificationFinish(struct Context* context) { | 369 <pre><code>__code verifySpecificationFinish(struct Context* context) { |
385 if (context->data[AkashaInfo]->akashaInfo.maxHeight > | 370 if (context->data[AkashaInfo]->akashaInfo.maxHeight > |
386 2*context->data[AkashaInfo]->akashaInfo.minHeight) | 371 2*context->data[AkashaInfo]->akashaInfo.minHeight) |
403 <li>goto された時に挿入される要素の組み合わせを全て列挙して実行する | 388 <li>goto された時に挿入される要素の組み合わせを全て列挙して実行する |
404 <ul> | 389 <ul> |
405 <li>赤黒木の状態の保存、挿入、チェック、次の状態の列挙、赤黒木の再現……</li> | 390 <li>赤黒木の状態の保存、挿入、チェック、次の状態の列挙、赤黒木の再現……</li> |
406 </ul> | 391 </ul> |
407 </li> | 392 </li> |
408 <li>その度に仕様の式は成り立つかをチェックする</li> | 393 <li>挿入する度に仕様の式が成り立つかをチェック</li> |
409 </ul> | 394 </ul> |
410 </li> | 395 </li> |
411 <li>ノーマルレベルのコードを検証用に変更せず検証可能</li> | 396 <li>ノーマルレベルのコードを検証用に変更せず検証可能</li> |
412 </ul> | 397 </ul> |
413 | 398 |
454 | 439 |
455 | 440 |
456 </div> | 441 </div> |
457 <div class='slide '> | 442 <div class='slide '> |
458 <!-- _S9SLIDE_ --> | 443 <!-- _S9SLIDE_ --> |
444 <h1 id="agda-">Agda における証明</h1> | |
445 <ul> | |
446 <li>Curry-Howard Isomorphism による型付きラムダ計算と自然演繹の対応 | |
447 <ul> | |
448 <li>自然演繹: 命題、ならば、かつ、または、で構成される証明システム</li> | |
449 </ul> | |
450 </li> | |
451 <li>論理式は型に相当して、証明はその値の導出</li> | |
452 <li>三段論法の証明は以下のようになる | |
453 <ul> | |
454 <li>「((A ならば B) かつ (B ならば C)) ならば (A ならば C)</li> | |
455 </ul> | |
456 </li> | |
457 </ul> | |
458 | |
459 <pre><code>f : {A B C : Set} -> ((A -> B) × (B -> C)) -> (A -> C) | |
460 f = \p x -> (snd p) ((fst p) x) | |
461 </code></pre> | |
462 | |
463 | |
464 </div> | |
465 <div class='slide '> | |
466 <!-- _S9SLIDE_ --> | |
467 <h1 id="agda--1">Agda における等式の証明</h1> | |
468 <ul> | |
469 <li>Agda では等式も証明できる | |
470 <ul> | |
471 <li>依存型という型を変数として扱える型システムを持つ</li> | |
472 <li>型を取って型を返す型などが定義可能</li> | |
473 </ul> | |
474 </li> | |
475 <li>等式の証明は両方が同じ項に簡約されることを示せば良い</li> | |
476 <li>自然数の加法の交換法則は以下のようになる</li> | |
477 </ul> | |
478 | |
479 <pre><code>addSym : (n m : Nat) -> n + m ≡ m + n | |
480 addSym O O = refl | |
481 addSym O (S m) = cong S (addSym O m) | |
482 addSym (S n) O = cong S (addSym n O) | |
483 addSym (S n) (S m) = begin | |
484 (S n) + (S m) ≡⟨ refl ⟩ | |
485 S (n + S m) ≡⟨ cong S (addSym n (S m)) ⟩ | |
486 S ((S m) + n) ≡⟨ addToRight (S m) n ⟩ | |
487 S (m + S n) ≡⟨ refl ⟩ | |
488 (S m) + (S n) ∎ | |
489 </code></pre> | |
490 | |
491 | |
492 </div> | |
493 <div class='slide '> | |
494 <!-- _S9SLIDE_ --> | |
459 <h1 id="agda--datasegment">Agda と DataSegment</h1> | 495 <h1 id="agda--datasegment">Agda と DataSegment</h1> |
460 <ul> | 496 <ul> |
461 <li>CbC の DataSegment は Agda のレコード型 | 497 <li>CbC の DataSegment は Agda のレコード型 |
462 <ul> | 498 <ul> |
463 <li>名前付きの値が複数ある(C の構造体)</li> | 499 <li>名前付きの値が複数ある(C の構造体)</li> |
501 | 537 |
502 | 538 |
503 </div> | 539 </div> |
504 <div class='slide '> | 540 <div class='slide '> |
505 <!-- _S9SLIDE_ --> | 541 <!-- _S9SLIDE_ --> |
506 <h1 id="section-8">メタレベルの型付け</h1> | 542 <h1 id="section-7">メタレベルの型付け</h1> |
507 <ul> | 543 <ul> |
508 <li>メタ計算とは通常のレベルとは区別された計算</li> | 544 <li>メタ計算とは通常のレベルとは区別された計算</li> |
509 <li>任意の通常のレベルの計算を扱えなくてはならない | 545 <li>任意の通常のレベルの計算を扱えなくてはならない |
510 <ul> | 546 <ul> |
511 <li>ライブラリが呼び出されるプログラムは無数にあるようなイメージ</li> | 547 <li>ライブラリが呼び出されるプログラムは無数にあるようなイメージ</li> |
522 | 558 |
523 | 559 |
524 </div> | 560 </div> |
525 <div class='slide '> | 561 <div class='slide '> |
526 <!-- _S9SLIDE_ --> | 562 <!-- _S9SLIDE_ --> |
527 <h1 id="agda-">Agda 上のメタ計算</h1> | 563 <h1 id="agda--2">Agda 上のメタ計算</h1> |
528 <ul> | 564 <ul> |
529 <li>ノーマルレベルの型を保持したままメタレベルの計算を利用できる | 565 <li>ノーマルレベルの型を保持したままメタレベルの計算を利用できる |
530 <ul> | 566 <ul> |
531 <li>cs0 の定義はメタ計算用に変更しなくても良い</li> | 567 <li>cs0 の定義はメタ計算用に変更しなくても良い</li> |
532 </ul> | 568 </ul> |
547 | 583 |
548 | 584 |
549 </div> | 585 </div> |
550 <div class='slide '> | 586 <div class='slide '> |
551 <!-- _S9SLIDE_ --> | 587 <!-- _S9SLIDE_ --> |
588 <h1 id="agda--3">Agda 上で証明できた性質</h1> | |
589 <ul> | |
590 <li>CodeSegment の合成則</li> | |
591 </ul> | |
592 | |
593 <pre><code>comp-associative : > (a : CodeSegment A B) (b : CodeSegment C D) (c : CodeSegment E F) | |
594 -> csComp c (csComp b a) ≡ csComp (csComp c b) a | |
595 comp-associative (cs _) (cs _) (cs _) = refl | |
596 -- c . (b . a) ≡ (c . b) . a | |
597 </code></pre> | |
598 | |
599 <ul> | |
600 <li>スタックの操作についての性質</li> | |
601 </ul> | |
602 | |
603 <pre><code>push-pop-type : ℕ -> ℕ -> ℕ -> Element ℕ -> Set₁ | |
604 push-pop-type n e x s = M.exec (M.csComp (M.cs popOnce) (M.cs pushOnce)) meta ≡ meta | |
605 -- goto (pop . push) mds ≡ mds | |
606 | |
607 n-push-pop-type : ℕ -> ℕ -> ℕ -> SingleLinkedStack ℕ -> Set₁ | |
608 n-push-pop-type n cn ce st = M.exec (M.csComp (n-pop n) (n-push n)) meta ≡ meta | |
609 -- goto (pop*n . push*n) mds ≡ mds | |
610 </code></pre> | |
611 | |
612 | |
613 </div> | |
614 <div class='slide '> | |
615 <!-- _S9SLIDE_ --> | |
552 <h1 id="agda--cbc-">Agda 上に CbC を記述した成果</h1> | 616 <h1 id="agda--cbc-">Agda 上に CbC を記述した成果</h1> |
553 <ul> | 617 <ul> |
554 <li>部分型で CbC の型付けができた</li> | 618 <li>部分型で CbC の型付けができた</li> |
555 <li>メタ計算をきちんと階層化できた | 619 <li>メタ計算をきちんと階層化できた |
556 <ul> | 620 <ul> |
566 | 630 |
567 | 631 |
568 </div> | 632 </div> |
569 <div class='slide '> | 633 <div class='slide '> |
570 <!-- _S9SLIDE_ --> | 634 <!-- _S9SLIDE_ --> |
571 <h1 id="section-9">まとめ</h1> | 635 <h1 id="section-8">まとめ</h1> |
572 <ul> | 636 <ul> |
573 <li>Continuation based C 言語を対象にした二種類の検証アプローチ</li> | 637 <li>Continuation based C 言語を対象にした二種類の検証アプローチ</li> |
574 <li>モデル検査的なアプローチ | 638 <li>モデル検査的なアプローチ |
575 <ul> | 639 <ul> |
576 <li>継続を上書きして可能な状態を数え上げるメタ計算ライブラリ akasha を実装</li> | 640 <li>継続を上書きして可能な状態を数え上げるメタ計算ライブラリ akasha を実装</li> |
577 <li>有限の要素数まで保証できた</li> | 641 <li>有限の要素数まで検証できた</li> |
578 </ul> | 642 </ul> |
579 </li> | 643 </li> |
580 <li>証明的なアプローチ | 644 <li>証明的なアプローチ |
581 <ul> | 645 <ul> |
582 <li>証明支援系 Agda 上で CbC のプログラムを定義して直接証明</li> | 646 <li>証明支援系 Agda 上で CbC のプログラムを定義して直接証明</li> |
588 | 652 |
589 | 653 |
590 </div> | 654 </div> |
591 <div class='slide '> | 655 <div class='slide '> |
592 <!-- _S9SLIDE_ --> | 656 <!-- _S9SLIDE_ --> |
593 <h1 id="section-10">今後の課題</h1> | 657 <h1 id="section-9">今後の課題</h1> |
594 <ul> | 658 <ul> |
595 <li>より大きなサイズの赤黒木の検証</li> | 659 <li>より大きなサイズの赤黒木の検証</li> |
596 <li>赤黒木の挿入に関する性質を証明する</li> | 660 <li>赤黒木の挿入に関する性質を証明する</li> |
597 <li>部分型を利用してCbCを型付け</li> | 661 <li>部分型を利用してCbCを型付け</li> |
598 <li>依存型をCbC に導入して自身を証明可能にする</li> | 662 <li>依存型をCbC に導入して自身を証明可能にする</li> |
599 <li>型情報から stub を自動生成すkる</li> | 663 </ul> |
600 </ul> | 664 |
601 | 665 |
602 | 666 </div> |
603 </div> | 667 <div class='slide '> |
604 <div class='slide '> | 668 <!-- _S9SLIDE_ --> |
605 <!-- _S9SLIDE_ --> | 669 <h1 id="section-10">発表履歴</h1> |
606 <h1 id="section-11">発表履歴</h1> | |
607 <ul> | 670 <ul> |
608 <li>Agda 入門. | 671 <li>Agda 入門. |
609 <ul> | 672 <ul> |
610 <li>オープンソースカンファレンス 2014 Okinawa, May 2014.</li> | 673 <li>オープンソースカンファレンス 2014 Okinawa, May 2014.</li> |
611 </ul> | 674 </ul> |