So, also heute machen wir jetzt mit den Schaltfunktionen weiter.
Vorgestern hatte ich ja so dieses Kapitel ganz kurz eigentlich nur angefangen.
Dort als eigentlich erste Darstellung zu Schaltfunktionen
eben erstmal das ganz normale Auflisten von Argumenten und Funktionswert
in Form seiner Funktionstabelle gezeigt
Und wie gesagt, dann eben nochmal darauf hingewiesen,
dass man da immer, sagen wir mal,
diese Unterscheidung hat zwischen Verhaltensbeschreibung. Das heißt,
wenn ich jetzt eben beschreibe, wie das getan werden soll,
wobei das ja zumindest umgangssprachlich immer das Problem und Mehrdeutigkeit hat.
Und als anderes dann eben Strukturbeschreibung,
wo ich dann eben im Prinzip sowas wie irgendwelche Gebranchenausdrücke habe,
aber eben auch grafische Beschreibungen,
wie sie uns dann im Kapitel 11
letztendlich dann also auch zuhauf mit begegnen werden
Gut, wenn ich jetzt Schaltfunktionen beschreiben möchte,
beziehungsweise um überhaupt, jetzt mal jetzt wieder,
um das Ganze ein bisschen formal auch beschreiben zu können,
ist hier jetzt erstmal definiert, also eigentlich, was eine funktional vollständige Basismenge ist.
Da geht es eben auch darum, dass also das,
was man mit diesen Chartfunktionen ja macht oder beschreibt,
ist ja im Prinzip eine Abbildung von Argumenten aus dem Raum
GF2 in den Raum GF2. Demzufolge muss ich jetzt dafür dann
eben auch die beiden dort benötigten Funktionen irgendwie zur Verfügung stellen können.
Das heißt also einmal sowas wie eine Addition in GF2 definiert eben
durch das Exklusiv-Oder und einmal eben so etwas wie eine Multiplikation,
was in GF2 definiert ist, durch die Ohrenverknüpfung.
So, wenn ich jetzt eben Beschreibungsmöglichkeiten habe,
die ich jetzt durch irgendwelche Agebranchen oder sonstigen Umformungen quasi so umsetzen kann,
dass ich diese beiden Funktionen beschreiben kann, sind diese Beschreibungsmöglichkeiten dann funktional vollständig.
So, das, was uns dort jetzt rein praktisch begegnen wird,
also jetzt im Rahmen dieses Kapitels gerade,
beziehungsweise was wir dann also ja schon ganz oder relativ am Anfang also auch schon kennengelernt haben,
ist ja im Prinzip die Bulsche Algebra, wo ich als Funktionen habe und oder und nicht.
Und damit kann ich dann eben beispielsweise jetzt durch entsprechende Ausdrücke,
Gudas und ist sowieso klar und das exklusiv oder lässt sich
dann eben entsprechend über den Schaltal gewaschen Ausdruck daraus dann eben auch ableiten.
Eine andere Form, die häufig dann auch genommen wird,
die dann im Laufe dieses Kapitels auch noch auftaucht,
ist die sogenannte Read-Maller-Form, wo jetzt keine Negierung mehr habe.
Dafür dann aber und exklusiv oder,
und dann brauche ich noch die Eins als eine Funktion,
weil damit wird dann letztendlich sowas wie eine Negierung realisiert.
Und hier ist eigentlich nur am Rand noch mit erwähnt,
das, was technisch jetzt eigentlich wieder so ein bisschen relevanter sind,
sind dann also Gatter mit negierten Ausgängen.
Das heißt, ich habe jetzt nicht einen Unkart,
sondern einen nennt, Oder ich habe dann eben nicht ein Ohr,
sondern ein Nore. Und da ist es eben so,
dass also im Prinzip ein End mit einem legierten Ausgang,
also ein End-Cutter, insofern funktional vollständig ist,
als dass ich damit über entsprechende Ausdrücke sowohl ein Und bilden kann,
nämlich einfach ein Land mit einer Negierung danach.
Negierung kriege ich einfach dadurch,
dass ich quasi bei einem nennt, beide Eingänge gleich beschaltet,
dann ist das nichts anderes als einfach eine Negierung dieses Eingangs.
Und ein Oder kann man sich dann eigentlich herleiten,
wenn man das nach den D-Morgen-Regeln umformt,
wo ich jetzt quasi aus einem Ausdruck beispielsweise A und B das Ganze negiert,
dass Umsätze in Nicht-A oder Nicht-B. Und damit kann ich dann also mit einem nähen oder einem Norgat,
da hätte ich es mir im Prinzip auch so eine funktional vollständige Basismenge.
Das ist doch dann die vollste Bruder.
Also die Frage weiß also,
ob das ein Äquivalent zum Oder ist und gut,
da kommen wir jetzt einfach hier über die Funktionstabelle gehen und sagen,
also wenn ich jetzt hier meine vier Möglichkeiten bei zwei Eingangsvariablen habe,
beim Oder habe ich halt,
wenn mindestens eine Eins da drin ist,
eine Eins am Ausgang
Und beim Nant kann ich jetzt sagen,
dass es also quasi ein Und mit einem negierten Ausgang und
erzählt mir nur eine Eins, wenn beide Eingänge eins sind.
Eins und eins. Das heißt, in dem Fall
hätte ich beim Und eine Eins beim Nant eine Null.
Und in allen anderen Fällen habe ich eine Eins.
Das heißt also, und Garta wurde, oder ein
Und als Schaltgabe Aldobascher Ausdruck würde jetzt ja,
wenn mindestens eine Null drin ist,
immer eine Null am Ausgang erzeugen,
das Ganze dann negiert,
demzufolge dann
eine Eins
Technisch relevant, deshalb war das, was wir heutzutage,
na heutzutage eigentlich, sagen wir mal so, seit den Verbieten,
nein, Mitte der 90er Jahre eigentlich üblicherweise als Schaltungstechnik verwenden,
also die sogenannte Zemos-Schaltungstechnik, muss man sehen, also vielleicht ganz,
ja, im Laufe des nächsten Kapitels und sonst,
also ganz am Ende der Vorlesung,
wo ich noch so ein bisschen optionales Material habe,
werde ich dann also noch so ein bisschen was vielleicht noch zur Realisierung von irgendwelchen Schaltfunktionen technisch erklären und da ist es eben so,
dass das, was man also in der C-Maus-Schaltungstechnik eigentlich immer hat,
sind typischerweise Gatter,
die dann eben am Ausgang sowas wie eine Gesamtnegierung beinhalten.
Deswegen technisch wird uns also in einem Computer immer nur nennt oder Norbegegnen,
Avaninen und oder und oder, beziehungsweise wenn ich das brauche,
ist das ein Land, mit einer Invertierung dahinter und dann hätte ich letztendlich einen Rundratter.
Gut, dann hatte ich letztes Mal ja auch schon ganz kurz angedeutet,
das, was man dann eigentlich jetzt bei irgendwelchen Schaltagebarischen Ausdrucken ja auch mit benötigt,
ist sowas wie Normalform,
weil wenn ich jetzt also irgendwie einen relativ komplizierten Ausdruck beschreibe,
habe ich letztendlich unendlich viele Möglichkeiten, den zu beschreiben.
Auch einfach aufgrund der Tatsache, dass ich jetzt eben irgendwelche Beschreibungsformen machen kann,
wo sich also Therme gegenseitig aufheben oder nichts weiter bewirken.
Also wenn ich jetzt irgendeinen Ausdruck habe und sage,
und eins ändert das erstmal nichts,
das kann ich also beliebig verlängern und das kann ich dann also auch noch ein bisschen schlauer formulieren,
dass man das jetzt also nicht so direkt auf Anhieb sieht.
Und deswegen ist es dann eigentlich ganz schön,
wenn man jetzt sagen könnte, eine Schaltfunktion,
habe ich eben sowas wie eine normalisierte Darstellung,
wo ich dann eben auch sehen kann, ob zwar gegebene Funktionen dann auch wirklich identisch sind.
Hier nur als Beispiel genannt, wenn ich,
jetzt das Wiedersprung zurück in die Schulmathematik,
wenn ich jetzt also im Prinzip reelle Funktionen habe,
da hat man ja typischerweise als Beschreibung sowas wie eine Potenzreihe,
also sprich eine quadratische Funktion beschreibe ich immer als Amal-X-Quadrat plus B mal
X plus
Und damit habe ich dann eigentlich alle quadratischen Funktionen erschlagen,
wenn jetzt also irgendwie einen höheren Grad haben, wird das Ding dementsprechend länger.
Nicht das ist das, was er sich hier unten mit beschrieben ist.
Und das ist eigentlich eine eindeutige normalisierte Darstellung.
Sowas ähnliches möchte ich jetzt eben eigentlich auch für Butschefunktionen haben.
Dazu hat man dann eben eigentlich als Idee,
dass man sagt, ich mache eigentlich was ähnliches,
dass ich sowas wie Elementare Basisfunktionen habe und diese Basisfunktion dann mit Faktoren wichten kann.
Das heißt, sie sind vorhanden oder sind nicht vorhanden.
Und das Ganze wird aufsummiert. Nicht bei reellen Funktionen werden
die Basisfunktionen quasi x hoch 0, x hoch 1,
x hoch 2 und so weiter. Und die Koeffizienten,
also das, was sie jetzt A ist,
wären oder in meinem Beispiel dann eben A,
B und C, wäre dann eben das,
was ich dort dann als Faktor drin habe bei den Bullshen-Funktionen,
Sind die Koeffizienten dann eben entweder 0 oder 1 und ich habe dann eben einen Satz unterschiedlicher Basisfunktionen,
je nach Art der Normalform.
Das ist das, was uns jetzt gleich in den nächsten zehn Minuten noch weiter beschäftigen wird.
Gut, eine Normalform habe ich jetzt eben letztendlich,
wenn ich funktional vollständige Menge von Verknüpfung habe, wenn ich zwei Operationen habe,
eine Operation, additiv eine Operation, multiplikativ, die war es assoziativ sind.
Und ich beschreibe das Ganze, das ist auch nichts anderes als das,
was vorhin als Summe stand, jetzt einfach nur entsprechend aufgegedröselt,
dann eben als Basisfunktion, mal koeffizient, plus nächster Basisfunktion, mal koeffizient und so weiter.
Das wäre dann eben eine Normalform bezogen auf die Menge der jeweiligen Basisfunktionen. So,
um jetzt Funktionen zu beschreiben mit in Stellen,
brauche ich dann eben entsprechend zwar auch eine Basisfunktion und ich habe dann eben die Möglichkeit,
zwei hoch, zwei hochendmögliche Funktionen zu beschreiben,
das ist auch nochmal wieder zurück auf das,
was ich ganz am Anfang eigentlich bei der Butschen Algebranche mal gesagt hatte,
nicht, wenn ich also sage,
ich habe jetzt beliebige Schaltfunktionen oder beliebige Funktionen,
binäre Funktionen mit drei Variablen, gibt es,
also die waren doch dann nochmal aufgelistet,
dann eben zwei,
hoch zwei,
hoch drei mögliche Funktionen
Die man dort dann bilden könnte. Gut, von den Normalformen
gibt es drei Stück. Das erste ist die disjunktive Normalform,
auch im Vorhinein immermals DNF abgekürzt. Wird gebildet aus Minterm,
diese minterme bilden quasi die Basisfunktion und ein Minterm ist eine
Unverknüpfung aller Schaltvariablen, die entweder negiert oder nicht negiert auftreten
Und die desjuktive Normalform ist dann eben die desjuktive Verknüpfung.
Das heißt, die Oder-Verknüpfung à la Mintherme,
die als Funktionswert eins ergeben. In der Literatur findet man
das dann auch oft immer als kanonische Disjuktive Normalform, im Englischen,
hat sich da dann immer als Begriff Some of Products eingebürgert.
Ergibt sich einfach dadurch, dass im Intern ich eine Unverknüpfung habe.
Das heißt, die Multiplikation mit der Desjunktion, dass er
jetzt hier mit der Oder-Verknüpfung wird dann quasi die Summe gebildet.
Das heißt, das ist das Ganze. So,
das ist jetzt hier natürlich erstmal vergleichsweise wenig anschaulich.
Was ist damit gemeint? Nehmen wir jetzt hier als Beispiel
drei Variablen, die wir jetzt betrachten,
also um jetzt Funktionen mit drei Variablen zu beschreiben.
Die Mintherme dafür wären dann immer hier
rechts die entsprechenden Ausdrücke
Und die Definition hier sagt ja, also mintern ist also die Verknüpfung aller Schaltvariablen,
wo die Funktion letztendlich als Funktionswert 1 liefert.
So, und was macht jetzt hier eigentlich so einen Ausdruck? Das heißt,
wenn ich jetzt hier beispielsweise den dritten Minter nehme,
das heißt, zugehörig zu X3 ist gleich 0,
X2 ist gleich 1 und X1 ist gleich 0,
der Minterm ist dann eben X3 nicht und X2 und X1
Genau bei dieser einen einzigen Kombination, nämlich X3 ist 0
X2 ist 1 und X1, gleich 1,
liefert dieser Ausdruck am Ausgang eine 1.
Bei allen anderen Kombinationen liefert dieser Ausdruck eine Null. Das heißt,
hier der Mintherm in dieser Spalte heißt nichts anderes für genau diese eine Eingangskombination,
da halte ich als Funktionswert 1, für alle anderen null.
So, die werden jetzt alle in der Normalform oder verknüpft
Das heißt, wenn ich jetzt irgendeine beliebige Schaltfunktion habe,
also nehmen wir beispielsweise, die hier aus diesem Funktionstabelle,
die ich also eingangs ja auch immer aufliegen hatte,
wo also hier an diesen drei Stellen eine Eins ist,
dann kann ich sagen, die disjunktive Normalform erzeuge ich mir dadurch,
dass ich mir jetzt quasi hier raussuche,
an welchen Stellen in der Funktion ich eine Eins habe.
Und für diese Zeile dann den entsprechenden mintern aufschreibe, Komme ich leichter als.
Aufschreibe und oder verknüpfe. Und das heißt,
dieser Eins hier wird erzeugt,
indem ich also zu diesem Ausdruck den Minterm habe,
bilde ich dadurch, dass ich sage, an der Stelle,
wohin eine Null steht, muss ich die Eingangsvariable invertiert haben.
An der Stelle, wo eine Eins steht,
muss sie nicht invertiert sein.
Das ist das, was hiermit angedeutet sein soll.
Und dann kann ich das einfach ablesen. Dann wäre also
hier der Zugehörige Minterm X-3 nicht und X-2 und X-1
Das ist genau dieser Ausdruck. Oder jetzt so nehme ich die nächste eins.
X-Drei nicht und X-2 und X-1. Das ist dieser Ausdruck.
Oder, und dann eben hier zu den Zugehörigen Ausdruck. So,
und hiermit habe ich dann eben letztendlich beschrieben einfach nur,
an welchen Stellen ich in der Funktionstabelle eine Eins erzeugen kann.
Die Eins erzeuge ich mir eben über den Zugehörigen Mintherm.
Das Ganze wird oder verknüpft. Das heißt,
ich habe am Ausgang durch den Dehnmintern D1 oder durch den mintern D1 oder durch den mintern D1.
Und in allen anderen Fällen liefert mir dieser Ausdruck eben immer eine Null.
Damit habe ich diese Schaltfunktion dann eben wirklich so Schaltalgebarsch beschrieben,
beziehungsweise dann eben als disjunktive Normalfonds beschrieben.
So, jetzt war eben eine Frage, hat die sich schon ergeben oder?
Japan 1. Aber wenn ich das bei den Vierer,
Hier kommt die Eins. Achso, bei den,
also es ging jetzt hier nochmal um darum,
also wie sich diese Mentherme jetzt ergeben. Und ja,
dafür geht dann eigentlich die, ich sag mal,
diese Vorschrift damit ein, dass ich sage, an der Stelle,
wo also hier quasi in meiner Beschaltvariablen ich eine Null habe,
dass ich dort dann, also quasi die entsprechende,
den entsprechenden Ausdruck, für das X eben negieren muss.
Das heißt, hier unten habe ich ja eben genau stehen X3 nicht und X2 und X1 nicht.
Also dieser Strich darüber ist ja eine Legierung. Beziehungsweise,
also hier hätte ich jetzt nochmal komplett dementär,
man könnte dann also auch hier in die Tabelle gehen und das daraus auslesen.
Aber im Prinzip ist das mit diesen Mintermen eigentlich von der Idee her wirklich immer genau nichts anderes,
als dass ich sage, also an den Stellen,
wo die Variablen eine Null ist,
muss ich oder eine Null sein soll,
um den Minterm zu bilden, muss ich den Ahrgang negieren,
damit ich dann, weil das wird ja unverknüpft,
nicht und erzeugt am Ausgang immer genau dann nur eine Eins,
wenn der Eingang eins ist, also muss ich da eine Eins erzeugen.
Deswegen also dann hier diesen Wert entsprechend negieren.
Das ist da eigentlich immer die Idee dahinter. Gut,
dass wir jetzt quasi hier für dieses Beispiel die entsprechende Bereichnung im Moment
haben und die analog dazu kann man das jetzt eben wirklich für beliebige Schaltfunktionen mit in Eingangsvariablen,
also aus nach diesem Schema entsprechend machen,
wobei natürlich dann je nach Anzahl der entsprechenden Einstellen,
dass dann also hier dann also auch ein entsprechend langer Ausdruck wird.
So, das ist die desjuktive Normalform. Jetzt gibt es
noch verkürzt dazu allgemein desjuktive Form oder dann eben im Englischen heißt es dann genauso Some of Products,
wo ich dann eben sage, ich muss jetzt nicht zwingend Mintherme nehmen,
Sondern ich kann da dann schon eine Unverknüpfung von Schaltvariablen haben,
die jetzt eben direkt oder negiert auftreten.
Aber es müssen jetzt nicht mehr alle Schaltvariablen auftreten.
Mathematisch entspricht das eigentlich der Zusammenfassung. Das heißt, eine
Minimierung von Thermen. Und hier eben auch nur angemerkt,
also diese disjunktive Form ist eben keine Normalform.
Das heißt, sie ist nicht eindeutig.
Nehmen wir hier nochmal wieder dieses Beispiel. Dann wird das,
denke ich mal, klarer, was damit gemalt ist.
Die disjunktive Normalform hatte diese drei Therme
Denn jetzt kann ich natürlich sagen,
also einfach nach den Rechenregeln der Buhlschen Algebra.
Ich möchte das Ganze ein bisschen kürzer und kompakter geschrieben haben.
Wo kann ich hier vielleicht was zusammenfassen?
Wenn ich mir die ersten beiden Therme betrachte,
habe ich hier X3 nicht und X2 und X1 nicht.
Und hier habe ich X3 nicht und X2 und X1.
Jetzt kann man also einfach sagen, gut, wunderbar.
X reinigt und X2, klammere ich aus.
Demzufolge hätte ich dann X3 nicht und
Und, Klammer auf, X1 nicht oder X1. So,
X1 nicht oder X1 heißt, wenn die Variable Null ist,
habe ich aus dem X1 nicht nur eins,
wenn die Variable 1 ist,
habe ich aus dem X1 D1. Das heißt,
das Ergebnis ist immer eins.
Also,
beziehungsweise ich kann das mal kurz an der Tafel machen,
dann wird das vielleicht klarer,
ich mir hier
einen Abstotter
So, also das war die Ausgangssituation.
Und jetzt sage ich, gut wunderbar. Diesen Teilterm habe
ich hier überall mit drin.
Also X-3 nicht und
Und X1 nicht. Oder X1. Und dieses hier liefert mir
konstant eins. Habe ich also X3 nicht und X2 und
eins, irgendwas und eins. Ist immer noch irgendwas,
kann ich das also hier komplett weglassen und lande dann
eben bei X3
nicht und
Was dann letztendlich hier unten dieses ist. Eine Frage. Ja,
ja, ja, also das ist ja das,
was im Prinzip dann, also diese Rechnung zugrunde liegt,
dass ich dann eben einfach aus der bultschen Alge war,
die Rechenregeln, also in diesem Fall dann eben,
nicht wenn ich sage, ausklammern,
also distributiv gesetz ja dann eben auch entsprechend anwende und dann eben sage,
okay, damit kann ich das zusammenfassen,
damit kann ich das dann entsprechend umformen,
schalt Algebrage und das entsprechend minimieren.
Zweite Frage
Also die Frage war jetzt,
also ob ich hier dieses noch weiter minimieren kann,
das wird nicht hinhauen, weil ich hier also X-3 nicht
und X-2 habe und hier habe ich X-3 und X-2 und X-1 nicht.
Und das geht dann eben ja nur, wenn dieser Therm dann also
entsprechend gleich wäre. Aber was also eben auch auftritt,
ich hatte schon gesagt, ist juktive Form ist nicht eindeutig.
Ich kann das auch anders zusammenfassen. Ich kann also auch hier den 1. und den letzten Zusammenfassen,
indem ich sage, ja gut,
die unterscheiden sich jetzt hier irgendwie in X3 und sind da dann identisch,
dann kann ich da quasi das X3 rausrechnen und er halte
dann eben X2 und X1 nicht und hätte hier dann eben noch diesen mittleren Therm über.
Nicht, das ist also der Unterschied zwischen der Allgemeinen minimierten Form,
die nicht eindeutig ist und eben dieser Normalform,
die dann zwar deutlich länger ist, aber dadurch,
dass ich da eben wirklich alle Mindherme auch komplett drin stehen habe,
eindeutig ist.
Analog dazu kann ich jetzt eigentlich genau das Gleiche,
ich sag mal, mit invertierter Logik machen,
als konjunktive Normalform, so dann KNFA abgekürzt.
Dabei bin ich erst mal als Basisfunktion Max-Therme, Max-Therm ist jetzt die Oder-Verknüpfung aller Schalt-Variablen.
Also bei Min-Therm hatte ich eine Unverknüpfung aller Schalt-Variablen.
Bei Max-Therm habe ich die Oder-Verknüpfung aller Schalt-Variablen und die Konjunktive
Normalform wird dann eben durch die konjunktive Verknüpfung,
das heißt durch einen Und, all dieser Max-Dame gebildet.
So, was kann ich letztendlich jetzt mit der Oder-Verknüpfung erzeugen? Bei den Minthermen war es ja so,
dass ich hier quasi immer danach geguckt habe,
wo erzeuge ich hier Einsen und bilde daraus dann die Mentherme,
weil da hatte ich ja quasi Die Schaltvariablen unverknüpft und nur in einem einzigen Fall,
nämlich wenn beide jeweils eins sind,
erzeuge ich am Ausgang auch eine Eins.
Werder-Oder-Verknüpfung. Das heißt, bei den Max-Stamm ist es quasi
genau umgekehrt. Da gucke ich hier in die Tabelle,
wo die Nullen stehen,
weil ein Oder hat immer nur genau dann am Ausgang eine Null,
wenn sämtliche Eingänge null sind.
In allen anderen Fällen,
wenn also mindestens einer der Eingänge eine Eins erzeugt,
erzeugt mir das Oder
auch am Ausgang
eine Eins
Das ist also das, was jetzt hier passiert.
Analog zu dem anderen eigentlich genau aufgebaut.
Die Max-Therme jetzt hier für drei Eingangsvariablen,
nicht nur jeder dieser Therme nimmt letztendlich am Ausgang
nur genau bei dieser einen einzigen Eingangskombinationen Wert null an.
Also bleiben wir hier bei dieser dritten Zeile
X3S 0 X2S 1 und X1 des 1. Wenn ich nehme X3 oder X2 nicht oder X1.
Nur bei genau dieser einen einzigen Eingangskombination erzeuge ich damit am Ausgang eine Null.
Bei allen anderen Eingangskombinationen erzeugt mir dieser Therm am Ausgang eine 1.
Nicht, dass wir jetzt also hier der Max Therm,
wird quasi dadurch gebildet, dass ich dann eben sage,
wenn ich am Eingang Oder hier für die Schaltvariable eine Null betrachtet,
dann entspricht das also quasi dem XI,
wenn ich da eine Eins vorfinde,
entspricht das dem XI negiert.
Bei den Mintern ist es genau umgekehrt. So,
für dieses Beispiel dieser Funktion würde ich jetzt eben quasi als
konjunktive Normalform einfach eine Funktionstabelle nachgucken, wo habe ich hier eine Null stehen.
Das ist also hier in diesen fünf Fällen der Fall,
müsste dann hier also diese Fünf-Terme-Me
hier irgendwie erzeugen
Was in diesem Fall dann eben dadurch passiert,
dass ich eben entweder hier in die Tabelle gucke oder das
dann eben gleich nach dieser Idee hier mit dieser Zuordnung mache,
dass ich dann eben sage,
nehmen wir also beispielsweise hier den zweiten Term, also das heißt,
dieser Ausdruck, also wie kriege ich hier die Null?
X3 soll Null sein, das heißt,
das ist dann X3 nicht invertiert oder X2 nicht invertiert oder,
sonst habe ich hier eine Eins, demzufolge musste die Schaltvariable invertieren oder X1.
Und das ist dann eben genau der Zugehörige Max Therm dazu. Der liefert mir eben,
wenn ich jetzt hier eine beliebige Eingangskombination von den acht möglichen nehme,
für genau diesen einen einzigen Fall am Ausgang eine Null in allen anderen Fällen liefert mir diese,
liefert mir dieser Therm eben eine Eins.
So, die werden dann eben alle unverknüpft, dass wir dann quasi dazu jetzt die konjunktive Normalform. Analog zur disjunktiven Normalform bzw. allgemein disjunktiven Form kann ich eben auch hier sagen,
ich kann hier irgendwelche Minimierungen mir zusammenrechnen,
mit den Regeln der Bulschen Algebar,
wo ich dann eben zu kürzeren Formen komme,
genauso wie bei dem anderen, auch das ist dann letztendlich nicht eindeutig,
wenn ich das jetzt also hier an dem Beispiel zum Beispiel mache,
jetzt hier die ersten beiden Therme betrachte, die unterscheiden,
sich hier in X-1, was ich hier nicht negiert,
hier negiert habe, kann man demzufolge dann mathematisch,
ähnlich wie dieses dann rausrechnen.
Damit erhalte ich dann X-3 oder X-2. Damit habe ich diese beiden Therme abgedeckt,
um den jetzt hier zu betrachten,
könnte ich den hier beispielsweise mit dem ersten zusammen verrechnen,
die unterscheiden sich hier jetzt in X3,
X2 und X1, sind jeweils identisch.
Auch da kann ich dann das X3, beziehungsweise das X3 legiert, rausrechnen.
Dann habe ich diesen Term. Und anschließend kann ich aus diesen beiden Termen,
die sich jetzt also hier in X2 unterscheiden, dieses hier errechnen.
Das ist einfach jetzt eine entsprechende Umform mit Distributivgesetz, Bulsha Algebra,
also analog zu dem hier, wo ich dann im Prinzip dann immer zu sowas komme.
So was man hier natürlich schon sieht, so was,
beziehungsweise diese Minimierung hier von irgendwelchen Max-Term,
beziehungsweise von irgendwelchen Minterm jetzt,
also sprich irgendwelchen Konjunktiven oder destributiven Normalformen ist,
gerade wenn ich jetzt so ein bisschen größere Schaltergeberage ausdrücke habe,
mit entsprechend vielen Teilen hier,
also immer irgendwie so ein bisschen raten und stochen im Nebel,
dass man immer guckt nicht,
also was kann ich jetzt hier vielleicht
irgendwie günstig zusammenfassen
Und man kommt dann also vielleicht zu einer eleganten Lösung,
vielleicht auch nicht, weil, wie gesagt, das,
was man daraus erhält, ja dann eben auch nicht mehr eindeutig ist.
Und das ist dann also so ein bisschen,
also auch das Problem jetzt gerade bei der Minimierung von irgendwelchen Schaltallgebranchen ausdrücken,
dass wenn die entsprechend groß werden, dann,
sagen wir mal, diese Umformung nach der Bullschneider gebracht,
so wie wir das jetzt also quasi immer rechnen würden,
eben nicht so sonderlich gut funktionieren.
Da gibt es dann eben doch etwas elegantere Verfahren,
die ich dann also nachher gleich noch vorstellen werde
So, die dritte Normalform ist dann die sogenannte Read-Muller-Form.
Das ist die additive Verknüpfung à la Read-Muller-Therme mit dem Funktionswert 1.
Da gibt es dann quasi feste vorgegebene Basisfunktionen,
die dann eben vorhanden sind oder nicht vorhanden sind und dann
alle exklusiv oder verknüpft werden.
Liest sich jetzt also erstmal so ein bisschen unübersichtlich,
sieht also im Vergleich zu den anderen Formen mit der Bulschen Algebor
auch erstmal etwas unübersichtlicher aus
Entspricht aber eigentlich so ein bisschen mehr dem mathematischen Modell von
dem GF2 unter XOR-Operation und für einige mathematische Funktionen,
ist so eine Red Mallar-Form, also deutlich besser auch geeignet.
Gut, was sind die Basisfunktionen dieser Riedmallar-Form? Weil die
sind jetzt also nicht so einfach wie bei Konjunktiver oder Desjunktiver Normalfonds.
Da habe ich immer diese Mintherme oder Max-Therme,
wo ich sagen kann, okay,
für in Variablen habe ich dann eben alle Andy,
entsprechend entweder negiert oder nicht negiert
Und dann eben und oder verknüpft sind. Sondern bei der Riedmala-Form sind die Basisfunktionen,
wenn ich keine Variable habe, es ist eins.
Wenn ich eine Variable habe, ist es eins und X1.
Wenn ich zwei Variablen habe, ist es eins und X1 und X2 und X2 und X1.
Da muss ich jetzt noch dazu sagen, das ist jetzt hier auch mal so ein bisschen Eine Schreibweise,
die man dann also auch gerne macht,
also für in einer Tafel habe ich das eben auch schon fast so angefangen,
wenn man so Schaltalgebranche Ausdrücke hat, ein bisschen längere,
macht man es häufig so,
dass man quasi die Unverknüpfung quasi einfach weglässt,
die Therme dann direkt hintereinander schaltet und das entspricht dann quasi sowas wie das und das und das,
also sprich der Unverknüpfung,
man lässt es dann einfach weg und schreibt dann also nur noch explizit das oder damit rein.
Das ist also das, was letztendlich hier dann nämlich auch dann dahinter steht. Das heißt,
dass es dann eben eigentlich hier dann auch sowas wie ein Unverknüpft X3X,
2 und X1. So generell werden diese Redmaler-Basis-Funktionen nämlich schrekorsiv gebildet,
dass ich sagen kann,
ich nehme die Funktionen der vorherigen Stufe und hänge anschließend nochmal alle Funktionen der vorherigen Stufe mit dran,
wo ich dann meine zusätzliche neue Schaltvariable quasi dann auch wieder mit und rein verknüpft habe.
Das sieht man also hier ganz gut. Also bei zwei
war er oder bei einer Variable habe ich eins und X1.
Für zwei Variablen schreibe ich das erst mal so ab.
Und anschließend wird das Ganze dann nochmal mit der neuen Schalt
variablen X2 jeweils unverknüpft. Dann muss ich also eins und X2,
das ist X2 und hier dann X1 und X2,
das ist dann dieser Terrain.
Nicht für drei Variablen, auch alles,
was man vorher schon hatte,
eins zu eins abschreiben
Und anschließend alles, was ich hier dann letztendlich stehen habe,
dann nochmal mit der neuen Schalt-Variablen auch wieder verknüpfen.
Und da halte ich dann eben x-3 mal eins,
ist dieser Term x-3 mal x-1, ist dieses x-3 mal x-2,
ist dieses und eben ein Term, wo dann alle drei auftauchen.
Nicht, dass also die Art und Weise,
wie das Ganze dann letztendlich rekrusiv gebildet wird,
wie man aber dann vorgeht.
So, wie komme ich jetzt,
wenn ich also jetzt irgendeine beliebige Shart-Funktion habe zur Riedmaler-Form
Da gibt es jetzt im Prinzip zwei Möglichkeiten der Umrechnung.
Die erste Möglichkeit mit den Mitteln der Bulschen Aalgebra.
Das, was also hier gleich als Beispiel vorgeführt wird.
Zweite Möglichkeit, im Prinzip wenn über Matrix-Multiplikation, Matratzenberechnung. Auch dazu folgt dann gleich noch ein Beispiel. Wenn ich das also jetzt umrechne,
war also typischerweise, werden uns also irgendwelche Schadfunktionen nicht in Riedmaler-Form begegnen,
sondern wir als Menschen denken eigentlich immer irgendwie in der Gulschen Algeboren,
da habe ich immer irgendwas mit und und oder Verknüpfung,
bilde dann in der Regel so was wie Desjunktive oder konjunktive Normalform,
um daraus jetzt eben einen Ausdruck in Riedmaler-Form zu machen,
wird das dann eben einfach mit den Mitteln im Bulschen Algebor umgerechnet,
wobei man dann also folgende drei Tricks kennen sollte,
Negierung,
also ein Nicht-A ist im Prinzip A
exklusiv oder eins
Das ist also im Prinzip nichts anderes als eine Regierung. Ist klar,
wie das funktioniert, weil ich hatte hier immer schon exklusiv,
oder was ist das? Was war das? Langes Zeher,
Kapitel 4 oder so ähnlich war das, ne? Also,
nehmen wir hier wieder die möglichen Kombinationen für zwei Schaltvariablen,
1-0, 1-1,
nicht exklusiv oder erzeugt man eben hier Wenn sechs, zwei,
X-1 XO beziehungsweise hier ist es jetzt immer so geschrieben.
Erzeugt mir eben genau dann Ausgang, eine Eins,
wenn eben genau eine von den beiden eins ist,
aber nicht beide.
Also beim normalen oder wer an dieser Stelle hier auch noch eine Eins.
So, als Negierung kann ich das jetzt eben genau deswegen missbrauchen,
wenn ich sage,
gut,
irgendwas exklusiv oder eins
Wäre diese Zeile und diese Zeile, meine Eingangsvariable ist null,
XO1, erzeugt man im Ausgang eine Eins.
Meine Eingangsvariable ist 1, XO1, erzeugt man im Ausgang eine Null.
Also damit habe ich da dann im Prinzip eine Gegierung gemacht.
Für die Dissunktion, also das Oder,
kann ich dann eben sagen,
statt A oder B kann ich rechnen,
A exklusiv oder B
exklusiv oder A und
Auch das kann man sich entsprechend für so eine Funktion
dann mal herleiten, wieso, weshalb das funktioniert.
Gut, und was man dann auch noch braucht,
ist, dass A, X-R-A 0 ergibt. So,
wenn ich jetzt hier irgendeine Schaltfunktion habe,
beispielsweise X-1 nicht oder X-2, das Ganze geklammert und X-3,
würde ich das dann eben hiernach dadurch umrechnen, dass ich sage,
gut, ich muss hier erstmal diese Negierung Los, oder,
nein, also, als erstes hier, also quasi dieses Oda-Loswerden.
Nehme ich also hier diese Formel, sage dann,
an dem es Folge X1 nicht XO, X2, XO,
X1 und X2 immer noch geklammert und war X3. Anschließend muss ich dann also hier diese Negierung loswerden,
setzte also hier diesen Therm ein, erhalte dann eins,
exklusiv oder X1,
exklusiv oder X2,
der ist einfach nur abgeschrieben
Hierfür habe ich dann diesen Geklammertenausdruck und X war ja dann die gesamte Klammer zu und extra.
So anschließend kann ich sagen, okay, es gilt,
dass aus der Tiefgesetz, also die Klammern hier,
kann ich dann dem so vorwärts hier weglassen.
Hier wird das Ganze nochmal ausmultipliziert,
dann habe ich dann eben hier eins, XOX 1,
XOX 2, das ist dieses XOX 2, das ergibt sich dann,
also hier aus diesem Ausmultiplizieren von eins und X2,
XO, X1 und X2 und dann hier noch diese Klammer.
So, für diese beiden hier in der Mitte kann ich
jetzt nach dieser Formel sagen, das ist null,
kann das Ganze streichen.
Anschließend wird das X3 hier noch rein multipliziert und dann habe
ich dann eben X3, XO, X1 und X3.
Das ist hier und dann eben hier noch hinten den letzten Teil.
Also das ist jetzt natürlich im Schnelldurchgang von der fertigen Folie abgelesen,
aber das ist am Prinzip dann also ganz normale Umformung
eigentlich nach Bulschal gebracht
Wie gesagt, das ist die eine Möglichkeit, das umzurechnen,
die andere Möglichkeit ist dann im Prinzip jetzt über Matrix-Multiplikationen.
Nicht dazu kann man dann eben die Funktion F bzw. die Funktionstabelle,
also das heißt die desinktive Normalform in so einer Redmaler-Form,
umrechnen, indem ich dann also eine Transformationsmatrix aufstelle und das Ganze einfach miteinander multipliziere.
Und daraus erhält man dann eben einen koeffizienten weckt oder das heißt,
man erhält jetzt für die Redmaler-Koeffizienten Das waren diese hier,
quasi ein Vektor aus Nullen und Eins,
in der mir jetzt sagt, welcher von diesen Koeffizienten benutzt wird.
Das ist also das, was hiermit mit drin ist.
Hier in dem Beispiel würde das eben so aussehen,
dass also diese Transformationsmatrix ähnlich wie die so in Maler-Formen eigentlich auch rekursiv gebildet werden kann,
indem ich dann immer hier irgendwie so eine Dreiecks-Matratze nehme,
wo ich die von der vorherigen Stufe, also hier stehen habe, hier oben den frei lasse.
Bei A2 ergibt sich das dann eben,
dass ich quasi jetzt viermal, zweimal, zweimal Matriz zu nehmen,
nämlich also hier einmal A1, hier einmal A1,
hier einmal A1 und der hier oben bleibt und wieder leer,
also quasi einfach nur dieses Schema entsprechend weiter hochgerechnet und so weiter und so fort.
Warum das Ganze gilt,
dann eben auch hier einfach über die Rechenringe der Matrix-Multiplikation,
wo dann also hier im Prinzip wie jetzt über die,
für die Koeffizienten gelten muss, wenn die miteinander multipliziert werden,
dann halte ich die Identität.
Und ansonsten gilt dann eben für diese Koeffizientenweckbohren,
dass ich dann A, mal im Funktionsvektor rechne und ich das
dann eben hier entsprechend soweit aufgrund dieser Regel dann so rumformen kann.
Nicht, das wäre jetzt, dass jeder nochmal der große
Fall A3 und hier der generelle Fall, wie das rekursiv gebildet wird.
Rein praktisch das Ganze jetzt mal Nochmal hier an dem Standardbeispiel dieser Schaltfunktion mit drei Variablen gezeigt.
Also zum einen kann ich das jetzt eben mit diesen Rechenregeln,
wie eben an diesem ganz kleinen Beispiel gezeigt,
aus der Disjunktiven, konjunktiven Normalform über die Bulsche Algebra ausrechnen.
Ich kann das aber eben auch jetzt über so eine Matrix-Multiplikation ausrechnen.
Das ist im Prinzip jetzt hier nämlich mit drauf,
wo ich sage, die Funktion, jetzt hier als Kurzschreibweise,
entsprecht diesen Vektor. Das heißt,
in dem Vektor habe ich jetzt einfach nur der Reihe nach durchnummeriert,
0-0, 1-1,
also sprich von oben nach unten entsprechende Stellenwertigkeit, dann die jeweiligen Funktionswerte.
Das ist also im Prinzip dieser Vektor,
also eben eine Kurzschreibweise eigentlich nur für die Funktionstabelle.
Für drei Eingangsfahriablen muss ich dann diese Transformationsmatrix A3 erstellen.
Das war also Dieses Tal hier. Das wird jetzt hiermit modipliziert
. Ich fuhr ich dann eben einfach ganz normal Matrix-Multiplikation,
Zeile mal spalte und das Ganze dann eben entsprechend dann aufsummiere und dann eben hier als Ergebnis erhalte,
so ein Vektor, wo hier eine Eins gesetzt ist und hier eine Eins,
alles andere ist null.
Und daraus kann ich jetzt wieder ablesen,
welche Riedmala-Therme quasi jetzt von dem diesen Basisfunktionen eben benötigt werden,
nämlich der dritte und der letzte.
Das heißt, da brauche ich jetzt also hier wieder diese Liste,
wo ich jetzt also für drei Variablen hier meine Achtrick-Maller-Therme habe.
Und der dritte ist X2. Und hier der achte wäre dann eben X3,
X2, X1. Und das ist dann in diesem Fall dann nämlich
also auch das Ergebnis oder die Darstellung dieser Schaltfunktion dann als in Riedmala-Form.
Also hier eben dann auch nochmal als Anmerkung,
häufig ist es so,
dass also diese Riedmala-Beschreibung eben kompakter sind als die
entsprechenden konjunktiven,
beziehungsweise das motive Normalform
Gut, das sind jetzt eigentlich erstmal so die mathematischen Verfahren,
die ist eigentlich aller irgendwo auf der Bulschen Algebra aufbauen.
Was man teilweise aber auch macht oder benutzt,
sind dann eigentlich irgendwie sowas wie grafische Beschreibungen,
wo dann im Prinzip die Schaltfunktion eigentlich als Baum oder als Graf beschrieben wird.
Jeder Knoten entspricht dann eigentlich einer Variablen und ich kann dann
von jedem Knoten aus dann eben in eine von zwei
Richtungen verzweigen
Als Informatiker würde man das sein. Also wenn ich das irgendwo im Programm habe,
dann also wie so ein If-Stand-Ls, irgendwie so eine Verzweigung aufbauen.
Und wenn ich das dann also wirklich als vollständigen Baum
aufbaue für meine gesamten möglichen Kombinationen beziehungsweise Verzweigung,
dann entspricht das letztendlich einer Funktionstabelle.
Nicht das Ganze kann man dann auch ein bisschen vereinfachen,
indem also redundante Knoten beziehungsweise komplett redundante Äste dann
zusammengefasst werden können
Als Beispiel sei jetzt hier mal eine andere Funktion von drei Eingangsvariablen
genommen. Eigentlich ein multiplexer, als Schaltfunktion ist beschrieben,
A und C nicht oder B und C.
Umgangssprachlich macht diese Funktion nichts anderes, als dass ich sage,
wenn sie gleich null ist,
ist das Ergebnis A und wenn C gleich 1 ist,
ist das Ergebnis
Das ist eigentlich das, was dabei rauskommt. Also dann greife ich jetzt auch schon mal auf das übernächste Cup, nee, nächste, übernächste. Doch, nächste Kapitel dann schon vor. Multiplexer deswegen,
also das benutzt man dann also für irgendwelche Hardware-Elemente,
da noch rein praktisch, dass ich eben sage,
ich habe hier so eine Funktion, wo ich dann sage,
ich habe hier zwei Eingänge, A und B,
habe hier irgendwie einen Ausgang, nenne ich jetzt mal F,
und hier eine Steuervariable C und kann jetzt eben sagen,
das Ding ist also letztendlich dann nichts anderes als so ein Schalter,
wo ich sagen kann, entweder A,
wird an den Ausgang geschaltet oder B,
abhängig von diesem Steuerangang C. Und in dem Fall war das jetzt so,
dass wenn C gleich null ist, wird A weitergeschaltet,
wenn es C gleich eins ist,
wird B weitergeschaltet.
Wenn das jetzt also als Schaltfunktion beschrieben,
ist dann genau dieser Ausdruck
In der Hardware, das heißt, wenn man jetzt sagt,
das sind irgendwelche Leitungen, auf denen irgendwelche Signale wandern, gut,
das sind jetzt hier nur ein Bitbreite, aber ich kann natürlich auch sagen,
ich mache das Ganze entsprechend oft jetzt für meinen gesamten Datenbus,
kann man dort dann jetzt wirklich hardwareseitig dann eben auch irgendwelche Datenpfade quasi umschalten,
um dann eben zu sagen, was Eingang von der Alu werden soll,
wenn die jetzt also irgendwelche Sachen rechnet.
Nicht, also ist da ein Element, was man,
also wenn man das jetzt so ein bisschen auf Hardwarebezug nimmt,
dann also schon relativ häufig braucht, hier jetzt beschrieben,
einer Einbitch-Steuervariable C, das heißt,
da kann ich jetzt genau zwei Eingänge zu einem Ausgang umschalten,
wenn ich jetzt sage, C,
wären jetzt eigentlich sowas wie zwei Bit oder drei Bit,
könnte ich dann eben vier oder acht Eingänge auswählen und zu einem Ausgang umschalten.
Ich habe aber formal, wie gesagt,
auch das lässt sich dann eben erstmal alles als Bulscher-Ausdruck formulieren.
Als Entscheidungsbaum könnte man das dann eben beispielsweise so aufbauen,
dass ich sage, gut, ich habe hier meine drei Variablen,
A,
B und
Sage das, was jetzt hier rot gezeichnet ist,
ist eben die Verzwagung, die ich nehme,
wenn die Variable Null ist, Grün, die Verzwagung,
die ich nehme, wenn die Variable 1 ist,
indem ich jetzt also hier für jede beliebige Eingangskombination für A,
B und C hier meinen Baum durchlaufe,
habe ich dann eben hier entsprechend acht mögliche Ausgangspositionen,
die ich dann also erreichen kann und kann damit dann eigentlich
auch direkt ablesen,
jetzt für eine Kombination meinetwegen
Wäre das Ergebnis 1-0, 1 wäre das Ergebnis dann eben null.
Gut, ich hatte ja schon gesagt, diese Bäume kann man
dann teilweise ein bisschen vereinfachen, was man hier sieht.
Wenn ich Adleich null habe und B-Leich null,
dann ist es eigentlich erstmal völlig egal,
wie das C aussieht, weil das Ergebnis immer null ist.
Das ist dann hier quasi diese letzte Verzweigung. Hier genau
das Gleiche jetzt für den Fall gleich 1. Könnte man dann
eben beispielsweise minimieren und zusammenfassen und erhältern letztendlich ein minimierten Baum. Gut,
was man hier schon gesehen hat, eigentlich ähnlich wie ich jetzt,
also irgendwie solche Umformungen bei der Butschen Algebra mache,
kann ich jetzt ja also eigentlich auch auf diesen Bäumen für Schadalgebranche Ausdrücke versuchen,
also irgendwelche Minimierungen zu machen.
Auch da möchte man natürlich vorher erstmal irgendwie sowas haben,
wie eine, ich sag mal in Anführungszeichen,
einheitliche Darstellung und das, was sich da also dann eingebürgert hat,
ist, dass, also im Englischen heißt es dann immer,
reduced ordered by null die Ecision Diagram,
entsprechend dem Akronym dann ROB.DD abgekürzt.
Im Deutschen kann man das dann einfach
irgendwie als binäres Entscheidungsdiagramm übersetzen, wie auch immer.
Also typischerweise in der Literatur findet man eigentlich immer nur ROB.DD.
Letztendlich ist es nichts anderes als ein Entscheidungsbaum,
wo zum einen mit reinkommt,
dass die Variablen jetzt irgendwie in einer Art und Weise
geordnet sind
Das heißt, ich sage jetzt eben, erst kommt A,
dann kommt B, dann kommt C,
wie das jetzt hier irgendwie in dem Beispiel war. Nicht,
dass wir ja dann letztendlich Diazvastorn als Ordnung dahintersteht und dass
man dann eben auch alle Redundanten, Knoten komplett entfernt,
insbesondere auch hier unten bei den Ergebnissen dann eben nur eine
einzige Null und eine einzige Eins stehen hat und hier dann auch wieder alles zusammenfasst.
Denn das ist dann im Prinzip so was wie ein RWDD,
also dann so eine Normalform so einer Funktion,
dann eben als grafische Variante
Weswegen nimmt man das zum einen, lassen sich dabei,
also viele Funktionen vergleichsweise kompakt darstellen.
Zum anderen, bis auf einige wenige Ausnahmen. Zum anderen gibt es
relativ viele Algorithmen oder Verfahren zur Minimierung von Chartal-Gebranchen ausdrücken,
die darauf arbeiten. Also ich hatte ja eben schon gezeigt,
dass wenn man jetzt hier also irgendwie versucht,
also jetzt in dem Nehmen wir also hier irgendwie jetzt mal so eine konjunktive Form nicht.
Also wenn ich dieses jetzt hier irgendwie minimieren möchte,
und wir rechnen uns jetzt mit der Bulschen Alge,
war irgendwie einen ab, dann ist das, sagen wir immer,
doch vergleichsweise Glückssache da, also was Vernünftiges irgendwie bei herauszukriegen.
Deswegen möchte man das natürlich dann eigentlich auch als Informatiker irgendwie von einer dummen Kiste,
also sprechen Computer gemacht haben, der das macht.
Und da gibt es eben relativ viele Algorithmen,
die eigentlich also auf dieser AOB, DDD-Form aufbauen,
wo dann also im Prinzip Grafenmanipulation gemacht wird für die Minimumierung
Und das ist eigentlich, also gerade,
wenn ich jetzt so richtig große Schaltfunktionen habe,
jetzt also nicht hier so eine Beispiele,
wie ich es jetzt hier vorgestellt habe,
sondern wenn ich da also irgendwie einige zig oder hunderte eingangs Variablen habe und da dann also irgendwelche minimierten Ausdrücke haben möchte,
kann man eben sagen,
von der Theorie her ist die Minimierung solcher Ausdrücke dann eben eigentlich schon eine NP vollständiges Problem,
nicht dass man da froh,
wenn man überhaupt eine halbwegs vernünftige Lösung in annehmbare Rechenzeit bekommt.
Und wie gesagt, diese Klasse von Algorithmen,
dann mit diesen ROB, die dann also auf diesen ROBDDs aufsetzt,
sind, ist da dann eigentlich schon ganz gut.
Das Ganze sind eigentlich auch inzwischen irgendwelche Verfahren, die also auch
nicht ganz neu sind. Also hier Referenz auf den Herrn Bryant,
der das also im Prinzip jetzt in irgendeinem Pay bei 1966
dann also irgendwo schon vorgeschlagen hatte,
ist inzwischen eigentlich Standardverfahren, weil gebraucht wird sowas.
Also jetzt gerade mit etwas komplexeren und größeren Ausdrücken dann
eben wirklich im Hardwareentwurf
Nee,
und da möchte ich jetzt natürlich nicht als Entwerfer von irgendeiner CPU XY also anfangen,
da also irgendwie solche Langschalt-Argebaggen, wo schon Ausdrucke zu entwerfen,
sondern da habe ich dann also Möglichkeiten von irgendwelchen Hardware-Beschreibungssprachen,
wo ich eben sage,
letztendlich was die Hardware tun soll und ich habe anschließend irgendwelche Programme,
die mir das umsetzen in Ausdrücke und Formen der Bulschen Algebra und das Ganze dann eben entsprechend minimieren.
Und ich muss mich dann also nicht mehr darum kümmern,
dass ich dann also jetzt anfange,
da irgendwie einzelne nennt und Norgat da irgendwie zusammenzukleben und
da draußen,
also irgendeinen Vollagierer zu basteln
Gut, wie sieht es in ROBDD aus? Also wenn ich hier so einen Entscheidungsbaum nehme,
jetzt für diese Funktion, A,
B und C oder A und B nicht oder A,
nicht und B oder A, nicht wenig Zenicht,
als Entscheidungsbaum, wenn ich jetzt also als Reihenfolge,
als Order da drin habe, erst A, dann B,
dann C, wäre das also quasi dieser Baum,
als ROBDD ist das Ganze dann eben schon etwas kompakter und wäre dann entsprechend diese Darstellung.
Wenn ich hier jetzt von auch noch mal einige anderen einfache Beispiele,
F&X ist gleich X, also gut,
wenn ich eine Null lade, komme ich zu Null,
wenn ich eine Eins habe, komme ich zu Eins,
dann habe ich hier eine Funktion A und B oder C,
wo ich dann eben sagen kann, okay, wenn,
A, gleich eins ist und B gleich eins,
Genau, dann erhalte ich hier natürlich eine Eins.
Und ansonsten ist es egal,
wenn A1 und B0 ist oder A0, B1,
weiß jetzt, dass ich hier gar nicht mehr dran ist,
dann habe ich hier in diesem Term eine Null,
dann ist das Ganze letztendlich nur noch von C abhängig und demzufolge kann ich dann sagen,
wenn Szene 1, das halte ich auch eine Eins,
wenn Szene Null ist, halte ich hier eine Null.
Für sowas wie eine Paritätsberechnung kann ich eben sagen,
ich fange mit der ersten Variablen an, X-0,
wenn die Null ist, bleibe ich,
wenn jeweils die nächste Variable dann auch jeweils null ist,
quasi hier auf dieser Seite und rechne mir eine Null.
Wenn ich hier also einmal jetzt auf dieser Null-Seite gelandet bin,
X-O, einer Variablen, die Variable ist eins, dann wäre die Parität eins.
Und wenn ich anschließend hier wieder irgendwelche Nullen habe,
bleibe ich bei der eins, wenn ich dann wieder X-O einer Variablen habe,
die wieder eins, es würde die Parität wieder wechseln.
Also das wäre jetzt also ein Beispiel,
wie man das Ganze dann eben auch für entsprechend längere Ausdrücke dann hier veranschaulichen kann.
Hier auch nur als Anmerkung, wie gesagt,
also mit den ROBDDs werden wir jetzt also selber nicht viel rumrechnen.
Ich habe eben auch nur als Anmerkung,
also es heißt zwar Ordert, Aber es ist leider bei der,
bei dieser Order eben die Reihenfolge der Variablen, nicht Apriori-Fest vorgegeben.
Demzufolge kann es eben sein, dass ich für ein Schaltagebranchen Ausdruck,
in Anführungszeichen, günstige Reihenfolge habe, dann ist das vergleichsweise kompakt beschrieben.
Es kann sein, dass sie die Reihenfolge sehr ungünstig gewählt haben,
dann sieht letztendlich die gleiche Funktion dann also hier so aus.
Das ist also das, was hier im Prinzip mitskizziert sein soll. Also hier sind zwar Funktionen X1 und X2 oder X3 und X4 oder X5 und X6. Nicht,
wenn ich das also entsprechend dieser Reihenfolge hier anordne und ich dann also quasi immer die jetzt hiermit unverknüpften Therme der Reihe nach betrachte,
erhalte ich dann eben diesen ROBDD, wenn ich hier,
letztendlich ist das hier hin und in eine Permutation der entsprechenden Schaltvariablen,
wenn ich hier diesen Einausdruck nehme und X1, X2,
X3, dann wieder X4, X5 und X6 betrachte,
springe ich letztendlich im logischen Ausdruck hier immer relativ weit hin und her und muss mir dann also quasi Entscheidungen für später immer noch merken.
Und dann hat man hier also auf einmal so einen
ganzen Wust von entsprechenden zwischen Knoten und Kanten.
Also die Frage war jetzt, ist natürlich völlig,
völlig berechtigt
Wie kriege ich jetzt eigentlich raus, wie ich also jetzt
für solche ROB-DDs, also irgendwie eine sinnigere Reihenfolge auswähle.
Und da kann ich jetzt immer nur sagen, gut,
ich habe das noch gar nicht reingeguckt,
inwieweit sowas jetzt in den Übungsaufgaben überhaupt rankommt.
In der Regel wird er erstmal mit den Normalform gerechnet und jetzt also
nicht mit solchen ROB-DDs. Vom Gefühl her würde ich jetzt sagen,
sinnig wäre es jetzt eigentlich zu gucken, innerhalb der bulschen Algebar,
mit welchen, oder welche Funktionen haben jetzt welche Bindungsstärke.
Das heißt also, wenn ich eine Negierung habe, dann ist die,
sagen wir jetzt erstmal entsprechend stärker bindend oder noch stärker binden,
als jetzt eine Unverknüpfung und eine Unverknüpfung, bin nicht stärker als eine Oder-Verknüpfung.
Nicht demzufolge ist also hier in diesem Beispiel,
ist ja jetzt eben auch so,
dass wenn ich jetzt also hier immer die Therme jetzt erstmal über ihre Unverknüpfung betrachte und sage,
okay, ich stelle mir das wirklich so vor,
als ob ich das hier entsprechend geklammert habe,
komme ich zu einer relativ geschickten Darstellung,
während hier missachte ich eigentlich dieses,
also dieses und hier entsprechend stärker bindet,
als jetzt hier dieses oder und springen jetzt in einer Reihenfolge hier hin und her und das führt dann eben zu so einer ungünstigen Sache.
Ist jetzt aber auch nur so aus dem Bauch heraus,
also wenn ich jetzt sowas entscheiden müsste, glücklicherweise kann ich sagen,
rein pragmatisch, man muss es ja nicht entscheiden,
sondern also das sind dann ja eigentlich irgendwelche Beispiele oder irgendwelche Sachen,
wo man sagt, also auch gerade jetzt bei etwas komplexeren Schaltfunktionen,
also da nehme ich irgendwie so ein Schaltalgebraschen Ausdruck,
werfe den in irgendein Tool rein.
Das rechnet, also das baut sich intern diesen Baum auf,
rechnet damit und da wird es dann schon irgendwelche vernünftigen Algorithmen geben,
die das dann also hoffentlich geschickt machen, beziehungsweise dann zumindest im Zuge der entsprechenden Minimierung da zum richtigen Ergebnis kommen.
Mich interessiert es mich jetzt also erstmal nicht mehr, wie dann intern die Darstellung ist. Aber gut,
wenn man jetzt also im Prinzip jetzt nur einen Algorithmus selber beschreiben wird,
oder kodieren würde, dann müsste man sich da natürlich Gedanken machen,
okay, da denke ich mir,
da wird dann einfach aufgrund dieser Bindung in der Bulschen Agebra beziehungsweise aufgrund von Klammerungen,
dass man eben sagt, alles, was jetzt erstmal geklammert ist,
versuche ich also möglichst gemeinsam zu berechnen,
dass man da damit dann also entsprechende oder entsprechend günstigere Kodierung bekommt.
Gut, jetzt hatten wir hier schon jeweils kurz angesprochen,
Minimierung von Schalfunktionen, Eingangs hatte ich ja gesagt,
es gibt da also eigentlich beliebig viele Varianten,
um ein Schaltnetz zu realisieren.
Wie kriege ich das jetzt eigentlich mehr oder minder minimal hin?
Da kann man jetzt eben sagen, was ist minimal?
Heißt minimal. Ähm, möglichst wenig Hardware-Elemente, wenn ich
das jetzt wirklich aus irgendwelchen Hardware-Schalen, also irgendwelchen Gattern aufbaue.
Heißt minimal möglichst schnell, was ich also dann
sehr stark widersprechen kann
Habe ich vielleicht nur irgendwelche anderen Randbedingungen, also gerade so Technologieabhängigkeiten spielen da eben entsprechend rein. Also irgendwie sowas wie Kosten. Dann kommen solche Sachen rein wie Testbarkeit. Da geht es eben darum,
dass ich sage, wenn ich jetzt eine Schaltung habe und gewährleisten muss,
dass die Schaltung möglichst gut, möglichst fehlerfrei läuft,
muss ich quasi formal beweisen können,
dass In der Schaltung irgendwelche Fehler erkannt werden durch irgendwelche Arten von Selbsttests und ich muss dann also vielleicht auch irgendwie beweisen können,
dass also unter bestimmten Bedingungen, also gerade so bei Zeitbedingungen,
das wird uns also dann in drei Kapiteln, denke ich mal,
dann noch begegnen, es zu, ich sag mal,
kurzfristigen falschen Werten an irgendwelchen Ausgängen von Schaltnetzen kommen kann,
die ich vielleicht auch noch irgendwo minimieren möchte,
beziehungsweise wo ich dann sage, okay,
also wenn das Ding jetzt, also irgendeine kritische Anwendung ist,
also was weiß ich, im Computer ist,
der also jetzt hier irgendwo die Beatmungsmaschine im OP-Saal steuert,
nicht dann gelten dafür also entsprechend andere Anforderungen hinsichtlich der Software,
aber auch hinsichtlich der Hardware,
die dort eingesetzt wird.
Und wenn ich da jetzt eben irgendwelche Sachen jetzt also wirklich hardcodiert,
jetzt irgendwo in Hardware eingebaut habe,
muss die dann eben auch entsprechend ganz andere Randbedingungen erfüllen,
als wenn ich damit jetzt also irgendwie so ein 2,50 Euro Wegwerfartikeln mitbestücke.
Also da kommen dann also zusätzliche Sachen mit rein,
Produktionsfehler, wenn ich irgendwas habe, was, Probussheit,
irgendwo im Flugzeug eingebaut wird, beziehungsweise irgendwo im Satelliten auf die Reise geht,
habe ich also auch ganz andere Randbedingungen.
Das kann sich dann eben auch relativ drastisch auf die Art und Weise auswirken,
wie ich jetzt also irgendwelche Schaltalgebrachen ausdrücke kodiere. Weil man dann eben teilweise sagt,
okay, Baue ich sowas wie Redundanz ein,
was man also auch hardwareseitig machen kann,
dass also quasi jetzt also ein Ausdruck einfach mehrfach gerechnet wird und ich dann noch so eine Art Mehrheitsentscheider habe und dann eben gesagt wird,
okay, also der eine sagt null,
der nächste sagt auch null und der sagt eins,
dann hat sich der eine verrechnet.
Das wäre dann also im Prinzip einfach sowas wie so
ein 3-1-Hamming-Code, siehe letzte Woche,
dann aber eben wirklich auf Hardware umgesetzt
Und wenn ich sage, gut,
also bei irgendwelchen Satellitensystemen ist sowas also gang und gäbe,
dass man da Sachen entsprechend redundant auslegt.
Und dann eben dadurch auch gewährleisten kann,
dass wenn jetzt also aufgrund irgendwelcher Hardware-Effekte oder aufgrund von
irgendwelchen Produktionsfehlern dann also Teile ausfallen,
zumindest über einen gewissen Zeitraum,
das Ganze dann auch immer noch sicher funktioniert
Nicht, das heißt,
also da gibt es erstmal sehr viele so unterschiedliche Minimierungskriterien,
die man theoretisch anwenden kann, das,
was wir jetzt eigentlich erstmal nur nehmen werden, ist,
dass man sagt,
also wenn ich sowas wie so einen Bulschen Ausdruck habe,
dass ich den eben möglichst klein,
möglichst kompakt und möglichst wenig Thermen beschreiben kann.
Das heißt, das entspricht dann eigentlich sowas wie der Anzahl der Gatta.
Ich war es dann wieder mit reinkommen kann,
wenn ich dann eben in Hardware selber jetzt gehe und das umsetze,
ich hatte schon gesagt, technisch werden irgendwie Garter genommen, mit Negiertenausgängen.
Wenn ich jetzt also hier anfange, irgendwas zu rechnen,
dann werde ich es also nicht mitnennen und Norgat dann rechnen,
sondern werde ich eigentlich immer mit und und oder rechnen.
Also genau das, was sie eben ja auch vorgestellt habe. Auch sowas wie ein Exklusiv oder wo man sagen kann,
ja, das ist also mathematisch vielleicht interessantes Konstrukt,
weil man da also quasi dann mit dem GF2 und mit dieser Ried-Malla-Form dann also hervorragend rechnen kann, ist etwas,
was also von der Hardware-Realisierung auch wieder ganz schlecht geeignet ist,
weil ein Exklusiv-Oder ist dort also vergleichsweise sehr umständlich zu realisieren,
eigentlich nur über einen Ausdruck,
wo ich das dann also eigentlich aus mehreren einzelnen Gardern,
also dann quasi einfach wie so nett und nor, mir dann zusammenbauen müsste.
Gut, zu den Minimierungsverfahren,
also zum einen kann ich das eben Algebrage machen,
das ist das, was ich also vorhin ja schon kurz gezeigt hatte,
wenn man jetzt also aus den Konjunktiven und disjunktiven Normalformen dann im Prinzip jetzt irgendwelche minimierten Formen macht,
bloß wie gesagt, wenn man jetzt also wirklich richtige Beispiele hat,
ist das also irgendwie so ein bisschen stochern im Nebel,
hat er ja schon gesagt, also das ist wirklich nur Ausprobieren,
entsprechend mühsam und Auch das, was die Algorithmen dort letztendlich machen,
sind jetzt mehr oder minder heuristische Verfahren.
Das heißt, es sind also irgendwelche Schätzverfahren,
da sind irgendwelche Zufallsfunktionen mit drin und okay,
die Schätzverfahren sind schon so, dass sie wissen,
wenn ich das in der und der Form mache,
wird das schon was halbwegs Vernünftiges bei rauskommen.
Aber es ist eben nicht gegeben, dass es für einen
beliebigen Ausdruck dann eben wirklich die minimale Lösung liefert.
Es liefert etwas, was dann vielleicht schon relativ gut ist,
aber es kann eben noch eine Lösung geben,
die ein bisschen kleiner ist
Nicht. Das, was man dort als Verfahren dann in der Literatur findet,
sind dann also Minimierungsverfahren nach zwei Herren Quine und McKlaasky,
wo man dann also quasi jetzt in solchen Ausdrücken nach sogenannten Prime-Implikanten sucht.
Das sind also quasi Teilausdrücke, die möglichst häufig kürzeste Totalausdrücke,
die möglichst häufig überall vorkommen. Also Grundidee ist eben einfach,
wenn ich das jetzt,
also wie ich das also hier bei konjunktiver und destinktiver Normalform gemacht habe,
wenn ich was ausklammer, dass ich eben einfach gucke,
das habe ich in dem Ausdruck, das habe ich in dem Ausdruck,
das habe ich vielleicht noch in zwei,
drei anderen Ausdrücken.
Also wird es
sich höchstwahrscheinlich lohnen,
das auszuklammern
Und genau das ist eigentlich das, was dann da dahinter steht als Idee.
Gut, hier, also auch noch mal ein Beispiel jetzt für so eine Argobasische Minimierung.
In diesem Fall ist also eine Funktion mit Vier-Schalt-Variablen in Dysun Kiwa Normalform.
Also wo jetzt also auch schon nicht mehr so ganz übersichtlich zu ersehen ist.
Also wie, wo, was fasse ich da jetzt zusammen?
Nicht eine mögliche Lösung wäre letztendlich hier dieser Term,
wo ich dann eben sage, okay,
also Ich nehme jetzt hier auch erst mal wieder so die ersten beiden,
weil die unterscheiden sich in X0, das kann ich ausklammern,
dann erhalte ich letztendlich diesen Term.
Ich dann sage ich hier X3, X2 und X0,
nein, also X3, X2,
nicht nur X0 und hier auch X3,
X2 nicht und X0 unterscheiden sich die beiden hier in X1. Wunderbar,
dann erhalte ich diesen Term,
damit habe ich also hier im Prinzip die zwei und die zwei schon erschlagen.
Dann muss ich jetzt eben noch gucken, wie ich also
hier von den letztlichen vier Thermen dann eben auch noch irgendwelche Paare bilde.
Nämlich beispielsweise dann den Therm hier mit dem hier oben zusammenfasse,
was mir das hier liefert. Den Therm,
mit dem hier unten bzw. mit dem hier zusammenfasse, was dann die beiden liefert.
Aber es ist erstmal nicht intuitiv direkt ersichtlich,
was ist jetzt einfach sinnvoll dort zusammenzuführen. Und Gut,
man kann jetzt natürlich diese Ausdrücke nehmen und da jetzt also noch weiter dran rumrechnen.
In der Hoffnung dann also zu irgendeiner deutlich besseren Lösung zu kommen.
Also in diesem Fall würde man über weiteres umformen,
dann sicherlich dann noch irgendwie zu dem kommen,
was dann also als in Anführungszeichen bessere Lösung hier unten beschrieben ist.
Die Frage. Also die Frage war jetzt, was würde man machen,
wenn man das jetzt also irgendwie als Klausuraufgabe hätte?
Wie geht man da ran? Ich fängt mal da jetzt mit irgendwelchen offensichtlichen Sachen an,
wo ich sage,
ich nehme den und also den ersten hier und den dritten Term,
wo ich also relativ direkt schon hier,
so wie das also hier auch geschrieben ist,
dann schon sehen kann, okay, die unterscheiden sich jetzt nur in einer Variablende von irgendeinem anderen.
Könnte man so machen, aber auch das ist natürlich,
sagen wir mal, stochende im Nebel, nein,
also in der Klausuraufgabe wird definitiv ein anderes Verfahren benutzt,
nämlich das,
was ich jetzt live vorstellen werde
Wo man dann also auch vergleichsweise schnellst in der Vergleichsweise
eindeutigen und auch hoffentlich minimalen Lösungen kommt.
Also von daher ist das dann schon etwas einfacher handhabbar. Gut,
also ich denke mir, hiermit ist eigentlich schon klar geworden,
was also das Problem dieser Algebragenminimierung ist.
Deswegen nimmt man häufig dann grafische Minimierungsverfahren.
Und zwar werden dazu die Schaltfunktionen in einem KV,
die einem oder mehreren
KV-Diaramen dargestellt
Die Schaltfunktion werden quasi als desjunktive Normalform interpretiert. Und dann
in diese Diagramme eingetragen. Hatte ich ja schon mal ganz kurz
bei der Kodierung angesprochen, komme jetzt hier gleich noch mal genauer.
Und in den Diagrammen kann ich dann nämlich,
das ist ja eigentlich der Trick dabei, benachbarte Therme,
wo ich also quasi gleiche Werte habe,
über Schleifen zusammenfassen
Dass man dann sagt, also entweder ich fasse alle einst,
haben wir mit möglichst wenig Schleifen zusammen oder ich fasse alle null,
ja, mit möglichst wenig Schleifen zusammen.
Und dann kam man dann direkt da draus die minimierte Funktion ablesen.
Nicht das ganze Verfahren funktioniert eben deshalb für uns einmal vergleichsweise gut,
weil wir dann nämlich, also wirklich,
also an den Flächen oder an dem Muster von Nullen und Einsen sehen,
wo kann ich da eben solche Schleifen bilden.
Funktioniert allerdings dann auch nur bis zu fünf, wenn es hochkommt,
also irgendwie sechs Variablen, weil dann wird das Ganze dann auch schon zu unübersichtlich.
Gut. Grundidee, wie funktioniert das Ganze? Hier nochmal als Erinnerung,
also dieses KV-Diagramm, waren ja im Prinzip jetzt hier für vier Schalt-Variablen,
X-3, X-2, X-1, X-0, so eine zweidimensionale Darstellung,
aus zwei hoch, in Feldern in Y-Richtung,
beziehungsweise zwar auch M-Feldern in X-Richtung und damit kann man dann eben zweimal,
zwei, zweimal vier, vier mal vier, also da entsprechend solche, Diagramme bilden.
Wenn ich jetzt größere, brauche ich da als vier mal vier,
muss man dann eben entsprechend mehrere machen.
Der Trick ist dann eben, dass die Indizes,
X-1, X-0, X-3X 2 hier im Greycode angeordnet sind.
Das heißt, zwischen zwei aneinanderliegenden Feldern,
die auch über den Rand verbunden sein können,
das war ja da auch immer der Trick, ändert sich immer nur ein einziges Bild.
So, und dieses, es ändert sich nur ein einziges Bit,
Ist eigentlich genau das, was ich hier in der Schaltergewahrschen-Minimierung ja auch immer gemacht habe, dass ich hier geguckt habe.
Ich nehme diesen Ausdruck und ich nehme diesen Ausdruck und die
sind bis auf dieses X0 identisch.
Und dann klammere ich das quasi aus und kann das rausrechnen.
Und genau das Gleiche passiert dann eben bei dieser Schlafenbildung in KV-Diagramm,
dass diese beiden Ausdrücke dann nämlich auch direkt nebeneinander hier landen würden.
Wird gleich Wahrer, was das ist, aber jedenfalls,
also Grundidee ist eben genau das, dass ich benachbarte felde,
um jeweils nur einen Bit unterscheiden.
Hier nochmal die KV, also die üblichen KV-Bilder-Farme,
die wir jetzt also so benutzen. Auch mit genau dieser Variablen-Anordnung,
also X-0, X-1, wenn ich drei Variablen habe,
X-2, X-1, X-0 und wenn ich vier Variablen habe,
X-3, X-2, X-1,
Nicht, weil das ist dann nämlich nachher auch etwas,
was dann, also wenn das in den Übungsaufgaben auftaucht,
dann also auch für die Übungsgruppenleiter, ganz nett ist,
beziehungsweise würde ich mir auch zusehen,
dass in den Übungskaufgaben dann also irgendwelche Templates für diese Diagramme dann auch schon mit den Variablen durchnummeriert sind,
weil wenn man dort jetzt also irgendwas macht und arbeitet und dann so nachher das Ganze auch korrigiert werden soll,
über das also beliebig schwierig,
wenn ich also hier meinetwegen X3 und X1 irgendwie vertausche,
Also die gleiche Funktion in anders beschriftetes Diagramm reinfüge,
weil das dann natürlich auf einmal sofort ganz anders aussieht.
Ist zwar die gleiche Funktion und in der Minimierung sollte auch das Gleiche rauskommen,
aber so bei der Korrektur ist es dann also schon vergleichsweise schwierig zu handhaben,
das erstmal so irgendwie zu matchen,
weil das dann eben auch nicht so ganz einfach ist.
Gut, also das sind dann so die üblichen KV-Diagramme und wie gesagt,
die entsprechend der Stellenwertigkeit,
wenn ich das jetzt also hier aus so einer Funktionstabelle Wieder eine Funktionstabelle finden.
Also wenn ich hier so eine Funktionstabelle habe, und dann,
also hier meinetwegen jetzt mit den drei Variablen zugange bin,
von null bis sieben.
Nicht für X3, X2 und X1. Hier mit drei Variablen
wird das Ganze dann eben hier null eins, zwei,
drei, vier,
fünf, sechs,
sieben dann eben auch so einfach direkt eingetragen
Gut,
da sich das jetzt nicht mehr lohnt,
eigentlich die weitere Arbeit mit den KV-Diagrammen jetzt hier anzureißen,
das nächste Mal dann also weiterzumachen,
weil das ist also relativ zentral und das wird dann also auch sicherlich in der Klausur auch vorkommen,
werde ich das dann also dann lieber gesammelt und kompakt auf
den nächsten Termin legen und das dort dann also auch in
Ruhe vorstellen und deswegen Schluss für heute und schönes Wochenende