Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Z3Py中正确地生成公理?_Python_Z3_Z3py - Fatal编程技术网

Python 如何在Z3Py中正确地生成公理?

Python 如何在Z3Py中正确地生成公理?,python,z3,z3py,Python,Z3,Z3py,对于所有X(f(X)>0->b==True),我都在使用这个公理 我怎么能用Z3Py做呢?我尝试这样做: from z3 import * Z = IntSort() f = Function('f', Z, Z) g = Function('g', Z, Z) a, n, x = Ints('a n x') b = BoolSort() solve(ForAll(x,Implies(f(x) > 0,b ==True))) 但是Python返回meAttributeError:'bo

对于所有X(f(X)>0->b==True),我都在使用这个公理

我怎么能用Z3Py做呢?我尝试这样做:

from z3 import *

Z = IntSort()
f = Function('f', Z, Z)
g = Function('g', Z, Z)
a, n, x = Ints('a n x')
b = BoolSort()
solve(ForAll(x,Implies(f(x) > 0,b ==True)))

但是Python返回me
AttributeError:'bool'对象没有属性'ast'

您可以将
b
声明为
b=bool('b')
。然后它就起作用了

顺便说一下,您可以将
b==True
替换为
b
,如中所示

solve(对于所有(x,意味着(f(x)>0,b))


BoolSort
等用于Z3Py函数的参数,而不是变量。

您可以将
b
声明为
b=Bool('b')
。然后它就起作用了

顺便说一下,您可以将
b==True
替换为
b
,如中所示

solve(对于所有(x,意味着(f(x)>0,b))


BoolSort
等用于Z3Py函数的参数,而不是变量。

您的公理试图说明什么?请注意,在所有X.(f(X)>0->b==True)的公式中,
b
是一个自由变量。所以,这似乎并不符合任何逻辑。但是,如果这是您真正想说的,那么您可以这样编写代码:

从z3导入*
Z=IntSort()
f=函数('f',Z,Z)
g=函数('g',Z,Z)
a、 n,x=Ints('anx')
b=布尔值('b')
求解(对于所有(x,意味着(f(x)>0,b)))
我们得到:

$ python a.py
[b = False, f = [else -> 0]]
z3告诉我们什么?它说,好的,我将选择
f
作为一个函数,将所有内容映射到
0
。因此,你的暗示将有一个先行词
0>0
,它总是
false
,因此暗示总是真的。(False意味着一切。)在模型中为
b
选择
False
实际上是不相关的


因此,z3确实为您找到了满足您量化断言的
f
b
模型。就像你问的。但我怀疑这并不是你想要坚持的公式。公理通常是封闭的:也就是说,它们没有自由变量,除了它们包含的未解释的函数符号。当然,这完全取决于你到底想做什么。

你的公理是什么?请注意,在所有X.(f(X)>0->b==True)的公式中,
b
是一个自由变量。所以,这似乎并不符合任何逻辑。但是,如果这是您真正想说的,那么您可以这样编写代码:

从z3导入*
Z=IntSort()
f=函数('f',Z,Z)
g=函数('g',Z,Z)
a、 n,x=Ints('anx')
b=布尔值('b')
求解(对于所有(x,意味着(f(x)>0,b)))
我们得到:

$ python a.py
[b = False, f = [else -> 0]]
z3告诉我们什么?它说,好的,我将选择
f
作为一个函数,将所有内容映射到
0
。因此,你的暗示将有一个先行词
0>0
,它总是
false
,因此暗示总是真的。(False意味着一切。)在模型中为
b
选择
False
实际上是不相关的


因此,z3确实为您找到了满足您量化断言的
f
b
模型。就像你问的。但我怀疑这并不是你想要坚持的公式。公理通常是封闭的:也就是说,它们没有自由变量,除了它们包含的未解释的函数符号。当然,这一切都取决于你到底想做什么。

谢谢你的帮助,但是如果公理没有自由变量,我怎么做呢?我想在所有xf(X)>0的情况下这样做,然后返回真值,但我只按照我提出的方法编写。也许我对公理的概念不好,但我认为当我写一个公理时,我必须说明前提条件,当前提条件为真时,我不知道Z3是支持后条件还是我必须写它,它是怎么写的?@SergiSanz我认为困惑来自于试图将Z3视为命令式语言,在这里设置变量,可以执行循环等。。相反,在Z3中,您定义了变量之间的逻辑条件,而Z3则神奇地找到了满足这些条件的变量。@SergiSanz我怀疑您可能遇到了XY问题。()与其问一些关于编码的迂回问题,不如直接问你想建模什么。你的问题越具体,答案就越好。我感觉你想要的不是真正的量化公理。谢谢你的帮助,但是如果公理没有自由变量,我怎么做呢?我想在所有xf(X)>0的情况下这样做,然后返回真值,但我只按照我提出的方法编写。也许我对公理的概念不好,但我认为当我写一个公理时,我必须说明前提条件,当前提条件为真时,我不知道Z3是支持后条件还是我必须写它,它是怎么写的?@SergiSanz我认为困惑来自于试图将Z3视为命令式语言,在这里设置变量,可以执行循环等。。相反,在Z3中,您定义了变量之间的逻辑条件,而Z3则神奇地找到了满足这些条件的变量。@SergiSanz我怀疑您可能遇到了XY问题。()与其问一些关于编码的迂回问题,不如直接问你想建模什么。你的问题越具体,答案就越好。我觉得你想要的不是真正的量化公理。