プレガードとポストガードと並行実行
p・A が、論理式pでガードされた文だとする。pが0(false)のときは、p・A = O となる。Oはクリーネ代数のゼロで、エラー、失敗、カオス、無限走行などを意味する。p・A + p'・B として if p then A else B endif を表現できる;ここで、p'はpの否定とする。
A・p をpでポストガードされた文だとする。Aが正常に実行され、かつpのときはAの結果がプログラムの結果、そうでないときはOとなる。A・p + B・p' も定義できるが、これはどういう意味だろうか? (A and p) orelse B みたいな感じ?
- Aをしてpならそれでよし、そうでないならBの結果を採用する。
- AとBを同時実行して、pであるならAを、そうでないならBの結果を採用する。
Aと実行した後でないとpの判定が出来ないので無駄な感じだが、通常のif文でも分岐の並行実行を行い、条件文の判定が遅れるなら同じようなものだ。なんでも並行実行の世界なら、ポストガードは別に変な概念じゃないな。