Inhaltsverzeichnis Formale Grundlagen (Nachträge)

Werbung
BIT I, WS 2016/17
Inhaltsverzeichnis
Formale Grundlagen (Nachträge)
1
Aussagenlogik: Funktionale Vollständigkeit
. . . . . . . . . . . . . . . . . . .
1
Bit-Arithmetik mit logischen Operationen . . . . . . . . . . . . . . . . . . . .
3
Prädikatenlogik: Eine ganz kurze Einführung
4
. . . . . . . . . . . . . . . . . .
Formale Grundlagen (Nachträge)
Einige Punkte, die wir bisher im Zusammenhang mit den formalen Grundlagen vernachlässigt haben, werden hier kurz erläutert.
Aussagenlogik: Funktionale Vollständigkeit
In der Einführung zur Aussagenlogik hatten wir fünf zweistellige Junktoren kennengelernt, die für die sprachichen Ausdrücke
dann wenn
stehen, in Zeichen:
und, oder, entweder oder, wenn dann und genau
∧, ∨, Y, →
und
⇔.
Nun kann es neben den genannten fünf oenbar noch weitere zweistellige Junktoren
geben. Allen diesen Junktoren ist ja gemein, dass Sie die vier möglichen Kombinationen
aus je zwei Wahrheitswerten abbilden auf vier einzelne Wahrheitswerte.
Der Junktor
falsch )
∧ etwa bildet die Kombinationen (falsch, falsch ), (falsch, wahr ) und (wahr,
ab auf den Wahrheitswert
Wahrheitswert
wahr.
Es gibt nun genau
24 = 16
falsch
wahr, wahr )
und die Kombination (
auf den
solcher möglichen Abbildungen.
p
q
>
∨
←
c
→
b
⇔
∧
w
w
f
f
w
f
w
f
w
w
w
w
w
w
w
f
w
w
f
w
w
w
f
f
w
f
w
w
w
f
w
f
w
f
f
w
w
f
f
f
p
q
⊥
↓
6←
e
6→
d
Y
|
w
w
f
f
w
f
w
f
f
f
f
f
f
f
f
w
f
f
w
f
f
f
w
w
f
w
f
f
f
w
f
w
f
w
w
f
f
w
w
w
Die Bezeichnungen lauten (u.a.):
Verum, Tautologie (immer wahr)
∨: Disjunktion, oder, OR
←: Replikation, Konversion (entspricht q → p)
c: Präpendenz, Identität von p (wahr, wenn p wahr)
→: Implikation, Subjunktion, Konditional, wenn dann
• >:
•
•
•
•
1
BIT I, WS 2016/17
Formale Grundlagen (Nachträge)
Postpendenz, Identität von q (wahr, wenn q wahr)
⇔: Bikonditional, Bijunktion, Äquivalenz, genau dann wenn
∧: Konjunktion, und, AND
⊥: Falsum, Kontradiktion (immer falsch)
↓: Peirce-Pfeil, NOR (entspricht: ¬(p ∨ q))
6←: Präsektion, nur q
e: Pränonpendenz, Negation von p
6→: Postsektion, nur p
d: Postnonpendenz, Negation von q
Y: exklusive Disjunktion, Kontravalenz, XOR
|: Sheer-Strich, NAND (entspricht ¬(p ∧ q))
• b:
•
•
•
•
•
•
•
•
•
•
Einige der Junktoren lassen sich durch Kombinationen anderer Junktoren zum Ausdruck
bringen. So sind sind die Ausdrücke
p
w
w
f
f
Da statt
q
w
f
w
f
p∧q
und
¬(¬p ∨ ¬q)
äquivalent.
¬p
¬q
¬p ∨ ¬q
¬(¬p ∨ ¬q)
p∧q
f
f
w
w
f
w
f
w
f
w
w
w
w
f
f
f
w
f
f
f
p und q stets auch beliebig komplexe Formeln stehen könnten, heiÿt das, das wir
den Operator
∧
streng genommen gar nicht brauchen. Wir könnten ihn überall ersetzen
durch eine Kombination aus den Zeichen
∨
und
¬.
alle anderen Junktoren auf diese Weise zu
funktional vollständig. Zu ihnen gehören unter anderem { ∧, ¬ }, {
Mengen von Zeichen, die in der Lage sind,
ersetzen, nennen wir
∨, ¬
} und {
→, ¬
}.
Nur zwei Junktoren haben die Eigenschaft allein funktional vollständig zu sein. Es handelt sich um den Peirce-Pfeil (↓,
NOR)
und den Sheer-Strich (|,
NAND).
Sie reichen also
jeweils allein aus, um alle nur denkbaren aussagenlogischen Ausdrücke zu formulieren.
Hier ein Beispiel für die Äquivalenz
((p|p)|(q|q)) ⇔ (p ∨ q), die zeigt, dass wir ∨ "durch
einen Ausdruck ersetzen können, der nur | enthält.
p
w
w
f
f
q
w
f
w
f
p|p
q|q
(p|p)|(q|q)
p∨q
f
f
w
w
f
w
f
w
w
w
w
f
w
w
w
f
Diese Erkenntnis kann man sich zu Nutze machen. Wo Logikgatter in digitalen Schaltungen vorkommen, können diese stets durch das Hintereinanderschalten von
NOR-Gattern gebildet werden. Die allermeisten
NAND- und/oder NOR- und NOT-Gatter ein.
NAND oder
digitalen Schaltkreiese setzen daher nur
2
BIT I, WS 2016/17
Formale Grundlagen (Nachträge)
Bit-Arithmetik mit logischen Operationen
Die logischen Operationen können eingesetzt werden, um arithemtische Operationen zu
implementieren. Wir gehen im folgenden nur das Beispiel der Addition von zwei 8-BitZahlen durch.
Beispiel:
Gegeben sind die Zahlen
a
= 12 und
b
= 5, als Bitfolgen:
a = 00001100
b = 00000101
Als Ergebnis einer Addition dieser beiden Zahlen erwarten wir die 8-Bit-Bitfolge für 17:
00010001.
1.
Vorüberlegung :
Beim bitweisen Addieren von zwei Binärzahlen können wir im Prinzip drei Fälle
unterscheiden:
1. Bit
2. Bit
3. Bit
0
0
1
+ Bit
+ Bit
+ Bit
0
1
1
= Ergebnis ist
= Ergebnis ist
= Ergebnis ist
0
1
0,
Übertrag von
1
Lassen wir den Übertrag im 3. Fall zunächst auÿen vor, so scheint es als wäre die
Operation
XOR perfekt geeignet. Der Operator (entspricht: Y)
0 und 1 auf 1 ab und die Kombinationen (0, 0)
nationen von
auf
0
bildet alle Kombiund (1,
1)
werden
abgebildet.
sum = a ^ b
// sum ist:
00001001
Wie ist aber mit dem Übertrag zu verfahren? Zunächst einmal können wir feststellen, dass der Übertrag nur zustande kommt, wenn die zu addierenden Bits beide 1
sind. Wir können daher mit der Operation
AND
feststellen, an welchen Stellen ein
Übertrag entsteht:
carry = a & b
// carry ist:
00000100
Ein Übertrag wirkt sich normalerweise so aus, dass die zu übertragende Zahle eine
Stelle weiter links notiert und addiert wird. Um das nachzumachen, können wir
einen Bitshift um eine Position nach links anwenden.
shifted = carry << 1
// shifted ist: 00001000
Nun müssten wir im Prinzip nur noch
shifted
auf
sum
addieren, also den Über-
trag und das Ergebnis der Addition ohne Übertrag. Auch das funktioniert mit
Bitoperatoren auf die gleiche Weise. Statt
und
shifted
a
und
b
addieren wir nun einfach
sum
und wiederholen das so lange, bis keine Übertrag mehr entsteht.
carry = shifted & sum; // carry ist:
00001000
sum = shifted ^ sum;
// sum ist:
00000001
shifted = carry << 1; // shifted ist: 00010000
Da es wieder einen Übertrag gab (carry
6= 0),
müssen wir die ganze Operation
noch einmal wiederholen:
carry = shifted & sum; // carry ist:
00000000
sum = shifted ^ sum;
// sum ist:
00010001
shifted = carry << 1; // shifted ist: 00000000
3
BIT I, WS 2016/17
2.
Implementation :
Formale Grundlagen (Nachträge)
Eine Implementation dieser Schritte in einer Funktion könnte
etwa so aussehen:
int binary_add(int a, int b)
{
int sum = a ^ b;
int carry = a & b;
int shifted = carry << 1;
while(carry != 0) {
carry = shifted & sum;
sum = shifted ^ sum;
shifted = carry << 1;
}
}
return sum;
Prädikatenlogik: Eine ganz kurze Einführung
Viele der Aussagen, die wir alltäglich benutzen wenden Prädikate auf bestimmte Objekte
an. Das ist etwa bei den folgenden Aussagen der Fall.
Das Hemd ist schwarz
Vera läuft.
Die Prüfung ist einfach.
Dabei bezeichnen Das Hemd, Vera und die Prüfung Gegenstände in der Welt. (Im weitesten Sinne des Wortes Gegenstände. Hier ist alles gemeint, was sich irgendwie sprachlich
identizieren lässt.) Schwarz sein, laufen und einfach sein können wir als Eigenschaften
•
•
•
oder Prädikate auassen, die von diesen Gegenständen ausgesagt werden.
In der Prädikatenlogik können solche Aussagen formalisiert werden durch die Angabe
von
Individuenkonstanten (z.B.: a, b, c, . . . ) und Prädikatfunktionen (z.B. F (x), G(x), H(x), . . . ).
Wir können dann z.B. schreiben:
• F (a)
• G(b)
wobei gelten könnte:
• F (x) = x ist schwarz
• G(x) = x läuft
• a = Das Hemd
• b = Vera
Da die Prädikatenlogik eine Erweiterung der Aussagenlogik darstellt, können wir diese
Aussagen auch mit den Junktoren der Aussagenlogik verknüpfen. So würde
F (a) ∧ G(b)
den natürlichsprachlichen Satz
Das Hemd ist schwarz und Vera läuft
formalisieren.
Ihre eigentliche Stärke hat die Prädikatenlogik aber dort, wo nicht Sätze über einzelne
Gegenstände mit Individuenkonstanten formalisiert werden, sondern wo sie die Formalisierung von generellen Aussagen über Klassen von Gegenständen erlaubt. Dazu kommen
4
BIT I, WS 2016/17
Formale Grundlagen (Nachträge)
Individuenvariablen zum Einsatz (. . . , x, y, z ) sowie Quantoren (∀, ∃, lies: Für alle, Es
gibt ein ). Damit lassen sich dann Aussagen wie die Folgenden formulieren:
• ∀x F (x) → G(x)
• ∃y F (y) ∧ G(y)
Wäre nun
F (x)
=
x ist aus Kupfer
und
G(x)
=
x leitet Elektrizität,
dann hätten wir
damit fomuliert:
•
•
Für alle Gegenstände x gilt: Wenn x aus Kupfer ist, dann leitet x Elektrizität.
Es gibt mindestens einen Gegenstand y, sodass gilt: y ist aus Kupfer und y leitet
Elektrizität.
Dabei ist leicht einsehbar, dass es eine Beziehung zur Mengenlehre gibt. Viele Aussagen
der Prädikatenlogik lassen sich leicht in Aussagen über Mengen übertragen. Sei
{x | F (x)}
und
MG = {x | G(x)},
MF =
dann können wir statt den obigen beiden Aussagen
auch schreiben:
• MF ⊂ MG
• |MF ∩ MG | > 0,
bzw.:
MF ∩ MG 6= ∅
5
Herunterladen