ここに「トラックB」の質問があります。まとめ:非決定的プログラムにセマンティクスを与えようとするときに最初に考えるのは、非決定的に終了するだけのループについては証明できないセマンティクスになります。確かに誰かがこの状況で何をすべきかを考え出したか、少なくともそれは難しいと指摘しましたが、私はそれを探す方法を知りません(したがって「参照要求」タグ)。
バックグラウンド
私は、非決定論を伴うwhile言語をモデル化したいと考えています。これはSmythパワードメインでそのような言語をモデル化する明白な(または少なくとも素朴な)方法だと思いますが、私が間違っている場合は修正してください。この言語でのコマンドの意味は、ドメインが状態の集合であり、コドメインが集合ある関数としてモデル化します、ここでは非終了を表す最小の要素、は状態のパワーセットです。P(S )⊥ = { ⊥ } ∪ P(S )⊥ P(S )
コマンドは、状態から非終了イベントまたは可能な結果を表す状態セットへのマップとして解釈します。は非決定的な選択です。
- 場合、そうでない場合
- 場合又は、さもなければ
- 場合又はいくつかについて、そうでなければ
指向完備半順序があります、いずれかに対すると両方場合と適切セットされ、我々は関数にこれを拡張することができからへ点別:場合すべてのため、およびは、すべての状態をマッピングする関数です。
ループの意味ははチェーンの最小上限です、もし、そうでない場合場合または for some、それ以外の場合は。(この定義は、今定義したがスコット連続であることを前提としていますが、それはそのままにしておくのが安全だと思います。)
質問
このプログラムを考えてみましょう:
直感的には、これは正の偶数を返すか、終了しないループであり、これは、最も弱いリベラルな前提条件を使用してこのループについて証明できるものに対応します(を示すことができはループです不変)。ただし、ループには終了できない機能があるため(常に右側の分岐を行うプログラムによって非決定論的な選択を調整できます)、初期状態が与えられた場合のこのプログラムの意味はです。(非公式ではありません:がfalseであるすべての状態と、がtrue であるすべての状態をマップする関数は、ループの定義に使用される固定小数点です。)
これは、私が提案した素朴なセマンティクスが、プログラムについて推論できると期待する方法に対応していないことを意味します。私は私のセマンティクスを非難しますが、それらを修正する方法はありません。