Operatori logici

#1  Nei linguaggi di programmazione (e nei fogli elettronici e in altre applicazioni) a partire da una o più condizioni [ "approfondimenti"] si possono costruire condizioni più complesse ricorrendo agli operatori logici OR, AND, NOT e XOR, che hanno significati simili a quelli delle congiunzioni della lingua italiana "o" ("o" non esclusivo, come in «n/6 è semplificabile se n è un multiplo di 2 o un multiplo di 3»: n può essere multiplo anche di entrambi),  "e",  "non" e  "o … o …" ("o" esclusivo), ma non coincidenti:
    nel linguaggio comune il significato di queste congiunzioni (e degli and, or e not usati nella lingua comune inglese) dipende dal contesto [ "approfondimenti"],  mentre per gli operatori logici dei linguaggi di programmazione il significato è fissato dalla tabellina seguente, dove V e F indicano "vera" e "falsa"  (da qui puoi accedere ad un corrispondente programma).

  P    Q    NOT P    P AND Q    P OR Q    P XOR Q  
 
V
V
F
F
V
F
V
F
F
F
V
V
V
F
F
F
V
V
V
F
F
V
V
F

    Per questo motivo, quando si vogliono evitare ambiguità, si può ricorrere agli operatori logici anche nell'usuale linguaggio matematico (per qualche esempio figure 1). Spesso essi vengono rappresentati con altri simboli: si veda la figura a lato (quelli in rosso sono i più usati). Nel software R vengono usati !, & e | al posto di NOT, AND e OR; viene usato xor(P,Q) al posto di P XOR Q. Per altre notazioni vedi qui.    

    Esistono anche altri operatori logici. Tutti sono comunque ricostruibili a partire da un piccolo insieme di essi. Ad esempio posso costruire tutti gli altri operatori logici usando AND e NOT; in particolare  P OR Q  equivale  a NOT((NOT P) AND (NOT Q)).  Vedi  strutture numeriche non per approfondimenti e qui per una trattazione più estesa.
    Tra gli altri operatori ricordiamo solo la "implicazione" (se … allora …) e la "equivalenza logica" (… se e solo se …) che hanno le seguenti tavole di verità:

  P    Q      P ==> Q     P <==> Q
 
V
V
F
F
V
F
V
F
V
F
V
V
V
F
F
V

[ P ==> Q   è falsa solo quando P è vera e Q è falsa; equivale quindi a !(P & !Q) ]

Note.    Invece di  NOT t1 = t2  si usa spesso scrivere  t1 ≠ t2. Analogamente, se è un simbolo che mette in relazione due oggetti matematici A e B, si usa scrivere A  B invece di  NOT A  B.     Invece di  x = A OR x = –A  si usa spesso scrivere  x = ± A.     a ≤ x ≤ b sta per a ≤ x AND x ≤ b.

Esercizi:

 altri collegamenti     [nuova pagina]     Considerazioni Didattiche

Approfondimenti

#2  Condizioni o termini booleani

    Le condizioni vengono dette anche "termini (o espressioni) booleane", dal nome del matematico inglese Boole che per primo introdusse l'impiego di simboli per rappresentare gli operatori logici e che per primo mise a fuoco le analogie tra la struttura delle condizioni e la  struttura dei termini numerici.
    Una condizione o termine booleano può essere più precisamente descritto come:
una formula (equazione, disequazione o altro tipo di relazione) o
una espressione costruita a partire da formule (che sono quindi gli atomi, così come variabili e costanti sono gli atomi da cui si parte per costruire gli altri termini numerici) introducendo opportunamente operatori logici (ed eventuali simboli di parentesi per delimitare i sottotermini).
    Anche la struttura di un termine booleano può essere descritta mediante un grafo ad albero. Ad esempio: NOT (x = 0 OR (3 <= x AND x < 5)) (dove "<=" nei linguaggi di programmazione è usato col significato di "≤") ha la struttura raffigurata a lato.
       NOT
        |
        OR
     __/ \__
 x = 0       AND
         ___/ \___
    3 <= x         x < 5

    I simboli relazionali che intervengono nelle formule possono essere interpretati come simboli di funzioni ad output in {V,F} (ad esempio la formula x≤y può essere pensata come una funzione che a (x,y) associa V se x è minore di y o x è uguale a y, e associa F altrimenti), in modo che una condizione più complessa può essere in ogni caso pensata come una funzione ad output in {V,F}.
    Molti linguaggi di programmazione indicano V e F con numeri: alle condizioni false associano il valore 0, a quelle vere il valore –1 (ma considerano come condizione vera anche ogni altro termine che abbia valore diverso da 0);  ad es. 1<2 e 3<2 hanno come output -1  0 (la prima condizione è vera, la seconda è falsa).
    In R, invece, print ( c(1<2, 3<2) ) fornisce TRUE FALSE. Si possono comunque usare anche 1 (o −1 o …) e 0 come V e F; ad esempio 0 & -1 fornisce come output FALSE.

