Institutionen för matematik, KTH 5B8 Diskret matematik BOOLESK ALGEBRA OCH BOOLESKA FUNKTIONER ANDERS BJÖRNER OCH KIMMO ERIKSSON Boolesk algebra skapades vid 8-talets mitt av den engelske matematikern George Boole. Den ger en gemensam ram för mängdlära, satslogik och teori för vissa digitala kretsar. Vi skall här ge en introduktion till boolesk algebra i det ändliga fallet, som är av särskild betdelse i datalogin.. Boolesk algebra Grunden för boolesk räkning är följande två räknetabeller: + ; ; samt { = = = = De fungerar som vanlig addition och multiplikation sånär som på att alla icke-noll-värden representeras av. Värdena och kan tolkas som falskt och sant, varvid + motsvarar eller (OR) och motsvarar och (AND). Komplement,, motsvarar icke (NOT). Ytterligare en tolkning är i mängdtermer: motsvarar en flld mängd X, motsvarar tomma mängden, + motsvarar union, motsvarar snitt, och komplement är komplement med avseende på X, dvs = X. Objektet som vi studerat ovan är den endimensionella booleska algebran B. Den har alltså två element, {, } eller {falskt, sant}, eller {, X}, hur vi nu vill se på den. Det här kan generaliseras till flera dimensioner: B n = {n-dimensionella {, }-vektorer; +,, sker komponentvis} (E.: + = ; = [B 5 ]) = {n-dim. {sant, falskt}-vektorer; OR, AND, NOT sker komponentvis} (E.: SFS AND FSS = FFS; NOT (SFS)=FSF [B 3 ]) = {alla delmängder till en n-mängd X, t.e. {, 2,..., n};, och m.a.p. X} (E.: {3, 5} {, 5} = {, 3, 5}; {3, 5} = {, 2, 4} [B 5 ]) Tecknet = betder isomorfi, dvs sånär som på olika namn på saker och ting så är det eakt samma objekt i de tre eemplen. Isomorfin mellan de första två är trivial: F, S, osv. Isomorfin mellan första och tredje eemplet är nästan lika enkel: {3, 5}, {, 5}, dvs :orna anger vilka element av {,... 5} som är med i delmängden. För varje n finns alltså en unik boolesk algebra B n, med flera tänkbara tolkningar. B n har 2 n element, t för var och en av de n positionerna i vektorn kan vi välja en :a eller en :a. För att renodla egenskaperna hos den booleska algebran kan man lämna de konkreta representationerna ovan och se B n som en abstrakt mängd med 2 n element och med tre
operationer:, och, som uppfller samma egenskaper som, och. Vissa av dessa egenskaper, från vilka de övriga kan härledas, väljs ut och kallas aiomen för en boolesk algebra. Till att börja med har man en partialordning som motsvarar för mängder eller komponentvis för {, }-vektorer. Det finns två särskilda element och så att för alla i B n. och motsvarar respektive hela X = {, 2,..., n}. Några eempel på aiom är: ( z) = ( ) ( z) ( z) = ( ) ( z) = = ȳ = ȳ } } distributivitet de Morgans lagar Men, eftersom den booleska algebran är isomorf med tolkningarna ovan så finns det ingen anledning att lära sig dessa aiom utantill emedan de följer av räknereglerna för t.e. mängder eller {, }-vektorer. I fortsättningen betraktar vi B n just som {n-dim. {, }-vektorer} och använder alltså operatorerna +, och. Men i livlig åtanke har vi alltid omtolkningen till räkning med sanningsvärden. 2. Booleska funktioner En boolesk funktion är en funktion f : B n B, dvs en funktion f(, 2,..., n ) = där alla i och är eller. Man representerar enklast f med en sanningstabell, t.e. 2 3 f Men man kan också se f som en logisk krets 3 2 f f(, 2, 3 ) som matar ut ett värde beroende på ingångsvärdena, 2, 3. 2
Den funktion f som ges av tabellen ovan kan också uttrckas som ett booleskt polnom, dvs ett uttrck med +, och samt variabler: f(, 2, 3 ) = 2 3 + 2 3 + 2 3 + 2 3. Hur vet man det? Jo, varje term motsvarar en rad i tabellen där f ska vara. Att t.e. f(,, ) = motsvaras av 2 3, t denna produkt blir omm alla faktorer är, dvs omm =, 2 =, 3 =. På samma sätt är 2 3 = omm (, 2, 3 ) = (,, ). Alltså kommer summan av dessa termer att vara precis när f ska vara. Detta sätt att uttrcka f kallas disjunktiv normalform. Vi kan ur detta dra slutsatsen att varje boolesk funktion kan skrivas som ett booleskt polnom. Men det finns i allmänhet många olika sätt att uttrcka samma booleska funktion. Vi har t.e. { + ȳ = z + z + ȳz + ȳ z = Den disjunktiva normalformen är ofta den dummaste om man är ute efter ett enkelt uttrck. Varför är man ute efter ett enkelt uttrck för f? Jo, om man ska realisera f som logisk krets vill man bgga den så billigt som möjligt, dvs med så få grundkomponenter, s.k. grindar, som möjligt. Tpiska grindar är: & + Till eempel kan ( + ) z bggas: z + & ( + )z På disjunktiv normalform är ( + ) z = z + z + ȳz, och att bgga upp kretsen så är naturligtvis mcket drare. Hur gör man då för att finna enklast möjliga uttrck för f? För stora n är detta problem mcket svårt, man får i praktiken nöja sig med en halvbra lösning, stora datorer till trots. För n 6 kan man dock lösa problemet för hand, med hjälp av så kallade Karnaugh-diagram. Metoden illustreras för n = 2 i följande eempel. 3
f (ȳ) = ( ) () () = f(, ) = + ȳ Idén är alltså att översätta sanningstabellen (eller den disjunktiva normalformen) till en 2-dimensionell tabell, och där plocka ihop block av :or till enkla termer. Kolonnen under = motsvarar ju ȳ =, och att den kolonnen bara innehåller :or motsvarar termen ȳ i uttrcket för f. Observera att samma :a gärna får ingå i flera block (eftersom +=). För 3 och 4 variabler gäller det att utforma tabellen på ett listigt sätt, så att grannrutor får klumpas ihop. Enklast ser man på ett eempel: zw ( z) ( ){ (){ (w) ( w) (z) } () (ȳ) = f = ȳ z w + zw + z Man räknar alltså upp värdeparen i ordningen,,,. På det sättet kommer alltid två par i följd att ha en gemensam siffra; det sista paret är också granne med det första. I tabellrutan plockar man ihop block av ettor, där man alltså får utnttja denna wraparound -effekt. T.e., de två ettorna i första kolonnen finns i kolonn z w och i raderna ȳ, så de bidrar med termen ȳ z w. Metoden med Karnaugh-diagram blir mer otmplig för n = 5, 6. För n 7 bör datorer användas för att hitta minimala polnom, eller approimativt minimala polnom, till booleska funktioner. Vi går inte vidare in på detta ämne. I kompleitetsteori studeras hur svåra olika beräkningsproblem är. Svårighetsgrad mäts på olika sätt, t.e. hur många elementära steg som en algoritm för problemet måste ta som funktion av indatas storlek. I det sammanhanget spelar booleska funktioner en stor roll. Man försöker uppskatta storleken på minimala booleska kretsar, ett allmännare begrepp än booleska polnom, för givna funktioner. En viktig roll i teoretisk datalogi spelar också det så kallade satisfierbarhetsproblemet (SAT): Givet ett booleskt polnom f(, 2,..., n ) finns det värden a i {, } så att f(a, a 2,..., a n ) =? Man vet inte om detta problem har en polnomiell lösning, dvs 4
om det finns en algoritm som använder högst n d steg, för något fit heltal d. Satisfierbarhetsproblemet för booleska polnom är det kanske viktigaste (och historiskt första, Cook 97) eemplet på ett NP-fullständigt problem. Frågan om det har en polnomiell lösning är ekvivalent med det berömda P=NP? problemet. Vi hänvisar till referenserna, eller kurser i algoritm- och kompleitetsteori, för mer om booleska funktioners roll i teoretisk datalogi. Referenser [] M.R. Gare and D.S. Johnson, Computers and intractabilit: A guide to the theor of NPcompleteness, W.H. Freeman, San Fransisco, 979 [2] I. Wegener, The compleit of Boolean functions, Wile-Teubner, Stuttgart, 987 5
3. övningar:. Utöver de aiom för boolesk algebra som nämndes i teten (distributivitet, dubbel negation och de Morgans lagar), så finns följande aiom i det vanligaste aiomsstemet: (a) =, = (idempotens) (b) =, = (kommutativitet) (c) ( z) = ( ) z, ( z) = ( ) z (associativitet) (d) ( ) =, ( ) = (absorption) (e) [ ( z)] = ( ) ( z) [ ( z)] = ( ) ( z) (f) =, = =, = (modularitet) (g) =, = (komplementlagar) Verifiera att dessa aiom gäller för sstemet av delmängder till en n-mängd där, och betder union, skärning och komplement. 2. Visa följande dualitetsprincip för boolesk algebra: Om P är ett sant påstående om boolesk algebra och om P erhålls genom att bta alla -tecken mot -tecken och vice versa, så är också P ett sant påstående. 3. Bevisa följande booleska identitet: ( ) ( z) (z ) = ( ) ( z) (z ). 4. Låt = +ȳ. Detta motsvarar den logiska funktionen eklusivt eller (XOR). (a) Skriv upp en sanningsvärdestabell för. (b) Visa att ( ) z = ( z). (c) Skriv z på disjunktiv normalform. 5. Vi har sett att varje boolesk funktion kan uttrckas med hjälp av de tre elementära operationerna {+,, }; vi kallade sådana uttrck booleska polnom. Visa att följande par av elementära operationer räcker för att uttrcka alla booleska funktioner: (a) {+, } (b) {, } (c) {, } (d) Kan uttrckas enbart med {+, }? n (e) Har dessa resultat någon betdelse för konstruktionen e av logiska kretsar? 6. En boolesk funktion f() kallas monoton om = f() f() för alla, B n. Visa följande: 6
(a) Om f() kan uttrckas med enbart operationerna {+, } så är funktionen monoton, (b) Om f() är monoton så kan den uttrckas enbart med operationerna {+, }. 7. Hitta enklast möjliga uttrck för följande booleska funktioner, och rita motsvarande logiska krets: (a) + ȳ + (b) ȳz + z + z + ȳz + z (c) ȳ zw + ȳz w + z w + zw + z w + z w + zw. 8. Ett cirkulärt arrangemang av elementen i B n så att två element i följd skiljer sig i eakt en position kallas en Gra-kod. Vid konstruktionen av Karnaugh-diagrammet för n = 4 använde vi Gra-koden,,,. (a) Konstruera en Gra-kod för B 3. (b) Visa att en Gra-kod eisterar för alla B n, n. 7