SymPy - Espressioni logiche
Le funzioni booleane sono definite in sympy.basic.booleanarg module. È possibile costruire espressioni booleane con gli operatori python standard & (And), | (Or), ~ (Not) così come con >> e <<. Le espressioni booleane ereditano dalla classe Basic definita nel modulo principale di SymPy.
Funzione BooleanTrue
Questa funzione è equivalente a True come nel core Python. Restituisce un singleton che può essere recuperato da S.true.
>>> from sympy import *
>>> x=sympify(true)
>>> x, S.true
Lo snippet di codice sopra fornisce il seguente output:
(Vero vero)
Funzione BooleanFalse
Allo stesso modo, questa funzione è equivalente a Boolean False in Python ed è accessibile da S.false
>>> from sympy import *
>>> x=sympify(false)
>>> x, S.false
Lo snippet di codice sopra fornisce il seguente output:
(Falso, Falso)
E la funzione
Una funzione AND logica valuta i suoi due argomenti e restituisce False se uno dei due è False. La funzione emula & operator.
>>> from sympy import *
>>> from sympy.logic.boolalg import And
>>> x,y=symbols('x y')
>>> x=True
>>> y=True
>>> And(x,y), x"&"y
Lo snippet di codice sopra fornisce il seguente output:
(Vero vero)
>>> y=False
>>> And(x,y), x"&"y
Lo snippet di codice sopra fornisce il seguente output:
(Falso, Falso)
O funzione
Questa funzione valuta due argomenti booleani e restituisce True se uno dei due è True. Il | l'operatore ne emula convenientemente il comportamento.
>>> from sympy import *
>>> from sympy.logic.boolalg import Or
>>> x,y=symbols('x y')
>>> x=True
>>> y=False
>>> Or(x,y), x|y
Lo snippet di codice sopra fornisce il seguente output:
(Vero vero)
>>> x=False
>>> y=False
>>> Or(x,y), x|y
Lo snippet di codice sopra fornisce il seguente output:
(Falso, Falso)
Non funziona
Una funzione Logical Not comporta la negazione dell'argomento booleano. Restituisce True se il suo argomento è False e restituisce False se True. L'operatore ~ esegue l'operazione simile alla funzione Non. È mostrato nell'esempio seguente:
>>> from sympy import *
>>> from sympy.logic.boolalg import Or, And, Not
>>> x,y=symbols('x y')
>>> x=True
>>> y=False
>>> Not(x), Not(y)
Lo snippet di codice sopra fornisce il seguente output:
(Falsa verità)
>>> Not(And(x,y)), Not(Or(x,y))
Lo snippet di codice sopra fornisce il seguente output:
(Vero falso)
Funzione Xor
La funzione Logical XOR (OR esclusivo) restituisce True se un numero dispari di argomenti è True e il resto è False e restituisce False se un numero pari di argomenti è True e il resto è False. Un'operazione simile viene eseguita dall'operatore ^.
>>> from sympy import *
>>> from sympy.logic.boolalg import Xor
>>> x,y=symbols('x y')
>>> x=True
>>> y=False
>>> Xor(x,y), x^y
Lo snippet di codice sopra fornisce il seguente output:
(Vero vero)
>>> 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)
Lo snippet di codice sopra fornisce il seguente output:
Vero
Nel caso precedente, tre argomenti (numero dispari) sono True, quindi Xor restituisce true. Tuttavia, se il numero di argomenti True è pari, risulta False, come mostrato di seguito:
>>> a,b,c,d,e=(True, False, False, True, False)
>>> Xor(a,b,c,d,e)
Lo snippet di codice sopra fornisce il seguente output:
Falso
Funzione Nand
Questa funzione esegue operazioni NAND logiche. Valuta i suoi argomenti e restituisce True se qualcuno di essi è False e False se sono tutti 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)
Lo snippet di codice sopra fornisce il seguente output:
(Vero falso)
Né funzione
Questa funzione esegue un'operazione NOR logica. Valuta i suoi argomenti e restituisce False se qualcuno di essi è True e True se sono tutti 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)
Lo snippet di codice sopra fornisce il seguente output:
(Falso, Falso)
Notare che anche se SymPy fornisce l'operatore ^ per Xor, ~ per Not, | per Or e & per And funziona come comodità, il loro uso normale in Python è come operatori bit per bit. Quindi, se gli operandi sono numeri interi, i risultati sarebbero diversi.
Funzione equivalente
Questa funzione restituisce una relazione di equivalenza. Equivalente (A, B) è vero se e solo se A e B sono entrambi veri o entrambi falsi. La funzione restituisce True se tutti gli argomenti sono logicamente equivalenti. In caso contrario, restituisce 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)
Lo snippet di codice sopra fornisce il seguente output:
(Falsa verità)
Funzione ITE
Questa funzione agisce come clausola If then else in un linguaggio di programmazione .ITE (A, B, C) valuta e restituisce il risultato di B se A è vero altrimenti restituisce il risultato di C. Tutti gli argomenti devono essere booleani.
>>> 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)
Lo snippet di codice sopra fornisce il seguente output: