言語仕様の拡張案

以前から、不変条件にold-valueが使えると状態遷移が記述できる、と考えてました。
ところが、最初の代入時にはまずいことに気がつきました。
そのときは、old-valueは存在しないのです。
で、初期状態を表す新しいキーワードを追加します。
仮に INIT とし、inv の式のみ使えるものとします。

class エレベータ

types
-- エレベータは<上昇>からいきなり<下降>になることはない。
-- 必ず<停止>し(ドアが開き利用者の出入りを行った後)<上昇>、
-- または<下降>する。
public 方向型 = <上昇> | <下降> | <停止>
    inv d ==
        (d~ = INIT => d = <停止>) and
        ((~d <> d) =>
            (d~ = <停止> => d = <上昇> or d = <下降>) and
            (d~ = <上昇> => d = <停止> ) and
            (d~ = <下降> => d = <停止> ));

end エレベータ

最初は新しいキーワードを追加することに躊躇したけれど、
RESULTだって、postでしか使えないキーワードです。
新しいキーワードを追加することで、状態遷移を記述できるなら、
ためらう必要はない。