作为 Z3 的初学者,我想知道是否有办法让 Z3Py 使用预定义的 Python 函数。以下是一个解释我的问题的小例子。
from z3 import *
def f(x):
if x > 0:
print " > 0"
return 1
else:
print " <= 0"
return 0
a=Int('a')
s=Solver()
s.insert(f(a) == 0)
t = s.check()
print t
print a
m = s.model()
print m
f(x) 是在 python 中定义的函数。当 x <= 0 时,f(x) 返回 0。我添加了一个约束 s.insert(f(a) == 0)
,希望 Z3 可以为变量“a”找到合适的值(例如 -3)。但是这些代码不能正常工作。我应该如何改变它?
(请注意,我需要在 Z3 之外定义 f(x),然后被 Z3 调用。)
我想要做的是调用图形库提供的预定义函数而不将其转换为 Z3。我正在使用 NetworkX 库,一些代码如下:
import networkx as nx
G1=nx.Graph()
G1.add_edge(0,1)
G2=nx.Graph()
G2.add_edge(0,1)
G2.add_edge(1,2)
print(nx.is_isomorphic(G1, G2))
#False
我需要 Z3 来帮助我在 G2 中找到一个顶点,这样在删除该顶点后,G2 与 G1 同构。例如
G2.remove_node(0)
print(nx.is_isomorphic(G1, G2))
#True