Categorical Formalization of Program Modification
Yasutaka Higa
研究目的 (Categorical Formalization)
プログラムの信頼性を向上させるために開発手法に着目する
プログラムの信頼性が変化するのはプログラムを変更した時である
信頼性を保ちながらプログラムを変更にプログラムの変更を形式化する
研究目的 (Parallel Debugger)
本研究では Monad を用いてプログラムの変更を定義する
Monad とは meta computation とデータ構造を対応付ける手法である
プログラムの変更は変更前の動作を保存しつつ変更後の動作を追加することで表現する
異なるバージョンのプログラムを同時に実行し、トレースを比較することでデバッグを支援する手法を提案する
近況報告
DeltaM の Monad の証明できました
卒論の目次を一旦書いてみました
Delta の証明
Delta の定義をちょっと変えました
全ての Delta が同じバージョンを持つ
無限の変更は対応しています
record で書いてるのは Category の Monad 則です
Natural Transformation(eta, mu), unity-law, association-law
bind は無し
DeltaM の証明
全ての Delta のバージョンが1以上かつ同じであれば DeltaM も Monad でもある
中の Monad は Functor と Monad である必要がある
preserve-id, covariant, natural termination of eta and mu, unity-law, association-law
変更数は無限です
若干 Functor に証明を追加しました
fmap-equiv
fmap する function が refl でも変換できない
fmap-equiv として Functor の record に関数変換用の法則を追加
fmap-equiv : (f == g) -> (fmap f x == fmap g x)
Relation.Binary.PropositionalEquality に cong-app があるので良いかと判断
cong-app : (f == g) -> f x == g x
higher-order function の equivalence ってあります?
tips
DeltaM は実際 Delta (M A) の wrapper
constructor は 1 つなので isomorphic に対応する
外す処理が必須でした
mu を実行する時は一旦外して Deltaのmu, Inner Monad のmu
termination checking を回避するためになるべく展開しておいた方が良かった
Monad を合成する処理を Monad として書いてる感じが