Categorical Formalization of Program Modification
Yasutaka Higa
Categorical Formalization of Program Modification
Yasutaka Higa
研究目的 (Categorical Formalization)
プログラムの信頼性を向上させるために開発手法に着目する
プログラムの信頼性が変化するのはプログラムを変更した時である
プログラムの変更を形式化することにより、信頼性を保ちながらプログラムを変更する
Kleisli Category の Kleisli Triple と対応のある Monad によってプログラムの変更を記述する
研究目的 (Parallel Debugger)
本研究では Monad を用いてプログラムの変更を定義する
Monad とは meta computation とデータ構造を対応付ける手法である
プログラムの変更は変更前の動作を保存しつつ変更後の動作を追加することで表現する
異なるバージョンのプログラムを同時に実行し、トレースを比較することでデバッグを支援する手法を提案する
近況報告
プロシン行ってきました
結構ジャンルはなんでもありでした
機械学習、量子コンピュータ、言語処理系、ソシャゲの解析、HPC、分散FS、etc
任意の Monad と組み合せ可能な Delta を Haskell で定義してみました
証明はまだです
Agda で type constraints を書けずに止まってます
任意の Monad と組み合せ可能な Delta : DeltaM
元は MonadTrans を使おうという話でした
例として MaybeT IO a は IO Maybe a らしい
DeltaT を作ると DeltaT IO a は IO (Delta a)
この場合、「全ての関数は Delta を返す」を満たさない
外側に Delta があって内側が任意の Monad であれば実行できる DeltaM にしてみました
DeltaM IO a は Delta (IO a) です
定義中に思ったこと
Delta と定義が微妙に違います
1つの関数のバージョンが上がった時に全てのバージョンを上げないといけません
function のバージョンを知ることができないから
特に Monad Wrapped value を撮る時に個数が分からない
Dependent type で Delta に付属させたりすれば良いのかもしれませんが
途中の bind で m a を返さないといけないので型を合わせるためにこうしてみました
meta code segment って type にそのまま mapping できるかちょっと疑問に思ったりなんだり
Agda で苦戦中
type constraints が書けない
instance (Monad m) => Monad (DeltaM m) とか書きたい
Functor を Record にすることはできましたが
Functor 受けとってそれに対して fmap ができない
うーん……