事後条件をチェックすると結果が変わるプログラム

事後条件のチェックを行うかどうかによって結果が変わる関数を思いつきました。

class TestBreaker

instance variables
private x: int := 0;

operations
public 破壊的操作: () ==> bool
破壊的操作() == (x := x+1; return true);

functions
public Test: int -> int
Test(a) == self.x + a
post self.破壊的操作();

end TestBreaker

以下のようにオブジェクトを生成し、関数を呼び出します。

>> create t:=new TestBreaker()
>> print t.Test(0)
>> print t.Test(0)
>> print t.Test(0)

事後条件のチェックを行わないときには0, 0, 0 が返りますが、チェックを行った
ときには、0, 1, 2 の値が返ります。

このプログラムもVDMToolsも問題ないですよね?現状の言語仕様ではこんなプログラムも作れてしまいます。事前条件、不変条件でも作れるでしょう。
通常はこんな仕様はありえないのですが、それを禁止するor検出する手段もありません(多分)。