📜  Sympy 中的逻辑表达式是什么?

📅  最后修改于: 2022-05-13 01:54:53.275000             🧑  作者: Mango

Sympy 中的逻辑表达式是什么?

SymPy 是一个符号数学Python包。它的目标是发展成为一个功能齐全的计算机代数系统,同时保持代码尽可能基本,使其易于理解和扩展。该软件包完全用Python语言编写。 sympy 中的逻辑表达式使用布尔函数表示。 sympy 的 sympy.basic.booleanarg 模块包含布尔函数。

常见的Python运算符& (And), | (Or) 和 ~ (Not) 可用于创建布尔表达式。 >> 也可以用来创造暗示。其他布尔运算或门是 NAND、NOR、XOR 等。

布尔真:

SymPy 中的 Boolean True 是一个可以使用 S.true 访问的单例,或者通过直接导入 True 或通过从 sympy 包中导入 symplify 来访问。

Python3
# import packages
from sympy import true
from sympy import S, sympify
  
# prints True
print(true)
  
# prints True
print(S.true)
  
# prints true
print(sympify(true))


Python3
# import packages
from sympy import false
from sympy import S, sympify
  
# prints False
print(false)
  
# prints False
print(S.false)
  
# prints False
print(sympify(false))


Python3
# import packages
from sympy import false, true
  
print(~true,~false)


Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import And
  
res = x & y
print(res)
  
# 1&y ==y
print(And(x, y).subs(x, 1))
  
# 0&y ==0 or False
print(And(x, y).subs(x, 0))
  
# True&False == False
print(And(True, False))
  
# True & True == True
print(And(True, True))
  
# False & False == False
print(And(False, False))
  
# False & True == False
print(And(False, True))


Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Or
  
res = x | y
print(res)
  
# 1&y == 1 or True
print(Or(x, y).subs(x, 1))
  
# 0|y ==y
print(Or(x, y).subs(x, 0))
  
# True | False == True
print(Or(True, False))
  
# True | True == True
print(Or(True, True))
  
# False | False == False
print(Or(False, False))
  
# False | True == True
print(Or(False, True))


Python3
# import packages
from sympy.abc import x
from sympy.logic.boolalg import Not
  
# nor formula
print(Not(x))
  
# ~True == True
print(Not(True))
  
# ~False == False
print(Not(False))


Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Nor
  
nor_formula = ~(x | y)
print(nor_formula)
print(Nor(x, y))
  
# ~( True | False) == False
print(Nor(True, False))
  
# ~(True | True) == False
print(Nor(True, True))
  
# ~(False | False) == True
print(Nor(False, False))
  
# ~(False | True) == False
print(Nor(False, True))


Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Nand
  
# not + nand == nand
nor_formula = ~(x & y)
print(nor_formula)
print(Nand(x, y))
  
# ~( True & False) == True
print(Nand(True, False))
  
# ~(True & True) == False
print(Nand(True, True))
  
# ~(False & False) == True
print(Nand(False, False))
  
# ~(False & True) == True
print(Nand(False, True))


Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Xor
  
xor_formula = x ^ y
print(xor_formula)
print(Xor(x, y))
  
#  True ^ False == True
print(Xor(True, False))
  
# True ^ True == False
print(Xor(True, True))
  
# False ^ False == False
print(Xor(False, False))
  
# False ^ True == True
print(Xor(False, True))


Python3
from sympy.abc import x, y
from sympy.logic.boolalg import Implies
  
# !A v B == implies formula
# returns false when A is true and B is 
# false, rest all cases returns True
print(Implies(x, y))
  
# false
print(Implies(True, False))
  
# true
print(Implies(True, True))
  
# true
print(Implies(False, False))
  
# true
print(Implies(False, True))
print(x << y)
print(x >> y)


Python3
from sympy.abc import x, y, z
from sympy.logic.boolalg import Equivalent, And, Or
  
print(Equivalent(x, y, z))
  
# true != false so it returns false
print(Equivalent(True, False))
  
# True == True  so it returns true
print(Equivalent(True, True))
  
# False == False so it returns true
print(Equivalent(False, False))
  
# False !=True so it returns false
print(Equivalent(False, True))
  
# true ==true == true so it returns true
print(Equivalent(True, Or(True, False), And(True, True)))


Python3
from sympy.abc import x, y, z
from sympy.logic.boolalg import ITE, Nor, Nand, Xor, Or, And
  
# ITE == if then else
print(ITE(x, y, z))
  
# x is true so y is returned
print(ITE(True, Or(True, False), And(True, True)))
  
# x is false so z is returned
print(ITE(Nor(True, False), Xor(True, False), Nand(True, True)))


输出:

True
True
True

布尔假:

SymPy 中的 Boolean False 是一个单例,可以使用 S.false 访问,也可以通过直接导入 false 或从 sympy 包中导入 symplify 来访问。

Python3

# import packages
from sympy import false
from sympy import S, sympify
  
# prints False
print(false)
  
# prints False
print(S.false)
  
# prints False
print(sympify(false))

输出:

False
False
False

否定真就是假,否定假就是真。

Python3

# import packages
from sympy import false, true
  
print(~true,~false)

输出:

False True

布尔值和:

它按顺序分析每个参数,如果所有参数都为真,则返回真。如果至少一个参数为假,则返回假。

  • 真 &真 = 真
  • 真&假 = 假
  • 假&真=假
  • 假&假=假

Python3

# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import And
  
res = x & y
print(res)
  
# 1&y ==y
print(And(x, y).subs(x, 1))
  
