Bagaimana cara menunjukkan L = L (G)?

22

Menentukan bahasa formal dengan memberikan tata bahasa formal adalah tugas yang sering: kita membutuhkan tata bahasa tidak hanya untuk menggambarkan bahasa, tetapi juga untuk menguraikannya, atau bahkan melakukan sains yang tepat . Dalam semua kasus, penting bahwa tata bahasa yang ada sudah benar , yaitu menghasilkan kata-kata yang diinginkan secara tepat.

Kita sering dapat berdebat pada tingkat tinggi mengapa tata bahasa adalah representasi yang memadai dari bahasa yang diinginkan, menghilangkan bukti formal. Tetapi bagaimana jika kita ragu atau memerlukan bukti formal untuk beberapa alasan? Apa saja teknik yang bisa kita terapkan?

Ini seharusnya menjadi pertanyaan referensi . Oleh karena itu, harap berhati-hati untuk memberikan jawaban umum, yang disajikan secara didaktis yang diilustrasikan oleh setidaknya satu contoh tetapi tetap mencakup banyak situasi. Terima kasih!

Raphael
sumber

Jawaban:

21

Tata bahasa pada dasarnya adalah objek rekursif, jadi jawabannya tampak jelas: dengan induksi. Yang mengatakan, spesifiknya sering sulit untuk mendapatkan yang benar. Dalam sekuel saya akan menjelaskan teknik yang memungkinkan untuk mengurangi banyak bukti ketepatan tata bahasa untuk langkah-langkah mekanik, asalkan beberapa preprocessing kreatif dilakukan.

Ide dasarnya adalah untuk tidak membatasi diri pada kata - kata tata bahasa dan bahasa; sulit untuk memahami struktur tata bahasa dengan cara ini. Sebagai gantinya, kami akan berdebat tentang serangkaian kalimat yang dapat dibuat oleh tata bahasa. Selain itu, kami akan membagi satu tujuan bukti yang menakutkan menjadi banyak tujuan kecil yang lebih mudah ditelusuri.

Mari tata bahasa formal dengan non-terminal , terminal , aturan dan mulai simbol . Kami menyatakan dengan serangkaian kalimat yang dapat diturunkan dari diberikan , yaitu . Bahasa yang dihasilkan oleh adalah . Misalkan kita ingin menunjukkan bahwa untuk beberapa .N T δ S N ϑ ( G ) S δ α ϑ ( G )G=(N,T,δ,S)NTδSNϑ(G)SδG L ( G ) = ϑ ( G ) T L = L ( G ) L T αϑ(G)SαGL(G)=ϑ(G)TL=L(G)LT

Ansatz

Inilah cara kami melakukannya. Kami mendefinisikan jadiM1,,Mk(NT)

  1. ϑ(G)=i=1kMi dan
  2. Ti=1kMi=L .

Sementara 2. biasanya jelas dengan definisi , 1. membutuhkan beberapa pekerjaan serius. Kedua item secara jelas menyiratkan seperti yang diinginkan.L ( G ) = LMiL(G)=L

Untuk kemudahan notasi, mari kita menyatakan .M=i=1kMi

Jalan berbatu

Ada dua langkah utama untuk melakukan pembuktian seperti itu.

  • Bagaimana cara menemukan (baik) ? Mi
    Salah satu strategi adalah untuk menyelidiki fase tata bahasa bekerja melalui. Tidak setiap tata bahasa menyetujui gagasan ini; secara umum, ini adalah langkah kreatif. Ini membantu jika kita dapat mendefinisikan tata bahasa sendiri; dengan beberapa pengalaman, kami akan dapat mendefinisikan tata bahasa yang lebih mudah diterapkan dengan pendekatan ini.

  • Bagaimana cara membuktikan 1.?
    Seperti halnya kesetaraan yang ditetapkan, ada dua arah.

    • Gϑ(G)M : (struktural) induksi selama produksi dari .G
    • M i SMϑ(G) : Biasanya satu induksi dengan , mulai dari yang mengandung .MiS

Ini spesifik seperti yang didapat; detailnya tergantung pada tata bahasa dan bahasa yang ada.

Contoh

Pertimbangkan bahasanya

L={anbncmn,mN}

dan tata bahasa dengan diberikan olehδG=({S,A},{a,b,c},δ,S)δ

SScAAaAbε

untuk itu kami ingin menunjukkan bahwa . Apa saja fase tata bahasa ini bekerja? Ya, pertama-tama ia menghasilkan dan kemudian . Ini segera menginformasikan pilihan kami pada , yaituc m a n b n M iL=L(G)cmanbnMi

M0={ScmmN},M1={anAbncmm,nN},M2={anbncmm,nN}.

Karena dan , item 2. sudah diurus. Menuju 1., kami membagi bukti menjadi dua bagian seperti yang diumumkan.M 0T = M 1T = M2=LM0T=M1T=

ϑ(G)M

Kami melakukan induksi struktural sepanjang aturan .G

IA: Karena kami berhasil berlabuh.S=Sc0M0

IH: Asumsikan untuk beberapa set kalimat bahwa kita juga tahu .X MXϑ(G)XM

