Formale Methoden 2 Gaetano Geck Lehrstuhl I – Logik in der Informatik WS 2015/2016 Teil 3: Kodierung 1 Motivation 2 Exkurs Grundlagen formaler Sprachen 3 Grundlagen 4 Beispielkodierungen Kodierung / Motivation Motivation In der Theoretischen Informatik untersuchen wir verschiedene Berechnungsmodelle. Endliche Automaten Registermaschinen Turingmaschinen (RS, GTI) (DAP2, GTI) (GTI) ... Unterschiede in der Art der gespeicherten/manipulierten Daten: Zeichenketten Zahlen Ziel: Vergleich der Modelle bezüglich der lösbaren Probleme Nötig: Umwandlung (Kodierung) von Eingaben Nötig: Umwandlung (Kodierung) von Ausgaben FM2 (WS 2014/15, Geck) 3 1 Motivation 2 Exkurs Grundlagen formaler Sprachen Wörter Konkatenation 3 Grundlagen 4 Beispielkodierungen Kodierung / Exkurs Grundlagen formaler Sprachen Exkurs Grundlagen formaler Sprachen: Wörter (1/2) Definition 2.1 (Alphabet) Ein Alphabet ist eine endliche nichtleere Menge. Die Elemente eines Alphabets bezeichnen wir als Zeichen oder Symbole. Beispiel 2.2 (Alphabet) Σ1 = {0, 1}, Zeichen: Bitwerte Σ2 = {A, C, T, G}, Zeichen: Basen in DNS Σ3 = {0, 1, 2, . . . , 9}, Zeichen: Ziffern im Dezimalsystem Definition 2.3 (Wort) Ein Wort über einem Alphabet Σ ist eine endliche Folge von Zeichen aus Σ. Die Anzahl der Zeichen eines Wortes w bezeichnen wir als Länge von w (Notation: |w|). Beispiel 2.4 u = 0010 ist ein Wort der Länge 4 (|u| = 4) über Σ1 v0 = 0 und v1 = 1 sind alle Wörter der Länge 1 (|v0 | = 1 = |v1 |) über Σ1 w = AAAAAAAAAA ist ein Wort der Länge 10 (|w| = 10) über Σ2 FM2 (WS 2014/15, Geck) 5 Kodierung / Exkurs Grundlagen formaler Sprachen Exkurs Grundlagen formaler Sprachen: Wörter (2/2) Bemerkung: Ein Wort der Länge n über Σ kann als n-Tupel aus Σn aufgefasst werden. Beispiel: Wort ACTTA der Länge 5 über Σ2 ! Tupel (A, C, T, T, A) ∈ Σ52 Spezialfall: Das leere Tupel () ∈ Σ0 entspricht dem Wort der Länge 0, welches wir als leeres Wort ε bezeichnen. Definition 2.5 Sei Σ ein Alphabet Σ und n ∈ N0 . Die Menge aller Wörter der Länge n über Σ ist Σn = {σ1 . . . σn | σ1 , . . . , σn ∈ Σ} und S die Menge aller Wörter über Σ ist Σ∗ = n∈N0 Σn . Beispiel 2.6 Sei Σ = {a, b, c}, dann ist Σ0 = {ε} Σ1 = {a, b, c} Σ2 = {aa, ab, ac, ba, bb, bc, ca, cb, cb} Frage (|Σn | =?) Sei Σ ein Alphabet mit k Zeichen und n ∈ N0 beliebig. Wie viele Wörter der Länge n über Σ gibt es? FM2 (WS 2014/15, Geck) 6 Kodierung / Exkurs Grundlagen formaler Sprachen Exkurs Grundlagen formaler Sprachen: Konkatenation Definition 2.7 (Konkatenation) Seien Σ ein Alphabet sowie v = v1 . . . vm und w = w1 . . . wn Wörter über Σ. Die Konkatenation von v und w ist das Wort v ◦ w = v1 . . . vm w1 . . . wn . Für die n-fache Konkatenation eines Wortes w mit sich selbst schreiben wir wn = w ··· ◦ w | ◦ {z }, falls n > 0, n-mal und legen w0 = ε fest. Bemerkung: Der Konkatenationsoperator ◦ ist assoziativ und hat das leere Wort ε als neutrales Element. Beispiel 2.8 010 ◦ 11100 = 01011100 010 ◦ ε = 010 = ε ◦ 010 abc3 = abccc (ab)3 = ababab. FM2 (WS 2014/15, Geck) 7 1 Motivation 2 Exkurs Grundlagen formaler Sprachen 3 Grundlagen 4 Beispielkodierungen Kodierung / Grundlagen Grundlagen Definition 3.1 (Kodierung) Eine Kodierung einer Menge M ist eine injektive Abbildung enc : M → K . Wir bezeichnen K als Menge der Kodes. Bemerkung: def Die Injektivität impliziert die Existenz einer Umkehrabbildung dec = enc−1 . Dadurch kann aus einem Kode stets der Originalwert rekonstruiert werden: dec enc(m) = enc−1 enc(m) = m, für alle m ∈ M. Beispiel 3.2 (ASCII) Der ASCII-Zeichensatz Z = {A, B, C, . . . , Z, a, b, c, . . . , z, 0, 1, 2, . . . , 9, !, ?, :, . . . } enthält druckbare Zeichen des lateinischen Alphabets, die arabischen Ziffern, Satzzeichen und nicht druckbare Steuerzeichen. Der ASCII-Kode legt eine Abbildung encASCII : Z → {0, 1}8 fest, wobei {0, 1}8 die Menge der Bytes (Bitwörter der Länge 8) ist. Es gilt etwa encASCII (A) = 01000001 encASCII (B) = 01000010 encASCII (C) = 01000011 FM2 (WS 2014/15, Geck) 9 1 Motivation 2 Exkurs Grundlagen formaler Sprachen 3 Grundlagen 4 Beispielkodierungen Zahlen als Zahl Exkurs Primzahlen Wörter als Zahl Zahl als Wort Kodierung / Beispielkodierungen Beispielkodierung: Zahlen als Zahl Satz 4.1 (Primzahlkodierung) Sei k ∈ N beliebig und seien p1 , . . . , pk paarweise verschiedene Primzahlen. n n Die Abbildung enckprim : Nk0 → N mit (n1 , . . . , nk ) 7→ p11 · . . . · pk k , für alle (n1 , . . . , nk ) ∈ Nk0 ist eine Kodierung, genannt Primzahlkodierung. Beispiel 4.2 (Kodierung von Paaren natürlicher Zahlen) Für k = 2 können wir etwa p1 = 2 und p2 = 3 wählen und enc2prim : N20 → N mit (n1 , n2 ) 7→ 2n1 · 3n2 , für alle (n1 , n2 ) ∈ N2O . Dann gilt etwa enc2prim (4, 1) = 24 · 31 = 16 · 3 = 48 enc2prim (0, 3) = 20 · 33 = 27 Bemerkung: Die Gültigkeit des Satzes beruht auf 1 der Existenz unendlich vieler Primzahlen und (k beliebig). Bemerkung: Die Kodierung ist sogar bijektiv (also dec total), da 2 die Primzahlzerlegung eindeutig ist. Beide Eigenschaften beweisen wir im Folgenden! FM2 (WS 2014/15, Geck) 11 Kodierung / Beispielkodierungen Exkurs Primzahlen Existenz unendlich vieler Primzahlen (1/2) Definition 4.3 (Primzahl) Eine Primzahl ist eine natürliche Zahl, die genau zwei Teiler besitzt. Wir bezeichnen mit P die Menge aller Primzahlen. Bemerkung: 1 ∈ N0 ist keine Primzahl, da sie nur einen Teiler besitzt (1 = 1 · 1). Insbesondere wird 1 durch keine Primzahl geteilt. 0 ∈ N0 ist keine Primzahl, da sie unendlich viele Teiler hat (0 = 1 · 0 = 2 · 0 = 3 · 0 = . . . ). P = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, . . . } Satz 4.4 Die Menge P aller Primzahlen ist unendlich. FM2 (WS 2014/15, Geck) 12 Kodierung / Beispielkodierungen Exkurs Primzahlen Existenz unendlich vieler Primzahlen (2/2) Beweis durch Widerspruch 1 Annahme: Es gibt nur endliche viele Primzahlen: 2 Wir wählen a = p1 · . . . · pn + 1 3 Wir definieren b = p1 · . . . · pn . Klar: p1 ist Teiler von b, da b = p1 · (p2 · . . . · pn ) ist. 4 p1 ist nicht Teiler von a, denn sonst P = {p1 , . . . , pn } für ein n ∈ N0 . (da a > p1 , . . . , a > pn , ist a < P). gäbe es ein a0 ∈ N mit a = p1 · a0 und es gälte 1 = = = a−b p1 · a0 − p1 · (p2 · . . . · pn ) p1 · (a0 − p2 · . . . · pn ) . | {z } ∈N0 Das heißt, p1 > 1 wäre ein Teiler von 1, was nicht sein kann. 5 Analog: p2 , . . . , pn sind nicht Teiler von a. 6 Dann hat a keinen Teiler außer 1 und a, ist also eine Primzahl und es gilt a ∈ P, im Widerspruch zur Voraussetzung. FM2 (WS 2014/15, Geck) 13 Kodierung / Beispielkodierungen Exkurs Primzahlen Eindeutigkeit der Primfaktorisierung (1/2) Satz 4.5 (Fundamentalsatz der Arithmetik) Jede natürliche Zahl n ∈ N0 − {0, 1} kann auf genau eine Art in Primfaktoren zerlegt werden. Hinweise zum Beweisprinzip: Wie für Satz 4.4 führen wir einen Widerspruchsbeweis, das heißt, 1 2 3 4 wir beginnen mit der Annahme des Gegenteils der zu beweisenden Aussage; (Es gibt n ∈ N0 − {0, 1} mit mehreren Primfaktorisierungen) wir nutzen (eventuell mehrfach) gültige Schlussregeln und anerkannte Axiome; (Insbesondere gibt es n ∈ N0 − {0, 1} mit mindestens zwei Primfaktorisierungen) wir folgern schließlich eine Aussage, die im Widerspruch I zur Annahme selbst steht oder I zu einem Zwischenergebnis, dass aus der Annahme durch Schlussregeln hervorgegangen ist. In beiden Fällen beweist dies die Falschheit der Annahme und damit die Gültigkeit ihres Gegenteils, der zu beweisenden Aussage. Speziell für Satz 4.5: In Schritt 2 nutzen wir aus, dass die natürlichen Zahlen durch < geordnet sind, sodass es für jede Teilmenge M ⊆ N0 eine kleinste Zahl in M gibt. Frage Gibt es für jede Teilmenge M ⊆ Q eine kleinste Zahl in M ? Für alle M ⊆ Q+ ? FM2 (WS 2014/15, Geck) 14 Kodierung / Beispielkodierungen Exkurs Primzahlen Eindeutigkeit der Primfaktorisierung (2/2) Beweis durch Widerspruch 1 Annahme: Es gibt eine Zahl n ∈ N0 − {0, 1} mit mehreren Primfaktorisierungen. 2 Dann gibt es eine Zahl n ∈ N0 − {0, 1} mit zwei Primfaktorisierungen. 3 Wir wählen die kleinste solche Zahl n0 mit p1 · . . . · pk = n0 = q1 · . . . · q` für verschiedene Primfaktorisierungen p1 , . . . , pk und q1 , . . . , q` . 4 Lemma von Euklid: Für beliebige Zahlen x, y ∈ Z und eine Primzahl p gilt: Teilt p das Produkt x · y, so teilt p auch den Faktor x oder den Faktor y. 5 Dann gilt p1 · (p2 · . . . · pk ) = n0 = q1 · (q2 · . . . · q` ), also gilt p1 | q1 oder p1 | q2 · . . . · q` . • 1. Fall (p1 teilt q1 ): Da q1 eine Primzahl ist, gilt p1 = q1 . • Dann wäre n0 /p1 = n0 /q1 < n0 eine Zahl mit verschiedenen Primfaktorisierungen; im Widerspruch zur Annahme für n0 . 2. Fall (p1 teil nicht q1 ): Dann teil p1 den Faktor q2 · . . . · q` . Hier lässt sich die Argumentation von Schritt 5 bis zu (` − 1)-mal anwenden, um einen der folgenden Widersprüche herzuleiten: I I 6 p1 teilt ein qj (wie im 1. Fall) p1 teilt 1 Es kann also kein solches kleinstes n0 existieren und damit kein solches n. FM2 (WS 2014/15, Geck) 15 Kodierung / Beispielkodierungen Beispielkodierung: Wörter als Zahl Die Primzahlkodierung ermöglicht die Repräsentation beliebig vieler Zahlen in einer Zahl. Daraus ergibt sich unmittelbar eine Kodierung für beliebig lange Wörter als Zahl. Folgerung 4.6 Sei Σ ein Alphabet und f : Σ → N eine injektive Abbildung. Ferner seien p1 , . . . , pk paarweise verschiedene Primzahlen. f (σ1 ) Die Abbildung enckprim : Σk → N0 mit σ1 ◦ . . . ◦ σk 7→ p1 f (σk ) · . . . · pk ist eine Kodierung. Beispiel 4.7 Alphabet Σ = {a, b, c, . . . , x, y, z} Abbildung f mit f (a) = 1, f (b) = 2, f (c) = 3, . . . , f (z) = 26 Wort w = hallo ∈ Σ5 Primzahlen p1 = 2; p2 = 3; p3 = 5; p4 = 7; p5 = 11 Kodierung enck (w) = enck (hallo) = 28 · 31 · 512 · 712 · 1115 = 10840967179262536844134284562500000000 Frage Obige Abbildung kann als „zweifache Kodierung“ angesehen werden. Beschreibe diesen Umstand formal. FM2 (WS 2014/15, Geck) 16 Kodierung / Beispielkodierungen Beispielkodierung: Zahl als Wort Unäre Kodierung Zwei Ideen: 1 Abzählen: Länge des Wortes repräsentiert Wert der Zahl „Vorteil“: Möglich auch bei einelementigem Alphabet 2 Stellenwertsystem: Zahl als Ziffernfolge (Zeichenfolge) „Vorteil“: Kürzere Repräsentation Definition 4.8 (Unäre Kodierung) Sei Σ ein Alphabet und σ ein Zeichen aus Σ. Die Abbildung unσ : N0 → Σ∗ mit n 7→ σn für alle n ∈ N0 ist eine Kodierung, genannt unäre Kodierung. Beispiel 4.9 Sei Σ = {x} ein elementiges Alphabet, dann ist unx (0) = x0 = ε, unx (3) = x3 = xxx und unx (11) = x11 = xxxxxxxxxxx. FM2 (WS 2014/15, Geck) 17 Kodierung / Beispielkodierungen Beispielkodierung: Zahl als Wort b-adische Kodierung Definition 4.10 (b-adische Kodierung) Sei Σ = {σ0 , . . . , σb−1 } ein b-elementiges Alphabet mit b ≥ 2. Die Abbildung baseb : N0 → Σ∗ mit ( n 7→ σn mod b , baseb (n ÷ b) ◦ σn mod b , falls 0 ≤ n < b sonst für alle n ∈ N0 ist eine Kodierung, genannt b-adische Kodierung. Hierbei bezeichnet ÷ die ganzzahlige Division und mod den Rest bei ganzzahliger Division. Bemerkung: b ist die Basis des Stellenwertsystems die Zeichen σ0 , . . . , σb−1 werden auch Ziffern genannt Beispiel 4.11 Binärsystem (b = 2): Σ = {σ0 , σ1 } mit σ0 = 0 und σ1 = 1 • base2 (0) = 0; • base2 (1) = 1; • base2 (11) = base2 (5) ◦ 1 = base2 (2) ◦ 1 ◦ 1 = base2 (1) ◦ 0 ◦ 1 ◦ 1 = 1011. Dezimalsystem (b = 10): Σ = {σ0 , . . . , σ9 } mit σ0 = 0, . . . , σ9 = 9 • base10 (4711) = base10 (471) ◦ 1 = base10 (47) ◦ 1 ◦ 1 = base10 (4) ◦ 7 ◦ 1 ◦ 1 = 4711. FM2 (WS 2014/15, Geck) 18 Kodierung / Beispielkodierungen Beispielkodierung: Zahl als Wort Vergleich: unäre und b-adische Kodierung (1/2) Unterschiedliche Repräsentationslänge: unär: Wort der Länge n repräsentiert die Zahl n • Wert der Zahl ist linear in der Länge des Wortes • äquivalent: Länge des Wortes ist linear im Wert der Zahl b-adisch: Wort der Länge n repräsentiert eine Zahl ≤ bn • Wert der Zahl ist exponentiell in der Länge des Wortes • äquivalent: Länge des Wortes ist logarithmisch im Wert der Zahl Komplexitätstheorie: Laufzeit: meist ausgehend von der Länge des Eingabewortes definiert. Es kommt dann auf die Kodierung an. dazu ein Beispiel . . . FM2 (WS 2014/15, Geck) 19 Kodierung / Beispielkodierungen Beispielkodierung: Zahl als Wort Vergleich: unäre und b-adische Kodierung (2/2) Folgende Algorithmen haben Eingabe: Zahl n ∈ N0 (kodiert als Wort wn ∈ Σ∗ ) Ausgabe: Summe 1 + 2 + 3 + · · · + n 1 2 3 4 5 Algorithmus A1 : Algorithmus A2 : n := decode_unary (wn ) sum := 0 for i in (1 .. n) sum := sum + i return sum n := decode_binary (wn ) sum := 0 for i in (1 .. n) sum := sum + i return sum 1 2 3 4 5 Frage Sei w = 111111 = 16 . Wie oft führt Algorithmus A1 Zeile 3 bei Eingabe w aus? Wie oft führt Algorithmus A2 Zeile 3 bei Eingabe w aus? Was bedeutet das für die Gesamtlaufzeit der Algorithmen bei Eingabe w? FM2 (WS 2014/15, Geck) 20 Kodierung / Beispielkodierungen Beispielkodierung: Zahl als Wort Vergleich b-adischer Kodierungen Stellenwertsysteme: Kodierungslänge von Basis abhängig Beispiel 4.12 Sei x ∈ N die Zahl eine Million. Binär: Dezimal: Hexadezimal: Kodierung 11110100001001000000 1000000 f4240 Anzahl Stellen 20 = 1 + blog2 (x)c 7 = 1 + blog10 (x)c 5 = 1 + blog16 (x)c Die Kodierungslängen in Stellenwertsystemen verschiedener Basen unterscheiden sich um einen konstanten Faktor logb1 (b2 ) = logb (x) 1 logb (x) für Basen b1 , b2 , also 2 viel weniger stark als zwischen Stellenwertkodierung und unärer Kodierung (exponentieller Längenunterschied) Beispiel 4.13 Kodierungen im Binärsystem (b1 = 2) sind um den Faktor logb1 (b2 ) = log2 (10) ≈ 3, 32 länger als Kodierungen im Dezimalsystem (b2 = 10). FM2 (WS 2014/15, Geck) 21