MODUL 6: TEOREMA KLEENE Dari pembahasan sebelumnya NFA- yang dapat mengenali suatu bahasa regular dapat dengan lebih langsung diperoleh karena adanya transisi-. Setelah NFA- yang dapat mengenali bahasa tersebut diperoleh maka suatu NFA, dan seterusnya juga suatu FA, dapat kemudian diperoleh. Dalam contoh-contoh yang dibahas transisi- digunakan untuk merealisasikan operasi konkatenasi. Sementara kita ingat juga bahwa suatu suatu bahasa regular dapat dipandang sebagai hasil operasi-operasi penggabungan, konkatenasi dan Kleene * dari bahasa-bahasa paling sederhana dari alfabetnya. Apabila disamping konkatenasi, operasi-operasi itu juga dapat direalisasikan dengan transisi- maka suatu NFA- (dan selanjutnya NFA dan FA) yang dapat mengenali suatu bahasa regular dengan ekspresi regular apa saja dapat dengan mudah ditemukan. Dalam bagian ini akan metodologi yang lebih lengkap mendapatkan NFA- untuk baik operasi gabungan, irisan, dan Kleene * akan dibahas. (Bandingkanlah dengan metoda yang lebih langsung khusus untuk operasi penggabungan, irisan dan perbedaan pada pembahasan FA). Misalkan bahasa L dan L 2 dikenali masing-masing oleh NFA - M dan M 2, yaitu: q u q M u = {Q u, Σ, q u, A u, δ u } dapat dibentuk sebagai berikut. q u adalah status baru yang tidak ada di Q maupun Q 2 Q u = Q Q 2 {q u } A u = A A 2 δ u dibentuk sbb. untuk setiap q Q dan a Σ {}, δ u (q, a) = δ (q, a) untuk setiap q Q 2 dan a Σ {}, δ u (q, a) = δ 2 (q, a) untuk setiap a Σ, δ u (q u, ) = {q, } dan δ u (q u, a) = M = {Q, Σ, q, A, δ } M 2 = {Q 2, Σ,, A 2, δ 2 } q Pembentukan M c untuk mengenal L L 2 q c= q Dari kedua mesin tersebut maka NFA- M u, M c, dan M k dapat dibentuk untuk mengenali masing-masing L L 2, L L 2, dan L *. Pembentukan M u untuk mengenal L L 2 M c = {Q c, Σ, q c, A c, δ c } dapat dibentuk sebagai berikut. q c = q. Update Version.2., printed at 3:8 AM, 0//0 page of 5
Q c = Q Q 2 A c = A 2 δ c dibentuk sbb. untuk setiap q Q dan a Σ {}, δ c (q, a) = δ (q, a), kecuali jika q A maka ditambahkan δ c (q, ) = untuk setiap q Q 2 dan a Σ {}, δ c (q, a) = δ 2 (q, a) Pembentukan M k untuk mengenal L * M k = {Q k, Σ, q k, A k, δ k } dapat dibentuk sebagai berikut. q k adalah status baru yang tidak ada di Q Q k = Q {q k } A k = {q k } δ k dibentuk sbb. untuk setiap q Q dan a Σ, δ k (q, ) = q dan δ k (q, a) = untuk setiap q Q dan a Σ {}, δ k (q, a) = δ (q, a), kecuali jika q A maka ditambahkan δ k (q, ) = q k δ u (q u, ) = {q, } dan δ u (q u, a) = untuk setiap a Σ Dengan demikian setiap bahasa dapat dipandang sebagai tersusun atas bahasabahasa sederhana melalui operasi-operasi penggabungan, konkatenasi dan Kleene*. Contoh: untuk setiap bahasa L {0,} * dapat dibuat NFA- yang dapat mengenalnya dan tersusun atas FA-FA untuk bahasa-bahasa regular paling sederhana sbb. Masing-masing FA berikut untuk bahasa, {}, {0}, dan {}. Q k q Contoh: Seandainya untuk bahasa dengan ekspresi regular (00+) * (0) * akan ditemukan NFA- yang dapat mengenalnya sebagai bentukan bertahap mulai dari FA bahasa-bahasa paling sederhananya. membentuk NFA - bahasa {00} berdasarkan konkatenasi {0} dan {0}. membentuk NFA - bahasa {0} berdasarkan konkatenasi {} dan {0}. membentuk NFA - bahasa {00, } berdasarkan penggabungan {00} dan {}. 0 0 0 0 0 0 membentuk NFA - bahasa {00, } * berdasarkan operasi Kleene* {00, }. 0 0 Update Version.2., printed at 3:8 AM, 0//0 page 2 of 5
membentuk NFA - bahasa {0} * berdasarkan operasi Kleene* {0}. 0 membentuk NFA - bahasa {00, } * {0} * berdasarkan operasi konkatenasi {00, } * dan {0} *. Dalam contoh tersebut selama pembentukan sama sekali tidak dilakukan penyederhanaan untuk mengurangi transisi-. Penyederhanaan -dapat dilakukan sehingga diagram yang diperoleh tidak penuh oleh transisi- tersebut dengan mengaplikasikan konversi NFA- ke NFA pada setiap tahapan pembentukan. Mendapatkan Ekspresi Regular dari L(M) dengan M Suatu FA Untuk menjelaskan teknik untuk dapat melakukan hal ini memerlukan pendefinisian sbb. 0 0 0 L( q) = {x Σ * δ * ( x) = q} yaitu himpunan string yang mentransisikan M dari status p ke q. Dengan definisi tersebut maka L= L(M) adalah gabungan semua L( q) dimana p adalah status inisial q 0, dan q A. Dituliskan U L = L( q 0, q) q A Jika ekspresi regular dari L( q) adalah r( q) maka ekspresi regular L adalah r = r( q0, q) q A Sementara untuk menjelaskan L( q) maka kita perlu pendefinisian L( q, k) sebagai subset dari L( q) yaitu string-string dimana saat transisi M bergerak melintasi tidak lebih dari k status yang berbeda (tidak termasuk p dan q). Untuk bisa diformulasikan maka status-status dalam M perlu dinomori, 2,, n (n jumlah status dalam M). Maka dengan penomoran tsb L( q, k) dapat diformulasikan sebagai berikut ini. Khusus untuk k = 0, { a Σ δ( a) = q} dimana L( q,0) = { a Σ δ( a) = p} { } p q Baris kedua (dimana p = q) menyatakan M bisa bertranslasi dengansimbol a atau tidak. Untuk 0 < k < n., secara rekursif, L( q, k+) = L( q, k) L( k+, k) L(k+,k+, k) * L(k+, q, k) p k+ status k status q Update Version.2., printed at 3:8 AM, 0//0 page 3 of 5 k+
Dari definisi tersebut maka L( k) = L( k, n). karena pada saat semua status terlewati maka tidak ada lagi maka ruas kedua meliputi semula ruas pertama. Dalam komputasinya akan lebih sederhana jika menggunakan ekspresi regularnya Jika ekspresi regular dari L( q, k) adalah r( q, k), maka r( q, 0) = a untuk δ( a)=q dan p q, r( q, 0) = +a untuk δ( a)=q, serta r( q, k+) = r( q, k) + r( k+, k) r(k+, k+, k) * r(k+, q, k), untuk 0 < k < n. Contoh: kita akan mendapatkan ekspresi regular dari bahasa yang dikenali FA berikut ini. r(, 2, ) = r(, 2, 0) + r(,, 0) r(,, 0) * r(, 2, 0) = b + (a + )(a + ) * b = (a + ) * b = a * b r(, 3, ) = r(, 3, 0) + r(,, 0) r(,, 0) * r(, 3, 0) = + (a + )(a + ) * = r(2,, ) = r(2,, 0) + r(2,, 0) r(,, 0) * r(,, 0) = a + a(a + ) * (a + ) = a(a + ) * = a + r(2, 2, ) = r(2, 2, 0) + r(2,, 0) r(,, 0) * r(, 2, 0) = + a(a + ) * b = + a + b r(2, 3, ) = r(2, 3, 0) + r(2,, 0) r(,, 0) * r(, 3, 0) = b + a(a + ) * = b + = b r(3,, ) = r(3,, 0) + r(3,, 0) r(,, 0) * r(,, 0) = a + a(a + ) * (a + ) = a + r(3, 2, ) = r(3, 2, 0) + r(3,, 0) r(,, 0) * r(, 2, 0) = b + a(a + ) * b = b+ a * b = a * b r(3, 3, ) = r(3, 3, 0) + r(3,, 0) r(,, 0) * r(, 3, 0) = + a(a + ) * = Selanjutnya untuk k= r(,, 2) = r(,, ) + r(, 2, ) r(2, 2, ) * r Dalam komputasinya sebenarnya dimulai dari r = r(, ) + r(, 2) = r(,, 3) + r(, 2, 3), dst. Namun agar penulisannya lebih rapih maka komputasi dimulai dari k=0,, 2. Jadi komputasi dimulai dari penghitungan r(q, 0) (untuk semua kemungkinan p dan q) r(,, 0) = a + r(, 2, 0) = b r(, 3, 0) = r(2,, 0) = a r(2, 2, 0) = r(2, 3, 0) = b r(3,, 0) = a r(3, 2, 0) = b r(3, 3, 0) = Untuk k = 0 dihitung (untuk semua kemungkinan p dan q) r(,, ) = r(,, 0) + r(,, 0) r(,, 0) * r(,, 0) = (r(,, 0)) + = (a + ) + = a * Update Version.2., printed at 3:8 AM, 0//0 page 4 of 5
= b + (a + b) * b = (a + b) * b r(3,, 2) = r(3,, ) + r(3, 2, ) r(2, 2, ) * r(2,, ) = a + + a * b( + a + b) * a + = a + + a * b(a + b) * a + = a + + a * (ba + ) * ba + = a + + a * (ba + ) + r(3, 2, 2) = r(3, 2, ) + r(3, 2, ) r(2, 2, ) * r(2, 2, ) = a * b+ a * b( + a + b) * ( + a + b) = a * b+ a * b(a + b) * = a * b (a + b) * r(3, 3, 2) = r(3, 3, ) + r(3, 2, ) r(2, 2, ) * r(2, 3, ) = + a * b( + a + b) * b = + a * b(a + b) * b Untuk k = n komputasi hanya dilakukan pada r( q, 3) dengan p = (status inisial) dan q A = {, 2}. r(,, 3) = r(,, 2) + r(, 3, 2) r(3, 3, 2) * r(3,, 2) = a * (ba + ) * + a * (ba + ) * bb( + a * b(a + b) * b) * (a + + a * (ba + ) + ) = a * (ba + ) * + a * (ba + ) * bb( a * (ba + ) * bb) * (a + + a * (ba + ) + ) = a * (ba + ) * + ( a * (ba + ) * bb) + (a + + a * (ba + ) + ) r(, 2, 3) = r(, 2, 2) + r(, 3, 2) r(3, 3, 2) * r(3, 2, 2) = a * (ba + ) * b + a * (ba + ) * bb( + a * b(a + b) * b) * a * (ba + ) * b = a * (ba + ) * b + a * (ba + ) * bb(a * (ba + ) * bb) * a * (ba + ) * b = a * (ba + ) * b + (a * (ba + ) * bb) * a * (ba + ) * b = (a * (ba + ) * bb) * a * (ba + ) * b Kemudian r = r(,, 3) + r(, 2, 3) = a * (ba + ) * + ( a * (ba + ) * bb) + (a + + a * (ba + ) + ) + (a * (ba + ) * bb) * a * (ba + ) * b = a * (ba + ) * + ( a * (ba + ) * bb) * a * (ba + ) * (bba + + bba * (ba + ) + + b) Dengan mungkinnya secara teoritis mendapatkan NFA- dari satu regular ekspresi dan sebaliknya mendapatkan regular ekspresi dari suatu FA maka teorema Kleene yang menyatakan suatu bahasa L adalah regular jika dan hanya jika ada suatu FA yang dapat mengenalinya. Update Version.2., printed at 3:8 AM, 0//0 page 5 of 5