我对SMT Z3的使用(如DbC)以及该工具的代码和开源替代品感兴趣并寻找实际例子 . 所以,事实上,我对类似的Z3正式求解工具很感兴趣,但是:
-
它必须是开源的
-
提供低级(API)和高级(文本脚本)交互
-
支持SMT-LIB
-
适合(可用)工具/用/ Java语言编写,如Java,python,ruby,Vala,而不是Haskell
-
具有基于它的稳定(可在实践中使用)工具,如 Contract 设计(DbC),静态类型验证等 .
根据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
2 回答
据我所知,CVC3最接近您的要求,因为它:
具有与Z3类似的功能集 .
有BSD-style license
是许多现有项目的基础求解器 .
对于C和Java,CVC3有bindings,可能还有其他语言 . 一般来说,我认为API比(textual)input language更难使用 . 这样做的另一个好处是,如果您坚持使用SMT-LIB2语言,如果有必要,您可以稍后切换到其他工具 . SMT-LIB website上提供了大量示例 .
您已经询问过Z3的开源替代方案:
根据2011年至2011年的SMT-Wikipedia,我们有:
我只是检查这些东西 - 到目前为止,所有三个似乎都合理,加上较旧的CVC - >我的意思是CVC3 .