
SymPy 在处理扩展实数域(含无穷大)的符号不等式时,可能过早求值为 BooleanTrue/BooleanFalse,导致本应保持未定(symbolic)的比较被错误判定;正确做法是禁用自动简化或显式构造关系表达式以保留不确定性。
sympy 在处理扩展实数域(含无穷大)的符号不等式时,可能过早求值为 `booleantrue`/`booleanfalse`,导致本应保持未定(symbolic)的比较被错误判定;正确做法是禁用自动简化或显式构造关系表达式以保留不确定性。
在 SymPy 中,符号 y 若声明为 extended_nonnegative=True 且 finite=False,其语义表示 y ∈ [0, +∞](即包含正无穷)。然而,默认行为下,像 y 或 y > 19 这类不等式并非返回未求值的关系对象(如 StrictLessThan),而是直接简化为 BooleanFalse 或 BooleanTrue —— 这看似“确定”,实则违背数学逻辑:因为 y 可能取有限值(如 20),也可能取 oo,故 y 应为不确定(unknown),而非 False。
根本原因在于:SymPy 的假设系统(assumptions)在关系运算中优先启用启发式简化规则,而 extended_nonnegative 假设隐含 y.is_infinite is None(非确定),但 y 却被错误地等价于 Not(y >= oo),再结合 y.is_extended_real 和 oo 的特殊性,最终触发了过度简化。
✅ 正确做法:避免依赖自动比较,改用显式构造 + 禁用简化
BooleanTrue