IS: Biarkan sembarang. Kita harus menunjukkan bahwa bentuk apapun memiliki dan aturan apa pun yang diterapkan berikutnya, kita tidak meninggalkan . Kami melakukan ini dengan perbedaan kasus lengkap. Dengan hipotesis induksi, kita tahu bahwa (tepatnya) salah satu dari kasus berikut ini berlaku:α MαXϑ(G)MαM

  • w = S c m m N MwM0 , yaitu untuk beberapa . Dua aturan dapat diterapkan, yang keduanya menghasilkan kalimat dalam : w=ScmmN
    M
    • ScmScm+1M0 dan
    • ScmAcm=a0Ab0cmM1 .
  • w = a n A b n c m m , n NwM1 , yaitu untuk beberapa : w=anAbncmm,nN
    • wan+1Abn+1cmM1 dan
    • wanbncmM2 .
  • w T wM3 : karena , tidak ada derivasi lebih lanjut yang mungkin.wT

Karena kami telah berhasil menangani semua kasus, induksi selesai.

ϑ(G)M

Kami melakukan satu (sederhana) bukti per . Perhatikan bagaimana kami bukti sehingga "nanti" dapat berlabuh menggunakan "sebelumnya" .M i M iMiMiMi

  • m S c 0 = S S S cM1 : Kami melakukan induksi lebih dari , berlabuh di dan menggunakan pada langkah.mSc0=SSSc
  • m n A c m S S c m A c m A a A bM2 : Kami memperbaiki ke nilai arbitrer dan menginduksi lebih dari . Kami berlabuh di , menggunakan dengan bukti sebelumnya. Langkah ini berkembang melalui .mnAcmSScmAcmAaAb
  • m , n N S a n A b n c m a n b n c mM3 : Untuk sewenang-wenang kami menggunakan bukti sebelumnya untuk .m,nNSanAbncmanbncm

Ini menyimpulkan arah kedua dari bukti 1., dan kita selesai.

Kita dapat melihat bahwa kita sangat mengeksploitasi tata bahasa itu linier . Untuk tata bahasa non-linear, kita perlu dengan lebih dari satu parameter variabel (dalam buktinya), yang bisa menjadi jelek. Jika kita memiliki kendali atas tata bahasa, ini mengajarkan kita untuk membuatnya tetap sederhana. Pertimbangkan sebagai contoh tata bahasa ini yang setara dengan : GMiG

SaAbCεAaAbεCcCε

Olahraga

Berikan tata bahasa untuk

L={bkal(bc)manbok,l,m,n,oN,ko,2l=n,m2}

dan buktikan kebenarannya.

Jika Anda memiliki masalah, tata bahasa:

Pertimbangkan dengan produksiG=({S,Br,Bl,A,C},{a,b,c},δ,S)

SbSbBlBrBlbBlbABrBrbAbAaAaaCCbcCbcbc

dan :Mi

M0={biSbiiN}M1={biBlbooN,io}M2={bkBrbikN,ik}M3={bkaiAa2ibok,o,iN,ko}M4={bkal(bc)iCa2lbok,o,l,iN,ko}M5=L

Bagaimana dengan tata bahasa non-linear?

Fitur karakterisasi dari kelas bahasa bebas konteks adalah bahasa Dyck : pada dasarnya, setiap bahasa bebas konteks dapat dinyatakan sebagai persimpangan bahasa Dyck dan bahasa biasa. Sayangnya, bahasa Dyck tidak linier, yaitu kita tidak bisa memberikan tata bahasa yang secara inheren cocok dengan pendekatan ini.

Kita dapat, tentu saja, masih mendefinisikan dan melakukan pembuktian, tetapi pasti akan lebih sulit dengan induksi bersarang dan apa yang tidak. Ada satu cara umum yang saya tahu yang dapat membantu sampai batas tertentu. Kami mengubah ansatz untuk menunjukkan bahwa kami menghasilkan setidaknya semua kata yang diperlukan, dan bahwa kami menghasilkan jumlah kata yang tepat (per panjang). Secara formal, kami menunjukkan ituMi

  1. ϑ(G)L dan
  2. n N|L(G)Tn|=|LTn|untuk semua .nN

Dengan cara ini, kita dapat membatasi diri ke arah "mudah" dari struktur asli dan mengeksploitasi dalam bahasa, mengabaikan fitur rumit yang dimiliki oleh tata bahasa. Tentu saja, tidak ada makan siang gratis: kita mendapatkan semua tugas baru untuk menghitung kata-kata yang dihasilkan untuk setiap . Beruntung bagi kita, ini sering dapat ditelusuri; lihat di sini dan di sini untuk detail¹. Anda dapat menemukan beberapa contoh dalam tesis sarjana saya .n NG nN

Untuk tata bahasa yang ambigu dan tidak bebas konteks, saya khawatir kita kembali ke gaya berpikir dan berpikir.


  1. Saat menggunakan metode penghitungan tertentu, kami mendapat bonus bahwa tata bahasanya tidak ambigu. Pada gilirannya, ini juga berarti bahwa teknik tersebut harus gagal untuk tata bahasa yang ambigu karena kita tidak pernah dapat membuktikannya 2.
Raphael
sumber