Boolesche Polynome
Transcription
Boolesche Polynome
KAPITEL 5 Boolesche Polynome Polynome über R, d.h. reelle Funktionen der Form p(x) = a0 + a1 x + · · · + an xn , x ∈ R, sind schon aus der Schulmathematik bekannt. Wir beschäftigen uns nun mit Booleschen Polynomen, dies sind Abbildungen, deren Variablen Elemente einer Booleschen Algebra. Sei (B, ∧, ∨) eine Boolesche Algebra und f : B n → B eine Abbildung. Dann definieren wir die Menge aller dieser Abbildungen: Fn (B) := {f | f : B n → B} Auf dieser Menge betrachten wir nun Verknüpfungen von Elementen aus Fn (B), die über die Verknüpfungen ∧ und ∨ der Booleschen Algebra definiert sind: f ∧ g : B n → B : (f ∧ g)(x) := f (x) ∧ g(x) f ∨ g : B n → B : (f ∨ g)(x) := f (x) ∨ g(x) Damit wird Fn (B) selbst zu einer Booleschen Algebra und es gilt f(x) := f (x) komplementäres Element 0(x) := 0B Nullelement 1(x) := 1B Einselement Ansonsten gelten die bekannten Regeln einer Booleschen Algebra. Boolesche Polynome in den Unbekannten x1 , . . . , xn werden nun folgendermassen rekursiv definiert a) x1 , . . . , xn , 0, 1 sind Boolesche Polynome, b) sind p, q Boolesche Polynome, so auch die Verknüpfungen der Form p ∧ q, p ∨ q, p Die Menge der Booleschen Polynome in den Unbekannten x1 , . . . , xn bezeichnen wir mit Pn . Bemerkung 5.1. Man beobachtet, dass zwei Boolesche Polynome p und q genau dann gleich sind, wenn sie als Zeichenfolge gleich sind. Dann sind etwa die beiden Polynome aus dem Beispiel oben, x1 ∧ x2 und x2 ∧ x1 , nicht gleich. Daraus lässt sich direkt ableiten, dass Pn selbst keine Boolesche Algebra ist. Sei B eine Boolesche Algebra. Dann lässt sich zu jedem Booleschen Polynom p ∈ Pn eine Boolesche Funktion PB ∈ Fn (B) konstruieren: für die Elemente a1 , . . . , an ∈ B bezeichnen wir mit pB (a1 , . . . , an ) ∈ B das Element aus B, das durch Einsetzen von ai für die Variable xi in p entsteht. 37 38 5. BOOLESCHE POLYNOME Definition 5.2. Die Funktionen pB ∈ Fn (B), die durch die oben angegebene Konstruktion definiert sind, nennt man Boolesche Polynomfunktionen. Nach diesem Prinzip erhalten wir eine Abbildung Φ : Pn → Fn (B) mittels pB = Φ(p). Diese Abbildung ist strukturerhaltend, d.h. es gilt (p ∧ q)B = pB ∧ qB (p ∨ q)B = pB ∨ qB (p)B = pB Man beachte aber, dass i.a. verschiedene Boolesche Polynome auf die gleiche Boolesche Polynomfunktion abgebildet werden. Dies liegt daran, dass F n (B) selbst eine Boolesche Algebra ist, Pn jedoch nicht. Beispiel 5.3. Für die beiden Polynome p, q ∈ Pn mit p = x1 ∧ (x1 ∨ x2 ) und q = x1 gilt p 6= q. Auf der anderen Seite haben wir pB = Φ(p) = qB = Φ(q). Satz 5.4. Sei Pn (B) die Menge der Booleschen Polynomfunktionen PB : B n → B. Dann ist (Pn (B), ∧, ∨) eine Boolesche Algebra. Es erscheint daher sinnvoll, die Menge Pn der Booleschen Polynome in Äquivalenzklassen einzuteilen und dies gerade so, dass gilt: [p] = [q] ⇒ pB = qB Wir definieren diese Äquivalenzklassen durch: p ∼ q :⇔ pB = qB , B = {0, 1} Man zeigt unmittelbar, dass ∼ eine Äquivalenzrelation ist. Die spezielle Wahl B = B = {0, 1} ist dabei nicht entscheidend, denn es gilt Satz 5.5. Für eine beliebige Boolesche Algebra gilt pB = q B ⇔ p ∼ q Wir gehen noch einen Schritt weiter und beschäftigen uns mit dem sogenannten Normalformenproblem: wir haben oben ein Äquivalenzklassensystem auf der Menge der Booleschen Polynome eingeführt. Dann ist es naheliegend nach einem geeigneten Repräsentantensystem zu suchen, d.h. eine Menge anzugeben, deren Elemente jeweils eine Äquivalenzklasse repräsentieren. Wir suchen also eine Menge Np ⊂ Pn für die gilt: ∀ p ∈ Pn ∃ 1 q ∈ N p : p B = qB Dabei suchen wir natürlich solche Repräsentanten (Normalformen) q ∈ Np , die möglichst einfache Gestalt haben. Definition 5.6. Für Elemente a einer Booleschen Algebra setzen wir: a1 := a, a0 := a Analog definieren wir für die Variablen x1 , . . . , xn in einem Polynom p ∈ Pn : x1k := xk , x0k := xk 5. BOOLESCHE POLYNOME 39 Damit lassen sich die folgenden Normalformen angeben Satz 5.7. 1) Die Booleschen Polynome der Form _ di1 ...in ∧ xi11 ∧ · · · ∧ xinn p= (i1 ,...,in )∈Bn mit di1 ...in ∈ {0, 1} bilden ein Repräsentantensystem. Man nennt dieses System disjunktive Normalform (DNF). 2) Die Booleschen Polynome der Form ^ gi1 ...in ∨ xi11 ∨ · · · ∨ xinn p= (i1 ,...,in )∈Bn mit gi1 ...in ∈ {0, 1} bilden ein Repräsentantensystem. Man nennt dieses System konjunktive Normalform (KNF). Nach dem Dualitätsprinzip genügt es, sich auf eines der beiden Repräsentantensysteme zu beschränken. Ist f : Bn → B eine beliebige Bollesche Funktion, so lässt sich die zugehörige DNF folgendermäßen bestimmen: man setzt dk1 ···kn := f (k1 , . . . , kn ), ki ∈ {0, 1} und definiert p als DNF mit diesen Koeffizienten. Satz 5.8. 1) Fn (B) = Pn (B). Man sagt auch, dass B polynomvollständig ist. 2) Es gilt: n #Fn (B) = #Np = #(DN F ) = 22 In der folgenden Tabelle sind die Mächtigkeiten von Fn (B) für die ersten 6 natürlichen Zahlen angegeben: 1 2 3 4 5 6 n #Fn 4 16 256 65536 ∼ 4.3 · 107 ∼ 1.8 · 1019 Tabelle : Mächtigkeit von Fn (B). Damit ist klar, dass wir im nachfolgenden Beispiel nur den Fall n klein“ angeben können. ” Beispiel 5.9. 1) Im Fall n = 1 haben wir nach der Tabelle vier unterschiedliche Normalformen. Diese sind gegeben durch p = (d1 ∧ x1 ) ∨ (d0 ∧ x1 ) 40 5. BOOLESCHE POLYNOME wobei d0 , d1 ∈ {0, 1}. Ausgeschrieben erhalten wir p1 p2 p3 p4 = = = = (0 ∧ x1 ) ∨ (0 ∧ x1 ) (0 ∧ x1 ) ∨ (1 ∧ x1 ) (1 ∧ x1 ) ∨ (0 ∧ x1 ) (1 ∧ x1 ) ∨ (1 ∧ x1 ) Für den Fall n = 2 ergeben sich die Normalformen p = (d11 ∧ x1 ∧ x2 ) ∨ (d10 ∧ x1 ∧ x2 ) ∨ (d01 ∧ x1 ∧ x2 ) ∨ (d00 ∧ x1 ∧ x2 ) mit dij ∈ {0, 1}, i, j = 0, 1. Wir verzichten auf die genaue Angabe der 16 Polynome, die sich daraus ergeben. 2) Wir versuchen das Polynom p = x1 ∨x2 in DNF darzustellen, d.h. die entsprechende disjunktive Normalform von p anzugeben. Dazu berechnen wir PB (1, 1) = pB (1, 0) = pB (0, 1) = 1 pB (0, 0) = 0 Damit lautet die disjunktive Normalform von p p = (1 ∧ x1 ∧ x2 ) ∨ (1 ∧ x1 ∧ x2 ) ∨ (1 ∧ x1 ∧ x2 ) ∨ (0 ∧ x1 ∧ x2 ) Einfache Überlegungen zeigen, dass wir die disjunktive Normalform weiter vereinfachen können ohne die Einteilung in Äquivalenzklassen zu modifizieren: setzen wir im Polynome 1 ∧ xi11 ∧ · · · ∧ xinn für die Variablen Elemente aus B = {0, 1} ein, so können wir das Polynom durch xi11 ∧ · · · ∧ xinn ersetzen. Weiterhin gilt, dass in der Normalform Terme der Form 0 ∧ xi11 ∧ · · · ∧ xinn einfach weggelassen werden können. Mit diesen Abkürzungen und Vereinbarungen lautet die DNF aus Teil 2) des obigen Beispiels p̃ = (x1 ∧ x2 ) ∨ (x1 ∧ x2 ) ∨ (x1 ∧ x2 ) Da wir nur disjunktive Normalformen betrachten, verzichten wir in der Darstellung des Polynoms p̃ auf das Symbol ∧ und schreiben abkürzend: p̃ = x1 x2 ∨ x1 x2 ∨ x1 x2 Beispiel 5.10. Wir wollen das Boolesche Polynom q = ((x1 ∧ x2 ) ∨ x3 ) ∨ (((x1 ∧ (x2 ∧ x3 )) ∧ x4 ) ∨ x1 ) in der abkürzenden DNF darstellen. Dazu berechnen wir die formale Auswertung von q bezüglich B = {0, 1}. 5. BOOLESCHE POLYNOME 41 x 1 x 2 x 3 x 4 qB 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 Tabelle: Auswertung des Polynoms q bezüglich {0, 1}. Damit erhalten wir die folgende DNF von q: (5.1) qDN F = x1 x2 x3 x4 ∨ x 1 x2 x3 x4 ∨ x 1 x2 x3 x4 ∨ x 1 x2 x3 x4 ∨ x 1 x2 x3 x4 ∨ x 1 x2 x3 x4 ∨ x 1 x2 x3 x4 ∨ x 1 x2 x3 x4 ∨ x 1 x2 x3 x4 ∨ x 1 x2 x3 x4 ∨ x 1 x2 x3 x4 ∨ x 1 x2 x3 x4 Wir kommen nun zum Begriff Minimalform, der sich folgendermassen motivieren lässt: die DNF’s aus obigem Beispiel sind trotz der abkürzenden Schreibweise unnötig lang und unhandlich. Beim dritten Beispiel erhalten wir zum Beispiel durch einfache Umformungen die folgende Äquivalenz: (5.2) q = ∼ ∼ ∼ ∼ ((x1 ∧ x2 ) ∨ x3 ) ∨ (((x1 ∧ (x2 ) ∧ x3 )) ∧ x4 ) ∨ x1 ) x1 x2 ∨ x3 ∨ (x1 x4 ∧ (x1 ∨ x3 )) ∨ x1 x1 ∨ x 1 x2 ∨ x 3 ∨ x 1 x2 x4 ∨ x 1 x3 x4 x1 ∨ x1 (x2 x4 ∨ x3 x4 ) ∨ x3 x1 ∨ x 3 d.h. das Ausgangspolynom ist äquivalent zum Polynom x1 ∨ x3 und das vergleiche man mit der DNF aus (5.1). Insbesondere ist das Polynom unabhängig von den Variablen x2 und x4 , was sich auch aus der Tabelle ablesen lässt, denn es gilt: q(a1 , 0, a3 , a4 ) = q(a1 , 1, a3 , a4 ) ∀ a1 , a3 , a4 ∈ B q(a1 , a2 , a3 , 0) = q(a1 , a2 , a3 , 0) ∀ a1 , a2 , a3 ∈ B 42 5. BOOLESCHE POLYNOME Wir suchen daher ein Repräsentantensystem der Form (5.3) p = xiν11 . . . xiνrr ∨ · · · ∨ xjµ11 . . . xjµrr mit einer minimalen Anzahl von Termen (Faktoren und Summanden). Man beachte, dass im Unterschied zur DNF nicht notwendigerweise alle Variablen x 1 , . . . xn in der Darstellung (5.3) auftreten. Weiterhin gilt, dass zu jedem Booleschen Polynom q ∈ P n eine Minimalform existiert, diese aber im allgemeinen nicht eindeutig bestimmt ist. Die Berechnung einer Minimalform ist komplizierter als die Ableitung einer Normalform und wir geben im folgenden einen Algorithmus zur Bestimmung einer Minimalform an: Definition 5.11. 1) Seien p, q ∈ Pn zwei Boolesche Polynome. p heisst Implikant von q, falls gilt: ∀ (a1 , . . . , an ) ∈ B n : (pB (a1 , . . . , an ) = 1 ⇒ qB (a1 , . . . , an ) = 1) Wir schreiben dafür p ⇒ q 2) Jedes Polynom p ∈ Pn der Form p = xiν1i . . . xinrr mit 1 ≤ ν1 < · · · < νr ≤ n und ik ∈ {0, 1} nennt man ein Produktpolynom. 3) Sei q ∈ Pn . Ein Produktpolynom s = xiν1i . . . xinrr nennt man Primimplikant von q, falls gilt: i) s ⇒ q ii) läßt man in der Darstellung des Produktpolynoms s einen Term weg, so ist s kein Implikant von q Ein Primimplikant ist also ein Implikant von q, das ein Produktpolynom ist und eine minimale Anzahl von Faktoren besitzt. Beispiel 5.12. 1) Wir betrachten das Polynom q = x1 x2 x3 ∨ x1 x2 x3 ∨ x1 x2 x3 ∈ P3 . Dann berechnet man ein Primimplikant s in der Form s = x1 x3 : wir bemerken zunächst, dass sB (a1 , a2 , a3 ) = 1 ⇔ a1 = a3 = 1 gilt. Setzen wir diese Werte in das Polynom q ein, so folgt qB = 1a2 1 ∨ 1a2 1 ∨ 0a2 0 = a2 ∨ a 2 ∨ 0 = 1 also ist s ein Implikant von q. Es gilt weiter, dass s minmal ist, denn weder x 1 noch x3 sind Implikanten: qB (1, 0, 0) = qB (0, 0, 1) = 0 2) Sei q ∈ P4 gegeben durch Dann sind s1 := x1 und s2 := x3 die Primimplikanten von q. Dies folgt direkt aus den Umformungen in (5.2). 5. BOOLESCHE POLYNOME 43 Wir können nun den zentralen Satz über die Primimplikanten formulieren, den sogenannten Primimplikationensatz, der das Problem der Minimalform löst: Satz 5.13. Jedes Boolesche Polynom q ∈ Pn ist äquivalent zur Disjunktion seiner Primimplikanten, d.h. sei Iq = {s1 , . . . , sm } die Menge aller Primimplikanten von q, dann gilt q ∼ p := s1 ∨ · · · ∨ sm Der Beweis zu Satz 5.13 ist konstruktiv, d.h. man erhält aus dem Beweis ein Verfahren zur Berechnung der Minimalform eines Polynoms, d.h. seiner Primimplikanten. Als konkretes Berechnungsverfahren ist es allerdings ungeeignet, da das Verfahren sehr aufwendig ist. Wir geben daher im folgenden ein effizientes Verfahren zur Bestimmung einer bzw. aller disjunktiven Minimalformen für ein vorgegebenes Polynom q ∈ Pn an, den Algorithmus von Quine, Mc Cluskey Dieses Verfahren besteht aus den folgenden drei Schritten: gegeben sei ein Polynom q ∈ P n . 1) man bestimmt eine DNF p(1) von q. 2) man bestimmt alle Primimplikanten von p(1) 3) von allen berechneten Primimplikanten wird ein minimaler Satz ausgewählt, der sämtliche Produkte der DNF überdeckt. Bei Schritt 1) kann man das im Anschluss an Satz 5.7 angebene Verfahren verwenden. Beim zweiten Schritt vergleicht man jeden Produktterm der DNF mit jedem anderen und verwendet folgende Reduktionsregel: αxk ∨ αxk ∼ α wobei α einen beliebigen Produktterm bezeichnet. Dieses Verfahren wird solange iteriert, bis keine weitere Anwendung der Reduktionsregel möglich ist. Die verbleibenden Terme definieren dann die Menge aller Primimplikanten s1 , . . . , sm von q, d.h. p(2) := s1 ∨ · · · ∨ sm ∼ q Man beachte allerdings, dass p(2) i.a. noch keine Minimalform ist. Daher wählt man im dritten Schritt einen minimalen Satz von Primimplikanten aus, der sämtliche Produktterme der DNF überdeckt, d.h. der Primimplikant ist Teilprodukt des Produkts der DNF. Dazu stellt man eine sogenannte Primimplikanten–Tabelle auf, wobei folgende einfachere Schreibweise verwendet wird: einen Produktterm der Form xa11 . . . xann schreibt man in vereinfachter Form als a1 . . . an und sortiert anschließend die Dualzahlen a1 . . . an nach der Anzahl der auftretenden Einsen. In der Primimplikanten–Tabelle werden die Produktterme der DNF horizontal, die Primimplikanten vertikal angeordnet. Man trägt nun in die Tabelle die Symbole x ein, falls ein Primimplikant einen Produktterm der DNF überdeckt. Eine Summe von Primimplikanten ist genau dann äquivalent zu q, wenn die auftretenden Summanden alle Produkte der DNF überdecken. Zur Bestimmung einer minimalen Anzahl von Summanden bestimmt man zunächst diejenigen Produkte der DNF, die von nur 44 5. BOOLESCHE POLYNOME einem Primimplikaten überdeckt werden, d.h. man sucht in der Primimplikanten–Tabelle die Spalten, in denen nur ein Symbol x auftaucht. Die dabei ausgewählten Primimplikanten nennt man wesentlich, die Summe der wesentlichen Primimplikanten heißt der Kern. Dieser Kern muss in jeder disjunkten Minimalform enthalten sein. Man streicht nun alle Produkte der DNF, die von einem wesentlichen Primimplikant überdeckt werden, d.h. man streicht die entsprechenden Spalten in der Primimplikanten– Tabelle. Weiter streicht man die zugehörigen wesentlichen Primimplikanten, d.h. die zugehörigen Zeilen der Tabelle. Im letzten Schritt muss man durch Ausprobieren aller verbleibenden Möglichkeiten eine minimale Restüberdeckung bestimmen. Beispiel 5.14. Wir betrachten das Boolesche Polynom q = x 1 x2 x3 x4 ∨ x 1 x2 x3 ∨ x 1 x3 x4 ∨ x 2 x4 ∈ P4 Schritt 1): Zunächst bestimmen wir die DNF von q analog zu Besipiel 5.10, in dem wir die formale Auswertung des Polynoms bezüglich B = {0, 1} berechnen. Dabei ergibt sich p(1) = x1 x2 x3 x4 ∨ x1 x2 x3 x4 ∨ x1 x2 x3 x4 ∨ x1 x2 x3 x4 ∨ x1 x2 x3 x4 ∨ x 1 x2 x3 x4 ∨ x 1 x2 x3 x4 ∨ x 1 x2 x3 x4 Schritt 2): Berechnung der Primimplikanten von p(1) Zunächst verwenden wir die abkürzende Schreibweise und sortieren die Produktterme der DNF nach der Häufigkeit der 0: x1 x2 x3 x4 : 0000 x1 x2 x3 x4 : 1000 x1 x2 x3 x4 : 0010 x1 x2 x3 x4 : 0001 x1 x2 x3 x4 : 1100 x1 x2 x3 x4 : 1001 x1 x2 x3 x4 : 0011 x1 x2 x3 x4 : 1011 5. BOOLESCHE POLYNOME 45 Aus dieser Liste müssen wir nun nach der Reduktionsregel die Primimplikanten rausfiltern: im ersten Durchgang der Reduktionsregel erhalten wir 0000 1000 0000 0010 0000 0001 1000 1100 1000 1001 0010 0011 0000 1001 0001 0011 1001 1011 0011 1011 → −000 → 00−0 → 000− → 1−00 → 100− → 001− → −001 → 00−1 → 10−1 → −011 Man beachte, dass die einzelnen Produktterme der DNF bei der Reduktionsregel mehrfach verwendet werden können. 46 5. BOOLESCHE POLYNOME Im zweiten Durchgang nehmen wir nun die Terme −000 → −001 00−0 → 00−1 000− → 100− 000− → 001− −001 → −011 00−1 → 10−1 der rechten Seite und reduzieren weiter -0000--0000--0-1 -0-1 Der Term 1-00 läßt sich nicht weiter reduzieren. Die resultierenden Terme auf der rechten Seite lassen sich ebenfalls nicht weiter reduzieren. Daher sind die Primimplikanten gegeben durch x1 x3 x4 , x 2 x3 , x 1 x2 , x 2 x4 und p(2) = x1 x3 x4 ∨ x2 x3 ∨ x1 x2 ∨ x2 x4 Schritt 3): Wir müssen nun einen minimalen Satz von Primimplikanten auswählen, der sämtliche Produktterme der DNF überdeckt. Dazu stellen wir die Primimplikanten–Tabelle auf 0 0 0 0 1 0 0 0 1 − 0 0 x − 0 0 − x x 0 0 − − x − 0 − 1 0 0 1 0 0 0 0 1 x x x x 1 1 0 0 x 1 0 0 1 0 0 1 1 1 0 1 1 x x x x x Wir wählen nun die Primimplikanten aus, für die nur ein Symbol x in einer Spalte auftaucht. Dies sind gerade die Terme 1−00, 00−− und −0−1. Streichen wir aber zusätzlich die Spalten, die ein weiteres Symbol x für diese drei Primimplikanten aufweisen, so erkennt man, dass die drei Primimplikanten bereits eine vollständige Überdeckung der Produktterme der DNF ergeben. Also lautet die Miminalform demnach p(3) = x1 x3 x4 ∨ x1 x2 ∨ x2 x4