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

Sympy能否简化含FiniteSet的Contains逻辑表达式?如何实现?

Sympy中FiniteSet包含表达式的逻辑简化问题

我在使用Sympy 1.12版本(已切换到主分支修复了阻止Contains被简化的近期bug)处理FiniteSet的包含逻辑表达式时,发现simplify_logic无法按照业务需求简化表达式,具体示例如下:

单符号场景

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))
    返回:Contains(a, {1, 2}) & Contains(a, {3, 4})
    预期:False
    
  • 交集有重叠:
    >>> simplify_logic(Contains(a, x) & Contains(a, y))
    返回:Contains(a, {1, 2}) & Contains(a, {2, 3})
    预期:Contains(a, {2})
    
  • 并集有重叠:
    >>> simplify_logic(Contains(a, x) | Contains(a, y))
    返回:Contains(a, {1, 2}) | Contains(a, {2, 3})
    预期:Contains(a, {1, 2, 3})
    
  • 并集无重叠:
    >>> simplify_logic(Contains(a, x) | Contains(a, z))
    返回:Contains(a, {1, 2}) | Contains(a, {3, 4})
    预期:Contains(a, {1, 2, 3, 4})
    

多符号场景(新增符号b)

b = Symbol("b")
  • 不同符号同集合的交集:
    >>> simplify_logic(Contains(a, x) & Contains(b, x))
    返回/预期:Contains(a, {1, 2}) & Contains(b, {1, 2})
    
  • 不同符号同集合的并集:
    >>> simplify_logic(Contains(a, x) | Contains(b, x))
    返回/预期:Contains(a, {1, 2}) | Contains(b, {1, 2})
    

目前Sympy暂不支持这类针对FiniteSet的包含表达式简化,而上述场景已覆盖我的全部业务需求。我想知道:

  1. Sympy是否支持直接实现上述简化?
  2. 如果不支持,能否通过扩展FiniteSet类来实现?
  3. 上述简化逻辑是否存在未考虑的边缘情况?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:52:41