Mercurial > hg > Papers > 2023 > soto-master
view slide/memo.md @ 32:4915eaa51ee0 default tip
Add front
author | soto <soto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 23 Feb 2023 18:39:56 +0900 |
parents | 83e28d9da152 |
children |
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で管理するために必要 どの哲学者がどのフォークを取るのか決まっているため # 直すところ AとかBはここでは型だけど、 命題だと思っても良い 並列実行はメタかな。可能な実 Shinji Kono から全員に 03:40 PM 引数の説明が雑だな TerminatingLoopS 自体の証明も コストが高い低いは正確性に欠 並列実行の検証は難しいけど モデル検査自体が並列実行の定 モデル検査はωオートマトンの実 仕様は時相論理とかωオートマト それを満たすかどうかを証明に このdataは、G Code GearのProgram Counterみ Process (ここではContext)毎にあ pickup-lfork は目が潰れるが… -c と -p があるのか ++ は List の append zero 以外のコードは? 以下同様的な?! 「乱数がでる」? 分岐の数って、いくつ? 0,1,2 だけ? deadlock とかは時相論理の変数だな 時相論理式を定義して持ち歩くべきだな 普通は深さ優先探索と状態データベースだが… 状態が変化し続ける場合はどうなるの? exclude-same-env は何を弾くの? モデル検査自体の停止性は示せるの? DPPでは何が有限なの? State List はRedBlack木が良いとは言えない Agdaでインタプリタではなくコンパイル