その値 val1 >= val2 をアサートする必要があります。つまり、モデルのチェックに関して、証人 (反例) は val1 >= val2 であると断言する必要があります。
C(cbmc)で次のように簡単に実行できます。
C1 = True;
C1 = (C1 && (val1 >= val2));
__CPROVER_assert(!C1 ,"constraint sat");
Pythonでそれを行う方法はありますか?
アップデート:
C1 = True
C1 = C1 && (val1 >= val2)
assert not C1
引き起こす
File "python_version.py", line 123, in main
assert not C1
AssertionError
でももしそうなら
C1 = True
C1 = C1 && (val1 >= val2)
assert C1
結果は、私が望むものの逆です (val2 >= val1 が必要です)。 編集:
import math
from random import randint
def main():
C1 = True
z = randint(1,10)
r = randint(1,10)
x = z + 2
y = r + 2
C1 = C1 and (x >= y)
assert C1
print(x)
print(y)
選択した z と r の値に応じて、これは中断するか通過して x 、 y を出力します。したがって、これは __CPROVER_assert のようには機能せず、有効な/満足している証人/解釈を見つけます!
たとえば、同じコードを 3 回実行した結果は次のようになりました。
>mokambo 11:16 PM ~/cost-allocation/Constraint_solving python checkPython.py
Traceback (most recent call last):
File "checkPython.py", line 23, in <module>
main()
File "checkPython.py", line 15, in main
assert C1
AssertionError
>mokambo 11:16 PM ~/cost-allocation/Constraint_solving python checkPython.py
7
4
>mokambo 11:16 PM ~/cost-allocation/Constraint_solving python checkPython.py
12
11
Python で制約の充足可能性を確認する方法はありますか。