Chomsky-Normalform
- Eine kontextfreie Grammatik G = (N, Σ, S, P) liegt in Chomsky-Normalform vor, falls jede Produktion die Form
- A → a mit A ∈ N und a ∈ Σ oder
- A → BC mit A, B, C ∈ N
t1n
- Die Menge der NTS von denen sich das Teilwort von w, das an erster Stelle beginnt und Länge n hat, ableiten lässt ( t1n = w )
- Dann gilt w ∈ L(G) (S|-g* w ) → S ∈ t1n.
- Wie konstrukiert man t1n in endlichen Schritten?
- Bestimme t11, t21, t31, .. , tn1 (t11 ist die Menge aller NTS von denen aus sich das Teilwort von w, das an erster Stelle beginnt und Länge 1 hat) ableiten lässt ( w=w1 .. wn ) t11 = { A ∈ N, A → w1 ∈ P} t21 = { A ∈ N, A → w2 ∈ P} … tn1 = { A ∈ N, A → wn ∈ P}
- Wie bestimmen wir tik für k>=2?
- tik = { A ∈ N, es existiert ein z ∈ { 1,…, k-1} und B,C ∈ N so, dass A → BC ∈ P, B,C ∈ N so, dass A → BC ∈ P, B |-g* wi .. w(i + z -1) und C |-g* w(i+z) … w(i+k-1)
- B |-g* wi .. w(i+z-1) ↔ B ∈ tiz und C |-g* w(i+z) .. wi+k-1 ↔ C ∈ t(i+z, k-z) also
- tik = { A ∈ N, es ex. z ∈ { 1,..,k-1} und B,C ∈ N so, dass A → BC ∈ P, B ∈ tiz und C ∈ t(i+z, k-z) , also = U(k-1)__z=1 { A ∈ N, € B,C ∈ N mit A → BC ∈ P, B ∈ tiz und ( ∈ t(i+z,k-z) )
- Algorithmus CYK-Algorithmus Eingabe: Eine kontextfreie Grammatik G = (N, Σ, S, P) in Chomsky-Normalform, ein Wort w ∈ Σ*
- n := |w|
- for i = 1 to n do
- ti1 = {A ∈ N; A −→ wi ∈ P}
- od // od = end // Wir wandeln das Wort in einzelne Zeichen um und leiten diese in NTS zurück ab
- for k = 2 to n do
- for i = 1 to n − k + 1 do
- tik = ∅
- for z = 1 to k − 1 do // Wir laufen mit größer werdendem Bereich, beginnend bei 2 durch das Wort, erzeugen dabei Teilworte und schauen, ob die Paare von einem einzelnen NTS erzeugt werden können
- tik = tik ∪ {A ∈ N; ∃B, C ∈ N : A −→ BC ∈ P, B ∈ tiz, C ∈ ti+z,k−z }
- od
- od
- od
- if S ∈ t1n then
- return wahr
- else
- return falsch
- fi
- Satz 3.17.
- Das Wortproblem fur kontextfreie Sprachen, die durch Grammatiken in Chomsky -Normalform gegeben sind, sind in Zeit O(n3) entscheidbar
- Beispiel 3.18.
- Wir betrachten die Grammatik G = (N, Σ, S, P) mit N = {A, B, C, S}, Σ = {0, 1} und den Produktionen
- S → AC,
- S → AB,
- C → SB,
- A → 0,
- B → 1
- Für das Wort w = 0011 ∈ Σ* wollen wir überprüfen, ob w ∈ L(G). Dazu berechnen wir wie der CYK-Algorithmus die Menge t1n.
- w = 0011
- n = 4
- t11 = { x ∈ N; x → w1 ∈ P } = { x ∈ N; x → 0 ∈ P } = { A } // =0 t21 = { x ∈ N; x → w2 ∈ P } = { x ∈ N; x → 0 ∈ P } = { A } // =0 t31 = { B } t41 = { B }
- t12 = U2-1_z = 1 = { X ∈ N; E Y,Z ∈ N mit X → YZ ∈ P, Y ∈ tiz und Z ∈ t(i+1,1)} = { X ∈ N,E Y,Z ∈ N mit X→ YZ ∈ P, Y ∈ t11 und z ∈ t21 } = { X ∈ N,E Y,Z ∈ N mit X → YZ ∈ P, Y ∈ { A }, Z ∈ { A } } → Gibt es eine Regel x → AA? → Nein → = Ø t22 = [ … ] = Regel S → AB der Form X → AB)
- Wir betrachten die Grammatik G = (N, Σ, S, P) mit N = {A, B, C, S}, Σ = {0, 1} und den Produktionen
| tik | K=1 | k=2 | K=3 | k=4 |
| i = 1 | A | Ø | Ø | S (t14 = t1n) |
| i =2 | A | S | C | – |
| i =3 | B | Ø | – | – |
| i =4 | B | – | – | – |
Chomsky-NF
- A → BC
- A → a
- Typ 0: rek. abzählbar
- Typ 1:KS
- u1 A u2 → u1 l u2 mit |l| >=1,0
- S → E, dann darf S auf keiner rechten Regelseite vorkommen
- Typ 2:KF
- A → l mit A ∈ N und l ∈ ( N u E)*
- Typ 3: RL
- rechtslinear → kontextfrei
- kontextsensitiv → rek. abzählbar
- kontestfreie Sprache → kontextsensitive Sprache // Gilt nicht für Grammatiken
- Satz 3.19.
- Zu jeder kontextfreien Grammatik G = (N, Σ, S, P) gibt es eine kontextfreie Grammatik G′ = (N, Σ, S, P) ohne Regeln der Form A → E mit L(G′) = L(G)\{E} // Wir erzeugen die gleiche Sprache ohne das leere Wort
- Satz 3.20.
- (i) Zu jeder kontextfreien Grammatik G gibt es eine kontextfreie Grammatik G′, in der es keine Regeln der Form A → E für A ≠ S gibt. Ist S → E eine Regel in G′, so kommt S nicht auf der rechten Seite einer Regel in G′ vor. //( mit L(G)\{E} = L(G‘)}
- (ii) Jede kontextfreie Sprache ist auch kontextsensitiv (d.h. L2 ⊆ L1)
- Beweis 3.20
- (i) Wir konstruieren aus G wie in Satz 3.19 zunachst eine kontextfreie Grammatik G′ ohne Regeln der Form A → E mit L(G)\{E} = L(G‘)}
- Ist nun E ∈ L(G), so führen wir ein neues NTS S‘ zu G‘ hinzu, ersetzen in allen Regeln aus G‘ S durch S‘ und fügen die Regeln S → S‘ und S→E zu G‘ hinzu. Die so definierte Grammatik erfüllt dann die Behauptung.
- Beweis 3.19
- Sei Nε = { A ∈ N; A |-g* E }
- P‘ = { A → l‘; € A → l ∈ P und l‘ entsteht aus l durch Streichung beliebig vieler NTS B ∈ Nε }
- P‘ = { A → ε, A ∈ N } dann erfüllt G = ( N, Σ, S, P ) die Bedingung
- → Beispiel 3.21 im Skript
- → Nε = {C,A}
- S → ACB und A→C und C→E zusammenfassen [ S → AB, S→CB und S→B ]
C → E
Herleitung Chomsky NF
- Sei also ab jetzt G = (N, Σ, S, P) eine kontextfreie Grammatik ohne Regeln der Form A → ε
- Ziel: Konstruiere aus G eine Grammatik G‘ in Chomsky NF
- Bsp.: G = (N = {S, A, B, C}, Σ = {a, b}, S, P)
- mit den Produktionen
- S → ab|aA|A
- A → B|C|aBb
- B → S
- C → abS
- mit den Produktionen
- 1. Schritt: Die Nichtterminalsymbole S, A, B sind also gleichwertig (von jedem dieser Nichtterminalsymbole aus lassen sich in der Grammatik wegen des Zyklus die selben Worter ableiten). Wir können also S = A = B setzen und passen die Regeln entsprechend an. Dies führt zu den Produktionen
- S → ab|aS|S
- S → S|C|aSb
- S → S
- C → abS
- Zusätzlich können wir die Produktion S → S streichen und erhalten somit die Produktionen
- S → ab|aS|C|aSb
- C → abS // wird im nächsten Schritt weggekürzt, da S → C → abS eindeutig ist
- 2. Schritt:Regeln der Form A → B weiter untersuchen und die rechte Regelseite durch lange rechte Regelseiten aus den Regeln B → l mit |l| ≥ 2 ersetzen. In unser Beispielgrammatik gibt es nur noch eine Regel von dieser Form (S → C).
- S → C => S → abS und erhalten damit S → ab|aS|aSb und C → abS
- 3. SchrittIn den Regeln der Form A → l mit |l| ≥ 2 ersetzen wir jedes Terminalsymbol a ∈ Σ durch ein zusatzliches Nichtterminalsymbol Ha und nehmen die Regel Ha→ a auf.
- S → ab =>
- S→ Ha Hb
- Ha → a
- Hb → b
- S → aS =>
- S → Ha S
- S→ abS =>
- S → Ha Hb S // im nächsten Schritt auf Länge 2 bringen
- S → aSb =>
- S → Ha S Hb // im nächsten Schritt auf Länge 2 bringen
- C → abS =>
- C → Ha Hb S // im nächsten Schritt auf Länge 2 bringen
- S → ab =>
- 4. Schritt Für jede Regel der Form A → l mit |l| ≥ 3 (und damit, wie wir oben gesehen haben besteht l nur noch aus Nichtterminalsymbolen, es gilt also l = A1 … An mit A1, . . . , An ∈ N und n ≥ 3) ersetzen wir sukzessive A1A2 durch V (V ist ein neues Nichtterminalsymbol), streichen A → A1 … An und führen die neuen Regeln A → VA3 .. Vn und V → A1A2zu P hinzu. Dies wird solange durchgeführt, bis es keine Regeln der Form A → l mit |l| ≥ 3 mehr gibt.
- S→ Ha Hb
- Ha → a
- Hb → b
- S → Ha S
- S → V1 S, V1 → Ha Hb
- S → V2 Hb, V2 → Ha S
- C → V3 S, V3 → Ha Hb
- Satz 3.23 Das Wortproblem für KF-Sprachen ist entscheidbar.
- Beweis:
- 1. Prüfe ob ε ∈ L(G) ( Prüfe ob S ∈ Nε (vgl. Beweis von Satz 3.19))
- 2. Konstruiere eine Grammatik G‘ ohne Regeln der Form A → ε mit L(G) \ {ε} = L(G‘) ( wieder mit Satz 3.19 )
- 3. Konstruiere aus G‘ eine Grammatik G‘ in Chomsky NF mit L(G‘) = L(G“)
- 4. Wende den CYK – Algorithmus auf G“ an