✖

Gabungan bahasa reguler

Misalkan ada dua bahasa reguler L1, L2. Kita akan membuktikan bahwa gabungan keduanya, L = L1 ∪ L2, juga merupakan bahasa reguler.

Cara dengan otomaton deterministik

Ide pembuktian

Ada dua bahasa reguler L1 dan L2, dan kita ingin membuktikan bahwa gabungan keduanya, L1 ∪ L2, juga merupakan bahasa reguler. Karena L1 dan L2 adalah bahasa reguler, ada otomaton hingga A1 dan A2 yang menerima bahasa L1 dan L2, jadi berlaku L(A1) = L1 dan L(A2) = L2. Selanjutnya, kita susun otomaton hingga A yang menerima bahasa L1 ∪ L2. Dengan begitu, terbukti bahwa bahasa L1 ∪ L2 reguler.

Bagaimana caranya? Kita punya otomaton hingga A1 dan A2 yang menerima masing-masing bahasa. Dapat dikatakan bahwa string w termasuk bahasa L1 ∪ L2 jika dan hanya jika string tersebut diterima oleh setidaknya salah satu otomaton, A1 atau A2.

Otomaton A dapat bekerja sebagai berikut: untuk input w, otomaton menyimulasikan komputasi otomaton A1 untuk input w. Jika A1 menerima string w, A juga menerima string w. Jika A1 menolak string w, A masih mencoba menyimulasikan komputasi A2 untuk input w. Jika A2 menerima string w, A juga menerima string w. Jika tidak, string tersebut ditolak.

Tinggal memformalkan apa artinya otomaton A “menyimulasikan” komputasi otomaton lain.

Formalisasi

Ada dua bahasa reguler L1 dan L2 yang diterima oleh otomaton hingga

A1=⟨Q1,Σ1,δ1,q1,F1⟩A2=⟨Q2,Σ2,δ2,q2,F2⟩.

Kita susun otomaton hingga A = ⟨Q, Σ, δ, q, F⟩ yang menerima bahasa L = L1 ∪ L2. Kita gunakan ide menyimulasikan dua otomaton A1, A2. Bayangkan inputnya adalah string w = w1w2… wn, dan sekarang kita menyimulasikan jalannya otomaton A1 dan A2 untuk string w secara bersamaan. Konfigurasi awal otomaton A1 adalah ⟨q1, w1w2… wn⟩, dan konfigurasi awal A2 adalah ⟨q2, w1w2… wn⟩. Sekarang pada setiap otomaton kita lakukan satu langkah komputasi, sehingga kita sampai di konfigurasi ⟨δ1(q1, w1), w2… wn⟩ dan ⟨δ2(q2, w1), w2… wn⟩.

Terlihat bahwa kedua konfigurasi ini hanya berbeda pada komponen pertama, sedangkan komponen kedua — bagian string yang belum dibaca — selalu sama. Karena itu, selama simulasi kita tidak perlu menyimpan dua konfigurasi untuk dua otomaton; cukup satu konfigurasi berbentuk ⟨⟨qi, qj⟩, wl… wn⟩, dengan qi ∈ Q1 dan qj ∈ Q2. Dengan kata lain, otomaton A yang sedang kita susun memiliki konfigurasi awal ⟨⟨q1, q2⟩, w⟩. Bagian pertama pasangan ⟨q1, q2⟩ menyatakan state tempat otomaton A1 saat ini berada, dan komponen kedua menyatakan state otomaton A2 saat ini.

Jadi, dapat kita tulis bahwa himpunan state otomaton A yang kita susun adalah Q = Q1 × Q2, yaitu hasil kali Kartesius dari state kedua otomaton sebelumnya. Ide berikutnya: otomaton A memiliki state awal ⟨q1, q2⟩, dan jika otomaton A1 untuk simbol w1 berpindah ke state qi dan otomaton A2 untuk simbol w1 berpindah ke state qj, otomaton A untuk simbol w1 berpindah ke state ⟨qi, qj⟩.

Fungsi transisi δ kita tulis sebagai berikut (di sini kita asumsikan bahwa saat ini kita berada di state qi dan qj):

δ(⟨qi,qj⟩,w)=⟨δ1(qi,w),δ2(qj,w)⟩

Tinggal beberapa hal kecil. Untuk alfabet berlaku Σ= Σ1 ∪ Σ2. State awalnya adalah q = ⟨q1, q2⟩. State akhirnya adalah semua pasangan ⟨qi, qj⟩ sedemikian sehingga qi ∈ F1 atau qj ∈ F2.

Ilustrasi prosedur

Misalkan ada dua otomaton. Yang pertama adalah otomaton A1, yang menerima semua string (termasuk string kosong) dengan angka nol dan satu yang berselang-seling, yaitu string berbentuk 01, 0101, 010101, …

Otomaton kedua, A2, menerima string yang memuat setidaknya satu angka nol:

Gabungan kedua bahasa ini adalah string yang memuat nol atau berbentuk 01, 0101, … Sekarang kita susun otomaton hingga A = ⟨Q, Σ, δ, q, F⟩ yang menerima bahasa gabungan ini. Pertama, kita lihat seperti apa state otomaton baru A. State-statenya adalah hasil kali Kartesius dari state otomaton pertama dan kedua:

Q=Q1×Q2={⟨q0,p0⟩,⟨q0,p1⟩,⟨q1,p0⟩,⟨q1,p1⟩,⟨q2,p0⟩,⟨q2,p1⟩}

Inilah keenam state otomaton A yang menerima bahasa gabungan L(A1) ∪ L(A2). Dalam diagram, state-state tersebut terlihat seperti ini:

