繁体   English   中英

Z3代替CVC3

[英]Z3 in place of CVC3

CVC3用于获取满足约束条件的值分配。 我一直在尝试检查用Z3替代使用CVC3的可行性。 例如,如果有部门记录,例如部门记录= [NAME,SALARY],并且具有以下约束:
1.工资> 100,工资<1000
2. NAME可以是{abc,def,ghi}之一

主要目的是生成满足数据库关系某些约束的记录。

如何使用Z3来指定这些约束,以将可能的值分配给部门记录? SMT lib格式输入文件是否足够,还是我应该查看Z3公开的编程API?

可能的解决方案如下

(declare-sort S)
(declare-fun abc () S)
(declare-fun def () S)
(declare-fun ghi () S)
(declare-fun NAME () S)
(declare-fun SALARY () Int)
(assert (and (> SALARY 100) (< SALARY 1000)))
(assert (or (= NAME abc) (= NAME def) (= NAME ghi)))
(check-sat)
(get-model)

相应的输出是

sat 

请在此处在线运行此示例

我想我找到了一种方法。

(声明数据类型()((S abc def ghi)))
(宣告乐趣NAME()S)
(声明乐趣SALARY()Int)
(断言(和(> SALARY 100)(<SALARY 1000)))
(断言(或(或(不是(= NAME abc))(= NAME def)(= NAME ghi)))
(星期六)
(获取值(NAME))
(获得价值(SALARY))

现在以上模型将返回:

坐着
((NAME ghi))
((薪水101))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM