✖

Kesatuan bahasa nalar

Katakan kita mempunyai dua bahasa nalar L1, L2. Kita akan membuktikan bahawa kesatuan kedua-duanya, L = L1 ∪ L2, juga merupakan bahasa nalar.

Kaedah menggunakan automaton berketentuan

Idea kaedah

Kita mempunyai dua bahasa nalar L1 dan L2 dan mahu membuktikan bahawa kesatuannya, L1 ∪ L2, juga bahasa nalar. Oleh sebab L1 dan L2 ialah bahasa nalar, wujud automaton terhingga A1 dan A2 yang menerima bahasa L1 dan L2, iaitu L(A1) = L1 dan L(A2) = L2. Kita akan membina automaton terhingga A yang menerima bahasa L1 ∪ L2, dan dengan itu membuktikan bahawa bahasa L1 ∪ L2 ialah bahasa nalar.

Bagaimanakah caranya? Kita mempunyai automaton terhingga A1 dan A2 yang menerima setiap bahasa itu. Kita boleh mengatakan bahawa rentetan w tergolong dalam bahasa L1 ∪ L2 jika dan hanya jika rentetan itu diterima oleh sekurang-kurangnya satu daripada automaton A1 atau A2.

Automaton A boleh berfungsi begini: bagi input w, automaton itu menyimulasikan pengiraan automaton A1 bagi input w. Jika A1 menerima rentetan w, A juga menerima rentetan w. Jika A1 menolak rentetan w, A cuba pula menyimulasikan pengiraan A2 bagi input w. Jika A2 menerima rentetan w, A juga menerima rentetan w. Jika tidak, rentetan itu ditolak.

Yang tinggal ialah memformalkan maksud automaton A “menyimulasikan” pengiraan automaton lain.

Formalisasi

Kita mempunyai dua bahasa nalar L1 dan L2 yang diterima oleh automaton terhingga

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

Kita membina automaton terhingga A = ⟨Q, Σ, δ, q, F⟩ yang menerima bahasa L = L1 ∪ L2. Kita menggunakan idea menyimulasikan dua automaton A1, A2. Bayangkan input ialah rentetan w = w1w2… wn, dan kita menyimulasikan perjalanan automaton A1 dan A2 bagi rentetan w secara serentak. Konfigurasi awal automaton A1 ialah ⟨q1, w1w2… wn⟩, dan konfigurasi awal A2 ialah ⟨q2, w1w2… wn⟩. Sekarang kita melakukan satu langkah pengiraan dalam setiap automaton dan sampai ke konfigurasi ⟨δ1(q1, w1), w2… wn⟩ dan ⟨δ2(q2, w1), w2… wn⟩.

Kita lihat bahawa konfigurasi ini hanya berbeza pada komponen pertama; komponen kedua — bahagian rentetan yang belum dibaca — sentiasa sama. Oleh itu, semasa simulasi kita tidak perlu menyimpan dua konfigurasi bagi dua automaton; cukup satu konfigurasi berbentuk ⟨⟨qi, qj⟩, wl… wn⟩, dengan qi ∈ Q1 dan qj ∈ Q2. Dengan kata lain, automaton A yang kita bina mempunyai konfigurasi awal ⟨⟨q1, q2⟩, w⟩. Komponen pertama pasangan ⟨q1, q2⟩ mewakili keadaan semasa automaton A1, dan komponen kedua mewakili keadaan semasa automaton A2.

Oleh itu, kita boleh menulis bahawa set keadaan automaton A ialah Q = Q1 × Q2, iaitu hasil darab Cartes bagi keadaan dua automaton tadi. Idea seterusnya ialah: automaton A mempunyai keadaan awal ⟨q1, q2⟩, dan jika automaton A1 beralih ke keadaan qi bagi simbol w1 manakala automaton A2 beralih ke keadaan qj bagi simbol w1, automaton A beralih ke keadaan ⟨qi, qj⟩ bagi simbol w1.

Fungsi peralihan δ ditulis seperti berikut (di sini kita menganggap bahawa kita sedang berada pada keadaan qi dan qj):

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

Yang tinggal hanyalah perkara kecil. Abjadnya ialah Σ= Σ1 ∪ Σ2. Keadaan awalnya ialah q = ⟨q1, q2⟩. Keadaan akhir pula ialah semua pasangan ⟨qi, qj⟩ yang memenuhi syarat qi ∈ F1 atau qj ∈ F2.

Ilustrasi kaedah

Katakan kita mempunyai dua automaton. Yang pertama ialah automaton A1 yang menerima semua rentetan (termasuk rentetan kosong) yang sifar dan satunya berselang-seli, iaitu rentetan berbentuk 01, 0101, 010101, …

Automaton kedua, A2, menerima rentetan yang mengandungi sekurang-kurangnya satu sifar:

