paperprogramming-language
https://dl.acm.org/doi/10.1145/3471872.3472970
first author: Emilio Jesús Gallego Arias
概要
ラムダ計算にfeed
という1サンプルフィードバックを導入する形式を取る
mimiumでself
を使って1サンプルフィードバックができる、というのと近い(ちょうどmimiumと同じカンファレンスで発表された)
ただし対象は線形時不変システムの形式化で、異なるトポロジーのフィルターが最終的に同一のものであるのが証明できたりすると嬉しいよね、みたいなモチベだと理解してる(なので、項同士の加算は定義されているが、乗算は項と定数のみに制限されている)
Coqで証明が実装されている https://github.com/ejgallego/mini-wagner-coq/
よく見たらこのAuthorのEmilio Jesús Gallego Arias、Coq本体の開発をゴリゴリやってる人だ(強いわけだ)
実装
最終的にはA:意味論としてわかりやすいDenotational、B:有限なメモリと計算結果の再利用を考慮したImperativeなインタプリタがOCamlで、C:MetaOCamlを使って最適化したコードの3つが出てくる。
A:Denotationalなインタプリタ
machine
がある時刻のサンプルを計算し返却する関数
machine_n
が指定した時刻までのすべてのサンプルを計算しリストとして返却する関数
以上2つの関数を相互再帰させている
毎サンプルごとに全てのサンプルのhistoryを再生成してたりするので著しく非効率的
ただし、リポジトリのCoqのコードでは別に相互再帰で実装されてるわけではない
そしてCoqで証明されているのはここまで(MetaOCamlのReal-World exampleが欲しいよ)
B:Imperativeなインタプリタ
この実装が多分現在のmimiumの実装に近い
これAppの引数はp
じゃなくてptr
だよな
これ、Rustで改めて簡単に実装してみて思ったけど、heapの中のデータ構造がどうなってるか(初めにどうやってどのサイズのヒープを確保すべきか)が一番重要なのにそこに触れられていないのでは、、、
A:DenotationalとB:Imperativeが等しい計算を行なっていることの形式的証明はOpen Questionとなっている。