我必须断言值 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 那样工作,它找到了一个有效/满意的见证/解释!
例如,我对相同代码的三个不同运行结果为:
>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 中约束的可满足性。