# 0&y ==0 or False
print(And(x, y).subs(x, 0))
  
# True&False == False
print(And(True, False))
  
# True & True == True
print(And(True, True))
  
# False & False == False
print(And(False, False))
  
# False & True == False
print(And(False, True))

输出

x & y
y
False
False
True
False
False

布尔或:

如果任何参数为 true ,则返回 True ,否则返回 false 。

  • 真 |真 = 真
  • 真|假=真
  • 假 |真 = 真
  • 假|假=假

Python3

# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Or
  
res = x | y
print(res)
  
# 1&y == 1 or True
print(Or(x, y).subs(x, 1))
  
# 0|y ==y
print(Or(x, y).subs(x, 0))
  
# True | False == True
print(Or(True, False))
  
# True | True == True
print(Or(True, True))
  
# False | False == False
print(Or(False, False))
  
# False | True == True
print(Or(False, True))

输出:

x | y
True
y
True
True
False
True

布尔非:

不代表否定。如果语句为 False,则此方法返回 True。如果断言为真,则返回 False。

Python3

# import packages
from sympy.abc import x
from sympy.logic.boolalg import Not
  
# nor formula
print(Not(x))
  
# ~True == True
print(Not(True))
  
# ~False == False
print(Not(False))

输出:

~x
False
True

布尔诺:

也不是 Not 和 Or 的连词。非 = 非 + 或。它依次检查每个参数,如果其中任何一个为 True,则返回 False,如果所有参数均为 False,则返回 True。如果任何参数为 True,则返回 False。如果所有参数都为 False,则此函数返回 True。

Python3

# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Nor
  
nor_formula = ~(x | y)
print(nor_formula)
print(Nor(x, y))
  
# ~( True | False) == False
print(Nor(True, False))
  
# ~(True | True) == False
print(Nor(True, True))
  
# ~(False | False) == True
print(Nor(False, False))
  
# ~(False | True) == False
print(Nor(False, True))

输出:

~(x | y)
~(x | y)
False
False
True
False

布尔南德:

Nand 是 Not and 的合取。非 = 非 + 与。它连续分析每个输入,如果其中任何一个为 False,则返回 True,如果所有输入为 True,则返回 False。如果任何输入为 False,则此函数返回 True。如果所有参数都为 True,则返回 False。

Python3

# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Nand
  
# not + nand == nand
nor_formula = ~(x & y)
print(nor_formula)
print(Nand(x, y))
  
# ~( True & False) == True
print(Nand(True, False))
  
# ~(True & True) == False
print(Nand(True, True))
  
# ~(False & False) == True
print(Nand(False, False))
  
# ~(False & True) == True
print(Nand(False, True))

输出:

~(x & y)
~(x & y)
True
False
True
True

布尔异或:

Xor 表示Logical XOR 或Exclusive Or函数。如果奇数个参数为 True,而其他参数为 False,则此函数返回 True。如果偶数个参数为真而其他参数为假,则结果为假。

Python3

# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Xor
  
xor_formula = x ^ y
print(xor_formula)
print(Xor(x, y))
  
#  True ^ False == True
print(Xor(True, False))
  
# True ^ True == False
print(Xor(True, True))
  
# False ^ False == False
print(Xor(False, False))
  
# False ^ True == True
print(Xor(False, True))

输出:

x ^ y
x ^ y
True
False
False
True

布尔暗示:

暗示指的是逻辑暗示。 x 意味着 y 等价于 !xv y。接受 x 和 y 作为布尔输入。如果 x 为 True 而 y 为 False,则返回 False。否则,返回 True。

Python3

from sympy.abc import x, y
from sympy.logic.boolalg import Implies
  
# !A v B == implies formula
# returns false when A is true and B is 
# false, rest all cases returns True
print(Implies(x, y))
  
# false
print(Implies(True, False))
  
# true
print(Implies(True, True))
  
# true
print(Implies(False, False))
  
# true
print(Implies(False, True))
print(x << y)
print(x >> y)

输出:

Implies(x, y)
False
True
True
True
Implies(y, x)
Implies(x, y)

布尔等价

指等价关系。如果 x 和 y 都为 True 或 False,则 Equivalent(x, y) 为 True。如果所有参数在逻辑上等价,则返回 True。否则,返回 False。

Python3

from sympy.abc import x, y, z
from sympy.logic.boolalg import Equivalent, And, Or
  
print(Equivalent(x, y, z))
  
# true != false so it returns false
print(Equivalent(True, False))
  
# True == True  so it returns true
print(Equivalent(True, True))
  
# False == False so it returns true
print(Equivalent(False, False))
  
# False !=True so it returns false
print(Equivalent(False, True))
  
# true ==true == true so it returns true
print(Equivalent(True, Or(True, False), And(True, True)))

输出:

Equivalent(x, y, z)
False
True
True
False
True

布尔 ITE:

ITE指的是 If then else 子句。如果 A 为真,ITE(x, y, z) 计算并返回 y 的结果;否则,ITE(x, y, z) 计算并返回 z 的结果。所有参数都必须是布尔值。

Python3

from sympy.abc import x, y, z
from sympy.logic.boolalg import ITE, Nor, Nand, Xor, Or, And
  
# ITE == if then else
print(ITE(x, y, z))
  
# x is true so y is returned
print(ITE(True, Or(True, False), And(True, True)))
  
# x is false so z is returned
print(ITE(Nor(True, False), Xor(True, False), Nand(True, True)))

输出:

ITE(x, y, z)
True
False