Algebra di Boole In matematica, informatica ed elettronica, l'algebra di Boole, anche detta algebra booleana, è un'algebra astratta che opera essenzialmente con i soli valori di verità 0 e 1, che sono cioè negazione e affermazione o anche falso e vero. Tale algebra permette di definire gli operatori logici AND (prodotto logico), OR (somma logica) e poi NOT (negazione o complementazione), la cui combinazione permette di sviluppare qualsiasi funzione booleana (per questo AND, OR e NOT costituiscono un insieme funzionalmente completo) e consente di trattare in termini esclusivamente algebrici le operazioni insiemistiche dell'intersezione, dell'unione e della complementazione, oltre a questioni riguardanti singoli bit 0 e 1, sequenze binarie, matrici binarie e diverse altre funzioni binarie. L'algebra sviluppata nel 1854 all'University College di Cork da Boole (Lincoln, 2 novembre 1815 – Ballintemple, 8 dicembre 1864 - è stato un matematico e logico britannico, ed è considerato il fondatore della logica matematica. La sua opera influenzò anche settori della filosofia ) per scrivere in forma algebrica la logica delle proposizioni, assume oggi un ruolo importante in vari ambiti, in particolare nella logica matematica e nell'elettronica digitale, dove nella progettazione dei circuiti elettronici rivestono grande importanza i teoremi deducibili dagli assiomi che fondando l'algebra e in particolare si ricordi il teorema di Shannon del 1940 utilizzato per scomporre una funzione booleana complessa in funzioni più semplici, o per ottenere un'espressione canonica da una tabella della verità o da un'espressione non canonica. Proprietà Commutativa Associativa Idempotenza Assorbimento Distributiva Esistenza di minimo e massimo Esistenza del complemento Il modo in cui sono elencate le proprietà vuole mettere in evidenza la simmetria che c'è tra i due operatori che è poi all'origine della legge di dualità e altre proprietà molto importanti. Nell'elencare gli assiomi il complemento è stato indicato con un "!" (punto esclamativo) antecedente alla variabile booleana (notazione tipica della programmazione in C e C++); il complemento può anche essere indicato con un trattino sulla variabile (che è tipograficamente difficile da realizzare, anche se è la notazione migliore), con uno slash prima della variabile o addirittura con un segno meno antecedente a essa, quando non è una notazione equivoca. Il complemento corrisponde all'operazione logica NOT. Si elencano ora la legge di dualità e alcune proprietà derivanti dagli assiomi ora visti con le relative dimostrazioni; oltre a queste conseguenze ci sono poi due importanti teoremi dell'algebra booleana che sono i teoremi di De Morgan e il teorema di Shannon. I teoremi che si dimostrano ora sono validi per qualsiasi "porzione di realtà" che soddisfa gli assiomi di quest'algebra astratta e in particolare saranno applicabili nell'algebra degli insiemi, nell'algebra della logica delle proposizioni e nell'algebra dei circuiti. Legge di dualità Da qualsiasi identità boolena se ne può trarre un'altra per dualità, sostituendo cioè a ogni operatore e agli elementi 0 e 1 il rispettivo duale: il duale di + è *, il duale di 0 è 1 (la dimostrazione di questo sta al prossimo paragrafo), il duale di a è in generale !a (a negato, NOT a). Grazie a questa legge si può vedere come i 14 postulati dati per definire l'algebra booleana non sono tutti indipendenti tra loro: in particolare si vede che PX e PX' (per X=1,...,7) sono uno il duale dell'altro! Complementi di 0 e 1 0 e 1 sono uno il complementare dell'altro: per dimostrarlo basta verificare la definizione di complemento, cioè che Si vede immediatamente che applicando rispettivamente la proprietà del minimo e quella del massimo e il teorema ora enunciato risulta così dimostrato. Si nota che, per come è strutturata quest'algebra, questa dimostrazione ha permesso di dimostrare a partire dagli assiomi che l'elemento neutro esiste ed è unico (l'esistenza non è quindi postulata e l'unicità è insita nell'esistenza essendo solo 2 i valori con cui sta lavorando, cosa non vera per altri tipi di algebra e altre strutture algebriche!). Convoluzione Negando due volte lo stesso elemento si ottiene l'elemento stesso (logica aristotelica: una doppia negazione corrisponde a un'affermazione). Per dimostrarlo basta considerare l'assioma di esistenza del complemento considerato su due elementi a e b=!a: Essendo valida la proprietà commutativa e siccome il complemento esiste unico, se ne deduce facilmente che , che è quello che si voleva dimostrare. Elementi neutri 0 è l'elemento neutro della somma e 1 è l'elemento neutro del prodotto. Per la dimostrazione basta sfruttare la proprietà dell'assorbimento grazie alla quale si deduce che: Ora, sfruttando la proprietà del massimo e minimo per la quale a*0=0 e a+1=1, si deduce facilmente che: che è quello che si doveva dimostrare. Assorbimento del complemento L'assorbimento del complemento dice che Per dimostrarlo basta applicare la proprietà distributiva secondo la quale: dopodiché, notando che a+!a=1 e che 1 è l'elemento neutro del prodotto logico risulta dimostrato il teorema. Per la legge di dualità si capisce anche che esiste un teorema duale a questo che sarà: Questo teorema può essere preso per vero accettando la validità della legge di dualità oppure può essere dimostrato in modo del tutto analogo al precedente. Si nota che, nello scrivere l'espressione duale, si è dovuta rispettare la precedenza di applicazione delle operazioni e perciò le parentesi intorno ad a+!b della seconda espressione sono necessarie! Teorema dell'elemento unico Se e , allora y è unico (o anche x è unico perché si vede che, essendo valida la proprietà commutativa, il ruolo di x e y nelle espressioni è lo stesso!). Per la dimostrazione si suppone per assurdo che esistano due valori distinti y e z che soddisfano alle due espressioni, e cioè Essendo anche che si è ottenuto che Nell'ultimo passaggio si è sfruttato il principio di equivalenza delle eguaglianze e non si è semplificato la x, cosa che non è stata dimostrata e non può essere dimostrata in quest'algebra. Allora, quello che si ha ora è che Moltiplicando membro a membro e utilizzando la proprietà distributiva si ha: cioè y=z e perciò l'elemento che soddisfa le due relazioni scritte sopra è unico. Principio di eliminazione Come si è accennato prima, nell'algebra di Boole non valgono i principi di eliminazione, cioè non vale che: Vale che y=z solamente se queste due espressioni ora scritte valgono contemporaneamente! L'unica cosa che si può dire invece nel caso in cui valga solo la prima espressione è che: Operatori booleani Si è visto che gli operatori dell'algebra booleana possono essere rappresentati in vari modi, ma spesso sono scritti semplicemente come AND, OR e NOT che è la scrittura che utilizziamo ora per parlare degli operatori booleani. Nella descrizione dei circuiti, possono anche essere usati NAND (NOT AND), NOR (NOT OR) e XOR (OR esclusivo). Le diverse simbologie per rappresentare gli operatori sono scelte in base al campo in cui si lavora: i matematici usano spesso il simbolo + per l'OR, e × o * per l'AND, in quanto per alcuni versi questi operatori lavorano in modo analogo alla somma e alla moltiplicazione. La negazione NOT viene rappresentata spesso da una linea disegnata sopra l'argomento della negazione, cioè dell'espressione che deve essere negata. Oppure in informatica si utilizza il simbolo | o || per l'OR, & o && per l'AND, e ~ o ! per NOT (es. A OR B AND NOT C equivale a A|B & ~C oppure a A+B*!C). Se ci riferisce agli operatori con i simboli di somma e moltiplicazione e poi intende la negazione come se fosse una "elevazione a potenza", è facile da ricordare l'ordine di applicazione degli operatori: prima si applicano le negazioni, poi le AND e poi le OR. Nella progettazione di circuiti elettronici, vengono utilizzati anche gli operatori brevi NAND (AND negato), NOR (OR negato) e XNOR (XOR negato): questi operatori, come XOR, sono delle combinazioni dei tre operatori base e vengono usati solo per rendere la notazione più semplice. Operatori: NOT - simboli alternativi: x, ~, ¬, ! (in C e C++) AND - simboli alternativi: *, OR - simboli alternativi: +, XOR - simboli alternativi: ⊕, , &, && (in C e C++), BUT (usato nella logica booleana insieme al NOT) , |, || (in C e C++) NAND - simbolo alternativo: ↑ NOR - simbolo alternativo: ↓ , ∨, ^, EOR, orr XNOR Valori: vero - simboli alternativi: true, 1, ON, SI (YES), alto falso - simboli alternativi: false, 0, OFF, NO, basso (adattamento da Wikipedia)