我正在编写某种模拟某些规则的应用程序。我发现Z3py的定点是我的帮助。我的应用程序大纲如下: (fp = Fixedpoint())
声明一些整数变量,例如:a,b,c = Ints('a b c')并注册到固定点 - fp。(a,b,c)
遵循某些变量的属性(事实),增加或减少其他一些变量。例如: 如果(a> 0且b> 0)则c = c + 1
查询目标变量是否满足某些条件,例如查询(目标&0)
我不知道如何使用规则来指定2.有人可以告诉我这可能吗?
答案 0 :(得分:1)
我拿了你概述的例子并创建了一个例子:
我希望这会有所帮助。
Z3打印UNSAT,因为无法访问查询。 然后它会显示一个证明该值的不变量 查询无法访问。
更详细
要声明具有三个参数的属性,请执行以下操作:
P = Function('P', IntSort(), IntSort(), IntSort(), BoolSort())
要为定点引擎注册它:
fp.register_relation(P)
添加您的所有规则:
fp.rule(P(-1,1,-10))
fp.rule(P(a,b,c+1), [a > 0, b > 0, P(a,b,c)])
fp.rule(P(a+1,b,c-1), [a <= 0, b < 0, P(a,b,c)])
第一条规则说明了最初属性的含义。 第二条规则说,如果a> 1,则c可递增。 0,b> 0
最后询问是否可以访问某些属性:
print fp.query(P(a,b,c),c > 0 )