1 ISTITUTO DI ISTRUZIONE SUPERIORE “ANGIOY” La Logica Proposizionale (Algebra di Boole) Prof. G. Ciaschetti 1. Cenni storici Sin dagli antichi greci, la logica è intesa come lo studio del logos, che in greco significa parola, verbo, o ragione. O anche studio, si pensi a parole come ecologia, psicologia, ecc. La logica, quindi, storicamente, si è occupata dello studio della parola, cioè lo studio delle strutture e delle regole del discorso, allo scopo di comprendere, e utilizzare a proprio vantaggio, come ottenere conclusioni “convincenti” a partire da determinate premesse. Ancora oggi, a pensarci bene, organizzare un discorso che sia logicamente convincente è fondamentale in diverse discipline: Matematica: esibire la dimostrazione matematica di un risultato (teorema, lemma, postulato) significa fare vedere come, a partire dalle ipotesi, valga una serie di ragionamenti logici che portano via via a nuove conclusioni, fino ad arrivare alla tesi che si vuole dimostrare. Giurisprudenza: un avvocato, in un aula di tribunale, nel difendere il proprio assistito cerca di convincere la corte che i fatti si siano svolti in un determinato modo, e farà questo – partendo da alcune premesse – nel modo logicamente più convincente possibile. Filosofia: un filosofo è più convincente di altri filosofi nel proporre l’esattezza delle proprie argomentazioni se i suoi ragionamenti sono più “logicamente” corretti. Dagli esempi esposti, si capisce che c’è un modo di ragionare logico, che è comunemente accettato come corretto, grazie al quale è possibile convincere gli altri di conclusioni non immediatamente verificabili. Come dicevamo, già dall’antichità la logica è stata oggetto di studio, in quanto chi riusciva a essere più “logico” degli altri nei propri discorsi era anche colui che vinceva le dispute verbali. Riportiamo in questo paragrafo alcuni personaggi e i loro contributi fondamentali allo studio della logica, che hanno costituito le basi per la logica moderna, attualmente usata nei calcolatori elettronici: Aristotele (circa 350 A.C.) Principio di non contraddizione: una cosa e il suo contrario non possono essere contemporaneamente vere (es. le frasi “il prof. di informatica è biondo” e il “prof. di informatica non è biondo” non possono essere entrambe vere) Principio del terzo escluso: o è vera una cosa, o è vero il suo contrario, non può esserci una terza possibilità (es. “il prof. di informatica è biondo” oppure “il 2 prof. di informatica non è biondo”: una delle due deve essere vera e non c’è una terza possibilità). Sillogismi: “Tutti gli uomini sono mortali”, “Socrate è un uomo”, quindi “Socrate è mortale”. Crisippo (circa 250 A.C.) È possibile raggiungere nuove conoscenze attraverso la logica (come ad esempio, nelle dimostrazioni matematiche). Regole di deduzione logica e studio dei connettivi logici, come il modus ponens (se ogni volta che si verifica A si verifica B, e si è verificato A, allora si è verificato anche B) o il modus tollens (se ogni volta che si verifica A si verifica B, e non si è verificato B, allora non si è verificato A). Boole (1850 D.C. circa) Uso dei simboli 0 e 1 per indicare il “falso” e il “vero” (da qui, l’utilizzo automatizzato della logica per mezzo dei calcolatori). Costruzione di un algebra delle proposizioni, da questo momento in poi nota come Algebra di Boole. Uso delle tavole di verità per dimostrare la falsità o la veridicità di espressioni logiche. 2. Algebra di Boole In generale, per definire un’algebra occorre specificare quali sono i suoi termini, le sue operazioni, le regole di precedenza tra le operazioni, le diverse proprietà di cui godono le operazioni, e come si costruiscono e si valutano le espressioni. Prima di cominciare a definire l’Algebra di Boole, anche facendo un confronto con l’algebra aritmetica che abbiamo conosciuto finora in matematica, ci occorrono alcune definizioni: Definizione: Una proposizione è una frase di senso compiuto Ad esempio, le frasi “fuori c’è bel tempo” e “oggi non mi va di studiare” sono proposizioni, mentre non è una proposizione la frase “bello cane io faccio tempo male” oppure la frase “cosa però voglio non”. Definizione: Un enunciato è una proposizione della quale si può stabilire con certezza se è vera o falsa. Ad esempio, la frase “l’Istituto Angioy è a Carbonia” è una proposizione vera, quindi è un enunciato; la frase “l’Istituto Angioy è a Roma” è una proposizione falsa, quindi è un enunciato; la frase “informatica è una brutta materia” non è un enunciato, perché pur essendo una proposizione, non si può dire che sia sempre vera (a qualcuno non piace) o sempre falsa (a qualcuno piace). Allo stesso modo la frase “che bel tempo c’è” non è un enunciato, perché a qualcuno potrebbe piacere il sole mentre a qualcun altro la pioggia. Torniamo alla definizione della nostra Algebra di Boole. Andiamo a specificare, quindi, chi sono i termini, le operazioni, le regole di precedenza tra le operazioni e le regole di costruzione e 3 valutazione delle espressioni, confrontandoci con l’algebra aritmetica. Alle proprietà dell’Algebra di Boole dedicheremo, successivamente, un paragrafo a parte. termini: se i termini dell’aritmetica sono i numeri, i termini dell’algebra booleana sono gli enunciati, che possono essere rappresentati con 0 (enunciato falso) e 1 (enunciato vero). Così come in aritmetica, possiamo trovare termini costanti, cioè di cui conosciamo il valore, oppure termini variabili, che indicheremo con lettere come x, y, z, ecc. operazioni: mentre nell’aritmetica abbiamo le operazioni di addizione, sottrazione, moltiplicazione e divisione, (quelle che indichiamo con i simboli +, *, - e /), nell’algebra booleana abbiamo le operazioni fondamentali AND, OR, NOT, e poi altre operazioni che vedremo successivamente. - L’operazione AND è detta di congiunzione o prodotto logico, e può essere rappresentata con i simboli ∙ oppure ˄ (noi useremo il primo dei due). - L’operazione OR è detta di disgiunzione o somma logica e può essere rappresentata con i simboli + oppure ˅ (noi useremo il primo dei due). - L’operazione NOT è detta negazione logica, e può essere rappresentata con i simboli oppure ┌ (noi useremo il primo dei due). Torneremo sulle operazioni (queste tre e altre) più tardi, esaminando attentamente come funzionano e il loro significato. Per il momento, ci basti dire che il NOT è un’operazione unaria (si applica a un solo operando) mente l’AND, l’OR e le altre operazioni che studieremo sono operazioni binarie (si applicano a due operandi – come la somma, la sottrazione, ecc.). precedenze: se in aritmetica le operazioni di moltiplicazione e divisione hanno la precedenza su quelle di addizione e sottrazione, nell’algebra booleana esiste una sola regola: le operazioni unarie hanno la precedenza su quelle binarie, ossia, il NOT ha la precedenza su tutte le altre operazioni. Così come in aritmetica, per “forzare” le precedenze ad essere diverse da quelle naturali, si possono usare le parentesi. Nell’algebra booleana, inoltre, l’uso delle parentesi è necessario ogni qual volta non è ben determinata la precedenza tra due o più operazioni. ESEMPI: corrisponde a (NOT (x)) OR y. Siccome il NOT ha la precedenza sull’OR, non c’è bisogno di parentesi corrisponde a NOT(x OR y). Per forzare le precedenze ed effettuare prima l’OR, abbiamo bisogno di parentesi. l’espressione non è ben specificata, in quanto l’OR e l’AND hanno stessa precedenza, e non sappiamo quale applicare prima. Andrebbero messe delle parentesi. espressioni: la valutazione di un’espressione in aritmetica dà come risultato un numero, che può essere noto se l’espressione contiene solo termini costanti, o incognito se ci sono delle variabili. Anche nell’algebra booleana si può valutare un’espressione, il cui risultato è noto se compaiono solo termini costanti, e può essere 0 oppure 1. Nella seguente figura, è riassunta la differenza tra l’algebra aritmetica e quella booleana: 4 3. Le operazioni binarie fondamentali Torniamo alle tre operazioni booleana fondamentali, il NOT, l’AND e l’OR, ed esaminiamole più a fondo: 3.1 L’operazione NOT L’operazione NOT (dall’inglese non) è detta negazione logica, e serve a negare una proposizione. Il risultato è trasformare una proposizione vera in falsa, e viceversa, una falsa in vera. Ad esempio, se diciamo “ad agosto fa caldo”, che è una proposizione vera, e neghiamo quanto detto, otteniamo “ad agosto non fa caldo”, che è una proposizione falsa. Ad esempio, se diciamo “Milano è a sud di Carbonia”, proposizione falsa, e la neghiamo, otteniamo “Milano non è a sud di Carbonia”, che è una proposizione vera. Indichiamo l’operazione NOT con il simbolo . In generale, data una proposizione x, essa può essere falsa o vera: se è vera, falsa, è vera. Si può riassumere quanto detto nella seguente tabella: è falsa, mentre se è x 0 1 1 0 La tabella può anche letta “per righe” in questo modo: risulta 3.2 L’operazione AND L’operazione AND (dall’inglese e) è detta congiunzione o prodotto logico, e serve a congiungere tra loro due proposizioni. Un’espressione formata con l’operazione AND tra due proposizioni sarà vera se la prima proposizione è vera e la seconda proposizione è vera. Ad esempio, se diciamo “c’è una sola cattedra in ogni aula” (proposizione vera) AND “un banco è più piccolo di una cattedra” (proposizione vera), l’intera frase sarà vera. Se invece diciamo “ci sono due cattedre in ogni aula” (proposizione falsa) AND “c’è un registro per ogni classe” (proposizione vera), poiché abbiamo detto almeno una falsità, la nostra frase complessiva sarà falsa. Indichiamo l’AND con il simbolo In generale, date due proposizioni x e y, l’espressione x y sarà vera solo se entrambe x e y sono vere. Si può riassumere quanto detto nella seguente tabella: x 0 0 1 1 y 0 1 0 1 xy 0 0 0 1 3.3 L’operazione OR L’operazione OR (dall’inglese o) è detta disgiunzione o somma logica, e serve a disgiungere tra loro due proposizioni. Un’espressione formata con l’operazione OR tra due proposizioni sarà vera se la prima proposizione è vera o la seconda proposizione è vera. Cioè, se almeno una delle due è vera. Ad esempio, se diciamo “c’è una sola cattedra in ogni aula” (proposizione vera) OR “un banco è più piccolo di una cattedra” (proposizione vera), l’intera frase sarà vera. Se invece diciamo “ci sono due cattedre in ogni aula” (proposizione falsa) OR “c’è un registro per ogni classe” 5 (proposizione vera), poiché abbiamo detto almeno una cosa vera, la nostra frase complessiva sarà vera (l’una o l’altra delle due è vera). Ad esempio, ancora, se diciamo “ci sono tre cattedre in ogni aula” (proposizione falsa) OR “il prof. di informatica è più giovane dei suoi alunni” (proposizione falsa), poiché nessuna delle due è vera, abbiamo detto una frase falsa. Indichiamo l’OR con il simbolo +. In generale, date due proposizioni x e y, l’espressione x y sarà vera solo se almeno una tra x e y è vera. Si può riassumere quanto detto nella seguente tabella: x 0 0 1 1 y 0 1 0 1 x y 0 1 1 1 4. Espressioni booleane Come abbiamo detto, è possibile costruire espressioni booleane mettendo insieme termini e operazioni, stando ben attenti a indicare correttamente le precedenze tra le diverse operazioni. Abbiamo anche detto che l’operazione NOT (operazione unaria) ha la precedenza su tutte le altre operazioni (operazioni binarie), e che per “forzare” precedenze diverse occorre usare le parentesi. Infine, ricordiamo che l’uso di parentesi è reso necessario ogni qual volta la precedenza tra operazioni non è ben specificata (ad esempio tra OR e AND). Per evitare l’uso eccessivo di parentesi, che appesantirebbero eccessivamente la scrittura, adottiamo le seguenti convenzioni: xy xy+z corrisponde a x y corrisponde a (x y) + z corrisponde a (NOT (x)) OR y. corrisponde a NOT(x OR y). Ad esempio, nell’espressione si applicheranno, nell’ordine, le operazioni NOT (y), poi (x AND NOT(y)), e infine (x AND NOT(y)) OR z. Calcolare un’espressione booleana, come vedremo nel prossimo paragrafo, significa applicare in sequenza tutte le operazioni che in essa compaiono, per vedere “quanto fa”. A differenza di un’espressione matematica, il cui calcolo dà un numero, il calcolo di un’espressione booleana dà come risultato vero (cioè 1) o falso (cioè 0). 5. Analisi di espressioni booleane: le tavole di verità Andando a calcolare un’espressione booleana, se essa contiene solo termini costanti, allora il risultato sarà un termine dell’algebra booleana, cioè un enunciato, cioè sarà 0 (falso) oppure 1 (vero). ESEMPIO: Il valore dell’espressione (1 0) + (1 + ( )) è pari a: (1 0) + (1 + ) = 0 + 1 = 1 ESEMPIO: Il valore dell’espressione 1 =10=0 6 Tuttavia, quando nell’espressione sono presenti termini variabili (cioè, il cui valore non è ancora determinato, potrebbe essere sia 0 che 1), non è possibile calcolare l’espressione. In questo caso, occorre effettuare un’analisi dell’espressione booleana, andando a individuare per quali valori delle variabili l’espressione è vera o falsa. E’ possibile fare questo per mezzo delle tavole di verità. Si tratta di calcolare l’espressione applicando gli operatori nell’ordine giusto, e andare a vedere quanto è il risultato per ogni possibile combinazione delle variabili presenti. Con qualche esempio sarà tutto più chiaro: ESEMPIO: analizziamo l’espressione elenchiamo le diverse combinazioni delle variabili che compaiono nell’espressione, cioè x e y, e applichiamo nell’ordine le diverse operazioni, per ognuna delle combinazioni: x 0 0 1 1 y 0 1 0 1 x+y 0 1 1 1 1 0 0 0 xy 0 0 0 1 1 0 0 1 Cosa abbiamo fatto? Riepiloghiamo: per la prima combinazione, x=0 e y=0, abbiamo calcolato x+y, cioè 0+0, che fa 0. Poi abbiamo calcolato , cioè = 1. A questo punto, abbiamo calcolato xy, cioè 0 0, il cui risultato è 0. Quindi, abbiamo fatto l’operazione OR tra e , ossia tra 1 e 0, e abbiamo ottenuto 1 come risultato. Ripetendo il procedimento per ogni altra possibile combinazione delle variabili x e y, cioè per ogni altra riga della tavola di verità, abbiamo trovato per quali valori di x e y l’espressione è vera (nell’ultima colonna): in questo esempio, quando x e y sono entrambi 0 o entrambi 1. Un modo più rapido per sviluppare la tavola di verità è di guardarla “per colonne”: facciamo vedere come, in un altro esempio: ESEMPIO: analizziamo l’espressione di nuovo, elenchiamo le diverse combinazioni delle variabili e calcoliamo il risultato dell’espressione, applicando nell’ordine gli operatori, per ogni diversa combinazione; x 0 0 0 0 1 1 1 1 y 0 0 1 1 0 0 1 1 z 0 1 0 1 0 1 0 1 l’operazione che ha la precedenza è il NOT, quindi cerchiamo innanzitutto relativa alla x. x 0 0 0 0 1 1 1 1 y 0 0 1 1 0 0 1 1 z 0 1 0 1 0 1 0 1 : neghiamo la colonna 1 1 1 1 0 0 0 0 ora, possiamo calcolare applicando l’operazione OR alle colonne relative a e z. 7 x 0 0 0 0 1 1 1 1 y 0 0 1 1 0 0 1 1 z 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 1 dopo di che, neghiamo quanto abbiamo ottenuto, e abbiamo così il termine x 0 0 0 0 1 1 1 1 y 0 0 1 1 0 0 1 1 z 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 0 1 0 ora dobbiamo calcolare il termine tra parentesi tonde: calcoliamo prima l’abbiamo già) negando la colonna della y x 0 0 0 0 1 1 1 1 y 0 0 1 1 0 0 1 1 z 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 0 1 0 y 0 0 1 1 0 0 1 1 z 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 0 1 0 ce 1 1 0 0 1 1 0 0 applicando l’operazione OR tra le colonne e quindi il termine x 0 0 0 0 1 1 1 1 (la colonna relativa a 1 1 0 0 1 1 0 0 e 1 1 1 1 1 1 0 0 Per trovare il nostro risultato, a questo punto, non resta che applicare l’operazione AND alle colonne relative ai termini e x 0 0 0 0 1 1 1 1 y 0 0 1 1 0 0 1 1 z 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 0 1 0 1 1 0 0 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 Nei nostri esercizi, useremo anche scrivere una espressione booleana come una formula del tipo y = f(x1, x2, …, xN) dove x1, x2, …, xN sono le variabili indipendenti e y è il valore dell’espressione. ESEMPIO: y = 8 6. Proprietà dell’Algebra di Boole Come l’aritmetica, anche l’Algebra di Boole gode di alcune proprietà. Prima di vedere quali, diciamo che è possibile dimostrare l’uguaglianza tra due espressioni booleane utilizzando le tavole di verità, nel seguente modo: se la tavola di verità dell’espressione a sinistra del simbolo = è uguale a quella dell’espressione a destra, allora le due espressioni sono uguali. ESEMPIO: = DIMOSTRAZIONE: x1 x2 0 0 0 1 1 0 1 1 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 poiché le due colonne sono uguali, l’uguaglianza delle espressioni è verificata! Elenchiamo ora le principali proprietà dell’Algebra di Boole, dimostrandone alcune con le tavole di verità, e lasciando per esercizio la dimostrazione delle altre. a) proprietà commutativa: x+y=y+x xy = yx infatti, risulta x 0 0 1 1 b) proprietà associativa: y x+y y+x 0 0 0 1 1 1 0 1 1 1 1 1 x 0 0 1 1 y xy yx 0 0 0 1 0 0 0 0 0 1 1 1 x + (y + z) = (x + y) + z x(yz) = (xy)z si lascia per esercizio la dimostrazione dell’uguaglianza con le tavole di verità. c) proprietà distributiva: x + (yz) = (x + y)(x + z) x(y + z) = xy + xz si lascia per esercizio la dimostrazione. 9 d) identità: x+0=x x1=x si lascia per esercizio la dimostrazione. e) complementarità x+ x =1 =0 si lascia per esercizio la dimostrazione. f) idempotenza x+x=x xx=x si lascia per esercizio la dimostrazione. g) dominanza: x0=0 x+1=1 si lascia per esercizio la dimostrazione. h) involuzione (doppia negazione) si lascia per esercizio la dimostrazione. i) De Morgan si lascia per esercizio la dimostrazione. 10 7. Altri operatori booleani Oltre alle tre operazioni fondamentali che abbiamo visto, cioè AND, OR e NOT, ci sono altre tre operazioni che possiamo usare: 7.1 L’operazione XOR (o EX-OR) Il nome viene dall’inglese EXclusive OR, cioè OR esclusivo. Funziona all’incirca come l’OR, ma è esclusivo perché vieta la possibilità che i due operandi possano essere entrambi veri, uno esclude l’altro. Quindi, se l’operazione OR corrisponde alla frase “la frase è vera se almeno una delle due è vera”, l’operazione XOR corrisponde alla frase “la frase è vera se solo una delle due è vera”. Si indica con il simbolo . x y 0 0 0 1 1 0 1 1 x y 0 1 1 0 L’operazione XOR non è una delle operazioni fondamentali, e può essere anche ottenuta usando solo le tre operazioni fondamentali. Infatti risulta: x dimostriamolo: x y x y 0 0 0 0 1 1 1 0 1 1 1 0 1 1 0 0 0 1 0 0 1 0 1 0 0 0 1 0 y= 0 1 1 0 7.1 L’operazione NAND Letteralmente, è la negazione dell’operazione AND. Il simbolo utilizzato è | . x y x|y x 0 0 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1 0 7.1 L’operazione NOR Letteralmente, è la negazione dell’operazione OR. Il simbolo utilizzato è ↓ . x 0 0 1 1 y 0 1 0 1 x ↓ y x+ 1 0 0 1 0 1 0 1 1 0 0 0 11 8. Insiemi di operatori funzionalmente completi Abbiamo visto finora sei operatori booleani: AND, OR, NOT, XOR, NAND, NOR. Abbiamo anche visto, però, che solo tre di essi sono quelli “fondamentali”, e cioè NOT, AND e OR. Infatti possiamo ricavare gli altri tre a partire da questi: x y= x|y= x↓y = Possiamo dire allora che l’insieme di operatori che comprende i soli operatori NOT, AND e OR, cioè l’insieme { , , + } è un insieme funzionalmente completo. Definizione: un insieme di operatori booleani si dice funzionalmente completo quando è possibile, usando solo questi, “riprodurre” tutti gli altri operatori, cioè ottenere un’espressione che si comporta come ognuno degli altri operatori che non fanno parte dell’insieme. Ci chiediamo se { , , + } è il più piccolo insieme di operatori funzionalmente completo, oppure se c’è qualche altro insieme di operatori, che ne ha solo 2, che è funzionalmente completo. La risposta è si, esistono insieme di operatori funzionalmente completi con solo 2 operatori! - L’insieme che comprende i soli operatori NOT e AND, cioè l’insieme { , } è funzionalmente completo. Per dimostrare quanto appena detto, dobbiamo far vedere che possiamo “riprodurre” ogni altro operatore booleano usando i soli operatori NOT e AND. Tuttavia, non è necessario far vedere che possiamo riprodurre tutti gli operatori: essendo { , , +} funzionalmente completo (l’abbiamo visto all’inizio del paragrafo), basta far vedere che possiamo riprodurre l’operazione OR usando solo le operazioni NOT e AND. Se riusciamo con questi due a fare anche l’OR, allora siamo in grado di fare anche tutti gli altri. Risulta: x+y = la prima uguaglianza vale per la proprietà dell’involuzione, la seconda per la proprietà di De Morgan. - L’insieme che comprende i soli operatori NOT e OR, cioè l’insieme { , } è funzionalmente completo. Per dimostrare quanto appena detto, dobbiamo far vedere che possiamo “riprodurre” ogni altro operatore booleano usando i soli operatori NOT e OR. Tuttavia, come prima, non è necessario far vedere che possiamo riprodurre tutti gli operatori: essendo { , , +} funzionalmente completo (l’abbiamo visto all’inizio del paragrafo), basta far vedere che possiamo riprodurre l’operazione AND usando solo le operazioni NOT e OR. Se riusciamo con questi due a fare anche l’AND, allora siamo in grado di fare anche tutti gli altri. Risulta: xy = 12 la prima uguaglianza vale per la proprietà dell’involuzione, la seconda per la proprietà di De Morgan. Ci chiediamo ora se esistono insiemi di operatori funzionalmente completi ancora più piccoli: cioè, con un solo operatore, è possibile fare tutti gli altri? La risposta è si, esistono insieme di operatori funzionalmente completi con solo 1 operatore! - L’insieme che comprende il solo operatore NAND, cioè l’insieme { | } è funzionalmente completo. Per dimostrare questo, dobbiamo far vedere che possiamo “riprodurre” ogni altro operatore booleano usando il solo operatore NAND. Come prima, non è necessario far vedere che possiamo riprodurre tutti gli operatori, ma basta ricondursi a un altro insieme di operatori funzionalmente completo. Essendo { , } funzionalmente completo, basta far vedere che possiamo riprodurre l’operazione AND e l’operazione NOT usando la sola operazione NAND. Risulta: =x |x xy = (x | x) | (x | x) la dimostrazione è lasciata per esercizio. - L’insieme che comprende il solo operatore NOR, cioè l’insieme { ↓ } è funzionalmente completo. Per dimostrare questo, dobbiamo far vedere che possiamo “riprodurre” ogni altro operatore booleano usando il solo operatore NOR. Come prima, non è necessario far vedere che possiamo riprodurre tutti gli operatori, ma basta ricondursi a un altro insieme di operatori funzionalmente completo. Essendo { , } funzionalmente completo, basta far vedere che possiamo riprodurre l’operazione OR e l’operazione NOT usando la sola operazione NOR. Risulta: =x ↓ x x+y = (x ↓ x) ↓ (x ↓ x) la dimostrazione è lasciata per esercizio. Concludiamo il paragrafo con un’ultima osservazione: perché siamo interessati a trovare insiemi di operatori funzionalmente completi che siano più piccoli possibile? Il motivo sta nell’interesse di chi realizza circuiti elettronici per i microprocessori: un microprocessore ha al suo interno diversi circuiti logici combinatori (li studieremo nella prossima dispensa), i quali sono costituiti da porte logiche, componenti elettronici che realizzano elettricamente le operazioni AND, OR, NOT, ecc. Ora, per un produttore costa molto di più realizzare diversi tipi di porte logiche (una per l’operazione AND, una per l’operazione OR, una per l’operazione NOT, e così via…) piuttosto che un solo tipo. Infatti, in molti moderni microprocessori si trova, di fatto, un solo componente: quello che realizza l’operazione NAND oppure quello che realizza l’operazione NOR.