如何用多个 FiniteSet 简化逻辑表达式

问题描述 投票:0回答:0

使用 Python 包

sympy
(1.12 版)我有几个
FiniteSet
和一个我想简化/优化的表达式。

举个例子说千言万语:

from sympy import Symbol, FiniteSet, simplify_logic, Contains

a = Symbol("a")
x = FiniteSet("1", "2")
y = FiniteSet("2", "3")
z = FiniteSet("3", "4")

>>> simplify_logic(Contains(a, x) & Contains(a, z))
Returned: Contains(a, {1, 2}) & Contains(a, {3, 4})
Expected: False

>>> simplify_logic(Contains(a, x) & Contains(a, y))
Returned: Contains(a, {1, 2}) & Contains(a, {2, 3})
Expected: Contains(a, {2})

>>> simplify_logic(Contains(a, x) | Contains(a, y))
Returned: Contains(a, {1, 2}) & Contains(a, {2, 3})
Expected: Contains(a, {1, 2, 3})

>>> simplify_logic(Contains(a, x) | Contains(a, z))
Returned: Contains(a, {1, 2}) | Contains(a, {3, 4})
Expected: Contains(a, {1, 2, 3, 4})

为清楚起见,在附加符号

b = Symbol("b")
的情况下,预计会出现以下情况:

>>> simplify_logic(Contains(a, x) & Contains(b, x))
Returned/Expected: Contains(a, {1, 2}) & Contains(b, {1, 2})

>>> simplify_logic(Contains(a, x) | Contains(b, x))
Returned/Expected: Contains(a, {1, 2}) | Contains(b, {1, 2})

似乎

sympy
没有处理这样的简化(还)。 对于我的特定用例,上面给出的示例/简化已经涵盖了我的用例,因为我的应用程序仅使用
FiniteSet
s.

问题: 是否已经有办法让

sympy
直接开箱即用地进行如上所示的简化?如果没有,是否有可能(以及如何)例如扩展
FiniteSet
类以涵盖此类情况?
或者这是不可能的/不建议的,因为有任何我想不到的边缘情况?

注意:要玩,需要使用当前的主人作为最近的错误防止

Contains
被简化已被修复(谢谢!)

python logic sympy logical-operators
© www.soinside.com 2019 - 2024. All rights reserved.