使用Z3取出公共变量

使用Z3取出公共变量,z3,z3py,Z3,Z3py,我有一个DNF格式的formlua,比如: abcx + abcy + abz 有没有办法去掉公共变量,得到以下公式: ab (cx + cy + z) 一个后续问题,它能递归地完成吗,比如 ab ( c(x+y) + z) 当然。。这里有一个方法: 从z3导入* a、 b,c,x,y,z=Ints('ab c x y z') 打印简化(a*b*c*x+a*b*c*y+a*b*z,提升倍数=True) 这张照片是: a*b*(c*(x + y) + z) 这正是你要找的 对于下一个问

我有一个DNF格式的formlua,比如:

abcx + abcy + abz
有没有办法去掉公共变量,得到以下公式:

ab (cx + cy + z)
一个后续问题,它能递归地完成吗,比如

ab ( c(x+y) + z) 
当然。。这里有一个方法:

从z3导入*
a、 b,c,x,y,z=Ints('ab c x y z')
打印简化(a*b*c*x+a*b*c*y+a*b*z,提升倍数=True)
这张照片是:

a*b*(c*(x + y) + z)
这正是你要找的

对于下一个问题,我是如何找到关于
just\u cmul=True
参数的?简单运行:

help_simplify()
在Python提示符下,它将列出
simplify
需要的所有选项

请注意,一般来说,您不应该指望简化程序会给您带来什么。它主要是启发式驱动的,并且在存在其他术语的情况下,您得到的可能与您期望的不匹配。(当然,它仍然是一个等价的表达式。)当涉及算术表达式时,没有“最简单”的概念,而你认为简单的和Z3认为简单的可能不一定匹配。