Cassin
@Cassin has joined the channel
実際,[Lazyな(おもちゃ)言語 https://gist.github.com/nobsun/5b310dd4a397af624690b6ca4b0af2c8]も`interp`は意味関数(semantic function あるいは meaning function)という表示意味論で登場する意味を決める関数なわけで,操作意味論における簡約過程を書いたものではない.計算済みかどうかを意識して区別していない(できないし,必要もない)のはその所為である.
⊥に相当する部分がill-defined
例えばparallel ifなどを実装する際多分そのままの定義ではできなくてparallel-orのことでしょうか?多分,⊥のように計算が停止しない値ではなく,値にバインドされていない変数が表示する値(emptyMVarの中身)みたいな計算をブロックするような値を考えないといけないですね.(たぶん)
停止が判定できないので,[e] = ⊥が判定できないです.
seq e1 . seq e2 $ e1 + e2
で問題ないはずです(Haskellの場合はそもそもe1 + e2でもいいですね)Nothing mplus Just = Just
かつ右についてもそう)⊥に相当する部分がill-definedがよく判っていない気がします(私が).どうなっていれば,well-definedですか?
Haskellの意味関数を[],Toy言語の意味関数を[| |]とした時,[|e|] = [interp e]でHaskellの意味領域に接地させることで,意味関数と主張しているということでも問題ないとは思うのですが,denotativeと主張するならHaskellに接地させるのでなくtermに対する定義が明確になっていて,
let inf = inf + 1 in inf みたいなのに対する定義が明示されているべきだという主張も分かる気がするという感じです(これが明示されていれば,おそらくporの導入もそれほど難しくないのかなという.例えば, @as_capabl さんがいうように評価器がちゃんとステップを陽に見えるよう書かれていれば,porはステップを同時進行させることで実装できるはずです)
progressionを使った手法を導入したはずなので、表示的意味論でinterpを定義するなら考慮しないと駄目ではですね.多分ValueにBotを導入しただけではporは実装できないはずです(片方が停止しなくてももう片方が停止してtrueになれば結果が返せるので)
let inf = inf + 1 in infに対する定義がなされているべきこれがそもそもできそうもない(私の能力的に)
実際,[Lazyな(おもちゃ)言語 https://gist.github.com/nobsun/5b310dd4a397af624690b6ca4b0af2c8]も`interp`は意味関数(semantic function あるいは meaning function)という表示意味論で登場する意味を決める関数なわけで,操作意味論における簡約過程を書いたものではないという文が気になったというだけなので.後この議論で不動点意味論の気持ちが分かったので,感謝の気持ちしかないです)