Jangan kaget bahwa ada state yang terdiri atas pasangan state — penamaan ini hanya membantu kita memahami apa yang sebenarnya terjadi di dalam otomaton. State-state tersebut boleh saja diberi nama biasa q0, …, q5. State akhir adalah state yang memuat state q0 atau p1, yaitu state akhir otomaton semula. State awalnya adalah ⟨q0, p0⟩.

Sekarang kita harus mencari semua transisi. Kita buat tabel seperti ini:

01⟨q0,p0⟩⟨q0,p1⟩⟨q1,p0⟩⟨q1,p1⟩⟨q2,p0⟩⟨q2,p1⟩

Tabel ini kita lengkapi sedikit demi sedikit. Pertama, kita cari ke mana transisi dari state ⟨q0, p0⟩ untuk input 0. Kita cari ke mana transisi dari state q0 untuk input 0 pada otomaton A1: transisinya menuju state q1. Pada otomaton A2, transisi dari p0 untuk nol menuju state p1. Jadi, ke dalam tabel kita tuliskan ⟨q1, p1⟩:

01⟨q0,p0⟩⟨q1,p1⟩⟨q0,p1⟩⟨q1,p0⟩⟨q1,p1⟩⟨q2,p0⟩⟨q2,p1⟩

Untuk input 1 diperoleh: pada otomaton A1 berlaku δ1(q0, 1) = q2, dan pada otomaton A2 berlaku δ2(p0, 1) = p0. Jadi, kita memperoleh state ⟨q2, p0⟩.

01⟨q0,p0⟩⟨q1,p1⟩⟨q2,p0⟩⟨q0,p1⟩⟨q1,p0⟩⟨q1,p1⟩⟨q2,p0⟩⟨q2,p1⟩

Kita lengkapi sisa tabelnya:

01⟨q0,p0⟩⟨q1,p1⟩⟨q2,p0⟩⟨q0,p1⟩⟨q1,p1⟩⟨q2,p1⟩⟨q1,p0⟩⟨q2,p1⟩⟨q0,p0⟩⟨q1,p1⟩⟨q2,p1⟩⟨q0,p1⟩⟨q2,p0⟩⟨q2,p1⟩⟨q2,p0⟩⟨q2,p1⟩⟨q2,p1⟩⟨q2,p1⟩

Berdasarkan tabel ini, kita tinggal melengkapi sisa diagramnya.

Kita dapat mencoba apakah otomaton bekerja sebagaimana mestinya. Kita coba menerima string 0100. Otomaton secara berurutan melewati state-state

⟨q0,p0⟩,⟨q1,p1⟩,⟨q0,p1⟩,⟨q1,p1⟩,⟨q2,p1⟩

Karena state ⟨q2, p1⟩ adalah state akhir, otomaton A menerima string 0100. Bagaimana hasilnya jika kita mencoba menerima string 0100 dengan otomaton A1 dan A2? Otomaton A1 secara berurutan melewati state-state berikut:

q0,q1,q0,q1,q2

Otomaton berhenti di state q2, yang bukan state akhir, sehingga otomaton A1 tidak menerima string ini. Bagaimana dengan otomaton A2?

p0,p1,p1,p1,p1

State p1 adalah state akhir, sehingga otomaton A2 menerima string 0100. Perhatikan bahwa otomaton A1 dan A2 berhenti di state q2 dan p1, sesuai dengan otomaton A yang berhenti di state ⟨q2, p1⟩.

Cara dengan otomaton nondeterministik

Contoh

Ketertutupan himpunan bahasa reguler terhadap gabungan juga dapat dibuktikan dengan mengonstruksi otomaton nondeterministik, yang jauh lebih sederhana.

Jadi, ada dua bahasa reguler L1, L2, dan kita ingin membuktikan bahwa gabungan keduanya, L = L1 ∪ L2, juga merupakan bahasa reguler. Karena L1, L2 adalah bahasa reguler, pasti ada otomaton A1, A2 yang menerima bahasa-bahasa tersebut. Artinya, berlaku L(A1) = L1 dan L(A2) = L2. Dengan otomaton-otomaton ini, kita konstruksi otomaton A yang menerima bahasa L, yaitu L(A) = L.

Misalkan otomaton hingga A1 dan A2 terlihat seperti ini:

dan

Otomaton yang menerima gabungan kedua bahasa dapat dikonstruksi dengan membuat state awal baru dan membuat dua transisi epsilon dari state ini ke state awal semula. Selesai. Otomatonnya terlihat seperti ini:

Formalisasi

Ada dua otomaton A1 = ⟨Q1, Σ, δ1, q1, F1⟩ dan A2 = ⟨Q2, Σ, δ2, q2, F2⟩. Kita konstruksi otomaton A = ⟨Q, Σ, δ, q0, F⟩ yang menerima gabungan bahasa-bahasa yang diterima kedua otomaton tersebut, yaitu L(A) = L(A1) ∪ L(A2). Di sini berlaku:

  • Q = Q1 ∪ Q2 ∪ {q0}
  • F = F1 ∪ F2

Fungsi transisi δ didefinisikan sebagai berikut:

δ(q,a)={δ1(q,a)jikaq∈Q1δ2(q,a)jikaq∈Q2{q1,q2}jikaq=q0∧a=ε∅jikaq=q0∧a≠ε

Sumber

Daftar isi: Sifat ketertutupan bahasa reguler, Gabungan bahasa reguler, Irisan bahasa reguler, Selisih bahasa reguler, Komplemen bahasa reguler, Konkatenasi bahasa reguler, Penutup bahasa reguler