Kesatuan kedua-dua bahasa ini ialah rentetan yang sama ada mengandungi sifar atau berbentuk 01, 0101, … Sekarang kita membina automaton terhingga A = ⟨Q, Σ, δ, q, F⟩ yang menerima bahasa kesatuan ini. Pertama sekali, kita lihat rupa keadaan automaton baharu A. Keadaannya ialah hasil darab Cartes bagi keadaan automaton pertama dan kedua:

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

Inilah enam keadaan automaton A yang menerima bahasa kesatuan L(A1) ∪ L(A2). Dalam gambar rajah, keadaan itu kelihatan seperti berikut:

Jangan terkejut kerana terdapat keadaan yang terdiri daripada pasangan keadaan — pasangan ini hanya membantu kita memahami apa yang sebenarnya berlaku dalam automaton. Keadaan itu boleh sahaja dinamakan seperti biasa, q0, …, q5. Keadaan akhir ialah keadaan yang mengandungi sama ada keadaan q0 atau p1, iaitu keadaan akhir bagi automaton asal. Keadaan awal ialah ⟨q0, p0⟩.

Sekarang kita perlu mencari semua peralihan. Kita tulis jadual seperti berikut:

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

Kemudian kita lengkapkan jadual itu langkah demi langkah. Pertama, kita tentukan ke mana peralihan dari keadaan ⟨q0, p0⟩ menuju bagi input 0. Kita cari ke mana peralihan dari keadaan q0 bagi input 0 menuju dalam automaton A1: peralihan itu menuju ke keadaan q1. Dalam automaton A2, peralihan dari p0 bagi sifar menuju ke keadaan p1. Jadi, kita tulis ⟨q1, p1⟩ dalam jadual:

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

Bagi input 1 kita peroleh: bagi automaton A1, δ1(q0, 1) = q2, dan bagi automaton A2, δ2(p0, 1) = p0. Jadi, kita memperoleh keadaan ⟨q2, p0⟩.

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

Kita lengkapkan baki jadual:

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 jadual ini, kita hanya perlu melengkapkan baki gambar rajah.

Kita boleh menyemak bahawa automaton ini berfungsi dengan betul. Mari kita cuba menerima rentetan 0100. Automaton melalui keadaan berikut satu demi satu:

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

Oleh sebab keadaan ⟨q2, p1⟩ ialah keadaan akhir, automaton A menerima rentetan 0100. Apakah yang berlaku jika kita cuba menerima rentetan 0100 dengan automaton A1 dan A2? Automaton A1 melalui keadaan berikut satu demi satu:

q0,q1,q0,q1,q2

Automaton itu berakhir pada keadaan q2, yang bukan keadaan akhir, jadi automaton A1 tidak menerima rentetan ini. Bagaimana pula dengan automaton A2?

p0,p1,p1,p1,p1

Keadaan p1 ialah keadaan akhir, jadi automaton A2 menerima rentetan 0100. Perhatikan bahawa automaton A1 dan A2 berakhir pada keadaan q2 dan p1, dan hal ini sepadan dengan automaton A yang berakhir pada keadaan ⟨q2, p1⟩.

Kaedah menggunakan automaton tak berketentuan

Contoh

Ketertutupan set bahasa nalar terhadap kesatuan juga boleh dibuktikan dengan membina automaton tak berketentuan, dan cara ini jauh lebih mudah.

Kita mempunyai dua bahasa nalar L1, L2 dan mahu membuktikan bahawa kesatuannya, L = L1 ∪ L2, juga bahasa nalar. Oleh sebab L1, L2 ialah bahasa nalar, mesti wujud automaton A1, A2 yang menerima bahasa ini, iaitu L(A1) = L1 dan L(A2) = L2. Dengan menggunakan automaton ini, kita membina automaton A yang menerima bahasa L, iaitu L(A) = L.

Andaikan automaton terhingga A1 dan A2 kelihatan seperti berikut:

dan

Automaton yang menerima kesatuan kedua-dua bahasa dibina dengan menambahkan keadaan awal baharu dan melukis dua peralihan epsilon dari keadaan ini ke keadaan awal asal. Itu sahaja. Automaton itu kelihatan seperti berikut:

Formalisasi

Kita mempunyai dua automaton A1 = ⟨Q1, Σ, δ1, q1, F1⟩ dan A2 = ⟨Q2, Σ, δ2, q2, F2⟩. Kita membina automaton A = ⟨Q, Σ, δ, q0, F⟩ yang menerima kesatuan bahasa yang diterima oleh dua automaton tadi, iaitu L(A) = L(A1) ∪ L(A2). Dalam automaton ini:

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

Fungsi peralihan δ ditakrifkan seperti berikut:

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

Sumber

Kandungan: Sifat ketertutupan bahasa nalar, Kesatuan bahasa nalar, Persilangan bahasa nalar, Beza bahasa nalar, Pelengkap bahasa nalar, Perangkaian bahasa nalar, Tutupan bahasa nalar