Pumping Lemma RL (edisi 2) 1/5
Lecture Notes Teori Bahasa dan Automata
Pumping Lemma Untuk Regular Language Thompson Susabda Ngoen Revisi 1
Hopcroft mengatakan regular language dapat dideskripsikan dengan empat cara: DFA, NFA, ε-NFA, dan regular expression. Tulisan ini bertujuan menjelaskan cara menguji sebuah language apakah berjenis regular language, dengan pengujian pumping lemma. Definisi Formal Hopcroft et al memberi definisi pumping lemma untuk regular language sebagai berikut: Misalkan L adalah sebuah regular language. Haruslah terdapat (there exist) sebuah bilangan n (bilangan n ini bergantung kepada language L dan bisa berbeda dengan language yang) yang sedemikian rupa sehingga terhadap setiap string w pada L yang panjangnya ≥ n, string w ini harus dapat dibagi menjadi tiga bagian, w = xyz dengan ketentuan: 1. y ≠ ε 2. |xy| ≤ n 3. untuk semua k ≥ 0, string xykz juga merupakan string dari language L. Hopcroft mengatakan bahwa terhadap sebuah string dengan panjang tertentu dari sebuah regular language, kita selalu bisa mendapatkan substring y, yang posisinya “tidak terlalu jauh” dari awal string tersebut, yang dapat dipompa (pumped). Maksudnya adalah Jika sebuah language berjenis regular language maka string-string language ini harus mempunyai bagian (substring) yang bisa di-pump atau di-loop. Berdasarkan notasi yang biasa digunakan oleh Hopcroft maka x, y, dan z masing-masing adalah sebuah string (kumpulan karakter), atau lebih tepat disebut substring dari string w. Yang harus kita tanyakan adalah apakah y boleh hanya berupa sebuah simbol saja ataukah minimal harus dua simbol? Hopcroft tidak memberi informasi secara eksplisit mengenai hal ini. Hopcoft memberi contoh language yang menghasilkan string-string 0n1 n, dan mengatakan xy terdiri atas simbol-simbol 0 saja dan z terdiri atas simbol-simbol 1. Hal ini bisa berupa x=0 y = 0n-1 n/2 x=0 y = 0n/2 n-1 x=0 y=0 Selanjutnya Hopcroft menyatakan bahwa dengan k bernilai nol, yaitu tidak menyertakan y, maka string yang terbentuk mempunyai jumlah simbol 0 yang lebih sedikit daripada jumlah simbol 1, “tidak lebih dari n-1 buah simbol 0”. Pernyataan ini secara implisit menyatakan y boleh berupa satu simbol saja. Hopcroft mengatakan regular language dapat dideskripsikan dengan empat cara: DFA, NFA, ε-NFA, dan regular expression. Pembuktian Informal 1. Regular expression membentuk regular language. Jika sebuah language adalah regular language maka language ini harus bisa didefinisi atau dideskripsi dengan regular expression, maksudnya harus bisa dituliskan regular expression yang menghasilkan string-string language tersebut.
INSTITUT BISNIS dan INFORMATIKA INDONESIA
Pumping Lemma RL (edisi 2) 2/5
2. Regular expression membentuk jenis language yang sama dengan language yang dibentuk finite automaton, yaitu regular language. Jika sebuah language adalah regular language maka harus bisa dibuatkan finite automaton yang menerima string-string language tersebut. Jika terhadap sebuah language tidak bisa dibuatkan regular expression yang menghasilkan string-string language tersebut dan juga tidak bisa dibuatkan finite automaton yang menerima string-string language tersebut, maka language tersebut bukan berjenis regular language. Persoalan yang timbul adalah bagaimana cara kita memastikan atau membuktikan bahwa terhadap sebuah language tertentu tidak bisa dibuatkan regular expression dan DFA-nya? Kita tidak bisa membuatkan RE dan DFA-nya tetapi mungkin orang lain bisa! Dengan demikian pembuktian informal ini menjadi kurang kuat. Ilustrasi Dengan DFA Jika L1 berjenis regular language maka harus terdapat DFA, sebut saja D1, yang menerima bahasa L1. Misalkan D1 terdiri atas n state. String w adalah salah satu string bahasa L1 yang panjangnya lebih besar daripada n. Karena w merupakan string bahasa L1 maka string w harus bisa di-accept D1. Jumlah state D1 hanya ada n buah sedangkan |w| boleh melebihi n (lihat definisi) . String w hanya mungkin di-accept D1 apabila pada D1 terdapat jalur yang bersifat looping. Misalkan string w terdiri atas simbol-simbol a1a2…am dengan m ≥ n, maka string ini dapat kita bagi menjadi tiga bagian x terdiri atas a1a2a3 ... ai y terdiri atas ai+1ai+2 ... aj z terdiri atas aj+1aj+2 ... am seperti diilustrasikan gambar berikut:
Untuk k bernilai nol maka terbentuk string a1a2a3 ... aiaj+1aj+2 ... am yang diterima DFA ini. Untuk k bernilai dua maka terbentuk string a1a2a3 ... aiai+1ai+2 ... ajai+1ai+2 ... ajaj+1aj+2 ... am yang diterima DFA ini. Contoh Pengujian Karena y boleh berupa satu simbol saja maka perlu menguji semua kemungkinan untuk menyimpulkan sebuah language bukan regular. 1. Language L1 = {0n1 : n > 0 }. Apakah L1 adalah regular language? Misalkan w = xyz adalah string pada L1 yang panjangnya 3 dan diuraikan menjadi x=0 y=0 z=1 syarat 1: y ≠ ε terpenuhi syarat 2: |xy| = |00| ≤ 3 terpenuhi syarat 3: jika k bernilai 0 maka terbentuk string 01 ∈ L1 jika k bernilai 1 maka terbentuk string 001 ∈ L1 jika k bernilai 2 maka terbentuk string 0001 ∈ L1
INSTITUT BISNIS dan INFORMATIKA INDONESIA
Pumping Lemma RL (edisi 2) 3/5
Kesimpulan: L1 adalah regular language Pembuktian informal RE untuk L1: DFA
00*1
Pada pembuktian di atas kita membagi string 001 dengan masing-masing subtring terdiri atas satu simbol. Apakah kita boleh membagi string 001 menjadi demikian? x = 0 y = 01 z = ε Persyaratan definisi adalah y tidak empty dan |xy| ≤ 3, artinya boleh. Pembagian seperti ini menyebabkan xy0z tidak bersifat regular, demikian juga dengan xy2z. Kalau demikian apa kesimpulan kita, L1 regular atau bukan? Perhatikan definisi di atas, frasa there exist menyatakan jika terdapat (bisa didapatkan) kasus yang memenuhi kriteria maka language dianggap regular, BUKAN semua kasus harus memenuhi persyaratan baru dianggap regular. 2. Language L2 terdiri atas string-string yang dibentuk oleh substring 01 atau 10 berulang kali, Contoh string-string pada L2 adalah: 01, 10, 0101, 1010, 0110, 1001, 011010010101 Apakah L2 adalah regular language? Misalkan w adalah string berbentuk pengulangan 01. Kita ambil w = xyz yang panjangnya 4 dan diuraikan menjadi x = 0 y = 10 z = 1 syarat 1: y ≠ ε terpenuhi syarat 2: |xy| = |010| ≤ 4 terpenuhi syarat 3: jika k bernilai 0 maka terbentuk string 01 ∈ L2 jika k bernilai 1 maka terbentuk string 0101 ∈ L2 jika k bernilai 2 maka terbentuk string 010101 ∈ L2 Kesimpulan: L2 adalah regular language Pembuktian cara lain: Misalkan w adalah string berbentuk pengulangan 10. Kita ambil w = xyz yang panjangnya 4 dan diuraikan menjadi x = ε y = 10 z = 10 syarat 1: y ≠ ε terpenuhi syarat 2: |xy| = |10| ≤ 4 terpenuhi syarat 3: jika k bernilai 0 maka terbentuk string 10 ∈ L2 jika k bernilai 1 maka terbentuk string 1010 ∈ L2 jika k bernilai 2 maka terbentuk string 101010 ∈ L2 Kesimpulan: L2 adalah regular language Pembuktian cara lain:
INSTITUT BISNIS dan INFORMATIKA INDONESIA
Pumping Lemma RL (edisi 2) 4/5
Misalkan w adalah string berbentuk campuran pengulangan 01 dan 10. Kita ambil w = xyz yang panjangnya 4: 0110 dan diuraikan menjadi x = 01 y = 10 z = ε syarat 1: y ≠ ε terpenuhi syarat 2: |xy| = |0110| ≤ 4 terpenuhi syarat 3: jika k bernilai 0 maka terbentuk string 01 ∈ L2 jika k bernilai 1 maka terbentuk string 0110 ∈ L2 jika k bernilai 2 maka terbentuk string 011010 ∈ L2 Kesimpulan: L2 adalah regular language Pembuktian informal RE untuk L1: DFA:
(01 + 10) (01 + 10)* (01 + 10)
diminimasi menjadi 3. Language L3 = {0n1n : n > 0 }. Apakah L3adalah regular language? Terdapat tiga kemungkinan menentukan substring y. a. Substring y terdiri atas simbol 0 Misalkan w = 0011 adalah string pada L3 yang panjangnya 4 dan diuraikan menjadi x = 0 y = 0 z = 11 syarat 1: y ≠ ε terpenuhi syarat 2: |xy| = |00| ≤ 4 terpenuhi syarat 3: jika k bernilai 0 maka terbentuk string 011 ∉ L3 b. Substring y terdiri atas simbol 1 Misalkan w = 0011 adalah string pada L3 yang panjangnya 4 dan diuraikan menjadi x = 00 y = 1 z = 1 syarat 1: y ≠ ε terpenuhi syarat 2: |xy| = |001| ≤ 4 terpenuhi syarat 3: jika k bernilai 0 maka terbentuk string 001 ∉ L3 c. Substring y terdiri atas simbol 01 Misalkan w = 0011 adalah string pada L3 yang panjangnya 4 dan diuraikan menjadi x = 0 y = 01 z = 1 syarat 1: y ≠ ε terpenuhi syarat 2: |xy| = |001| ≤ 4 terpenuhi syarat 3: jika k bernilai 0 maka terbentuk string 01 ∈ L3 jika k bernilai 1 maka terbentuk string 0011 ∈ L3 jika k bernilai 2 maka terbentuk string 001011 ∉ L3
INSTITUT BISNIS dan INFORMATIKA INDONESIA
Pumping Lemma RL (edisi 2) 5/5
Kesimpulan: L3 BUKAN regular language Mengapa L3 bukan regular language? Language L3 perlu “mengingat” berapa jumlah simbol 0 yang diproses. RE dan DFA tidak mempunyai kemampuan untuk “mengingat” jumlah simbol 0 yang diproses. Dengan demikian tidak mungkin membandingkan jumlah simbol 0 dengan jumlah simbol 1. Referensi Hopcroft, E. John, Rajeev Motwani, Jeffrey D. Ullman, (2001), Introduction to Automata Theory, Languages, and Computation, 2nd edition, Addison-Wesley
INSTITUT BISNIS dan INFORMATIKA INDONESIA