SymPy - Expressões lógicas

As funções booleanas são definidas em sympy.basic.booleanarg module. É possível construir expressões booleanas com os operadores python padrão & (And), | (Ou), ~ (Não), bem como com >> e <<. Expressões booleanas herdam da classe Basic definida no módulo principal do SymPy.

Função BooleanTrue

Esta função é equivalente a True como no núcleo do Python. Ele retorna um singleton que pode ser recuperado por S.true.

>>> from sympy import * 
>>> x=sympify(true) 
>>> x, S.true

O trecho de código acima fornece a seguinte saída -

(Verdade verdade)

Função BooleanFalse

Da mesma forma, esta função é equivalente a Boolean False em Python e pode ser acessada por S.false

>>> from sympy import * 
>>> x=sympify(false) 
>>> x, S.false

O trecho de código acima fornece a seguinte saída -

(Falso, Falso)

E função

Uma função AND lógica avalia seus dois argumentos e retorna False se algum deles for False. A função emula o operador &.

>>> from sympy import * 
>>> from sympy.logic.boolalg import And 
>>> x,y=symbols('x y') 
>>> x=True 
>>> y=True 
>>> And(x,y), x"&"y

O trecho de código acima fornece a seguinte saída -

(Verdade verdade)

>>> y=False 
>>> And(x,y), x"&"y

O trecho de código acima fornece a seguinte saída -

(Falso, Falso)

Ou função

Esta função avalia dois argumentos booleanos e retorna True se qualquer um deles for True. O | operador convenientemente emula seu comportamento.

>>> from sympy import * 
>>> from sympy.logic.boolalg import Or 
>>> x,y=symbols('x y') 
>>> x=True 
>>> y=False 
>>> Or(x,y), x|y

O trecho de código acima fornece a seguinte saída -

(Verdade verdade)

>>> x=False 
>>> y=False 
>>> Or(x,y), x|y

O trecho de código acima fornece a seguinte saída -

(Falso, Falso)

Não funciona

Uma função Logical Not resulta na negação do argumento booleano. Retorna True se seu argumento for False e retorna False se True. O operador ~ executa a operação semelhante à função Not. É mostrado no exemplo abaixo -

>>> from sympy import * 
>>> from sympy.logic.boolalg import Or, And, Not 
>>> x,y=symbols('x y') 
>>> x=True 
>>> y=False 
>>> Not(x), Not(y)

O trecho de código acima fornece a seguinte saída -

(Falso verdadeiro)

>>> Not(And(x,y)), Not(Or(x,y))

O trecho de código acima fornece a seguinte saída -

(Verdadeiro falso)

Função Xor

A função Lógica XOR (OU exclusivo) retorna Verdadeiro se um número ímpar de argumentos for Verdadeiro e o resto for Falso e retorna Falso se um número par de argumentos for Verdadeiro e o resto for Falso. Operação semelhante é executada pelo operador ^.

>>> from sympy import * 
>>> from sympy.logic.boolalg import Xor 
>>> x,y=symbols('x y') 
>>> x=True 
>>> y=False

>>> Xor(x,y), x^y

O trecho de código acima fornece a seguinte saída -

(Verdade verdade)

>>> a,b,c,d,e=symbols('a b c d e') 
>>> a,b,c,d,e=(True, False, True, True, False) 
>>> Xor(a,b,c,d,e)

O trecho de código acima fornece a seguinte saída -

Verdadeiro

No caso acima, três (número ímpar) argumentos são Verdadeiros, portanto, Xor retorna verdadeiro. No entanto, se o número de argumentos Verdadeiros for par, resulta em Falso, conforme mostrado abaixo -

>>> a,b,c,d,e=(True, False, False, True, False) 
>>> Xor(a,b,c,d,e)

O trecho de código acima fornece a seguinte saída -

Falso

Função Nand

Esta função executa a operação lógica NAND. Ele avalia seus argumentos e retorna True se algum deles for False, e False se todos eles forem True.

>>> from sympy import * 
>>> from sympy.logic.boolalg import Nand 
>>> a,b,c=symbols('a b c') 
>>> a,b,c=(True, False, True) 
>>> Nand(a,b,c), Nand(a,c)

O trecho de código acima fornece a seguinte saída -

(Verdadeiro falso)

Nem função

Esta função executa a operação NOR Lógica. Ele avalia seus argumentos e retorna False se algum deles for True, e True se todos eles forem False.

>>> from sympy import * 
>>> from sympy.logic.boolalg import Nor 
>>> a,b,c=symbols('a b c') 
>>> a,b,c=(True, False, True) 
>>> Nor(a,b,c), Nor(a,c)

O trecho de código acima fornece a seguinte saída -

(Falso, Falso)

Observe que, embora SymPy forneça o operador ^ para Xor, ~ para Not, | para Or e & para funções And por conveniência, seu uso normal em Python é como operadores bit a bit. Portanto, se os operandos forem inteiros, os resultados serão diferentes.

Função equivalente

Esta função retorna relação de equivalência. Equivalente (A, B) é verdadeiro se e somente se A e B são ambos verdadeiros ou falsos. A função retorna True se todos os argumentos forem logicamente equivalentes. Caso contrário, retorna False.

>>> from sympy import * 
>>> from sympy.logic.boolalg import Equivalent 
>>> a,b,c=symbols('a b c') 
>>> a,b,c=(True, False, True) 
>>> Equivalent(a,b), Equivalent(a,c)

O trecho de código acima fornece a seguinte saída -

(Falso verdadeiro)

Função ITE

Esta função atua como a cláusula If then else em uma linguagem de programação .ITE (A, B, C) avalia e retorna o resultado de B se A for verdadeiro, caso contrário, retorna o resultado de C. Todos os argumentos devem ser booleanos.

>>> from sympy import * >>> from sympy.logic.boolalg import ITE >>> a,b,c=symbols('a b c') >>> a,b,c=(True, False, True) 
>>> ITE(a,b,c), ITE(a,c,b)

O trecho de código acima fornece a seguinte saída -

(Falso verdadeiro)