我想在我的代码库中开始使用代码契约.
我已经使用了代码分析,启用了所有规则,并且目标是零警告.
但是,在使用时,Contract.Requires(parameter != null)我收到代码分析的警告,即CA1062:
CA1062:Microsoft.Design:在外部可见的方法"富",用它之前验证参数"参数".
这很不幸,我不想禁用该规则,因为我发现它很有用.但我也不想压制它的每一个错误发生.
有解决方案吗?
我想知道在OMP关键部分中抛出C++异常是否安全.
#pragma omp critical (my_critical_section)
{
...
throw my_exception("failed")
...
}
Run Code Online (Sandbox Code Playgroud)
g ++不抱怨.我很困惑,因为它抱怨return关键部分内的陈述.它返回错误:invalid exit from OpenMP structured block我写的时候
#pragma omp critical (my_critical_section)
{
...
return;
...
}
Run Code Online (Sandbox Code Playgroud)
那么,为什么离开临界区有一个例外是可以的,但是留下一个返回语句是不行的?
鉴于这x,y,z = Ints('x y z') 和字符串一样s='x + y + 2*z = 5',是否有快速方法将s转换为z3表达式?如果它不可能那么似乎我必须做很多字符串操作来进行转换.
我有兴趣和寻找SMT Z3使用的实际例子(如DbC)以及该工具的代码和开源替代品.所以,事实上,我对类似的Z3正式求解工具很感兴趣,但是:
根据SMT-LIB主页(详见bit.ly软件包),2010年SMT解决方案列表为:"Alt-Ergo,Barcelogic,Beaver,Boolector,CVC3,DPT,MathSAT,OpenSMT,SatEEn,Spear,STP,SWORD, UCLID,veriT,Yices,Z3."
请提供有关在实践中使用其中任何一个的任何反馈(代码示例是最好的)?
最后,任何有关它与GHC可能性进行比较的信息都是有用的,但仅限于存在实施示例(不是语言"特征")的情况.
有关Z3的更快速信息,请访问http://bit.ly/bundles/ewiger/1
对于某些给定的结果/ x对,我想在简单的"result = x*t + c"公式中找到c和t系数:
from z3 import *
x=Int('x')
c=Int('c')
t=Int('t')
s=Solver()
f = Function('f', IntSort(), IntSort())
# x*t+c = result
# x, result = [(1,55), (12,34), (13,300)]
s.add (f(x)==(x*t+c))
s.add (f(1)==55, f(12)==34, f(13)==300)
t=s.check()
if t==sat:
print s.model()
else:
print t
Run Code Online (Sandbox Code Playgroud)
......但结果显然是错误的.我可能需要找出如何映射函数参数.
我该如何正确定义功能?
在 Z3 Python 中,1)x = Const("x",IntSort()) 与 2)之间的区别是什么 x = Int("x") ?is_const 对两者都返回 true,并且它们都是 ArithRef。我认为 1) 适合定义一个常量,例如,x 是 3.14 和 2) 是创建一个变量。
是否有正确的方法来创建像 x = 3.14 这样的 const 变量(除了生成公式 x == 3.14)
SMTLib2指令(get-info all-statistics)显示多个数字,例如
num. conflicts: 4
num. propagations: 0 (binary: 0)
num. qa. inst: 23
Run Code Online (Sandbox Code Playgroud)
为了测试不同的公理化和编码,我想知道这些数字中的哪一个适合宣布一个Z3运行比另一个运行更好/更有效。
从名字中猜测,我想说的是num. qa. inst-数量化实例化的数量-是一个很好的指标(低=更好),但是其他指标呢?