Nota.  Le equazioni e disequazioni vengono anche chiamate formule atomiche invece che solo formule, quando si usa quest'ultimo termine per indicare più in generale termini booleani ed espressioni in cui intervengono anche altri simboli logici (di cui si discute in una voce successiva:  Definizioni e dimostrazioni.

#3  I connettivi nella lingua comune

    La semantica dei linguaggi formali che si usano in matematica ed informatica non ha molto a che fare con quella del linguaggio naturale. In quest'ultimo vi è una fortissima dipendenza dal contesto, che può modificare profondamente il significato di una frase. Due esempi:
–   una frase come «ha un vestito giallo» può assumere una gamma di significati che va da «ha un vestito completamente giallo» a «ho un vestito in cui c'è anche del giallo»; se il vestito è a fiori gialli dietro i quali si intravede uno sfondo bianco l'affermazione «ha un vestito giallo» deve essere interpretata come "vera" o "falsa"?
–   l'affermazione «Giorgio questa volta ha preso la sufficienza» non fornisce, comunemente, solo un'informazione su come gli è andato il compito in classe di Inglese, ma dice anche che Giorgio di solito non va un gran che bene in Inglese; tuttavia se sapessimo che Giorgio è il primo della classe in Inglese interpreteremmo la frase diversamente, e del voto non penseremmo solo che è maggiore o uguale a 6 (supponendo che 6 sia il minimo voto sufficiente) ma che è 6 o non lo supera di molto.
    Questa dipendenza dal contesto è presente anche in matematica, quando ci si esprime usando il linguaggio comune.
    Quanto detto vale, in particolare quando si usano i connettivi linguistici "e", "o" e "non", che spesso assumono significati diversi da quelli descritti dalle tabelle di verità riportate sopra.
    Le frasi «Mario entrò nella casa e si tolse le scarpe» e «Mario si tolse le scarpe e entrò nella casa», che dovrebbero essere equivalenti considerando "e" commutativo come l'AND della tabellina, rappresentano indubbiamente situazioni diverse: qui "e" equivale a "e poi".
    Nella frase «Pierino accendeva e spegneva il televisore in continuazione» il connettivo "e" collega due forme verbali ("accendeva" e "spegneva") che descrivono addirittura azioni mutuamente incompatibili.
    Nel linguaggio naturale, poi, un connettivo può legare anche entità che non siano proposizioni (ad esempio, due aggettivi) assumendo significati difficilmente schematizzabili; in qualche caso il connettivo collega in realtà due affermazioni: «l'automobile di Gianni è bella e veloce» è equivalente a «l'automobile di Gianni è bella e l'automobile di Gianni è veloce»; «l'automobile di Gianni è bianca e rossa» non è invece equivalente a una congiunzione di due proposizioni: qui la "e" serve piuttosto a costruire un nuovo aggettivo a partire da "bianco" e "rosso".
    Qualche esempio con "o". In «dall'accento direi che è genovese o ligure» capiamo che "o" è da intendersi come "inclusivo", mentre in «lo vuoi o no?» capiamo che dobbiamo considerarlo "esclusivo". Ma in «vogliamo rose rosse o bianche» se non conosciamo il contesto in cui viene formulata la richiesta non possiamo capire se va bene che vi siano rose sia rosse che bianche o se devono essere tutte rosse o tutte bianche.
    Per il "non" si possono fare esempi analoghi. «Non è falso ciò che ha detto» non sempre vuol dire che ha detto il "vero": potrebbe aver fatto un'affermazione che contiene degli elementi di verità.

Esercizio (e soluzione)