Die Mathe-Redaktion - 17.10.2019 05:24 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte / Top 15
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
Listenpunkt? im neuen Schwätz
ListenpunktWerde Mathe-Millionär!
ListenpunktFormeleditor fedgeo
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 358 Gäste und 3 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von mire2 StrgAltEntf
Mathematik » Logik, Mengen & Beweistechnik » Erfüllbarkeitsalgorithmus der Negationsnormalform
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule Erfüllbarkeitsalgorithmus der Negationsnormalform
flush
Junior Letzter Besuch: in der letzten Woche
Dabei seit: 03.06.2019
Mitteilungen: 19
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2019-08-03


Hallo liebe Community,

Sei $\varphi$ eine aussagenlogische Formel in Negationsnormalform. Nun möchte (oder viel eher: soll) ich einen Algorithmus angeben, der $\varphi$ auf Erfüllbarkeit hin überprüft.

$\text{NNF}_{\text{SAT}}(\varphi)$

case $\varphi$ of
    $\top$ : return 1
    $\bot$ : return 0
    $X_i$ : return 1
    $\neg X_i$ : return 1
    $\varphi_0 \lor \varphi_1$ : return $or(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$
   $\varphi_0 \land \varphi_1$ : ???

Nun weiß ich leider nicht, wie ich den letzten Fall bearbeiten soll.
return $and(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$ wäre offenbar falsch, denn sonst wäre ja für $\varphi = X_0 \land \neg X_0$ dann $\text{NNF}_{\text{SAT}}(\varphi)$
= 1. Hat da jemand einen Tipp?

Viele Grüße



  Profil  Quote  Link auf diesen Beitrag Link
StrgAltEntf
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 19.01.2013
Mitteilungen: 5168
Aus: Milchstraße
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2019-08-03


Hallo flush,

ich fürchte, so einfach ist das nicht. Wenn ich es richtig sehe, gibt es im wesentlichen nur die Möglichkeit, alle $2^n$ 0-1-Varianten für die vorkommenden Variablen $X_1,...,X_n$ durchzuprobieren, und zu schauen, ob mindestens ein Mal 1 herauskommt. (Wenn dir etwas effektiveres einfällt, wirst du wahrscheinlich Millionär wink )

Grüße
StrgAltEntf



  Profil  Quote  Link auf diesen Beitrag Link
flush
Junior Letzter Besuch: in der letzten Woche
Dabei seit: 03.06.2019
Mitteilungen: 19
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2019-08-03


2019-08-03 19:56 - flush im Themenstart schreibt:
Hallo liebe Community,

Sei $\varphi$ eine aussagenlogische Formel in Negationsnormalform. Nun möchte (oder viel eher: soll) ich einen Algorithmus angeben, der $\varphi$ auf Erfüllbarkeit hin überprüft.

$\text{NNF}_{\text{SAT}}(\varphi)$

case $\varphi$ of
    $\top$ : return 1
    $\bot$ : return 0
    $X_i$ : return 1
    $\neg X_i$ : return 1
    $\varphi_0 \lor \varphi_1$ : return $or(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$
   $\varphi_0 \land \varphi_1$ : ???

Nun weiß ich leider nicht, wie ich den letzten Fall bearbeiten soll.
return $and(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$ wäre offenbar falsch, denn sonst wäre ja für $\varphi = X_0 \land \neg X_0$ dann $\text{NNF}_{\text{SAT}}(\varphi)$
= 1. Hat da jemand einen Tipp?

Viele Grüße

Wie wäre es mit

$\text{NNF}_{\text{SAT}}(\varphi)$

case $\varphi$ of
    $\neg X_i \land X_i$ : return 0
    $X_i \land \neg X_i$ : return 0
    $\top$ : return 1
    $\bot$ : return 0
    $X_i$ : return 1
    $\neg X_i$ : return 1
    $\varphi_0 \lor \varphi_1$ : return $or(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$
   $\varphi_0 \land \varphi_1$ : case $\varphi_0$ of
                    $\varphi_{0_0} \lor \varphi_{0_1}$ : return $or(\text{NNF}_{\text{SAT}}(\varphi_{0_0} \land \varphi_1),\text{NNF}_{\text{SAT}}(\varphi_{0_1} \land \varphi_1))$
                    $\varphi_{0_0} \land \varphi_{0_1}$ : return $and(\text{NNF}_{\text{SAT}}(\varphi_{0_0} \land \varphi_1),\text{NNF}_{\text{SAT}}(\varphi_{0_1} \land \varphi_1))$
                    default: case $\varphi_1$ of
                                    $atomar$ : return $and(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$
                                    $\neg X_i$ : return $and(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$
                                    $\varphi_{1_0} \lor \varphi_{1_1}$ : return $or(\text{NNF}_{\text{SAT}}(\varphi_0 \land \varphi_{1_0}),\text{NNF}_{\text{SAT}}(\varphi_0 \land \varphi_{1_1}))$
                                    $\varphi_{1_0} \land \varphi_{1_1}$ : return $and(\text{NNF}_{\text{SAT}}(\varphi_0 \land \varphi_{1_0}),\text{NNF}_{\text{SAT}}(\varphi_0 \land \varphi_{1_1}))$    

           


[Die Antwort wurde vor Beitrag No.1 begonnen.]



  Profil  Quote  Link auf diesen Beitrag Link
flush
Junior Letzter Besuch: in der letzten Woche
Dabei seit: 03.06.2019
Mitteilungen: 19
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2019-08-03


2019-08-03 22:24 - StrgAltEntf in Beitrag No. 1 schreibt:
Hallo flush,

ich fürchte, so einfach ist das nicht. Wenn ich es richtig sehe, gibt es im wesentlichen nur die Möglichkeit, alle $2^n$ 0-1-Varianten für die vorkommenden Variablen $X_1,...,X_n$ durchzuprobieren, und zu schauen, ob mindestens ein Mal 1 herauskommt. (Wenn dir etwas effektiveres einfällt, wirst du wahrscheinlich Millionär wink )

Grüße
StrgAltEntf

Okay, dann nehme ich an, dass mein neuer Vorschlag entweder falsch oder nicht effektiver ist als jene, die alle Belegungen ausprobiert



  Profil  Quote  Link auf diesen Beitrag Link
Zwerg_Allwissend
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 02.12.2013
Mitteilungen: 198
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, eingetragen 2019-08-03


2019-08-03 19:56 - flush im Themenstart schreibt:
Hallo liebe Community,

Sei $\varphi$ eine aussagenlogische Formel in Negationsnormalform. Nun möchte (oder viel eher: soll) ich einen Algorithmus angeben, der $\varphi$ auf Erfüllbarkeit hin überprüft.

$\text{NNF}_{\text{SAT}}(\varphi)$

case $\varphi$ of
    $\top$ : return 1
    $\bot$ : return 0
    $X_i$ : return 1
    $\neg X_i$ : return 1
    $\varphi_0 \lor \varphi_1$ : return $or(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$
   $\varphi_0 \land \varphi_1$ : ???

Nun weiß ich leider nicht, wie ich den letzten Fall bearbeiten soll.
return $and(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$ wäre offenbar falsch, denn sonst wäre ja für $\varphi = X_0 \land \neg X_0$ dann $\text{NNF}_{\text{SAT}}(\varphi)$
= 1. Hat da jemand einen Tipp?

Viele Grüße

Das Ergebnis Deines Algorithmus darf nicht 0 oder 1 sein sondern muß entweder die Menge >aller< Variablenbelegungen sein, die die vorgelegte Formel erfüllen oder aber die leere Menge bei nicht-Erfüllbarkeit.

Bei der Disjunktion bestimmst du rekursiv die Mengen aller Variablenbelegungen, die jeweils eines der beiden Disjunktionsglieder erfüllen. Ergebnis ist dann die Vereinigung beider Mengen.

Bei der Konjunktion bestimmst du rekursiv die Mengen aller Variablenbelegungen, die jeweils eines der beiden Konjunktionsglieder erfüllen. Daraus löscht Du dann alle Variablenbelegungungen, die jeweils das andere Konjunktionsglied nicht erfüllen. Die so bestimmte Menge ist dann das Ergebnis.

Stimmt aber noch nicht - muß nochmal darüber nachdenken, ist aber jetzt zu spät.



  Profil  Quote  Link auf diesen Beitrag Link
StrgAltEntf
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 19.01.2013
Mitteilungen: 5168
Aus: Milchstraße
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2019-08-03


Hi,

nehmen wir mal den Fall

$\varphi = \varphi_0 \land \varphi_1$ und $\varphi_0 = \varphi_{0_0} \land \varphi_{0_1}$

Dann könnte ja wieder \(\varphi_{0_0}=X_0\), \(\varphi_{0_1}=\neg X_0\) und \(\varphi_1=X_1\) sein.

Dann ist $NNF(\varphi) = NNF(\varphi_0 \land \varphi_1)=0$, obwohl $NNF(\varphi_{0_0} \land \varphi_1)=1$ und $NNF(\varphi_{0_1} \land \varphi_1)=1$.



[Die Antwort wurde nach Beitrag No.3 begonnen.]



  Profil  Quote  Link auf diesen Beitrag Link
flush
Junior Letzter Besuch: in der letzten Woche
Dabei seit: 03.06.2019
Mitteilungen: 19
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, vom Themenstarter, eingetragen 2019-08-04


2019-08-03 23:52 - StrgAltEntf in Beitrag No. 5 schreibt:
Hi,

nehmen wir mal den Fall

$\varphi = \varphi_0 \land \varphi_1$ und $\varphi_0 = \varphi_{0_0} \land \varphi_{0_1}$

Dann könnte ja wieder \(\varphi_{0_0}=X_0\), \(\varphi_{0_1}=\neg X_0\) und \(\varphi_1=X_1\) sein.

Dann ist $NNF(\varphi) = NNF(\varphi_0 \land \varphi_1)=0$, obwohl $NNF(\varphi_{0_0} \land \varphi_1)=1$ und $NNF(\varphi_{0_1} \land \varphi_1)=1$.



[Die Antwort wurde nach Beitrag No.3 begonnen.]

Da hast du natürlich Recht. Aber was ist, wenn ich vor dem ersten case Block eine if-Abfrage der Form
if $and(NNF(\varphi_0),NNF(\varphi_1)) == 0$
then return 0
else Case-block
hinschreibe?

Also

$\text{NNF}_{\text{SAT}}(\varphi)$

case $\varphi$ of
    $\neg X_i \land X_i$ : return 0
    $X_i \land \neg X_i$ : return 0
    $\top$ : return 1
    $\bot$ : return 0
    $X_i$ : return 1
    $\neg X_i$ : return 1
    $\varphi_0 \lor \varphi_1$ : return $or(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$
   $\varphi_0 \land \varphi_1$ : if $and(NNF(\varphi_0),NNF(\varphi_1)) == 0$
                then return 0
                else case $\varphi_0$ of
                         $\varphi_{0_0} \lor \varphi_{0_1}$ : return $or(\text{NNF}_{\text{SAT}}(\varphi_{0_0} \land \varphi_1),\text{NNF}_{\text{SAT}}(\varphi_{0_1} \land \varphi_1))$
                         $\varphi_{0_0} \land \varphi_{0_1}$ : return $and(\text{NNF}_{\text{SAT}}(\varphi_{0_0} \land \varphi_1),\text{NNF}_{\text{SAT}}(\varphi_{0_1} \land \varphi_1))$
                         default: case $\varphi_1$ of
                                    $atomar$ : return $and(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$
                                    $\neg X_i$ : return $and(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$
                                    $\varphi_{1_0} \lor \varphi_{1_1}$ : return $or(\text{NNF}_{\text{SAT}}(\varphi_0 \land \varphi_{1_0}),\text{NNF}_{\text{SAT}}(\varphi_0 \land \varphi_{1_1}))$
                                    $\varphi_{1_0} \land \varphi_{1_1}$ : return $and(\text{NNF}_{\text{SAT}}(\varphi_0 \land \varphi_{1_0}),\text{NNF}_{\text{SAT}}(\varphi_0 \land \varphi_{1_1}))$  



  Profil  Quote  Link auf diesen Beitrag Link
flush
Junior Letzter Besuch: in der letzten Woche
Dabei seit: 03.06.2019
Mitteilungen: 19
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, vom Themenstarter, eingetragen 2019-08-04


2019-08-03 23:49 - Zwerg_Allwissend in Beitrag No. 4 schreibt:
2019-08-03 19:56 - flush im Themenstart schreibt:
Hallo liebe Community,

Sei $\varphi$ eine aussagenlogische Formel in Negationsnormalform. Nun möchte (oder viel eher: soll) ich einen Algorithmus angeben, der $\varphi$ auf Erfüllbarkeit hin überprüft.

$\text{NNF}_{\text{SAT}}(\varphi)$

case $\varphi$ of
    $\top$ : return 1
    $\bot$ : return 0
    $X_i$ : return 1
    $\neg X_i$ : return 1
    $\varphi_0 \lor \varphi_1$ : return $or(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$
   $\varphi_0 \land \varphi_1$ : ???

Nun weiß ich leider nicht, wie ich den letzten Fall bearbeiten soll.
return $and(\text{NNF}_{\text{SAT}}(\varphi_0), \text{NNF}_{\text{SAT}}(\varphi_1))$ wäre offenbar falsch, denn sonst wäre ja für $\varphi = X_0 \land \neg X_0$ dann $\text{NNF}_{\text{SAT}}(\varphi)$
= 1. Hat da jemand einen Tipp?

Viele Grüße

Das Ergebnis Deines Algorithmus darf nicht 0 oder 1 sein sondern muß entweder die Menge >aller< Variablenbelegungen sein, die die vorgelegte Formel erfüllen oder aber die leere Menge bei nicht-Erfüllbarkeit.

Bei der Disjunktion bestimmst du rekursiv die Mengen aller Variablenbelegungen, die jeweils eines der beiden Disjunktionsglieder erfüllen. Ergebnis ist dann die Vereinigung beider Mengen.

Bei der Konjunktion bestimmst du rekursiv die Mengen aller Variablenbelegungen, die jeweils eines der beiden Konjunktionsglieder erfüllen. Daraus löscht Du dann alle Variablenbelegungungen, die jeweils das andere Konjunktionsglied nicht erfüllen. Die so bestimmte Menge ist dann das Ergebnis.

Stimmt aber noch nicht - muß nochmal darüber nachdenken, ist aber jetzt zu spät.

Leider ist die Aufgabe aber so gestellt :/ wobei noch ausdrücklich erwähnt wird, dass man beim Algorithmus verwenden soll, dass die übergebene auslagenlogische Formel in NNF ist. Ansonsten hätte ich einfach den Weg mit dem Ausprobieren der Variablenbelegung genommen



  Profil  Quote  Link auf diesen Beitrag Link
StrgAltEntf
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 19.01.2013
Mitteilungen: 5168
Aus: Milchstraße
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2019-08-04


Der Vorschlag in #6 funktioniert auch nicht. Finde drei Formeln, sodass die Konjunktion von je zwei erfüllbar ist, aber die Konjunktion von allen drei nicht erfüllbar ist



  Profil  Quote  Link auf diesen Beitrag Link
flush
Junior Letzter Besuch: in der letzten Woche
Dabei seit: 03.06.2019
Mitteilungen: 19
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, vom Themenstarter, eingetragen 2019-08-05


2019-08-04 23:05 - StrgAltEntf in Beitrag No. 8 schreibt:
Der Vorschlag in #6 funktioniert auch nicht. Finde drei Formeln, sodass die Konjunktion von je zwei erfüllbar ist, aber die Konjunktion von allen drei nicht erfüllbar ist

na gut, danke. Ich finde die Aufgabe jedenfalls doof gestellt




  Profil  Quote  Link auf diesen Beitrag Link
StrgAltEntf
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 19.01.2013
Mitteilungen: 5168
Aus: Milchstraße
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, eingetragen 2019-08-05


2019-08-05 14:03 - flush in Beitrag No. 9 schreibt:
na gut, danke. Ich finde die Aufgabe jedenfalls doof gestellt


Dann bin ich wirklich gespannt, wie die Aufgabe gelöst werden soll. Ich hoffe, du berichtest. Aber vielleicht habe ich auch einfadch nur die Definition von NNF falsch verstanden, obwohl es da ja eigentlich nicht so viel falsch zu verstehen gibt.



  Profil  Quote  Link auf diesen Beitrag Link
flush
Junior Letzter Besuch: in der letzten Woche
Dabei seit: 03.06.2019
Mitteilungen: 19
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, vom Themenstarter, eingetragen 2019-08-06


2019-08-05 21:03 - StrgAltEntf in Beitrag No. 10 schreibt:
2019-08-05 14:03 - flush in Beitrag No. 9 schreibt:
na gut, danke. Ich finde die Aufgabe jedenfalls doof gestellt


Dann bin ich wirklich gespannt, wie die Aufgabe gelöst werden soll. Ich hoffe, du berichtest. Aber vielleicht habe ich auch einfadch nur die Definition von NNF falsch verstanden, obwohl es da ja eigentlich nicht so viel falsch zu verstehen gibt.

Werde ich definitiv machen. Allerdings dauert das noch eine Weile, weil der Stoff erst noch auf mich zukommt im WS. Ich arbeite nur gerade etwas vor und benutze die Unterlagen aus dem letzten Jahr. Also ist hier leider Geduld gefragt  



  Profil  Quote  Link auf diesen Beitrag Link
flush hat die Antworten auf ihre/seine Frage gesehen.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2019 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]