You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Z3公式中声明的高阶自由变量列表?

Z3中提取自定义表达式集合的方法

Z3内置的变量提取方法(比如get_vars())只能返回原始声明的符号变量(如示例中的P1、x、y),因为A1、A2并不是自由变量,而是由原始变量组合而成的布尔表达式节点,Z3不会将其标记为“变量”来追踪。

要获取你需要的{P1, A1, A2}集合,最直接的方式是手动维护自定义表达式的集合,在定义这些表达式时就将其存入集合中:

from z3 import *

# 声明原始符号变量
P1 = Bool('P1')
x, y = Ints('x y')

# 初始化集合,用于存储需要追踪的表达式
target_exprs = set()

# 定义表达式时同时加入集合
A1 = (x + y > 1)
target_exprs.add(A1)
A2 = (x <= 0)
target_exprs.add(A2)
target_exprs.add(P1)

# 构建最终公式
f = And(Implies(P1, A1), Implies(Not(P1), A2))

# 此时target_exprs就是你需要的集合
print(target_exprs)

后续需要生成And(f, Not(A1))这类公式时,直接使用之前定义的A1变量即可,无需从f中反向提取——因为f的结构是由表达式树组成的,Z3不会保留你最初定义A1、A2时的命名关联。

内容的提问来源于stack exchange,提问作者foobar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:50:41