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