逻辑¶
介绍¶
SymPy 的逻辑模块允许使用符号和布尔值来形成和操作逻辑表达式。
形成逻辑表达式¶
你可以使用标准的 Python 运算符 & (And)、| (Or)、~ (Not) 构建布尔表达式:
>>> from sympy import *
>>> x, y = symbols('x,y')
>>> y | (x & y)
y | (x & y)
>>> x | y
x | y
>>> ~x
~x
你也可以使用 >> 和 << 形成推论:
>>> x >> y
Implies(x, y)
>>> x << y
Implies(y, x)
与SymPy中的大多数类型一样,布尔表达式继承自 Basic:
>>> (y & x).subs({x: True, y: True})
True
>>> (x | y).atoms()
{x, y}
逻辑模块还包括以下功能,用于从真值表推导布尔表达式:
- sympy.logic.boolalg.SOPform(variables, minterms, dontcares=None)[源代码][源代码]¶
SOPform 函数使用简化对和消除冗余组的算法,将生成 ‘1’(最小项)的所有输入组合列表转换为最小的乘积和形式。
变量必须作为第一个参数给出。
返回一个逻辑的
Or函数(即,“乘积和”或“SOP”形式),以获得所需的结果。如果有可以忽略的输入,也将它们作为列表传递。结果将是满足条件(可能有很多)的函数之一。
参见
参考文献
示例
>>> from sympy.logic import SOPform >>> from sympy import symbols >>> w, x, y, z = symbols('w x y z') >>> minterms = [[0, 0, 0, 1], [0, 0, 1, 1], ... [0, 1, 1, 1], [1, 0, 1, 1], [1, 1, 1, 1]] >>> dontcares = [[0, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 1]] >>> SOPform([w, x, y, z], minterms, dontcares) (y & z) | (~w & ~x)
这些术语也可以表示为整数:
>>> minterms = [1, 3, 7, 11, 15] >>> dontcares = [0, 2, 5] >>> SOPform([w, x, y, z], minterms, dontcares) (y & z) | (~w & ~x)
它们也可以使用字典来指定,这些字典不需要完全指定:
>>> minterms = [{w: 0, x: 1}, {y: 1, z: 1, x: 0}] >>> SOPform([w, x, y, z], minterms) (x & ~w) | (y & z & ~x)
或组合:
>>> minterms = [4, 7, 11, [1, 1, 1, 1]] >>> dontcares = [{w : 0, x : 0, y: 0}, 5] >>> SOPform([w, x, y, z], minterms, dontcares) (w & y & z) | (~w & ~y) | (x & z & ~w)
- sympy.logic.boolalg.POSform(variables, minterms, dontcares=None)[源代码][源代码]¶
POSform 函数使用简化对和消除冗余组的算法,将生成 ‘1’(最小项)的所有输入组合列表转换为最小的和积形式。
变量必须作为第一个参数给出。
返回一个逻辑的
And函数(即,“和的乘积”或“POS”形式),以获得所需的结果。如果有可以忽略的输入,也将它们作为列表传递。结果将是满足条件(可能有很多)的函数之一。
参见
参考文献
示例
>>> from sympy.logic import POSform >>> from sympy import symbols >>> w, x, y, z = symbols('w x y z') >>> minterms = [[0, 0, 0, 1], [0, 0, 1, 1], [0, 1, 1, 1], ... [1, 0, 1, 1], [1, 1, 1, 1]] >>> dontcares = [[0, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 1]] >>> POSform([w, x, y, z], minterms, dontcares) z & (y | ~w)
这些术语也可以表示为整数:
>>> minterms = [1, 3, 7, 11, 15] >>> dontcares = [0, 2, 5] >>> POSform([w, x, y, z], minterms, dontcares) z & (y | ~w)
它们也可以使用字典来指定,这些字典不需要完全指定:
>>> minterms = [{w: 0, x: 1}, {y: 1, z: 1, x: 0}] >>> POSform([w, x, y, z], minterms) (x | y) & (x | z) & (~w | ~x)
或组合:
>>> minterms = [4, 7, 11, [1, 1, 1, 1]] >>> dontcares = [{w : 0, x : 0, y: 0}, 5] >>> POSform([w, x, y, z], minterms, dontcares) (w | x) & (y | ~w) & (z | ~y)
- sympy.logic.boolalg.ANFform(variables, truthvalues)[源代码][源代码]¶
ANFform 函数将真值列表转换为代数正规形式(ANF)。
变量必须作为第一个参数给出。
返回 True、False、逻辑
And函数(即“Zhegalkin 单项式”)或逻辑Xor函数(即“Zhegalkin 多项式”)。当 True 和 False 分别由 1 和 0 表示时,And是乘法,而Xor是加法。形式上,“Zhegalkin 单项式”是有限个不同变量的乘积(逻辑与),包括空集,其乘积记为 1(真)。“Zhegalkin 多项式”是 Zhegalkin 单项式的集合的和(逻辑异或),空集记为 0(假)。
- 参数:
- 变量变量列表
- 真值1 和 0 的列表(真值表的结果列)
参考文献
示例
>>> from sympy.logic.boolalg import ANFform >>> from sympy.abc import x, y >>> ANFform([x], [1, 0]) x ^ True >>> ANFform([x, y], [0, 1, 1, 1]) x ^ y ^ (x & y)
布尔函数¶
- class sympy.logic.boolalg.Boolean(*args)[源代码][源代码]¶
布尔对象是逻辑操作有意义的对象。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
free_symbols从自身的原子中返回那些自由符号。
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()重写布尔表达式为实数集的形式。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(**kwargs)请参阅 sympy.simplify 中的 simplify 函数。
sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(rule)替换表达式中对象的出现。
复制
could_extract_minus_sign
is_hypergeometric
to_nnf
- as_set()[源代码][源代码]¶
重写布尔表达式为实数集的形式。
示例
>>> from sympy import Symbol, Eq, Or, And >>> x = Symbol('x', real=True) >>> Eq(x, 0).as_set() {0} >>> (x > 0).as_set() Interval.open(0, oo) >>> And(-2 < x, x < 2).as_set() Interval.open(-2, 2) >>> Or(x < -2, 2 < x).as_set() Union(Interval.open(-oo, -2), Interval.open(2, oo))
- class sympy.logic.boolalg.BooleanTrue[源代码][源代码]¶
SymPy 版本的
True,一个可以通过S.true访问的单例。这是 SymPy 版本的
True,用于逻辑模块。使用true而不是True的主要优势是,像~和>>这样的简写布尔运算符将按预期在此类上工作,而在 True 上它们对 1 进行按位操作。逻辑模块中的函数在评估为真时将返回此类。- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
- 规范
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
free_symbols从自身的原子中返回那些自由符号。
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
- 否定
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()用实数集重写逻辑运算符和关系运算符。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(*a, **kw)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(rule)替换表达式中对象的出现。
复制
could_extract_minus_sign
展开
is_hypergeometric
to_nnf
注释
在SymPy的各种上下文中,何时使用
True以及何时使用S.true可能会引起一些混淆。需要记住的重要一点是,sympify(True)返回S.true。这意味着在大多数情况下,你可以直接使用True,它会在必要时自动转换为S.true,类似于你通常可以使用 1 代替S.One。经验法则是:
如果所讨论的布尔值可以被任意符号
Boolean替换,例如Or(x, y)或x > 1,请使用S.true。否则,请使用True。换句话说,只有在布尔值被用作真值的符号表示的情况下,才使用
S.true。例如,如果对象最终出现在任何表达式的.args中,那么它必须必然是S.true而不是True,因为.args的元素必须是Basic。另一方面,==在 SymPy 中不是符号操作,因为它总是返回True或False,并且是以结构相等而不是数学相等的方式返回,所以它应该返回True。假设系统应该使用True和False。除了不满足上述经验法则外,假设系统使用三值逻辑(True、False、None),而S.true和S.false表示二值逻辑。如果有疑问,使用True。S.true == True is True.虽然
S.true is True是False,但S.true == True是True,所以如果有任何疑问关于函数或表达式会返回S.true还是True,只需使用==而不是is来进行比较,这样在任何情况下都能正常工作。最后,对于布尔标志,最好直接使用if x而不是if x is True。引用 PEP 8 的话:不要使用
==将布尔值与True或False进行比较。是的:
if greeting:不:
if greeting == True:更糟糕的是:
if greeting is True:
示例
>>> from sympy import sympify, true, false, Or >>> sympify(True) True >>> _ is True, _ is true (False, True)
>>> Or(true, false) True >>> _ is true True
Python 运算符对 true 给出布尔结果,但对 True 给出按位结果。
>>> ~true, ~True (False, -2) >>> true >> true, True >> True (True, 0)
- class sympy.logic.boolalg.BooleanFalse[源代码][源代码]¶
SymPy 版本的
False,一个可以通过S.false访问的单例。这是
False的 SymPy 版本,用于逻辑模块。使用false而不是False的主要优势是,像~和>>这样的简写布尔操作将按预期在此类上工作,而False则会按位操作 0。逻辑模块中的函数在评估为假时将返回此类。- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
- 规范
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
free_symbols从自身的原子中返回那些自由符号。
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
- 否定
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()用实数集重写逻辑运算符和关系运算符。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(*a, **kw)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(rule)替换表达式中对象的出现。
复制
could_extract_minus_sign
展开
is_hypergeometric
to_nnf
注释
请参阅
sympy.logic.boolalg.BooleanTrue中的注释部分示例
>>> from sympy import sympify, true, false, Or >>> sympify(False) False >>> _ is False, _ is false (False, True)
>>> Or(true, false) True >>> _ is true True
Python 运算符对 false 给出布尔结果,但对 False 给出按位结果。
>>> ~false, ~False (True, -1) >>> false >> false, False >> False (True, 0)
- class sympy.logic.boolalg.And(*args)[源代码][源代码]¶
逻辑与函数。
它按顺序评估其参数,当一个参数为假时立即返回假,如果所有参数都为真则返回真。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()重写布尔表达式为实数集的形式。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
diff(*symbols, **assumptions)doit(**hints)dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。eval(*args)返回应用于参数 args 的 cls 的规范形式。
find(query[, group])查找所有匹配查询的子表达式。
flatten(seq)返回序列,使得序列中没有任何元素的类型为 \(cls\)。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
make_args(expr)返回一组参数,使得 cls(*arg_set) == expr。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(**kwargs)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(**_)binary_check_and_simplify
复制
could_extract_minus_sign
is_hypergeometric
to_anf
to_nnf
注释
&运算符作为便利提供,但请注意,它在这里的使用与在 Python 中的正常使用不同,后者是按位与。因此,And(a, b)和a & b如果a和b是整数,将产生不同的结果。>>> And(x, y).subs(x, 1) y
示例
>>> from sympy.abc import x, y >>> from sympy import And >>> x & y x & y
- class sympy.logic.boolalg.Or(*args)[源代码][源代码]¶
逻辑或函数
它按顺序评估其参数,当一个参数为真时立即返回真,如果所有参数都为假则返回假。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()重写布尔表达式为实数集的形式。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
diff(*symbols, **assumptions)doit(**hints)dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。eval(*args)返回应用于参数 args 的 cls 的规范形式。
find(query[, group])查找所有匹配查询的子表达式。
flatten(seq)返回序列,使得序列中没有任何元素的类型为 \(cls\)。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
make_args(expr)返回一组参数,使得 cls(*arg_set) == expr。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(**kwargs)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(**_)binary_check_and_simplify
复制
could_extract_minus_sign
is_hypergeometric
to_anf
to_nnf
注释
|运算符作为便利工具提供,但请注意,它在这里的使用与在 Python 中的常规用法不同,后者是按位或。因此,如果a和b是整数,Or(a, b)和a | b将返回不同的结果。>>> Or(x, y).subs(x, 0) y
示例
>>> from sympy.abc import x, y >>> from sympy import Or >>> x | y x | y
- class sympy.logic.boolalg.Not(arg)[源代码][源代码]¶
逻辑非函数(否定)
如果语句为
false或False,则返回true。如果语句为true或True,则返回false。- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()重写布尔表达式为实数集的形式。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
diff(*symbols, **assumptions)doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。eval(arg)find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(**kwargs)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(**_)binary_check_and_simplify
复制
could_extract_minus_sign
is_hypergeometric
to_anf
to_nnf
注释
~运算符作为便利工具提供,但请注意,它在这里的使用与在 Python 中的正常使用不同,后者是按位取反。特别是,如果a是整数,~a和Not(a)将不同。此外,由于布尔值在 Python 中是int的子类,~True等同于~1,即-2,其布尔值为 True。为了避免这个问题,请使用 SymPy 布尔类型true和false。从 Python 3.12 开始,对 Python
bool使用按位非运算符~已被弃用,并将发出警告。
>>> from sympy import true >>> ~True -2 >>> ~true False
示例
>>> from sympy import Not, And, Or >>> from sympy.abc import x, A, B >>> Not(True) False >>> Not(False) True >>> Not(And(True, False)) True >>> Not(Or(True, False)) False >>> Not(And(And(True, x), Or(x, False))) ~x >>> ~x ~x >>> Not(And(Or(A, B), Or(~A, ~B))) ~((A | B) & (~A | ~B))
- class sympy.logic.boolalg.Xor(*args)[源代码][源代码]¶
逻辑异或(exclusive OR)函数。
如果参数中奇数个为 True,其余为 False,则返回 True。
如果参数中偶数个为 True,其余为 False,则返回 False。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()重写布尔表达式为实数集的形式。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
diff(*symbols, **assumptions)doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。eval(*args)返回应用于参数 args 的 cls 的规范形式。
find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(**kwargs)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(**_)binary_check_and_simplify
复制
could_extract_minus_sign
is_hypergeometric
to_anf
to_nnf
注释
^运算符作为便利提供,但请注意,它在这里的使用与在Python中的正常使用不同,后者是按位异或。特别是,如果a和b是整数,a ^ b和Xor(a, b)将不同。>>> Xor(x, y).subs(y, 0) x
示例
>>> from sympy.logic.boolalg import Xor >>> from sympy import symbols >>> x, y = symbols('x y') >>> Xor(True, False) True >>> Xor(True, True) False >>> Xor(True, False, True, True, False) True >>> Xor(True, False, True, False) False >>> x ^ y x ^ y
- class sympy.logic.boolalg.Nand(*args)[源代码][源代码]¶
逻辑与非功能。
它按顺序评估其参数,如果其中任何一个为 False,则立即返回 True,如果它们都为 True,则返回 False。
如果任何一个参数为 False 则返回 True,如果所有参数都为 True 则返回 False
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()重写布尔表达式为实数集的形式。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
diff(*symbols, **assumptions)doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。eval(*args)find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(**kwargs)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(**_)binary_check_and_simplify
复制
could_extract_minus_sign
is_hypergeometric
to_anf
to_nnf
示例
>>> from sympy.logic.boolalg import Nand >>> from sympy import symbols >>> x, y = symbols('x y') >>> Nand(False, True) True >>> Nand(True, True) False >>> Nand(x, y) ~(x & y)
- class sympy.logic.boolalg.Nor(*args)[源代码][源代码]¶
逻辑 NOR 函数。
它会按顺序评估其参数,如果其中任何一个为 True,则立即返回 False,如果所有参数都为 False,则返回 True。
如果任何参数为 True 则返回 False 如果所有参数为 False 则返回 True
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()重写布尔表达式为实数集的形式。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
diff(*symbols, **assumptions)doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。eval(*args)find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(**kwargs)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(**_)binary_check_and_simplify
复制
could_extract_minus_sign
is_hypergeometric
to_anf
to_nnf
示例
>>> from sympy.logic.boolalg import Nor >>> from sympy import symbols >>> x, y = symbols('x y')
>>> Nor(True, False) False >>> Nor(True, True) False >>> Nor(False, True) False >>> Nor(False, False) True >>> Nor(x, y) ~(x | y)
- class sympy.logic.boolalg.Xnor(*args)[源代码][源代码]¶
逻辑 XNOR 函数。
如果参数中奇数个为True,其余为False,则返回False。
如果参数中有偶数个为 True,其余为 False,则返回 True。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()重写布尔表达式为实数集的形式。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
diff(*symbols, **assumptions)doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。eval(*args)find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(**kwargs)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(**_)binary_check_and_simplify
复制
could_extract_minus_sign
is_hypergeometric
to_anf
to_nnf
示例
>>> from sympy.logic.boolalg import Xnor >>> from sympy import symbols >>> x, y = symbols('x y') >>> Xnor(True, False) False >>> Xnor(True, True) True >>> Xnor(True, False, True, True, False) False >>> Xnor(True, False, True, False) True
- class sympy.logic.boolalg.Implies(*args)[源代码][源代码]¶
逻辑蕴含。
A 蕴含 B 等价于 如果 A 则 B。数学上,它写作 \(A \Rightarrow B\),等价于 \(\neg A \vee B\) 或
~A | B。接受两个布尔参数;A 和 B。如果 A 为 True 且 B 为 False,则返回 False。否则返回 True。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()重写布尔表达式为实数集的形式。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
diff(*symbols, **assumptions)doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。eval(*args)find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(**kwargs)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(**_)binary_check_and_simplify
复制
could_extract_minus_sign
is_hypergeometric
to_anf
to_nnf
注释
>>和<<运算符作为便利工具提供,但请注意,它们在这里的使用与在Python中的正常使用不同,后者用于位移。因此,如果a和b是整数,Implies(a, b)和a >> b将返回不同的结果。特别是,由于Python将True和False视为整数,True >> True将与1 >> 1相同,即0,其真值为False。为避免此问题,请使用SymPy对象true和false。>>> from sympy import true, false >>> True >> False 1 >>> true >> false False
示例
>>> from sympy.logic.boolalg import Implies >>> from sympy import symbols >>> x, y = symbols('x y')
>>> Implies(True, False) False >>> Implies(False, False) True >>> Implies(True, True) True >>> Implies(False, True) True >>> x >> y Implies(x, y) >>> y << x Implies(x, y)
- class sympy.logic.boolalg.Equivalent(*args)[源代码][源代码]¶
等价关系。
Equivalent(A, B)在 A 和 B 都为 True 或都为 False 时为 True。如果所有参数在逻辑上等价,则返回 True。否则返回 False。
对于两个参数,这等价于
Xnor。- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()重写布尔表达式为实数集的形式。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
diff(*symbols, **assumptions)doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。eval(*args)返回应用于参数 args 的 cls 的规范形式。
find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(**kwargs)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(**_)binary_check_and_simplify
复制
could_extract_minus_sign
is_hypergeometric
to_anf
to_nnf
示例
>>> from sympy.logic.boolalg import Equivalent, And >>> from sympy.abc import x >>> Equivalent(False, False, False) True >>> Equivalent(True, False, False) False >>> Equivalent(x, And(x, True)) True
- class sympy.logic.boolalg.ITE(*args)[源代码][源代码]¶
如果-那么-否则 子句。
ITE(A, B, C)在 A 为真时计算并返回 B 的结果,否则返回 C 的结果。所有参数必须是布尔值。从逻辑门的角度来看,ITE 对应于一个 2 对 1 的多路复用器,其中 A 是选择信号。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()重写布尔表达式为实数集的形式。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
diff(*symbols, **assumptions)doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。eval(*args)find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(**kwargs)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(**_)binary_check_and_simplify
复制
could_extract_minus_sign
is_hypergeometric
to_anf
to_nnf
示例
>>> from sympy.logic.boolalg import ITE, And, Xor, Or >>> from sympy.abc import x, y, z >>> ITE(True, False, True) False >>> ITE(Or(True, False), And(True, True), Xor(True, True)) True >>> ITE(x, y, z) ITE(x, y, z) >>> ITE(True, x, y) x >>> ITE(False, x, y) y >>> ITE(x, y, y) y
尝试使用非布尔类型的参数将生成一个 TypeError:
>>> ITE(True, [], ()) Traceback (most recent call last): ... TypeError: expecting bool, Boolean or ITE, not `[]`
- class sympy.logic.boolalg.Exclusive(*args)[源代码][源代码]¶
如果只有一个或没有参数为真,则为真。
Exclusive(A, B, C)等价于~(A & B) & ~(A & C) & ~(B & C)。对于两个参数,这等价于
Xor。- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
- 二进制符号
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set()重写布尔表达式为实数集的形式。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
diff(*symbols, **assumptions)doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other)如果给定的公式具有相同的真值表,则返回
True。eval(*args)find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
simplify(**kwargs)sort_key([order])返回一个排序键。
subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(**_)binary_check_and_simplify
复制
could_extract_minus_sign
is_hypergeometric
to_anf
to_nnf
示例
>>> from sympy.logic.boolalg import Exclusive >>> Exclusive(False, False, False) True >>> Exclusive(False, True, False) True >>> Exclusive(False, True, True) False
以下函数可用于处理代数、合取、析取和否定范式:
- sympy.logic.boolalg.to_anf(expr, deep=True)[源代码][源代码]¶
将表达式转换为代数正规形式(ANF)。
ANF 是一种规范范式,这意味着两个等价的公式将转换为相同的 ANF。
一个逻辑表达式在ANF中,如果它具有以下形式
\[1 \oplus a \oplus b \oplus ab \oplus abc\]- 即它可以是:
纯粹真实,
完全错误,
变量的结合,
异或运算。
异或只能包含真值、变量或变量的合取。不允许使用否定。
如果
deep是False,布尔表达式的参数被视为变量,即只有顶层表达式被转换为 ANF。示例
>>> from sympy.logic.boolalg import And, Or, Not, Implies, Equivalent >>> from sympy.logic.boolalg import to_anf >>> from sympy.abc import A, B, C >>> to_anf(Not(A)) A ^ True >>> to_anf(And(Or(A, B), Not(C))) A ^ B ^ (A & B) ^ (A & C) ^ (B & C) ^ (A & B & C) >>> to_anf(Implies(Not(A), Equivalent(B, C)), deep=False) True ^ ~A ^ (~A & (Equivalent(B, C)))
- sympy.logic.boolalg.to_cnf(expr, simplify=False, force=False)[源代码][源代码]¶
将命题逻辑句子
expr转换为合取范式:((A | ~B | ...) & (B | C | ...) & ...)。如果simplify为True,则使用 Quine-McCluskey 算法将expr评估为其最简单的 CNF 形式;这可能需要很长时间。如果变量超过 8 个,则必须将force标志设置为True以进行简化(默认值为False)。示例
>>> from sympy.logic.boolalg import to_cnf >>> from sympy.abc import A, B, D >>> to_cnf(~(A | B) | D) (D | ~A) & (D | ~B) >>> to_cnf((A | B) & (A | ~A), True) A | B
- sympy.logic.boolalg.to_dnf(expr, simplify=False, force=False)[源代码][源代码]¶
将命题逻辑句子
expr转换为析取范式:((A & ~B & ...) | (B & C & ...) | ...)。如果simplify为True,则使用 Quine-McCluskey 算法将expr评估为其最简单的 DNF 形式;这可能需要很长时间。如果变量超过 8 个,则必须将force标志设置为True以进行简化(默认值为False)。示例
>>> from sympy.logic.boolalg import to_dnf >>> from sympy.abc import A, B, C >>> to_dnf(B & (A | C)) (A & B) | (B & C) >>> to_dnf((A & B) | (A & ~B) | (B & C) | (~B & C), True) A | C
- sympy.logic.boolalg.to_nnf(expr, simplify=True)[源代码][源代码]¶
将
expr转换为否定范式 (NNF)。一个逻辑表达式在NNF中,如果它只包含
And、Or和Not,并且Not只应用于字面量。如果simplify是True,结果不包含冗余子句。示例
>>> from sympy.abc import A, B, C, D >>> from sympy.logic.boolalg import Not, Equivalent, to_nnf >>> to_nnf(Not((~A & ~B) | (C & D))) (A | B) & (~C | ~D) >>> to_nnf(Equivalent(A >> B, B >> A)) (A | ~B | (A & ~B)) & (B | ~A | (B & ~A))
- sympy.logic.boolalg.is_anf(expr)[源代码][源代码]¶
检查
expr是否在代数正规形式(ANF)中。一个逻辑表达式在ANF中,如果它具有以下形式
\[1 \oplus a \oplus b \oplus ab \oplus abc\]即它是纯粹的真、纯粹的假、变量的合取或变量的异或。异或只能包含真、变量或变量的合取。不允许使用否定。
示例
>>> from sympy.logic.boolalg import And, Not, Xor, true, is_anf >>> from sympy.abc import A, B, C >>> is_anf(true) True >>> is_anf(A) True >>> is_anf(And(A, B, C)) True >>> is_anf(Xor(A, Not(B))) False
- sympy.logic.boolalg.is_cnf(expr)[源代码][源代码]¶
测试一个表达式是否为合取范式。
示例
>>> from sympy.logic.boolalg import is_cnf >>> from sympy.abc import A, B, C >>> is_cnf(A | B | C) True >>> is_cnf(A & B & C) True >>> is_cnf((A & B) | C) False
- sympy.logic.boolalg.is_dnf(expr)[源代码][源代码]¶
测试一个表达式是否为析取范式。
示例
>>> from sympy.logic.boolalg import is_dnf >>> from sympy.abc import A, B, C >>> is_dnf(A | B | C) True >>> is_dnf(A & B & C) True >>> is_dnf((A & B) | C) True >>> is_dnf(A & (B | C)) False
- sympy.logic.boolalg.is_nnf(expr, simplified=True)[源代码][源代码]¶
检查
expr是否为否定范式 (NNF)。逻辑表达式在NNF中,如果它仅包含
And、Or和Not,并且Not仅应用于字面量。如果simplified为True,则检查结果是否包含冗余子句。示例
>>> from sympy.abc import A, B, C >>> from sympy.logic.boolalg import Not, is_nnf >>> is_nnf(A & B | ~C) True >>> is_nnf((A | ~A) & (B | C)) False >>> is_nnf((A | ~A) & (B | C), False) True >>> is_nnf(Not(A & B) | C) False >>> is_nnf((A >> B) & (B >> A)) False
- sympy.logic.boolalg.gateinputcount(expr)[源代码][源代码]¶
返回实现布尔表达式的逻辑门的输入总数。
- 返回:
- 整数
门输入的数量
示例
>>> from sympy.logic import And, Or, Nand, Not, gateinputcount >>> from sympy.abc import x, y, z >>> expr = And(x, y) >>> gateinputcount(expr) 2 >>> gateinputcount(Or(expr, z)) 4
注意
Nand会自动评估为Not(And())所以>>> gateinputcount(Nand(x, y, z)) 4 >>> gateinputcount(Not(And(x, y, z))) 4
尽管可以通过使用
evaluate=False来避免这种情况>>> gateinputcount(Nand(x, y, z, evaluate=False)) 3
还要注意,比较将被视为布尔变量:
>>> gateinputcount(And(x > z, y >= 2)) 2
像一个符号一样: >>> gateinputcount(x) 0
简化与等价测试¶
- sympy.logic.boolalg.simplify_logic(
- expr,
- form=None,
- deep=True,
- force=False,
- dontcare=None,
此函数将布尔函数简化为SOP或POS形式的最简版本。返回类型是SymPy中的
Or或And对象。- 参数:
- 表达式布尔值
- 形式 : 字符串 (
'cnf'或'dnf') 或None(默认)。字符串 ( 如果
'cnf'或'dnf',则返回相应范式中最简单的表达式;如果None,则根据参数最少的格式返回答案(默认情况下为CNF)。- deep : bool (默认
True)bool (默认) 指示是否递归简化输入中包含的任何非布尔函数。
- force : bool (默认
False)bool (默认) 由于简化操作在变量数量上需要指数级的时间,因此默认情况下对包含8个变量的表达式设有限制。当表达式包含超过8个变量时,仅进行符号简化(由``deep``控制)。通过将``force``设置为``True``,可以移除此限制。请注意,这可能会导致非常长的简化时间。
- dontcare布尔值
在假设此表达式为真的输入是无关的情况下优化表达式。这在例如分段条件中很有用,后续条件不需要考虑被先前条件转换的输入。例如,如果先前条件是
And(A, B),则可以在And(A, B)的无关条件下简化 expr。
参考文献
[1]示例
>>> from sympy.logic import simplify_logic >>> from sympy.abc import x, y, z >>> b = (~x & ~y & ~z) | ( ~x & ~y & z) >>> simplify_logic(b) ~x & ~y >>> simplify_logic(x | y, dontcare=y) x
SymPy 的 simplify() 函数也可以用于将逻辑表达式简化为最简形式。
- sympy.logic.boolalg.bool_map(bool1, bool2)[源代码][源代码]¶
返回 bool1 的简化版本,以及使得两个表达式 bool1 和 bool2 对于每个变量之间的一些对应关系表示相同的逻辑行为的变量映射。如果存在多个这样的映射,则返回其中一个。
例如,对于映射
{x: a, y: b}或{x: b, y: a},And(x, y)在逻辑上等价于And(a, b)。如果不存在这样的映射,则返回False。示例
>>> from sympy import SOPform, bool_map, Or, And, Not, Xor >>> from sympy.abc import w, x, y, z, a, b, c, d >>> function1 = SOPform([x, z, y],[[1, 0, 1], [0, 0, 1]]) >>> function2 = SOPform([a, b, c],[[1, 0, 1], [1, 0, 0]]) >>> bool_map(function1, function2) (y & ~z, {y: a, z: b})
结果不一定是唯一的,但它们是规范的。在这里,
(w, z)可以是(a, d)或(d, a):>>> eq = Or(And(Not(y), w), And(Not(y), z), And(x, y)) >>> eq2 = Or(And(Not(c), a), And(Not(c), d), And(b, c)) >>> bool_map(eq, eq2) ((x & y) | (w & ~y) | (z & ~y), {w: a, x: b, y: c, z: d}) >>> eq = And(Xor(a, b), c, And(c,d)) >>> bool_map(eq, eq.subs(c, x)) (c & d & (a | b) & (~a | ~b), {a: a, b: b, c: d, d: x})
操作表达式¶
以下函数可用于操作布尔表达式:
- sympy.logic.boolalg.distribute_and_over_or(expr)[源代码][源代码]¶
给定一个由文字的合取和析取组成的句子
expr,返回一个等价的CNF句子。示例
>>> from sympy.logic.boolalg import distribute_and_over_or, And, Or, Not >>> from sympy.abc import A, B, C >>> distribute_and_over_or(Or(A, And(Not(B), Not(C)))) (A | ~B) & (A | ~C)
- sympy.logic.boolalg.distribute_or_over_and(expr)[源代码][源代码]¶
给定一个由文字的合取和析取组成的句子
expr,返回一个等价的 DNF 句子。请注意,输出并未简化。
示例
>>> from sympy.logic.boolalg import distribute_or_over_and, And, Or, Not >>> from sympy.abc import A, B, C >>> distribute_or_over_and(And(Or(Not(A), B), C)) (B & C) | (C & ~A)
- sympy.logic.boolalg.distribute_xor_over_and(expr)[源代码][源代码]¶
给定一个包含文字的合取和异或析取的句子
expr,返回一个等价的异或析取。请注意,输出并未简化。
示例
>>> from sympy.logic.boolalg import distribute_xor_over_and, And, Xor, Not >>> from sympy.abc import A, B, C >>> distribute_xor_over_and(And(Xor(Not(A), B), C)) (B & C) ^ (C & ~A)
- sympy.logic.boolalg.eliminate_implications(expr)[源代码][源代码]¶
将
Implies和Equivalent转换为And、Or和Not。也就是说,返回一个等价于expr的表达式,但只包含&、|和~作为逻辑运算符。示例
>>> from sympy.logic.boolalg import Implies, Equivalent, eliminate_implications >>> from sympy.abc import A, B, C >>> eliminate_implications(Implies(A, B)) B | ~A >>> eliminate_implications(Equivalent(A, B)) (A | ~B) & (B | ~A) >>> eliminate_implications(Equivalent(A, B, C)) (A | ~C) & (B | ~A) & (C | ~B)
推理¶
此模块实现了命题逻辑中的一些推理程序。
函数 satisfiable 将测试给定的布尔表达式是否可满足,也就是说,你可以为变量赋值以使句子 True。
例如,表达式 x & ~x 是不可满足的,因为没有 x 的值能使这个句子为 True。另一方面,(x | y) & (x | ~y) & (~x | y) 在 x 和 y 都为 True 时是可满足的。
>>> from sympy.logic.inference import satisfiable
>>> from sympy import Symbol
>>> x = Symbol('x')
>>> y = Symbol('y')
>>> satisfiable(x & ~x)
False
>>> satisfiable((x | y) & (x | ~y) & (~x | y))
{x: True, y: True}
如你所见,当一个句子是可满足的时,它会返回一个使该句子为 True 的模型。如果它是不可满足的,它将返回 False。
- sympy.logic.inference.satisfiable(
- expr,
- algorithm=None,
- all_models=False,
- minimal=False,
- use_lra_theory=False,
检查命题句子的可满足性。成功时返回一个模型。对于明显为真的表达式,返回 {true: true}。
在将 all_models 设置为 True 的情况下,如果给定的表达式是可满足的,则返回模型的生成器。然而,如果表达式是不可满足的,则返回包含单个元素 False 的生成器。
示例
>>> from sympy.abc import A, B >>> from sympy.logic.inference import satisfiable >>> satisfiable(A & ~B) {A: True, B: False} >>> satisfiable(A & ~A) False >>> satisfiable(True) {True: True} >>> next(satisfiable(A & ~A, all_models=True)) False >>> models = satisfiable((A >> B) & B, all_models=True) >>> next(models) {A: False, B: True} >>> next(models) {A: True, B: True} >>> def use_models(models): ... for model in models: ... if model: ... # Do something with the model. ... print(model) ... else: ... # Given expr is unsatisfiable. ... print("UNSAT") >>> use_models(satisfiable(A >> ~A, all_models=True)) {A: False} >>> use_models(satisfiable(A ^ A, all_models=True)) UNSAT