Heute Normalformen zu Ende machen und Hornformeln einführen. Gestern haben wir
Äquivalenzen eingeführt, also den Begriff der Äquivalenz und Vollgabarkeit,
Folgebarkeit spielt heute nicht so eine große Rolle.
Also bei Hornformel klingt das vielleicht so ein bisschen an,
aber Vollgabarkeit spielt heute sonst eigentlich keine so große Rolle.
Äquivalenzen spielt nochmal eine Rolle, eben wegen diesen Normalformen-Geschichten.
Und die Idee war ja, dass zwei Formeln genau dann äquivalent sind,
wenn sie eben den exakt gleichen Wahrheitswerteverlauf haben. Sprich,
wenn sie im Grunde genommen das Gleiche tun oder das Gleiche aussagen und
die Idee bei dieser Herstellung der Normalform ist dann ja auch,
dass man dann irgendwie Teilformen, die zueinander äquivalent sind,
dass man die dann eben ersetzen kann
Und dafür haben wir letztes Mal noch das Ersetzbarkeitstheorium eingeführt.
Das sah so aus und besagte eben,
wenn man irgendwie in so einer Formel H eine Teilformel F hat,
dann kann man die eben durch G ersetzen,
sofern dann eben F zu G Äquivalent ist.
Und dann entsteht eben aus Hane neue Formel Haarstrich und die
ist zu der ursprünglichen Formel H Äquivalent.
Dann bewiesen haben wir das mit struktureller Induktion, sah so
ein bisschen knifflig aus, ist aber eigentlich relativ straightforward.
Und da konnte man eben mal ein Beispiel sehen,
wo strukturelle Induktionen tatsächlich irgendwie ganz sinnvoll eingesetzt werden kann. Genau,
und das Theorie erlaubt uns dann jetzt eben Teilformel durch andere Formeln zu ersetzen als Beispiel,
fängt man irgendwie an mit der etwas komplizierteren Aussehenden, nicht A impliziert,
nicht B, wegen doppelter Negation darf man das nicht,
nicht B durch B ersetzen.
Das heißt, die Formel hier links ist Äquivalent zu,
der dann eliminiert man die Implikation. Dann kommt man zunicht
nicht A oder B und dann nochmal eine doppelte Negation,
dann ist man bei A oder B. Ja,
und das Tier durfte man halt streng genommen,
bevor wir das Ersetzbarkeitstheorien hatten, noch nicht machen.
Also vorher durfte man eigentlich das Nicht-Nicht-B nicht einfach durch B
ersetzen, weil es ist eine Teilformel in der Formel.
Da muss man irgendwie zeigen,
dass man das machen darf und das sagt eben gerade
das Ersetzbarkeitstheorie
Genau so. Und jetzt kann man dieses Ersetzbarkeitstheorien benutzen,
um eben zu versuchen, zu einer Normalform zu kommen.
Das heißt, zu irgendeiner Form,
in die man nach Möglichkeit aller Aussagen logischen Formeln bringen kann
und die eben irgendwie schicke Eigenschaften hat, die man ausnutzen kann.
Da hatten wir gestern schon so ein paar Begriffe zu.
Ich wiederhole die noch mal kurz. Wir haben gesagt,
ein Literal soll eine atomare Formel sein oder eine negierte atomare Formel.
Und wenn man das dann eben unterscheiden will, ob das Literal,
um genau ein atomare Formel ist oder eine negierte atomare Formel,
hat man eben diesen Begriff des positiven Literals und des negativen Literals eingeführt.
Positiv, wenn es ein Aussagesymbol ist, A,
B, C, negativ, wenn es negiertes Aussagesymbol ist.
Nicht A, nicht B,
irgendwie sowas
Da nennt man zwei literale Komplementär, wenn sie die gleiche atomare Formel,
wenn sie in der gleichen Asche mal in Formel zugrunde liegen
und halt eben 1a ist und das andere nicht A,
dann sind die komplementiert zueinander.
Ja, und dann sagen wir eben,
wenn wir Disjunktionen von Literalen haben, also A oder B oder Nichtsee,
dann ist das eine Klausel und wenn wir eine Konjunktion von Literalen haben,
A und nicht B und C, dann ist es eine duale Klausel.
Und mit den beiden Begriffen kann man jetzt schön Karlen
F und DNF einführen, dass man sagt,
eine Formel ist in konjunktiver Normalform, also in KNF,
wenn sie eine Konjunktion von Disjunktionen von literalen ist,
also sprich eine Konjunktion von
ganz vielen Klauseln
Hat unter ein Beispiel, da tritt auch irgendwie mit dem B,
so eine einelementige Klausel auf. Das ist eine KNF,
das Wichtige ist eben, das und ist der Hauptoperator und
unterhalb bis uns sind dann eben ganz viele Klauseln,
bei denen eben das oder der Hauptoperator ist,
sondern es sind einfach nur literale mit oder verknüpft.
Disjunktiven Normalfonds sieht fast genauso aus,
nur dass man eben eine Disjunktion von Konjunktion von Literalen hat.
Also ganz viele duale Klauseln mit oder verknüpft.
Und dann konnte man sich eben überlegen,
jetzt mal davon abgesehen, ob man die jetzt gleich herstellen
kann oder nicht
Was man schick aus diesen Formeln ablesen kann.
Und da haben wir jetzt schon gesagt,
aus so einer disjunktiven Normalform lässt sich schnell ablesen,
ob man die erfüllen kann oder nicht,
weil man im Grunde genommen ja nur eine von den dualen Klauseln irgendwie warm machen muss.
Dann ist bei dem oder ein Term wahr.
Dann wird die ganze Formel wahr. Und so
eine duale Klausel kann man genau dann wahrmachen,
wenn sie eben kein Paar von komplementären Literalen enthält.
Also wenn er irgendwie A und Nicht-A drin ist in so
einer dualen Klausel, dann ist die Klausel.
Die duale Klausel unerfüllbar. Wenn das nicht
der Fall ist, kann ich
sie erfüllen
Ja, im Grunde genommen kann ich dann aus der dualen Klausel
die warmmachende Belegung einfach ablesen. Alle Aussagensymbole, alle Literale,
die positiv auftreten, da werde ich die Formel zu eins aus.
Also hier werde ich B und C zu eins aus und die,
wo es negativ auftritt, da werde ich es zu null aus.
Also A zu 0 aus Wertenden wird nicht A zu 1
und dann habe ich die duale Klausel wahr gemacht.
Weil das ist bei der DNF ganz einfach. Bei der
KNF kann man halt schnell rauslesen, wie man sie unerfüllbar machen kann.
Da versucht man einfach eine Klausel zu finden,
die eben kein Pärchen komplementäre Literale enthält und dann belege ich die gerade andersrum als eben.
Also hier bei der ersten Klausel, da würde ich dann
A war machen, B, falsch und C war.
Und dann habe ich die Klausel zu falsch ausgewertet.
Das ist die einzige Möglichkeit, die Klausel zu falsch auszuwerten.
Und dann wird die ganze Formel falsch. Ja,
da steht es nochmal, KNF ist gültig, genau dann,
wenn alle ihre Klauseln gültig sind, genau dann,
wenn alle klauseln, mindestens ein paar komplementäre Literale enthält.
Und DNF unerfüllbar, wenn alle ihre Dualen Klauseln unerfüllbar sind.
Genau dann, wenn die ein dualen Klausel
mindestens ein paar komplementäre Literaren vorkommen
Ja, und dann gehen eben die Begriffe,
die dazu quasi gegenteilig sind, die gehen dann eben auch.
Also wenn ich weiß, eine DNF ist unerfüllbar,
genau dann, wenn das eintritt, dann weiß ich halt,
sie ist unerfüllbar, erfüllbar, genau, dann werden das nicht eintritt.
Also habe ich für DNF das, was ich eben erzählt habe,
wie schnell ein Erfüllbarkeitstest und für KNF, wenn ich weiß,
dass sie nicht gültig ist, dann weiß ich,
ich kann sie falsifizieren, dann eben mit der Methode,
die ich eben erwähnt habe.
Das kann man dann da schön schnell rauslesen,
so aus diesen Normalformen, aber der Hauptgrund,
warum er die einführt, ist eben,
weil es eine sehr schöne Struktur ist und man gut
damit arbeiten kann
Sowohl bei Beweisen als auch bei Algorithmen. Und weil wir
das ja aber schon mal hatten bei NP-Vollständigkeit und so,
da nochmal, um es zu betonen,
dieser Füllbarkeitstest für DNFs, der ist eben schön effizient implementierbar.
Ich lese da einmal rüber, gucke, ob in jeder
dualen Klausel so ein Pärchen, komplementäre Literale vorkommt.
Wenn nicht, dann ist sie erfüllbar. Das ist also
schön schnell implementierbar. Er braucht eigentlich in Linearzeit nur einmal
rüberlesen. Und für KNFs gilt das aber höchstwahrscheinlich nicht.
Da haben wir ja gesehen, irgendwie in der letzten Vorlesung
vor den Pfingstferien, dass das NP vollständig ist.
Und NP-Vollständigkeit, da war ja die Idee,
wenn Problem NP vollständig ist,
dann ist es sehr,
sehr wahrscheinlich nicht NP
Jo. Fragen wir es dahin? Das UKN-FDNF. Dann
hatten wir schon den Satz, wie man das,
dass man das herstellen kann. Also gegebene Formel F kann ich so
die konjunktive Normalform herstellen und auch so eine disruktive Normalform.
Also sprich, ich kann irgendwie eine Formel konstruieren,
die in KNF oder DNF ist und die eben zu der Formel F-Äquivalent ist.
Und das kann man jetzt entweder mit struktureller Induktion machen,
so ähnlich wie beim Ersetzbarkeitstheorien auch.
Da fängt man dann an und sagt, für atomare Form,
also induktionsanfang, für atomare Formeln ist das klar.
Die ist schon im KNF und auch im DNF
Induktionsannahme für zwei Formeln, F1 und F2,
kann ich das machen. Und dann zeigt man eben,
dass Formeln wie Nicht-F und F1 oder F2 und so weiter,
dass man die auch in KNF und DNF bringen kann.
Kann man im Schöning einmal nachlesen. Wir machen,
also da ist so ein Verfahren,
wie es mit struktureller Induktion halt ganz gut bewiesen werden kann.
Und wir wollen jetzt mal so eine direkte Konstruktion angeben und
argumentieren, warum die denn korrekt ist.
Und zwar machen wir Folgendes, erstmal so von der Vogelperspektive.
Erstmal nehmen wir die Formel F und formen die so um,
dass die Implikation, die Biomplikation da nicht mehr
drin auftritt
Also nur noch nicht und, und, oder.
Wir hatten ja so Äquivalenzumformungen kennengelernt, mit denen man
die Biimplikationen rauskriegt und mit denen man die Implikationen rauskriegt.
Die wendet man einfach so lange an, bis man die Dinger nicht mehr hat.
Ja, das wäre der erste Schritt. Als nächstes kümmert man sich darum,
dass die Negation nicht mehr irgendwo stehen,
sondern eben nur noch bei den Literalen,
also nur noch vor den atomaren Formeln,
kriegt man auch hin.
Stichwort doppelte Negation, um irgendwie so gedoppelte Negationen rauszukriegen.
Und den Morgenregeln, dass man die immer schön dicht daran kriegt.
Also bei dem Morgen wandert die ja
immer weiter nach innen
Und als Letztes macht man mittels das Distributivgesetzes, formt man weiter um,
sodass dann eben entweder DNF oder ein KNF entsteht.
Wir hatten mehrere Distributivgesetze, muss man gucken,
welches man anwendet, damit quasi der Operator,
den man oben haben will im Strukturbau und den Operator,
den man unten haben will,
dass die eben in die richtige Reihenfolge kommen.
Im Detail, also das ist die Vogelperspektive im Detail.
Erstmal diese Jugendtouren rauskriegen, die Implikationen, die Bimplikationen.
Und dann kann man das F impliziert G,
kann man ersetzen durch Nicht F oder G. Und FB impliziert
G kann man eben ersetzen durch nicht Dadurch kann man es nicht ersetzen,
sondern eigentlich durch Nicht-F oder G und Nicht-G oder F.
Und dann hat man irgendwie die Formel F1 und hat keine Implikation in Biimplikationen mehr drin.
Und dann kann man sich schon überlegen, das kann ich
nur endlich oft anwenden. Also terminiert der Schritt auf jeden Fall.
Also ich habe ja vorher nur endlich viele Implikationen und Biimplikationen
drin, kann ich endlich oft anwenden den Schritt.
Und dann bin ich fertig. Und ich mache auch nur Äquivalenzumformungen.
Das heißt, die Formel, die nach dem Schritt entsteht,
die muss zu ursprünglichen Äquivalent sein und denen hält kein
Implikations- und Biimplikationszeichen mehr.
Der Schritt ist also okay
Jetzt nimmt man die und benutzt
wiederholt entweder so eine doppelte Negation hier oder diese Morgenregeln,
bei denen eben das und die Negation immer weiter reinwandert.
Also hier steht es irgendwie noch außen,
hier ist es dicht da dran an den Formeln.
Und hier steht es auch außen und da ist es dann
dicht da dran an den Formeln. Da kippt dann immer
der Jungtor hier vom uns zu oder vom oder zum und.
Das macht aber nichts. Ich führe auf jeden Fall
keine Implikation oder Bimplikation wieder ein.
Also wenn ich das die ganze Zeit mache,
dann geht die Negation immer weiter nach innen,
muss also irgendwann
bei den Literalen ankommen
Und ich führe keine neuen Jungtouren ein. Das heißt,
ich habe weiterhin eine Formel, die zu ursprünglich ein Äquivalent ist.
Ich mache eine Äquivalenzumformung. Ich habe eine Formel,
in der weiterhin nur Negation und, und, und, oder vorkommt.
Und die Negation ist ganz dicht dran an den Literalen.
Und es muss auch terminieren,
weil ich quasi bei jedem Schritt, den ich hier ausführe,
ich lese das jetzt hier nur von links nach rechts sozusagen.
Ich wende die Äquivalenz nicht so an,
dass ich aus Effen nicht nicht Aft mache,
sondern ich mache das nur von links nach rechts.
Und wenn ich das eben mache,
dann gehen hier Negationen weg bei der doppelten Negation.
Und bei den dem Morgengesetzten wandert die Negation eben nach innen.
Und das kann ich auch nur endlich oft machen.
Also muss auch der Schritt
irgendwann terminieren
Und dann hat man die Formel F2 und jetzt hat man halt eine Formel,
wo die Negation ganz unten ist und oben hat man irgendwie
noch uns und oders und die muss man jetzt noch in die richtige Reihenfolge bringen.
Und wenn man jetzt eine KNF haben will,
dann wendet man diese beiden Distributivgesetze an. Wichtiger ist eben,
hier sieht man auf der linken Seite,
dass die Reihenfolge von dem oder und dem und noch nicht so ist,
wie man das haben möchte.
Beim KNF möchte ich das so haben,
dass das und der Hauptoperator ist und ganz viele Klauseln mit
unverknüpft sind und das wäre da jetzt noch nicht der Fall.
Deswegen, wenn ich dieses Distributivgesetz an und jetzt sieht das
halt so aus, wie ich das haben möchte,
dass ich zwei Klauseln habe,
die mit dem und verknüpft sind
Und da drunter eben genauso. Und wenn ich das halt wiederholt oft mache,
kann man sich auch überlegen, dadurch,
dass hier jetzt das und nach oben wandert quasi im Strukturbaum,
muss das auch irgendwann aufhören.
Und die Negation fasse ich nicht an, also werden die Negationen
nicht irgendwie durch die Gegend wandern, ist auch okay.
Und bei der DNF wende ich die anderen Distributiven,
die anderen beiden Diste, die anderen beiden Distributivgesetze an,
die dazu führen,
dass das oder eben nach oben
wandert im Strukturbaum
Und so angegeben, wie es da steht,
wäre es erstmal nur das Verfahren, wo man sagt,
irgendwie als erstes, wenn ich die Äquivalenz nenne,
als zweites, wenn ich die Äquivalenz nenne,
als drittes, wenn ich die Äquivalenzen an.
Und jetzt muss man halt noch argumentieren,
dass das Verfahren tatsächlich das tut, was es tun soll.
Und die Idee war ja, dass wir von einer Formel
ausgehen und irgendwie zu einer äquivalenten Formel kommen,
die ein KNF und DNF ist. Das heißt,
man muss argumentieren, dass man tatsächlich eine KNF und DNF kriegt,
dass die Formel tatsächlich äquivalent ist und dass das Verfahren immer terminiert.
Die drei Sachen muss man irgendwie argumentieren,
habe ich zwischendurch schon so ein bisschen gemacht,
hier nochmal übersichtlich,
was sieht man
Wir machen in jedem Schritt nur Äquivalenzumformungen. Das heißt,
aufgrund des Ersetzbarkeitstheoriums, es muss auf jeden Fall eine äquivalente Formel rauskommen.
Das ist schon mal schön. Dann wissen wir, jeder Schritt terminiert.
Warum? Im ersten Schritt kann man nur endlich viele von
diesen Implikationen und Biimplikationen haben, die man dann ersetzen kann.
Also eine Formel F ist endlich lang.
Dann treten die beiden jungen Touren dann nur endlich auf.
Bei jedem Ersetzungsschritt geht einer weg. Also kann ich das
nur endlich oft machen. Bei den Negationen,
die rutschen halt quasi immer eine Ebene tiefer im Strukturbaum oder gehen
immer dichter an die literale Ralle und die Aussagensymbole ran.
Das kann ich auch nur endlich
oft machen
Und den dritten Schritt passiert das eben mit den Dissunktionen und Konjunktionen,
dass die quasi in die Reihenfolge gehen, in die man die haben möchte.
Sodass man da auch nur endlich oft umformen muss. Ja,
dann kann man sich nur überlegen, naja,
wenn man das die ganze Zeit macht,
dann ist das nach Konstruktion so,
dass da eine DNF bzw. eine KNF entstehen muss.
Und dann weiß man, es entsteht eine DNF beispielsweise und
ich weiß, die muss Äquivalent zu Ursprünglichen sein.
Also habe ich aus der Formel eine DNF gemacht,
Äquivalent ist sie, jeder Schritt terminiert,
habe ich also ein schönes Verfahren.
Folglich korrekt
Fragen. Fragen dazu. Da nochmal im Überblick so,
was man macht, 1, 2, 3,
4, wobei hier unten,
hatte ich glaube ich gestern auch schon mal gesagt,
das sollte eher so 3A und 3B sein,
aber die ersten beiden Schritte sind immer gleich.
Erstmal setze ich all diese Teilformen, die Biomplikation oder Implikationen
haben. Für die Biomplikation habe ich auch zwei Möglichkeiten,
wie ich das ersetzen kann,
kommt manchmal darauf an,
was man haben will
Also wenn die Formel nur irgendwie geh, biimpliziert, haar ist,
wenn das die komplette Formel ist und ich will zu einer KNF kommen,
dann macht es irgendwie Sinn, den ersten Schritt zu machen,
dann habe ich nämlich gleich eine.
Wenn man hier DNF haben will, nehme ich lieber die
zweite Äquivalenz zum Formel, dann habe ich gleich eine DNF.
Und sonst muss man da unter Umständen noch das Disputivgesetz anwenden und ausklammern.
Und was man halt auch machen kann, wenn man hier
unten bei diesen Distributivgesetzen, das sind ja nicht verallgemeinerte Diskutivgesetze.
Also man kann hier sehen, irgendwie bei dem F oder G und H,
da steht hier vorne eben nur das eine F.
Man kann sich ja auch vorstellen, dass das aussieht,
so wie hier oben, dass man hat G und Haar,
da sind hier eben zwei Elemente drin oder nicht G und nicht Haar,
dann sind hier zwei Elemente drin.
Und dann kann man das aber so machen,
wie man das auch irgendwie aus der Algebra kennt,
dass man dann jedes mit jedem verknüpft.
Also dann hat man hier G oder Nicht-G, ja,
gehe oder Nicht-G und gehe oder nicht Haar und Haar
oder nicht G und Haar oder Licht Haar, so.
Das geht ja mit jedem. Verallgemeinert dieses Motivgesetze,
die kann man auch anwenden. Also später. Erstmal eliminiert
man die beiden jungen Touren
Dann ersetzt man hier doppelte Negationen und dem Morgen,
wenn ihr die Gesetze an und dann eben die Distributivgesetze,
um entweder zu KNF oder DNF zu kommen.
Und die mischt man auch nicht. Entweder nimmt man die ganze Zeit
die oberen beiden hier oder man nimmt die ganze Zeit die unteren beiden da.
Und was man halt noch machen kann,
ist mit verallgemeinerten Distributivgesetzen zu arbeiten,
so wie ich das eben erzählt habe, und mit verallgemeinertem Demorgengesetz.
Also hier stehen ja auch nur zwei Formeln, nicht G und H.
Da kann man auch mit dem Verallgemeinerten Demorgengesetz arbeiten,
wenn man da jetzt halt nicht G und H und I,
dann wird das eben nicht G oder nicht H oder nicht
Da brauche ich gleich nochmal eine Folie ein, bevor ich
die online stelle, dass man das nochmal sehen kann.
Also die, dass man die Gesetze hier auch verallgemeinern
kann und dann eben verallgemeinert benutzen kann. Beispiel,
gegeben die Formel und jetzt will man irgendwie zu einer KNF kommen.
Erster Schritt war, man soll Biimflikationen und Implikationen auflösen,
wie Implikationen sind da gar keine, also löst man die beiden Bimplikationen,
sind Kanada, also löst man die beiden Implikationen auf.
Ich habe mit dem in der Mitte angefangen,
aus dem B impliziert sehen, nicht B oder C gemacht
Jetzt den nächsten, da muss man jetzt darauf achten,
wo ist überhaupt die Prämisse von der Implikation?
Das ist eben der ganze Teil vorne.
Also muss der ganze Teil vorne irgendwie negiert werden.
Ja, und jetzt ist das irgendwie doof,
dass das eine nicht hier ganz vorne, dass das so weit außen ist.
Also zieht man das mit der dem Morgenregel immer weiter rein?
Jetzt macht man da erstmal dieses Nicht-A oder nicht und so weiter draus.
Also in Negation reinziehen und den Jungtor umdrehen.
Und wird oder und das Oder wird. Und bei dem
nächsten hier jetzt, wo wir wieder den Morgen anwenden,
da wird aus dem Oder jetzt das Und.
Einmal die doppelte Negation anwenden,
aus dem
Nicht-Nicht-BNB machen
Und eine DNF hätte man jetzt schon,
aber wir wollten ja eine KNF haben. Oh, komm,
hier muss man hier einmal Distributivgesetz anwenden und dann wird er
nicht A oder B und nicht A oder nicht C draus.
Das ist so aus. Das ist immer noch nicht schön,
hat immer noch keine KNF, weil das und hier immer
noch irgendwie unterhalb des Oders ist, bezüglich der Klammerung.
Also nochmal Distributivgesetz anwenden und das D wandert dann da rein.
Dann hat man nicht A oder B oder D
und nicht A oder nicht C oder die.
Wer möchte, kann man noch einmal klammern,
also schöner Klammern mit den Klammerersparnisregeln,
die wir gestern auch hatten und dann sieht das so aus
Und was man noch machen kann,
quasi entweder am Ende oder zwischendurch,
also hier habe ich jetzt ja am Ende die Klammern aufgelöst oder gespart,
das kann man natürlich auch schon irgendwie mittendrin machen,
wenn sich das irgendwo anbietet.
Da tut es das jetzt nicht, aber man könnte das
mittendrin machen, wenn das irgendwo mal der Fall ist.
Man kann auch mittendrin irgendwie Kommutativgesetze und Assoziativgesetze anwenden,
wenn man das irgendwo machen möchte.
Und man kann eben diese Regeln hier, Absorptionen,
die den Potenztautologieregeln, Kontraliktionsregeln und Komplimentregeln anwenden, wenn sich das irgendwo anbietet.
Also wenn ich hier jetzt noch irgendwie sowas hätte wie und nicht A oder A,
dann weiß ich naja nicht A oder A,
wird immer zu eins ausgewertet,
da spielt also
keine Rolle
Bei der Rundverknüpfung, also kann ich das irgendwie entfernen.
Autologieregeln, oder wenn ich zweimal die gleiche Klausel da habe,
dann brauche ich die auch nur einmal hinschreiben.
So kann ich das dann manchmal noch ein bisschen vereinfachen.
Das sind ja Regeln, die jetzt sind ja Regeln,
die nicht direkt in dem Ablauf vorher da waren,
aber die kann man ja auch benutzen,
weil das ja auch immer nur zu äquivalenten Formen inzwischen durchführt.
So, so kann man KNFs und DNS
mit Äquivalenzumformungen herstellen
Gibt noch ein anderes Verfahren. Also und das hier lässt sich
auch schön implementieren, weil eigentlich alle Schritte sind taktischer Natur sind.
Also da muss man bei der Implementierung nicht sonderlich auf diese Mantik der Formel achten.
Man passt quasi einfach immer rüber und guckt, was man
irgendwie machen kann. Und wenn man so eine Implikation oder
eine Bimplikation findet, dann ersetzt man die Teilformeln halt.
Und bei dem Morgen und Appelte Negation genauso, liest man
immer wieder rüber und guckt, dass man sowas findet.
Und wenn ja, setzt man das, dann ist man fertig nachher.
So, jetzt gibt es noch eine Möglichkeit,
eine zweite Möglichkeit, die herzustellen.
Und das geht mit Wahrheitstafeln. Da war als Tafel,
da steckt ja irgendwie eher Semantik drin
Und da ist das Problem, die Wahltafeln können groß werden,
also wenn AB jetzt so wie hier,
da habe ich irgendwie vier Aussagesymbole,
wenn ich da jetzt eine Wahltafel mache,
dann hatte ich schon 16 Zeilen, 2 Uhr 4, 16 Zeilen.
Das kann schon irgendwie nerven nachher,
wenn da noch ein E und ein F dazukommt,
dann will man das händisch zumindest schon nicht mehr machen.
Und auch sonst ist das ein Verfahren,
also auch für Computerimplementierung, wenn das irgendwie,
wenn nicht nach Jahrhundert oder 1000 irgendwie Aussagesymbole habe,
dann klappt das alles nicht mehr so gut.
Und das ist auch gar nicht so unwahrscheinlich,
dass ich irgendwie 100 oder 1000 Sachen ausdrücken möchte.
Aber damit man das mal sehen kann,
dass es auch noch irgendwie den Ansatz gibt,
Und für kleine Sachen geht er ja auch ganz gut.
Nehmen wir mal an, man hat so eine,
ich habe eine Formel F, in der kommen die Aussagensymbole A,
B, C drin vor.
Wie die jetzt aussieht, ist egal. Und nehmen wir
mal einen F, hat die einen Wahrheitswerteverlauf da.
Also wenn A, B und C zu 0 ausgewertet wird,
dann wird auch F zu 0 ausgewertet.
Wenn A zu 0 ausgewertet wird und B und C zu 1,
dann wird F zu 1 ausgewertet und so weiter.
So sieht die Formel irgendwie aus. Wenn ich jetzt diese
Wahrheitstafel habe und ich möchte jetzt irgendwie eine DNF erzeugen,
die kann man da rauslesen.
DNF war die Geschichte, wo mehrere duale Klauseln mit oder verknüpft waren.
Duale Klausel, das war die Geschichte mit Literale
mit Unverknüpften.
Welchen Wahrheitswerteverlauf hat eine duale Klausel? Also wenn ich eine duale Klausel nehme,
also dass ein D da drinnen auftritt, macht da irgendwie keinen Sinn.
Ich habe hier nur A, B, C,
also wird das irgendwie eine Verknüpfung von entweder nur das A
sein oder das A und das B oder es wird irgendwas mit A,
B, C haben.
Gehe mal davon aus, ich habe drei Literale,
denen unterschiedliche Aussagesymbole zugrunde liegt.
Also ich habe irgendwie literale für A, B und C
irgendwie mit unverknüpft.
Wie sieht der Wahrheitswerteverlauf aus
Da kommt Leute, wenn ich A und nicht B und
C habe, wie sieht der wahrheitswerte Verlauf aus?
Das wäre das erste.
Ja, genau
Also das, worauf ich eben hinaus wollte, hat er
vorneweg noch eingebaut. Ich nehme quasi die Zahlen,
wo das zu eins ausgewählt, also anders,
ich fange anders an, wenn ich drei Literale habe,
und ich verknüpfe die mit und.
Also drei Literale, eins gehört zu A, eins gehört zu B,
eins gehört zu C, entweder ein positives oder ein negatives Literal.
Wenn ich die drei mit unverknüpfe,
dann kriege ich als wahrheitswerte Verlauf etwas raus für überall Nullen stehen,
bis auf eine Stelle, da steht eine Eins.
Wenn ich also zum Beispiel nehme,
nicht A und nicht B und nicht C,
dann sagt mir das,
wenn ich A zu 0 aus Werte B zu 0 und C zu 0,
dann wäre das durch die Negation,
werden die dann alle 1-1-1 und dann kommt dann eine Eins raus.
Und alles andere ist eine Null
Wenn man sich das jetzt hier überlegt, so,
dass ich das dann mache für die vierte Zeile zum Beispiel,
da sage ich dann nicht A und B und C,
dann habe ich eine duale Klausel,
die genau an der Stelle der vierten Zeile hier, da,
da wird sie zu eins ausgewertet und sonst überall zu null.
Was mache ich für jede dieser Zeile, wo da eine einsteht und verknüpft die dann mit oder?
Dann habe ich quasi als Wahlswerteverlauf einmal eine Zeile,
wo überall Nullen steht, eine Spalte,
wo überall Nullen stehen, nur hier steht eine eins,
dann nehme ich eine Spalte, wo überall Nullen steht,
nur hier steht eine eins, und eine Spalte,
wo überall Nullen steht, nur das steht eine eins.
Und wenn ich die dann mit oder verknüpfe,
dann sammle ich quasi gerade
die einsen zusammen
Und dann habe ich die DLF. Also so für die
drei Zeilen, wo hier eine Eins auftritt.
Das Wichtige ist eben, jede von diesen dualen Klauseln,
die hat genau an der Stelle, wo die jetzt steht,
eine Eins und dann allen anderen hat die eine Null.
Und dann verknüpfe ich die noch mit oder und dann habe ich eine DNF.
Da kommt jetzt nicht zwingend eine kurze DNF raus.
Es kann sein, dass die irgendwie,
dass man eine kürzere DNF finden kann als Lieder
Mhm. Und bei der KNF, ähnliche Idee,
wenn ich eine Klausel habe,
wie sieht der Wahlswerteverlauf von der Klausel aus,
wenn ich eben so wie eben,
jetzt habe ich irgendwie sowas wie A oder B oder C,
wie sieht das aus?
Genau. Ja. Genau
Genau. Ja, sehr schön. Hier ist jetzt,
hier ist der Fall, da kann ich mir jetzt die,
wenn ich so eine Kahn erfahre,
wie A oder B oder C,
dann wird das eben an genau einer Stelle null,
nämlich genau da, wo das alles nicht zutrifft.
Also A oder B oder C, das wäre genau an der Stelle hier eine Null.
Und wenn ich die Dinger dann mit unverknüpfe, dann sammle ich quasi die Nullen zusammen.
Also so ähnlich wie eben auch nur, dass ich jetzt,
statt dass ich mir die Zeilen angucke,
wo eine Eins rauskommt, gucke ich mir die Teilen aus,
wo eine Null rauskommt, statt dass ich A nehme,
wenn in der Zeile A zu 1 ausgewertet wird,
nehme ich dann A eben gerade rein,
wenn A zu 0 ja ausgewertet wird.
Also ich mache das quasi alles genau invertiert.
Ich gucke mir die Zeilen an, wo das null ist.
Und wenn hier A zu null ausgewertet wird,
dann nehme ich A so rein. Und wenn nur A
zu 1 ausgewertet wird, dann nehme ich das nicht A rein.
Dann verknüpfe ich die alle mit oder und dann verknüpft das
alles mit und. Und dann kommt eine KDF raus.
Und da, wenn man das jetzt begründen möchte,
warum das Verfahren korrekt ist, kann man eben sein.
Erstens, dass da eine KNF bzw. DNF rauskommt,
das ist nach Konstruktion
tatsächlich klar
Nein, das ist halt genauso konstruiert. Und das zweite habe ich ein paar Klammern vergessen.
Also die müssten alle noch geklammert sein hier. Die einzelnen. Und das zweite ist,
ist die wirkliche Äquivalent,
das geht eben mit den Begründungen von eben, dass man sagt,
naja, eine von den dualen Klauseln oder Klauseln,
so wie ich die da konstruiere,
die hat eben genau an der Stelle, wo man die da konstruiert,
eine 1 beziehungsweise null und durch die uns oder oh,
das sammeln sich dann eben entweder die einzelnen oder die nullen,
dann ist das korrekt.
Also auch schickes Verfahren relativ elegant zu machen,
aber bei Formeln mit mehreren verschiedenen Aussagesymbolen
wird das schnell und praktikabel
Da nochmal zusammengefasst, wenn man die DNF erstellen will,
also das, was wir zuerst hatten,
guckt man sich die Zeilen an,
die zu eins ausgewertet werden und für jede dieser Zeilen macht man sich eine duale Klausel und zwar macht man das so,
wenn in der Zeile das Aussagesymbol zu eins ausgewertet wird,
dann nimmt man a positiv in die Klausel auf,
wenn das zu null ausgewertet wird,
nimmt man a negativ in die Klausel rauf,
all die dualen Klauseln mit oder verknüpfen und dann ist man fertig.
Achso und hier steht drin, wenn ich sage,
hier wird eine duale Klausel erzeugt, das bedeutet,
all die Dinger hier verknüpfe ich dann mit und.
Und da gibt es noch so diesen Spezialfall,
wenn es irgendwie keine Zeile gibt,
die zu eins ausgewertet wird,
sprich alles ist null,
dann ist es ja
eine Kontradition
Würde ich jetzt gerade die leere Formel erzeugen,
das bringt aber irgendwie nichts und dann nehme ich mir als Formel halt hier A und nicht A.
Das ist eine DNF und die wird zu null ausgewertet, bin ich fertig.
Und bei KNF, das sieht jetzt fast genauso aus,
nur dass quasi aus der Eins wird eine Null,
aus Dualklausel wird Klausel und hier dreht sich das auch,
wenn A zu 1 ausgewertet wird,
dann nehme ich halt das Nicht-A auf und sowas.
Sieht fast genauso aus. Null,
wenn A zu 1 ausgewertet wird, nehmen wir das nicht A,
wenn A zu 0 ausgewertet wird, neben A,
neben A,
all die Dinger werden mit oder verknüpft und all die
so gewonnenen Klausel werden mit unverknüpft
Und da gibt es jetzt halt den Fall,
wenn keine Zeile zu null ausgewertet wird,
dann würde ich auch wieder keine Klauseln erzeugen,
wenn keine Zeit zu null ausgewertet wird,
habe ich aber eine Tautologie,
also nehme ich mir einfach die Formel A oder nicht A,
die ist dann äquivalent.
Fertig. Beweist, dass das klappt. Erstmal, wie gesagt,
offensichtlich werden DNFs oder KNFs erstellt. Ich sage irgendwie,
für jede Zeile erzeuge ich eine Klausel und danach verknüpfe ich die mit unten,
kommt da eben irgendwie auf jeden Fall eine KNF raus.
Und jetzt muss man sich halt überlegen,
warum sind die Äquivalent zu ursprünglichem Formel?
Nicht eine DNF-Farbe, dann haben diese einzelnen dualen Klauseln,
gerade in der Zeile,
eine Eins und durch die oder Verknüpfung
Kriegt man dann eine equalente Formel. Und bei der KNF
haben die einzelnen Klauseln gerade an der Stelle eine Null und
durch die Unverknüpfung sammelt man dann eben die Nullen auf und hat wieder eine ursprüngliche,
zu ursprünglichen Formel-equalente Formel.
Fragen dazu. Könnt ihr auch an ein,
zwei Beispielen auf dem Aufgabenzettel üben, da soll man immer einmal
irgendwie mit Äquivalenz und Formel das machen und einmal mit Wahrheitstafelmethode,
dass man es beides mal irgendwie getestet hat.
So. Themenwechsel
Jetzt haben wir diese Normalform uns angeguckt. Und wenn man
sich jetzt auf Erfüllbarkeit konzentriert. Also wenn man irgendwie wissen will,
wie schnell gehen dieser Füllbarkeiten. Und wir hatten ja schon zur Erfüllbarkeit,
da hängt auch ganz eng Unerfüllbarkeit mit drin,
weil wenn ich irgendwie Unerfüllbarkeit testen kann,
dann weiß ich natürlich auch, wie Formel erfüllbar ist oder nicht.
Wenn sie nicht unerfüllbar ist, ist sie offensichtlich erfüllbar.
Und mit Tautologien hängt das auch zusammen, weil eine Formel dann unerfüllbar ist,
wenn die Negation davon eine Tautologie ist und solche Geschichten.
Und wenn man sich jetzt mal irgendwie auf Erfüllbarkeitstests einschränkt und sagt,
ich möchte schnell auf Erfüllbarkeit testen wollen.
Also ich will einen Algorithmus haben, der schnell Erfüllbarkeit testet
Dann wissen wir schon so einiges. Wir wissen nämlich,
dass KNFs schwierig auf Verfüllbarkeit zu testen sind.
Das ist dieses Resultat, das gesagt wurde,
satt ist NP vollständig. Dann kann man daraus schließen,
dass Aussagen logische Formeln allgemein schwierig sind, auf Verfüllbarkeit zu testen.
Weil wenn ich ein Verfahren hätte,
dass Aussagen logische Formeln allgemein schnell auf Erfüllbarkeit testet,
dann kann ich auch KNFs schnell auf Verfüllbarkeit testen.
Und wir wissen, dass DNFs einfach zu testen sind auf Erfüllbarkeit.
Da steckt aber schon drin,
wenn es für Allgemeine schwierig ist und für DNFs einfach,
dann wird das Herstellen von DNFs aufwendig sein.
Ansonsten könnte ich einfach eine Aussage logische Formel,
eine DNF umwandeln und das da schnell machen
Dann hätte ich nicht hier die Aussage, dass das im Allgemeinen schwierig ist,
sondern dann wüsste ich es ja ganz einfach.
Ich fand jetzt in der DNF um und bin fertig.
Jetzt könnte man sagen, naja, wenn die DNFs schick sind,
also wenn das die Dinger sind, die in der Praxis viel auftreten,
dann brauche ich mir keine Sorgen machen.
Wenn quasi KNFs und allgemeine Aussage logische Formeln,
wenn das die Formeln sind, die selten auftreten für Praxis,
wenn das eher so die Theoriefälle sind.
Und wenn DNFs ganz oft auftreten, dann kann ich sagen,
ist ja alles super, die lassen sich schnell ausrechnen.
Leider ist es genau andersrum,
dass man die DNFs eher selten gebrauchen kann und die KNFs
sehr häufig
Das hängt damit zusammen, dass es im Modellieren eben schöner ist,
so Sachen zu sagen wie,
ich möchte A und B und C oder ich möchte D
und E und F oder ich möchte A und nicht B oder und so weiter.
Da steckt irgendwie eher das drin, was man aussagen können möchte
als bei der DNF. Deswegen kann man hier zusammengefasst sagen,
eine Erfüllbarkeit ist im Allgemeinen schwierig,
weil bei DNS geht es zwar einfach,
aber die braucht man eher selten und sie sind eben schwierig herzustellen.
Also wobei hier das schwierig in den Fällen hier,
also überall wo hier schwierig steht, das soll nicht bedeuten,
dass das irgendwie kompliziert ist,
sondern dass es zeitlich aufwendig ist
Weil irgendwie eine Aussage logische Formel auf Erfüllbarkeit zu testen,
ist natürlich nicht kompliziert. Ich mache eine Wahrheitstafel und gucke,
ob da irgendwo eine einsteht. Das Problem ist,
um diese Wahrheitstafel zu erzeugen, brauche ich irgendwie exponentiell viele Schritte.
Die hat ja zwei hochendviele Zeilen, wenn ich in verschiedene Aussagensymbole habe.
Also die Bedeutung von schwierig bezieht sich auf Komplexitätsklassen.
So, wir wollen das aber trotzdem. Ich möchte trotzdem
schnell testen können, ob was erfüllbar ist oder nicht.
Und was man jetzt immer machen kann, ist,
jetzt kann man sich überlegen, wenn Aussagen logische Formeln
allgemein schwierig sind oder auch diese KNFs allgemein schwierig sind,
vielleicht kann ich das irgendwie einschränken.
Vielleicht kann ich irgendwie sagen, Ich will es meine KNF haben,
aber jede Klausel darf nur aus einem Literal bestehen.
Dann ist es wieder total einfach. Dann habe ich nämlich
genau eine duale Klausel der Art, A und Nicht-B und C oder irgendwie sowas.
Das lässt sich, das geht dann schnell.
Aber da schränkt man sich auch irgendwie zu doll ein.
Das ist also doof. Jetzt kann man sich überlegen,
vielleicht mache ich das so, dass ich sage,
ich will eine KNF haben,
aber jede Klausel darf maximal zwei Literale haben.
Darf eine Dualklausel so aussehen wie A oder so
wie Nicht-A oder B oder nicht A oder nicht
C. Irgendwie sowas. Das geht tatsächlich auch ziemlich schnell.
Das machen wir jetzt aber hier mal nicht
Und man kann auch versuchen, das irgendwie, ne,
also die Idee ist irgendwie versuchen, sich so einzuschränken,
dass man immer noch eine möglichst große Klasse an Formeln hat,
mit denen man in der Praxis was machen kann,
aber dass die Erfüllbarkeitstests schön schnell gehen.
Also wir suchen Einschränkungen, sodass wir Füllbarkeit schnell testen können.
Ja. Eine Möglichkeit wäre das zu machen,
was ich eben gesagt habe, nur noch mit Klauseln
der Größe maximal zwei zu arbeiten oder man guckt sich,
und das wollen wir jetzt nochmal machen, Hornformeln an.
Die sind deswegen so schön, weil die einen sehr eleganten
Erfüllbarkeitstest haben und weil die in der Praxis recht bedeutsam sind.
Also sie sind so Grundlage von relativ vielen Logikprogrammierungen,
Prolog zum Beispiel
Und damit kann man ziemlich viel ausdrücken, so.
Bei Weitem nicht alles. Wir werden auch gleich sehen,
dass man sogar etwas, was relativ einfach ist,
damit nicht ausdrücken kann.
Aber das stört einen dann in vielen Fällen gar nicht so.
Wie sind die definiert? Erstmal eine Klausel, also irgendwas,
was mit unten, eine Literale, die mit oder verknüpft sind.
Und ich sage, dass es genau dann eine Hornklausel,
wenn sie höchstens ein positives Literal enthält.
Also. Und wenn jetzt jede Klausel eine Hornklausel ist,
dann nenne ich das
eine Hornformel.
Beispiele da
Bei eins, das sind alles Hornklauseln. A,
enthält genau ein positives Literal, nicht A oder B,
auch nicht A oder B oder Nicht-C auch,
nicht A oder Nicht-B, enthält gar keins,
aber die Formulierung hier ist ja auch höchstens ein positives Literal,
nicht genau eins, sondern höchstens eins,
also werde ich solche Klauseln haben,
die entweder aus genau einem positiven Literal bestehen,
also A oder ich werde welche haben,
wo ich eine gewisse Anzahl von negativen Literalen habe und
dann genau ein positives oder ich werde was haben,
wo ich nur negative Literale habe
Keine Hornklauseln ist das, was dabei zweitens steht.
Da sind nämlich zwei positive Literale drin, das ist doof.
Und wenn ich jetzt halt mehrere Hornklauseln nehme und die
mit unverknüpfe, dann kriege ich halt ein Hornformel.
Deutlich eingeschränkt gegenüber normalen Formeln oder normalen KNS.
Also wenn ich mir hier überlege, dass das hier
schon keine Hornklausel ist, A oder B.
Man kann sich sogar überlegen, es gibt gar keine Möglichkeit,
den Wahrheitswerteverlauf von A oder B durch eine Hornformel auszudrücken.
Also wo ich eben meinte, es gibt schon eine recht einfache Form,
die man dadurch nicht ausdrücken kann.
Also A oder B
kann man nicht ausdrücken
Macht aber nichts, weil man eben sehr,
sehr viel anderes ausdrücken kann und eben diesen schnellen Erfüllbarkeitstest hat.
Und solange da jetzt nur irgendwie ein so ein A oder Bier
rumflattert oder so, kriegt man das manchmal noch hin,
dass man dann eben da ein gewisses Pre-Processing macht und den kann man damit irgendwie arbeiten.
So, genau. Jetzt haben wir,
hier sieht man sie ja schon,
diese drei Typen von Hornklauseln, die mit genau einem A,
die wo irgendwie ein so ein positives Literal auftritt und viele negative oder die,
wo nur negative Literale auftritt.
Das sind diese drei Typen von Hornklauseln und man kann so eine Implikationsschreibweise einführen,
die ist nachher für den Algorithmus, ist das etwas schicker,
dann zu sehen, was man machen will.
Also der Algorithmus heißt Markierungsalgorithmus,
weil man atomare Formeln markieren will und man sieht eben in
der Implikationsschreibweise ziemlich schnell,
was man markieren will
Deswegen diese Implikationsschreibweise und genau, gehen wir mal die drei Sachen durch. Entweder die Möglichkeit,
sie enthält negative Literale und genau ein positives Literal,
das nennt man da noch Regeln, aber wichtig ist erstmal,
das sieht dann so aus hier,
nicht A oder nicht, nicht A1 oder nicht A2,
ganz viele negative Literale,
bis zu dem Nicht-AI hier und irgendwann kommt so ein Positives.
Das Positive kann natürlich auch irgendwo da drin sein,
aber dann kriegt man das dadurch Assoziativität und Kombinativität hin,
dass das so aussieht.
Und jetzt kann man sich überlegen, so wozu ist das Äquivalent?
Und jetzt kann man erstmal die ganzen Negativen hier vorne sammeln,
also jetzt nochmal explizit hier geklammert,
damit man
das besser sehen kann
Und dann kann man die Negation rausziehen mit dieser Verallgemeinerung von dem Morgen.
Jetzt sieht man hier die Negation raus und dann landet man
halt nicht und dann in Klammern A1 und A2 und bis zu und AI oder AK.
Auf das Arcade bezog sich das nicht mit dem rausziehen. Ja,
und wenn man jetzt hierfür für diesen ganzen Block mit alles,
was hier unverknüpft ist, wenn man dafür die Formel F hinschreibt,
dann sieht man, dass da steht, nicht F oder AK.
Da springt es einen an, diese Implikationsschreibweise,
dass es eben das Gleiche ist,
wie F impliziert AK und dann kann man für das F
wieder Last da hinschreiben und dann hat man eben Schick als Implikationsschreibweise,
dass all die eben doch negativen Literale,
wenn man die alle mit unverknüpft, dann ist das die Prämisse für die Implikation, dass man a.k.
haben will. Eine Begründung, wenn ich hier jetzt irgendwie,
wenn ich eins davon zu null auswerte,
dann wird das hier ja sofort, war das Ganze,
die sind ja alle mit oder verknüpft.
Das ist ja genauso. Wenn ich hier 1 zu 0 auswerte,
dann wird die ganze Prämisse falsch und dann wird die Implikation insgesamt wahr.
Und wenn ich die alle hier zu 1 auswerte,
dann ist das insgesamt, ist das alles null hier.
Und dann muss ich auch das AK zu 1 auswerten,
damit das wahr werden kann. Und hier genauso,
wenn ich die alle zu 1 auswerte,
dann ist die Prämisse war,
dann muss ich auch das AK wahrmachen,
damit das
zu 1 ausgewertet wird
Passt also ganz gut. Oh, jetzt kann man sich überlegen,
genau die gleichen Umformungen kann ich auch machen,
wenn ich nur negative Literale habe.
Das Doofe ist nur, also ich kann diesen Schritt hier
mit der Klammerung machen und auch dieses nicht dann rausziehen und so.
Aber ich habe dann quasi nichts, wo ich hin implizieren könnte.
Und dann kann man aber, wir hatten ja letzte Vorlesung
einmal kurz dieses Top und Bottom als Konstanten eingeführt,
also Top als Symbol für, wird immer zu eins ausgewertet.
Bottom als Symbol für wird immer zu null ausgewertet.
Und das kann man halt machen,
wenn ich hier vorher so eine Oder-Verknüpfung habe,
dann hänge ich mir dann noch einen Uder-Bottom ran.
Das ist immer noch eine äquivalente Formel.
Das ist die Idee, wenn ich nur negative Literale habe
Dass ich erstmal, also hier nur negative und jetzt,
oder verknüpfe ich das mit dem Bottom.
Das ist eine äquivalente Formel, weil das immer zu null ausgewertet wird.
Das ist also für die, oder Verknüpfung eigentlich egal.
Und dann mache ich das Gleiche wie eben auch.
Und dann habe ich halt, dass all die Dinger hier
bottom implizieren. Und die Idee wird nach ihr sein,
naja, wenn ich die alle hier zu eins auswerte,
dann impliziere ich plötzlich Bottom und dann weiß ich,
oh die Formel muss unerfüllbar sein.
Und macht auch Sinn, weil wenn die alle zu eins
ausgewertet werden, dann mache ich die Klausel jährlich wahr.
Wenn mich die alle zu eins auswertet,
dann steht da null oder null oder null oder null.
Und das bleibt dann
eine Null
Letzter Fall, der ist so ein bisschen,
wenn ich nur ein positives Literal habe und ich da jetzt unbedingt eine Implikationsschreibweise haben möchte,
dann kann ich das so machen, dass ich sage,
okay, hier A1,
das Äquivalent zu nicht Top oder A1,
also das hier ist ja Bottom, also A1,
das Äquivalent zu Bottom oder A1 für Bottom kann ich nicht top schreiben und dann kann ich hier wieder so eine Implikationsschreibweise machen.
Ob er jetzt in dem Fall braucht, ist so ein bisschen,
Idee ist halt, dass man am Anfang sieht,
ich muss die alle auf jeden Fall markieren,
die müssen nämlich alle zu eins ausgewertet werden.
Ja, das sind die drei Klassen, die man
da hat
Also jetzt einmal kurz ein kleiner Exkurs. Man kann noch,
wenn man möchte, diesen Begriff der reduzierten Hornformel einführen,
einen Horncore in eine Hornklausel,
in der kein Aussagesymbol mehrfach auftritt, die heißt reduziert.
Und eine Hornformel heißt reduziert, genau dann,
wenn alle Klausel reduziert und verschieden sind.
Verschieden macht irgendwie Sinn, weil sonst habe ich da eine Klausel.
Mehrfach, dann kann ich die auch nur einmal dahin schreiben,
die sind ja eh alle mit unverknüpft.
Und reduzieren kann ich sie auch immer,
weil wenn ein Aussagesymbol mehrfach auftritt in der Hornklausel,
wenn das mehrfach gleich auftritt,
dann brauche ich es nicht
Also wenn das einmal, wenn das zweimal als Nicht-Ader drin auftritt,
dann reicht es auch, dass da einmal hinzuschreiben.
Und wenn es komplementär auftritt, einmal als nicht A und einmal als A,
dann wird das ganze Ding eh zu eins ausgewertet.
Also die ganze Klausel, dann kann ich die auch wieder ignorieren.
Nur es sei denn, es ist die einzige,
aber dann kann man sich überlegen,
dass man halt jede Hornformel umwandeln kann in eine reduzierte Hornformel.
Und das hilft manchmal nachher so bei Beweisen und solche Sachen. Aber beispielsweise,
wenn man das hier beweisen will,
dass es keine zu A oder B äquivalente Hornformel gibt,
da kann man sich dann überlegen,
dass wenn es dazu eine äquivalente Hornformel geben sollte,
dann müsste ich müsste es eine Unverknüpfung von reduzierten Hornformeln sein.
Dann kann man sich überlegen, wie viele reduzierte Hornformeln kann
ich bauen, die nur aus As und Bs bestehen?
Das sind nicht so viele. Also irgendwie A ist eine B,
ist eine Nicht-As,
eine Nicht-B ist eine und dann halt irgendwie nicht A oder
B und Nicht-B oder A und Nicht-B oder Nicht-A. Und dann kann man sich überlegen,
wenn man die, die kann man völlig beliebig verknüpfen,
da kriege ich nie den gleichen Wahrheitswerteverlauf raus wie das hier.
Dafür ist es ganz nitzlich, sich diesen Reduktionsbegriff einzuführen und
den Satz darüber zu zeigen. Wollen wir jetzt nicht im Detail machen,
aber merkt euch mal, dass das eben bei Hornformeln,
dass man damit eben nicht alles erwischt und ein Beispiel ist
eben schon dieses A oder
Weil man das eben nicht konstruieren kann. Für was anderes
braucht man das eigentlich gerade bei uns jetzt nicht.
So, dann kann man jetzt sagen, okay,
die sind recht eingeschränkt, wenn ein Auto wenig geht,
aber man kann halt ziemlich viel dafür machen.
Und deswegen, weil man so viel damit machen kann,
lohnt es dann zu sagen, okay,
jetzt will ich einen effizienten Erfüllbarkeitstest haben.
Das ist ja auch das, wo wir ursprünglich mal von Loose gegangen sind.
Ideen. Also oben steht eine Hornformel in Nicht-Implikationsschreibweise und darunter
steht eine Hornformel in Implikationen,
Was kann man machen, also wie kann man
rauslesen oder ermitteln, ob die erfüllbar ist oder unerfüllbar?
An so einem kleinen Beispiel kann man so das vielleicht sich
ganz gut überlegen und dann kann man versuchen, das zu verallgemeinern.
Was könnte man versuchen? Also jetzt ohne mit Wahrheitstaffeln
zu arbeiten natürlich. Mit Wahrheitstagen geht es natürlich auch.
Wenn ihr euch das so anseht und ihr dürftet jetzt irgendwie,
ihr kriegt nur die Formel und ihr sollt euch jetzt ein Verfahren überlegen,
das eben für solche Formeln ermitteln kann,
ob die erfüllbar ist oder nicht
Jetzt kann man sich überlegen, irgendwie,
man liest da einmal so rüber und was wäre ein guter erster Schritt,
wo weiß man sofort, die muss man zu eins auswerten.
Bei welchen Teilformeln? Wenn ihr euch das hier anguckt,
und nehmen wir mal an, ich gebe euch jede Klausel isoliert.
Ich gebe euch gar nicht die ganze Formel,
sondern ich gebe euch nur jede Klausel.
Wenn ich euch nicht A oder C gebe,
könnt ihr da irgendwie
was rauslesen
Wir können rauslesen, dass ihr A
zu falsch machen müsst oder C zu 1 oder so,
aber das irgendwie, das hilft nicht so viel.
Jetzt gebe ich euch A, was könnt ihr daraus lesen?
Na, was passiert, wenn ihr A zu 0 auswertet?
Wird falsch, ne? Wenn ihr hier A zu 0
auswertet, da muss die ganze Formel falsch werden,
das ist ja unverknüpft
Also das ist doof. Sprich,
wenn man euch jede Klausel vorlegt, nur die Klausel,
ihr kriegt jede Klausel, dann könnt ihr zumindest bei den Klauseln,
die aus genau einem Aussagensymbol bestehen, immer sagen,
das muss ich zu eins auswerten.
Das wisst ihr dann schon mal. Geht ja nicht anders.
Da steht ein A, ne, A muss zu eins ausgewertet werden,
sonst könnt ihr die ganze Formel nicht wahrmachen.
Ihr wollt ja einen Erfüllbarkeitstest haben, also ihr wollt wissen,
ob die Formel erfüllbar ist und bestenfalls wollt ihr sogar eine Belegung rauslesen,
die die Formel erfüllt. Also A kann man zu eins auswerten,
wie kann man jetzt weitermachen, wenn man jetzt weiß,
okay,
A muss ich zu eins auswerten und jetzt lege ich euch
nochmal die ganzen Klauseln vor,
was könnt ihr
jetzt noch rauslesen
Ach, jetzt müssen sie dann Jahre 2, 2,
2, 3, 2, 3, 4,
5, 6, 7, 8, 7,
8, 1, 2, 3, 2,
1, 2, 1, 2, 1,
2, 1, 2, 1, 2, 1,
3, 2, 1, 3, 2, 1,
3, 2, 1, 3, 2, 1, Das ist unser alter Bären, das heisst.
Ja, genau, in dem Beispiel ist es sogar unerfüllbar. Erstmal würde man sich genau das,
was du gemacht hast, eben erst mal würde man sich überlegen,
so ein guter Ansatz ist doch, mir zu überlegen,
die Dinger,
die da irgendwie isoliert als einzelne positive Literale auftreten oder irgendwie,
als wenn man möchte,
hier als Top impliziert A oder eben einfach direkt als A. So,
die muss ich alle zu eins auswerten.
Jetzt geht man nochmal rüber und guckt sich an,
ob man das irgendwie benutzen kann und bei anderen Klauseln auch wieder was Neues rauszulesen.
Wenn ich wegen der Formel hier weiß, dass ich A zu 1 auswerten muss,
Und ich gucke mir jetzt nicht A oder nicht C an.
Hilft mir irgendwie gerade noch nicht. Aber wenn ich mir
nicht A oder C angucke, dann weiß ich,
hey, wenn ich A zu 1 auswerten muss,
dann wird nicht A zu Null.
Wenn ich die Klausel also auch warm machen will,
muss ich C zu 1 auswerten. Dann kann ich mir
auch das Zähen markieren. Jetzt habe ich die beide,
jetzt weiß ich A und C,
jetzt gehe ich wieder rüber und gucke mir wieder Klauseln an,
die ich bisher noch nicht benutzt habe.
Und dann kann ich mir angucken,
nicht A oder nicht C irgendwann und dann merke ich,
oh, die muss sich ja beide zu eins auswerten.
Jetzt habe ich hier ein Problem. Und dann habe ich irgendwie diesen Widerspruch,
dass ich einerseits weiß, ich muss die beiden zu eins auswerten,
sonst kann ich irgendwelche von den Klauseln,
die ich mir vorher angeguckt habe, nicht warm machen.
Und hier sehe ich jetzt,
oh, ich müsste aber 1 zu 0 auswerten
Werde ich nicht beide schaffen können, also ist die Formel unerfüllbar.
Und wenn solche Fälle eben nicht auftreten,
also wenn ich das hier jetzt nicht hätte, so,
dann wüsste ich, hey, die Formel ist erfüllbar, alles ist gut,
ich werde A zu 1 aus und C zu 1, fertig.
Das ist die komplette Idee bei dem Markierungsalgorithmus. Also,
dass man immer wieder rübergeht und guckt,
welche Symbole man noch markieren kann,
weil man immer weiter versucht zu ermitteln,
welche müssen zu eins ausgewertet werden,
damit ich überhaupt eine Chance habe,
eine erfüllende Belegung zu finden.
Das ist die Kernidee. Mhm. Sieht dann so aus
Also markiere, Aussagesymbole, die in jeder erfüllenden Belegung wahr sein müssen.
Als erstes gucken wir uns all die Teilformeln dieser Form an,
top impliziert AI. Und all die AIs kann ich markieren.
Die müssen alle wahr sein. Wenn ich davon eins falsch mache,
habe ich keine erfüllende Belegung. Top impliziert, null,
eins impliziert, null, funktioniert nicht, ist falsch.
Und wichtig ist auch hier, die sind ja alle mit unverknüpft.
Alle diese Klauseln sind mit unverknüpft. Das heißt,
ich muss jede Klausel für sich auch wahrmachen.
Das nutze ich hier aus. So,
und jetzt gehe ich in so einer Waldschleife immer wieder über
die Formel
Und guckt mir immer an, also alle Teilformeln dieses Typs habe ich quasi abgefrühstückt.
Und jetzt gucke ich mir nur noch an Teilformeln,
entweder von diesem anderen Typ, wo ich so und so viele
negierte Aussagesymbole hatte und genau ein Positives oder eben Teilformeln der Art,
wo ich nur negierte Aussagensymbole hatte.
Die suche ich jetzt immer. Und zwar gucke ich mir die an,
bei denen alles in der Prämisse schon markiert ist.
Und nur solange es solche gibt, mache ich weiter.
Und wenn das die Form hier aus 1 hat,
Dann weiß ich, also alles in der Prämisse ist markiert.
Jetzt habe ich quasi den gleichen Fall wie hier oben auch.
Ich weiß das hier vorne, das wird zu eins ausgewertet
bei einer erfüllenden Belege. Wenn ich irgendwie eine Belegung habe,
die eine Chance hat, noch zu einer erfüllenden Belegung zu werden,
dann wird das gerade alles zu eins ausgewertet.
Dann weiß ich, das hier muss ich auch zu eins auswerten.
Weil ich vorne alles eins, muss auch die Konklusion zu eins ausgewertet werden.
Ergo markiere ich auch jedes Vorkommen von diesem AI.
Und wenn gehe aber die Form von zweitens hat,
so wie er das eben auch gesagt hat,
dann gebe ich unerfüllbar aus, weil das würde bedeuten,
die hier vorne muss ich alle wahrmachen, dann wird die Prämisse wahr,
hinten das Bottom kann ich aber nicht wahrmachen,
also habe ich eins impliziert,
null wird falsch,
gibt es also
keine erfüllende Belegung
Ja. Und wenn ich irgendwann mal diesen, nicht mehr in diesen Schleifenrumpf gehe,
weil es solche Sachen hier nicht mehr gibt, diese beiden Formeltypen,
wo vorne alles markiert ist, dann höre ich auf,
dann kann ich nämlich alle anderen Aussagesymbole zu Null aus,
also alle, die ich noch nicht markiert habe,
werde ich einfach zu Null aus und habe dann eine erfüllende Belegung.
Warum ist die dann erfüllend? Ich habe ja nur noch Teil vor,
also ich habe dann entweder ganz viele Teilformeln,
die entweder so aussehen wie hier,
wo das AI markiert ist, das ist ja okay,
das wird dann zu eins ausgewertet,
ich habe Teilformeln von diesem ersten Typ,
wo alles markiert ist,
das ist auch okay und dann habe ich vielleicht noch Teilformeln,
wie hier bei erstens und zweitens,
wo aber vorne in der Prämisse nicht alles markiert ist und wenn ich die jetzt halt zu Null auswerte,
weil ich sage,
die sind nicht markiert,
also werde ich die zu Null aus,
dann wird die Prämisse ja falsch
Da sind da einige von markiert und einige nicht,
die nicht markierten, werden zu null ausgewertet.
Das wird alles mit unverknüpft, wird also falsch.
Und dann habe ich hier Prämisse,
ist falsch und dann ist die ganze Implikation wahr.
Fertig. Dann habe ich also eine Belegung,
die tatsächlich die ganze Formel warm macht.
Auf der nächsten Folie kommt er nochmal.
Nur ein bisschen anders aufgeschrieben halt als Ablaufdiagramm.
Das ist aber das Gleiche. Könnt ihr mal.
Könnt ihr mal kurz draufgucken und euch davon überzeugen,
dass das
das Gleiche ist
Ja. Das ist das Gleiche, ne? Sieht man manchmal so ein bisschen besser den Ablauf. Beispiel,
um die Formel als, nicht in Implikationsschreibweise,
da drunter halt in Implikationen, in Implikationsschreibweise,
Dann hat man hier irgendwie A und B impliziert,
eh, top impliziert, C, top impliziert,
A, C impliziert B, A impliziert D,
C und die implizieren A, eh,
impliziert Bottom und G, impliziert Bottom.
Was man also nicht haben möchte nachher, ist,
dass entweder das E markiert wird oder das G,
weil wenn eins von den beiden markiert wird,
weiß die Formel ist unerfüllbar.
Jetzt fängt man halt an und sieht irgendwie im ersten Schritt sehe ich,
dass hier top impliziert A ist und top impliziert C. Weitere Formeln,
wo vorne das top steht, gibt es nicht.
Also markiere ich in der ersten Runde A und
Statt das so aufzuschreiben, kann man das auch so machen,
dass man jetzt einfach hier die Formel einmal sich irgendwo hinschreibt und
dann fängt man eben an, das in der Formel zu markieren.
Da ist das manchmal ein bisschen weniger Schreibarbeit. Jetzt sieht man halt überall,
wo Arzt und C stehen, da markiert man sich das alles.
Also hier ist das A markiert, da ist das C markiert,
da ist das A markiert, da ist das C markiert.
Das A, hier ist auch markiert, bringt nur halt nicht so viel.
Also vorne ist das denen nicht markiert, aber machen nichts.
Also da kann man auch markieren. Also rechts kann man
auch immer markieren. Und jetzt sieht man aber,
weil wenn der das C markiert hat,
dass wegen dieser Implikation hier c impliziert B,
muss jetzt das B markiert werden.
Also nochmal die Idee, C wird markiert, heißt,
ich muss das,
jede erfüllende Belegung muss C
zu 1 auswerten
Eben, weil ich sonst das hier nicht wahrmachen kann,
dieses Top-Impliziert-C. Wenn ich jetzt weiß,
C wird zu eins ausgewertet,
dann muss ich auch B zu eins auswerten,
weil wenn ich nur C zu eins auswerte und B zu null,
dann habe ich hier ein Problem an der Stelle.
Das würde dann falsch werden und weil das alles unverknüpft ist
, wird die ganze Formel falsch.
Dann würde ich also das B markieren und wegen der
hier würde ich auch noch das Demarkieren.
A, es ist markiert, dann muss wegen A
impliziert die auch das Demarkiert werden.
Also zweite Runde, B wird markiert wegen C impliziert
B und D wird markiert wegen A
impliziert die
Und wenn man das jetzt halt gleich in der Formel notiert,
so wie eben in diesem Ablaufdiagramm beschrieben, mit so einem hochgestellten K,
dann kann man sich hier sparen aufzuschreiben, weswegen das markiert wird.
Also das sieht man dann ja,
wenn hier über dem Zähne einsteht und hier über dem B eine 2,
dann sehe ich halt, dass das B markiert wurde wegen des Zäster.
Oder wegen der Regel da. Ja, jetzt habe ich A,
C, B und D und jetzt gehe ich mir wieder die Formeln durch und gucke mir an,
gibt es irgendwo eine Implikation,
wo auf der linken Seite eine Unverknüpfung ist, wo A,
B, C und D irgendwie auftreten dürfen.
Also entweder alle oder ein paar davon oder sowas.
Und jetzt findet man hier irgendwie Den hier,
C und D impliziert A, C und D ist vorne markiert,
der bringt mir aber nichts Neues,
weil ich das A schon in der ersten Runde markiert habe.
Also der bringt nichts. Und dann habe ich noch hier
irgendwie A und B impliziert, eh, der bringt was,
weil ich das eh noch nicht markiert habe.
Das heißt, in der dritten Runde markiere ich das eh.
Und jetzt habe ich auch schon fast alles markiert,
aber jetzt sehe ich halt auch hier im nächsten Schritt,
dass ich hier vorne das E markiert habe.
Und dann habe ich eben mein Problem. Ich weiß,
ich muss A, B, C,
D und E muss sich alle zu eins auswerten.
Und wenn ich das aber mache, dann kann ich das
hier nicht zu wahr auswerten.
Oder da oben, dass nicht eh,
wenn ich eh zu warm machen muss und da aber
nicht E drinsteht
Ist das leider unerfüllbar. Also die Formel geht nicht.
Anderes Beispiel. Erste Runde, ich sehe,
dass ich hier so ein top impliziert A habe,
also markiere ich das A. Zweite Runde, hier kann ich noch nichts machen.
Bei dem A und B impliziert C, weil hier vorne
nur das A markiert ist, das andere noch nicht.
Da kann ich auch nichts machen bei dem B impliziert C,
aber hier bei dem A impliziert B,
da sehe ich, okay,
ich habe das A vorne markiert,
also muss ich jetzt
das B markieren
Und jetzt kann ich mit dem A und B impliziert C arbeiten.
Ich weiß, ich habe A markiert, ich habe B markiert,
also muss ich jetzt C markieren. Und jetzt kommt dieser Fall,
wo ich zwar noch nicht alles markiert habe,
also das D habe ich noch nicht markiert,
aber es gibt eben keine weiteren Formeln von diesem Typ 1 oder 2,
also Implikationen, wo vorne alles markiert ist.
Also gibt es keine weiteren Markierungen und ich höre auf.
Und eine erfüllende Belegung sollte dann ja sein,
alle markierten zu 1 auswerten und die nicht markierten zu null,
das heißt eine erfüllende Belegung habe ich,
wenn ich A,
B und C zu 1 auswerte und die zu null
In dem speziellen Fall habe ich auch eine erfüllende Belegung,
wenn ich auch de zu eins auswerte, aber muss im Allgemeinen nicht so sein.
Also hier ist es so, dass das okay ist,
aber muss im Allgemeinen nicht so sein.
Deswegen spricht man bei den erfüllenden Belegungen,
die sich da bei dem Algorithmus ergeben, auch von minimalen erfüllenden Belegungen,
weil die quasi minimal sind in der Art und Weise,
wie sie Aussagensymbolen in eins zuweisen.
Also die machen das nur da, wo es wirklich muss,
wo es wirklich nötig ist. Und wie gesagt,
hier, also das C ist zwar markiert hier,
das D ist nicht markiert, aber jetzt fängt man eben auch nicht an,
das De zu markieren.
Es geht ja darum, wenn links alles markiert ist,
dann markiere ich auch das eine,
das eine Aussagesymbol,
was recht steht
Ja, Fragen zu diesem, zu dem Ablauf.
Jetzt der Markierungsalgorithmus ist korrekt, also wenn F eine unerfüllbare Hornformel ist,
dann gibt er auch unerfüllbar aus und wenn er verfüllbar ist,
dann gibt er auch eine erfüllende Belegung aus.
Und was da auch noch drinsteckt,
er terminiert auch wirklich und er kommt mit allen Hornformeln klar.
Also er ist korrekt und vollständig
Ja, das kann man sich jetzt irgendwie hier an diesem Ablauf nochmal überlegen.
Erstmal, er kommt mit allen Hornformeln irgendwie klar, ne?
Also Hornformeln lassen sich immer in diese Implikationsschreibweise bringen.
Er kommt mit allen Typen von Hornklauseln klar.
Funktioniert also. Warum terminiert er? Also wie kann man
schnell sehen,
dass der terminieren muss
Genau. In jedem Schritt wird irgendwie markiert, also hier im Ersten,
in der Initialisierung, da werden die halt alle markiert.
Und wenn man sich jetzt diese Wahlschleife anguckt,
das ist ja der spannende Teil für die Frage,
ob das wirklich terminiert oder nicht.
Also es ist eine Endlosschleife oder nicht. Da sage ich
halt immer, ich gucke mir immer die Dinger an.
Und wenn es irgendwie sowas gibt, wo vorne
alles markiert ist, dann markiere ich irgendwie was Neues.
Das heißt, irgendwann muss ich entweder alles markiert haben oder
es gibt halt keine neuen Markierungen mehr.
Also in jedem Schritt, immer wenn ich eine Schleifnummer reingehe,
kommt eine neue Markierung dazu.
Wenn ich jetzt N-Aussagesymbole habe, dann kann ich aber maximal
nur N-Mahl markieren
Da sieht man auch schon, dass er schön schnell ist,
weil ich irgendwie nur in der Anzahl der unterschiedlichen Aussagesymbole lässt sich meine Geschwindigkeit,
also nehmen wir mal an,
ich habe endviele unterschiedliche Aussagesymbole und von mir ist es die Länge der Formel sowas wie K,
dann bin ich irgendwie ein O von N mal K,
was die Laufzeit angibt, also ziemlich, ziemlich schnell.
Ja, also terminieren tut er mit Hornklausen kommt da auch
klar und jetzt kann man sich überall eben überlegen,
wenn eine Formel erfüllbar ist,
gibt er dann wirklich eine erfüllende Belegung aus und wenn eine Formel unerfüllbar ist,
gibt er dann wirklich eine,
sagt er das dann auch wirklich
Und da kann man eben so vorgehen,
wie wir das eben gemacht haben, dass man eben sagt,
naja, im ersten Schritt weist er ja nur Aussagensymbolen,
denen wird eins zu, die wirklich auch zu eins ausgewertet werden müssen.
Also die sind ja alle unverknüpft. Also das stimmt. So,
und dann sagt man im zweiten Schritt,
werdet jetzt ja irgendwie weiter markiert und eben auch wieder so,
dass nur dann Aussagensymbole markiert werden, wenn die wirklich zu eins ausgewertet werden müssen.
Das heißt, wenn er irgendwann mal aufhört und sagt,
hier, die Formel ist erfüllbar, jetzt kann man sich überlegen,
bei der Belegung, die man dann gekriegt hat,
also man kriegt ja irgendwie so eine Belegung und der Algorithmus sagt erfüllbar,
lässt sich damit wirklich die Formel erfüllen,
so.
Und dann sagt man eben, naja,
die lassen sich alle erfüllen hier
Weil die ja alle auf AI gesetzt wurden. Und jetzt guckt man sich
all diese Dinge an und da gibt es dann eben zwei Möglichkeiten.
Entweder ist vorne alles markiert, sprich wurde alles Science ausgewertet,
dann wird aber auch das jetzt zu eins ausgewertet.
Also es ist die ganze wieder wahr. Oder hier vorne ist irgendwas,
was nicht markiert wurde, dann ist aber auch okay,
weil dann auch die ganze,
weil die wird dann zu null ausgewertet und dann wird die Prämisse falsch,
ist die ganze Implikation richtig.
Und der dritte Fall, also die Formel,
die da mit zwei markiert ist,
da wird eben nicht vorne alles markiert, weil ansonsten hätte ich unerfüllbar ausgegeben.
Ich habe aber Erfüllbar ausgegeben, also wird da auch irgendwas
zu null ausgewertet, also ist auch diese Formel wahr.
Also wird jede Klausel zu wahr gemacht,
alle sind mit unverknüpft,
wird also
das Ganze wahrgemacht
Also wenn er füllbar ausgibt, ist die Formel auch wirklich erfüllbar.
Und wenn ich eine erfüllende Formel habe, dann eine
erfüllbare Formel, dann sagt er das auch. Nein,
bei unerfüllbar quasi die gleiche Argumentation, dass man eben sagt,
naja, unerfüllbar gibt er nur aus, wenn ich irgendwie so eine hier,
so eine Formel des Typs 2 habe, wo vorne alles markiert ist.
Und dann weiß ich eben, alle Aussagensymbole,
die ich markiert habe, müssen eigentlich zu eins ausgewertet werden.
Und das widerspricht dem aber, also ist die Formel unerfüllbar.
Dann weiß man ja terminiert, er kommt mit einem klar
und er gibt auch das Richtige aus,
also korrekter Algorithmus
Beweismündlich oder wenn ihr das nochmal nachlesen möchtet. Ich glaube,
das ist auch etwas, was man sich selbst ganz gut klarmachen kann bei dem Algorithmus.
Könnt ihr ja mal probieren zu Hause,
dass ihr euch den Algorithmus nochmal nehmt und ihr irgendwie sagt,
okay, ich ermittle jetzt für mich mal,
dass der tatsächlich korrekt ist.
Und dann könnt ihr bei Bedarf das nochmal irgendwie im Buch von Schöning nachlesen.
Aber eigentlich kann man sich das ganz gut überlegen.
Fragen dazu. Dann da nochmal,
der ist sehr effizient
Aber eben nicht jede Formel ist als Hornformel darstellbar.
Beispielsweise schon sowas wie A oder B nicht,
aber trotzdem sind die eben ziemlich nützlich und deswegen ist das eigentlich sehr schön,
dass man da eben einen effizienten Markierungsalgorithmus hat.
Und was wir nächstes Mal machen wollen,
auch quasi in diesem Setting nur irgendwie ganz anders,
dass man sich irgendwie überlegt, okay, schön und gut,
aber eigentlich suchen wir doch immer noch ein Verfahren,
mit dem wir effizient auf erfüllbar oder unerfüllbar testen können,
führen eine möglichst große Klasse von Formeln.
Und jetzt attackieren wir wieder alle Formeln,
dass wir uns nicht weiter einschränken,
sondern dass wir sagen, okay,
wir gucken uns wieder alle Formeln an machen das jetzt aber
nicht so wie beim Markierungsalgorithmus oder bei den Wahrheitstafeln oder so,
sondern wir versuchen das mit rein sintaxbasierten Verfahren und das sind Verfahren wie Ableitung und Resolution und dann versuchen wir damit eben Unerfüllbarkeit zu testen, beziehungsweise eben nicht Unerfüllbarkeit, also Erfüllbarkeit.
Und sintaxbasierte Verfahren sind dann sowas wie,
wenn ich weiß, ich habe A impliziert B,
dass das zu wahr wird und ich weiß,
ich habe A, dass das zu wahr wird,
dann kann ich Schluss folgern,
dass ich auch B zu wahr mache oder machen muss
Und das kann ich eben völlig unabhängig von der Belegung einfach aus der Sintax rauslesen.
Ich weiß, ich habe A impliziert B und ich weiß,
ich habe irgendwo A, alles mit unverknüpft so,
dann weiß ich, ich muss auch B warm machen.
Geht nicht anders. Und das kann ich eben aus der Sintax
rauslesen. Und das sind dann so Ableitungs- und Resolutionsverfahren,
die von der Anwendung her sind die ein bisschen tricky so,
aber da lässt sich dann auch eine Menge machen. Ja,
das machen wir nächstes Mal, dass die ganzen Begriffe,
was wir gestern und heute gemacht haben,
Folgerung trat jetzt heute nicht mehr auf,
aber hatten wir ja gestern, also geh folgt aus F genau dann,
wenn jedes Modell für F auch Modell für G ist
Etualenzen, Nachweis mit und ohne Wahrheitstafeln oder eben auch Wiederlegung
mit und ohne Wahrheitstafeln, wo wir bei der Widerlegung eben
genau ein Gegenbeispiel einfach nur angeben muss.
Damit entweder du kannst auch eine Wahrheitstafel machen und dann eben
einfach dieses Gegenbeispiel rauslesen oder man sieht es schneller und gibt
dann einfach nur die Belehrung an, die das Gegenbeispiel ist.
Dann hatten wir ganz viele Sätze und Folgerungen, Sätze,
Überfolgerungen und Äquivalenz. Das waren, glaube ich, elf Stück,
von denen man jetzt einige noch in den Präsenz und den Übungsaufgaben machen soll.
Dann hatten wir diese schicke Ersatzbarkeitstheorie mit struktureller Induktion bewiesen,
was uns dann eben geholfen hat, DNF und Karnefia zu stellen,
wo wir eben noch vorher diese Begriffe hatten,
Literalklausel,
duale Klauseln und so weiter
Genau, dann haben wir DNF und KLF,
das haben wir dann, ab da waren wir heute ungefähr mit Äquivalenzumformung,
DNF und KNF hier zu stellen, wobei wir dafür das Ersetzbarkeitstheorien benutzt haben,
oder mit Wahrheitstafeln, also für die DNF,
die Einsatzzeilen angucken, für die KNF, die Nullerzeilen,
und dann eben entsprechend eine äquivalente Formel konstruieren.
Und eben hatten wir dann noch die Hornformeln und den Markierungsalgorithmus.
Fragen. Genau, das alles kommt auch auf dem Aufgabenzettel
drin. Ja, tatsächlich.
Dann, ich habe es gestern noch mal rumgeschrieben,
Tutorium ist diese Woche in F132,
nicht in B201 und nächste Woche wird die Vorlesung am Montag ein bisschen kürzer,
also ich muss die halbieren,
weil ich noch einen Termin habe,
schreibe ich aber nachher noch mal per Stine eine Mail rum,
da könnt ihr schon mal drauf einstellen,
nächsten Montag sind es dann nur 45 Minuten.
Gut,
dann ist Feierabend