Beispiel: Dr. House Diagnose F 1 : F_1: F 1 :
Max wird mit hohem Fieber und ausgeprägten Gliederschmerzen in das Spital eingeliefert. Dr. House diskutiert die Diagnose mit einer
Kollegin.
F 2 : F_2: F 2 :
House: „Wenn der Patient Fieber hat, handelt es sich um Grippe oder Erkältung.“
F 3 : F_3: F 3 :
Cameron: „Wenn er keine starken Gliederschmerzen hat, dann hat er auch keine Grippe.“
F 4 : F_4: F 4 :
House: „Jedenfalls weisen hohes Fieber und starke Gliederschmerzen immer auf Grippe hin.“
F 5 : F_5: F 5 :
Cameron: “Er hat sicher nicht beide Krankheiten gleichzeitig.“
Variablen erstellen:
F F F
Patient hat (hohes) Fieber
S S S
Patient hat Gliederschmerzen
G G G
Patient hat eine Grippe
E E E
Patient hat eine Erkältung
Gültige Formeln erstellen:
(Wir gehen davon aus, dass die Ärzte Implikation und nicht Äquivalenz meinen)
F 1 : = F ∧ S F 2 : = F ⊃ ( G ∨ E ) F 3 : = ¬ S ⊃ ¬ G F 4 : = ( F ∧ S ) ⊃ G F 5 : = ¬ ( G ∧ E )
\begin{array}{l}F_{1}:=F \wedge S \\F_{2}:=F \supset(G \vee E) \\F_{3}:=\neg S \supset \neg G \\F_{4}:=(F
\wedge S) \supset G \\F_{5}:=\neg(G \wedge E)\end{array}
F 1 := F ∧ S F 2 := F ⊃ ( G ∨ E ) F 3 := ¬ S ⊃ ¬ G F 4 := ( F ∧ S ) ⊃ G F 5 := ¬ ( G ∧ E )
Wir suchen eine Interpretation / Wahrheitsbelegung bei der alle Formeln wahr sind:
Mittels Wahrheitstafel FSGEF1F⊃(G∨E)¬S⊃¬G(F∧S)⊃G¬(G∧E)110010101110111101111011111111111110\begin{array}{cccc|ccccc}F & S & G & E & F_{1} & F \supset(G \vee E) & \neg S \supset \neg G & (F \wedge S) \supset G & \neg(G \wedge E) \\\hline 1 & 1 & 0 & 0 & 1 & 0 & 1 & 0 & 1 \\1 & 1 & 0 & 1 & 1 & 1 & 1 & 0 & 1 \\1 & 1 & 1 & 0 & 1 & 1 & 1 & 1 & 1 \\1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 0\end{array}F1111S1111G0011E0101F11111F⊃(G∨E)0111¬S⊃¬G1111(F∧S)⊃G0011¬(G∧E)1110 (Algebraische) Umwandlung in DNF und Vereinfachung
Liefert dann
F ∧ S ∧ G ∧ ¬ E F \wedge S \wedge G \wedge \neg E F ∧ S ∧ G ∧ ¬ E
(Algebraische) Umwandlung in KNF und SAT-Solver nützen F∧SundefinedF1∧(¬F∨G∨E)undefinedF2∧(S∨¬G)undefinedF3∧(¬F∨¬S∨G)undefinedF4∧(¬G∨¬E)undefinedF5\underbrace{F \wedge S}_{F_{1}} \wedge \underbrace{(\neg F \vee G \vee E)}_{F_{2}} \wedge \underbrace{(S \vee \neg G)}_{F_{3}} \wedge \underbrace{(\neg F \vee \neg S \vee G)}_{F_{4}} \wedge \underbrace{(\neg G \vee \neg E)}_{F_{5}}F1F∧S∧F2(¬F∨G∨E)∧F3(S∨¬G)∧F4(¬F∨¬S∨G)∧F5(¬G∨¬E)
Um zu überprüfen ob es andere Lösungen gibt, erstellen wir zusätzlich noch
F 6 F_6 F 6
F 6 = ¬ ( F ∧ S ∧ G ∧ ¬ E ) = ¬ F ∨ ¬ S ∨ ¬ G ∨ E
F_{6}=\neg(F \wedge S \wedge G \wedge \neg E)=\neg F \vee \neg S \vee \neg G \vee E
F 6 = ¬ ( F ∧ S ∧ G ∧ ¬ E ) = ¬ F ∨ ¬ S ∨ ¬ G ∨ E
SAT-Solver liefert dann das Ergebnis „unerfüllbar“ - es gibt keine weiteren Lösungen.
Unsere Formel ist erfüllt wenn
I ( G ) = 1 , I ( E ) = 0 I(G) =1, \space I(E) = 0 I ( G ) = 1 , I ( E ) = 0
Diagnose: Grippe
Beispiel: Gone Maggie gone Problem: Homer will mit einem Boot, seiner Tochter Maggie, dem Hund Knecht Ruprecht zur anderen Fluss-Seite.
Das Boot kann nur gleichzeitig 2 Objekte tragen.
Nicht von Homer alleine gelassen werden dürfen:
Maggie und Hund (Knecht Ruprecht)
Variablen erstellen:
Es gibt
diese
und
die andere
Fluss-Seite.
Wenn eines dieser Variablen true ist dann:
M i … Maggie K i … Knecht Ruprecht G i … Gift H i … Homer }
\left.\begin{array}{ll}M_{i} & \ldots \text { Maggie } \\K_{i} & \ldots \text { Knecht Ruprecht }
\\G_{i} & \ldots \text { Gift } \\H_{i} & \ldots \text { Homer }\end{array}\right\}
M i K i G i H i … Maggie … Knecht Ruprecht … Gift … Homer ⎭ ⎬ ⎫
zum Zeitpunkt
i i i
auf der anderen Fluss-Seite
Wenn alle hier sind (alle false):
AlleHier ( i ) : = ¬ M i ∧ ¬ K i ∧ ¬ G i ∧ ¬ H i
\text {AlleHier}(i):=\neg M_{i} \wedge \neg K_{i} \wedge \neg G_{i} \wedge \neg H_{i}
AlleHier ( i ) := ¬ M i ∧ ¬ K i ∧ ¬ G i ∧ ¬ H i
Wenn alle dort sind (alle true):
AlleDort ( i ) : = M i ∧ K i ∧ G i ∧ H i
\text {AlleDort}(i):=M_{i} \wedge K_{i} \wedge G_{i} \wedge H_{i}
AlleDort ( i ) := M i ∧ K i ∧ G i ∧ H i
Homer muss immer bei Maggie sein, wenn sie bei Hund oder Gift ist
Sicher ( i ) : = ( ( M i ≡ K i ) ∨ ( M i ≡ G i ) ) ⊃ ( M i ≡ H i )
\text {Sicher}(i):=\left(\left(M_{i} \equiv K_{i}\right) \vee\left(M_{i} \equiv G_{i}\right)\right)
\supset\left(M_{i} \equiv H_{i}\right)
Sicher ( i ) := ( ( M i ≡ K i ) ∨ ( M i ≡ G i ) ) ⊃ ( M i ≡ H i )
Wenn eines dieser Variablen true ist, dann:
M H i … Maggie K H i … Knecht Ruprecht G H i … Gift H H i … Homer }
\left.\begin{array}{ll}MH_{i} & \ldots \text { Maggie } \\KH_{i} & \ldots \text { Knecht Ruprecht }
\\GH_{i} & \ldots \text { Gift } \\HH_{i} & \ldots \text { Homer }\end{array}\right\}
M H i K H i G H i H H i … Maggie … Knecht Ruprecht … Gift … Homer ⎭ ⎬ ⎫
fährt Homer zwischen
[ i − 1 ; i ] [i-1;i] [ i − 1 ; i ]
zur anderen Seite
Pro Zeitpunkt
nur eine
Überfahrt erlaubt (nur eine Var. darf true sein):
U ¨ berfahrt ( i ) : = ( M H i ∧ ¬ K H i ∧ ¬ G H i ∧ ¬ H H i ) ∨ ( ¬ M H i ∧ K H i ∧ ¬ G H i ∧ ¬ H H i ) ∨ ( ¬ M H i ∧ ¬ K H i ∧ G H i ∧ ¬ H H i ) ∨ ( ¬ M H i ∧ ¬ K H i ∧ ¬ G H i ∧ H H i )
\begin{array}{l}\text {Überfahrt}(i):= \\\left(\mathrm{MH}_{i} \wedge \neg \mathrm{KH}_{i} \wedge \neg
\mathrm{GH}_{i} \wedge \neg \mathrm{HH}_{i}\right) \vee\left(\neg \mathrm{MH}_{i} \wedge \mathrm{KH}_{i}
\wedge \neg \mathrm{GH}_{i} \wedge \neg \mathrm{HH}_{i}\right) \vee \\\left(\neg \mathrm{MH}_{i} \wedge \neg
\mathrm{KH}_{i} \wedge \mathrm{GH}_{i} \wedge \neg \mathrm{HH}_{i}\right) \vee\left(\neg \mathrm{MH}_{i}
\wedge \neg \mathrm{KH}_{i} \wedge \neg \mathrm{GH}_{i} \wedge \mathrm{HH}_{i}\right)\end{array}
U ¨ berfahrt ( i ) := ( MH i ∧ ¬ KH i ∧ ¬ GH i ∧ ¬ HH i ) ∨ ( ¬ MH i ∧ KH i ∧ ¬ GH i ∧ ¬ HH i ) ∨ ( ¬ MH i ∧ ¬ KH i ∧ GH i ∧ ¬ HH i ) ∨ ( ¬ MH i ∧ ¬ KH i ∧ ¬ GH i ∧ HH i )
Erlaubte Unterschiede zwischen Zeitpunkten
i i i
und
i − 1 i-1 i − 1
:
(
Frame Problem
)
Def U ¨ berfahrt ( i ) : = ( M H i ⊃ ( ( M i − 1 ≢ M i ) ∧ ( K i − 1 ≡ K i ) ∧ ( G i − 1 ≡ G i ) ∧ ( H i − 1 ≢ H i ) ∧ ( H i ≡ M i ) ) ) ∧ ( K H i ⊃ ( ( M i − 1 ≡ M i ) ∧ ( K i − 1 ≢ K i ) ∧ ( G i − 1 ≡ G i ) ∧ ( H i − 1 ≢ H i ) ∧ ( H i ≡ K i ) ) ) ∧ ( G H i ⊃ ( ( M i − 1 ≡ M i ) ∧ ( K i − 1 ≡ K i ) ∧ ( G i − 1 ≢ G i ) ∧ ( H i − 1 ≢ H i ) ∧ ( H i ≡ G i ) ) ) ∧ ( H H i ⊃ ( ( M i − 1 ≡ M i ) ∧ ( K i − 1 ≡ K i ) ∧ ( G i − 1 ≡ G i ) ∧ ( H i − 1 ≠ H i ) )
\begin{array}{l}\text { DefÜberfahrt}(i):= \\\quad\left(M H_{i} \supset\left(\left(M_{i-1} \not \equiv
M_{i}\right) \wedge\left(K_{i-1} \equiv K_{i}\right) \wedge\left(G_{i-1} \equiv G_{i}\right)
\wedge\left(H_{i-1} \not \equiv H_{i}\right) \wedge\left(H_{i} \equiv M_{i}\right)\right)\right)
\\\wedge\left(K H_{i} \supset\left(\left(M_{i-1} \equiv M_{i}\right) \wedge\left(K_{i-1} \not \equiv
K_{i}\right) \wedge\left(G_{i-1} \equiv G_{i}\right) \wedge\left(H_{i-1} \not \equiv H_{i}\right)
\wedge\left(H_{i} \equiv K_{i}\right)\right)\right) \\\wedge\left(G H_{i} \supset\left(\left(M_{i-1} \equiv
M_{i}\right) \wedge\left(K_{i-1} \equiv K_{i}\right) \wedge\left(G_{i-1} \not \equiv G_{i}\right)
\wedge\left(H_{i-1} \not \equiv H_{i}\right) \wedge\left(H_{i} \equiv G_{i}\right)\right)\right)
\\\wedge\left(H H_{i} \supset\left(\left(M_{i-1} \equiv M_{i}\right) \wedge\left(K_{i-1} \equiv K_{i}\right)
\wedge\left(G_{i-1} \equiv G_{i}\right) \wedge\left(H_{i-1} \neq H_{i}\right)\right)\right.\end{array}
Def U ¨ berfahrt ( i ) := ( M H i ⊃ ( (
M
i
− 1 ≡
M
i
) ∧ (
K
i
− 1 ≡
K
i
) ∧ ( G
i
− 1 ≡ G
i
) ∧ (
H
i
− 1 ≡
H
i
) ∧ (
H
i
≡
M
i
) ) ) ∧ ( K H i ⊃ ( (
M
i
− 1 ≡
M
i
) ∧ (
K
i
− 1 ≡
K
i
) ∧ ( G
i
− 1 ≡ G
i
) ∧ (
H
i
− 1 ≡
H
i
) ∧ (
H
i
≡
K
i
) ) ) ∧ ( G H i ⊃ ( (
M
i
− 1 ≡
M
i
) ∧ (
K
i
− 1 ≡
K
i
) ∧ ( G
i
− 1 ≡ G
i
) ∧ (
H
i
− 1 ≡
H
i
) ∧ (
H
i
≡ G
i
) ) ) ∧ ( H H i ⊃ ( (
M
i
− 1 ≡
M
i
) ∧ (
K
i
− 1 ≡
K
i
) ∧ ( G
i
− 1 ≡ G
i
) ∧ (
H
i
− 1 =
H
i
) )
Daraus folgt die Gesamtformel:
Nach n Überfahrten sollen alle auf der anderen Seite sein.
Gesamtformel ( n ) : = AlleHier ( 0 ) ∧ AlleDort ( n ) ∧ ⋀ i = 0 n Sicher ( i ) ∧ ⋀ i = 1 n U ¨ berfahrt ( i ) ∧ ⋀ i = 1 n Def U ¨ berfahrt ( i )
\begin{aligned}\text {Gesamtformel }(n):=& \text { AlleHier }(0) \wedge \text { AlleDort }(n) \wedge
\bigwedge_{i=0}^{n} \text { Sicher }(i) \\& \wedge \bigwedge_{i=1}^{n} \text { Überfahrt }(i) \wedge
\bigwedge_{i=1}^{n} \text { DefÜberfahrt }(i)\end{aligned}
Gesamtformel ( n ) := AlleHier ( 0 ) ∧ AlleDort ( n ) ∧ i = 0 ⋀ n Sicher ( i ) ∧ i = 1 ⋀ n U ¨ berfahrt ( i ) ∧ i = 1 ⋀ n Def U ¨ berfahrt ( i )
Vorgang:
Die benötigte Zahl n der Überfahrten erraten oder iterativ erhöhen SAT Solver nützen
Lösung:
n = 7 n= 7 n = 7
( M H 1 ) = I ( H H 2 ) = I ( G H 3 ) = I ( M H 4 ) = I ( K H 5 ) = I ( H H 6 ) = I ( M H 7 ) = 1
\left(M H_{1}\right)=I\left(H H_{2}\right)=I\left(G H_{3}\right)=I\left(M H_{4}\right)=I\left(K
H_{5}\right)=I\left(H H_{6}\right)=I\left(M H_{7}\right)=1
( M H 1 ) = I ( H H 2 ) = I ( G H 3 ) = I ( M H 4 ) = I ( K H 5 ) = I ( H H 6 ) = I ( M H 7 ) = 1