Mercurial > hg > Papers > 2023 > soto-master
view slide/memo.md @ 23:016e82a71407
Add slide
author | soto <soto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 07 Feb 2023 02:27:53 +0900 |
parents | b37e4cd69468 |
children | 83e28d9da152 |
line wrap: on
line source
# 目的 そのまま読むかな # agdaの基本 たぶんここの説明全部実際のコードでやったほうがいいらしい # record 論文にもかいてあるし三段論法を 取り扱ったほうが見る人も面白いのでは # CbC goto文のやつは消すかな # normal levelとmetalevel ポインタの操作は含まれない 上の方は normal level の実装 下の方が meta level の計算を可視化したもの 例えば、変数がメモリのある番地に存在していれば、 Meta Data Gear がその番地を持っている。 (なので Data Gear に wrap されているというイメージ) Meta Code Gear がそのメモリから取り出して、 普通の Code Gear が実行をするという流れ、 後ろのほうでまた新しく保存したいデータがあれば Meta Code Gear が保存して、 最後の Meta Data Gear が新しいデータのメモリ番地を 持っているという流れになります。 プログラムをする際は上のようにシンプルな実装をするが、 実際には内部でメタ計算が走っているのが理想ですね Gears Agda # Gears Agda この矢印tが Gears Agda のミソで、 この定義を見ると、While loop はEnvとCode を受け取ってtを返します。 この While loop を code Gear に 見立てるなら、次に遷移する関数を指定する必要があります それがCodeになります。 なので、Gears Agda では次に受け取る関数を受け取る用にしていて、それがnextになります。 このようにして、CbC の継続という概念を 矢印tで表現しています。 (CbCのCodeGear はDataGearをうけとってそれを元に実行することはnextがEnvを受け取って実行すること) (CodeGear の実行終了時に、次の CodeGearに DataGearを与えることもnextにEnvを与えていることからわかると思います) <!-- 実行の文を持ってくるんだっけな --> - with 文 with文で展開してパターンマッチすることもできる。 ここでは less than がそれにあたる 0とvarnを比較して false だった場合、trueだった場合をcase文のように 書ける - `{-# TERMINATING #-}` Agdaが停止性を理解できない場合に、このようにアノテーションすることで停止することを示せます # loopの接続 reduceがあるため、Agdaは で、前回のものは最初から構造体(record)に値が格納されている状態から始まっていたので proofGearsTermS では、入力が自然数で、recordの定義から検証を行っている そしてそれを行っているのが最初の関数であるwhileTest'で ここでvarnが入力c10と一致し、variが0であることを証明している 次の関数であるversionでは、whileTest'のrecord定義時のConditionから loop時のconditionを生成しています - これで Gears Agda にて While Loop を Hoare Logic を使って検証することができた。 # テストと定理証明の違い # 定理証明とモデル検査の違い # DPPの実装 pidは哲学者をindexで管理するために必要 どの哲学者がどのフォークを取るのか決まっているため