【发布时间】:2014-04-29 01:06:21
【问题描述】:
作为 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 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
【问题讨论】: