Bagaimana menunjukkan bahwa bahasa reguler "terbalik" adalah teratur

19

Saya terjebak pada pertanyaan berikut:

"Bahasa reguler adalah persis yang diterima oleh automata terbatas. Mengingat fakta ini, menunjukkan bahwa jika bahasa L diterima oleh beberapa otomat terbatas, maka LR juga diterima oleh beberapa yang terbatas; LR terdiri dari semua kata L terbalik."

Kucing
sumber
1
Nah, apakah Anda mencoba membangun robot yang akan menerima LR ? Mungkin membantu menggambar contoh.
Gilles 'SANGAT berhenti menjadi jahat'
Terimakasih atas balasan anda. Saya tidak yakin bagaimana melakukan ini. Saya yakin setiap L ^ R akan diterima oleh beberapa bahasa karena itu dibangun dari 'alfabet' yang sama dan juga akan menjadi bahasa biasa. Saya tidak yakin bagaimana cara membuktikannya, atau cara menggambar contoh.
Cat
2
Selamat datang! Untuk pertanyaan dasar seperti itu yang menampar tugas pekerjaan rumah, kami senang jika pertanyaan itu berisi (signifikan) pekerjaan si penanya. Anda tentu telah mencoba sesuatu yang dapat Anda bagikan (yang kemudian dapat kami gunakan untuk memandu Anda ke arah yang benar). Jika tidak, saya sarankan Anda memeriksa kembali definisi Anda dan mengindahkan saran Gilles.
Raphael
3
@Victoria "itu dibangun dari 'alfabet' yang sama dan juga akan menjadi bahasa biasa" - oh, nonono. {anbmaon,m,oN} , {anbmann,mN} dan {anbnannN} semuanya didefinisikan sama alfabet tetapi jatuh ke dalam kelas bahasa yang sangat berbeda.
Raphael
1
Pertanyaan lain di akhir bab ini meminta saya untuk membuktikan bahwa tidak ada robot terbatas yang dapat menerima semua palindrom di atas alfabet yang diberikan. Saya berpikir bahwa bukti untuk ini bergantung pada kenyataan bahwa ada jumlah tak terhingga negara jika kita mempertimbangkan semua kemungkinan palindrom (tidak ada batas panjang), sedangkan mesin adalah mesin keadaan terbatas.
Kucing

Jawaban:

26

Jadi, dengan bahasa teratur , kita tahu (pada dasarnya berdasarkan definisi) bahwa itu diterima oleh beberapa automata terbatas, jadi ada seperangkat keadaan terbatas dengan transisi yang sesuai yang membawa kita dari keadaan awal ke kondisi penerima jika dan hanya jika input adalah string di L . Kita bahkan dapat bersikeras bahwa hanya ada satu negara penerima, untuk menyederhanakan banyak hal. Untuk menerima bahasa sebaliknya yang perlu kita lakukan adalah membalik arah transisi, mengubah status mulai menjadi status terima, dan status terima ke kondisi awal. Kemudian kita memiliki mesin yang "mundur" dibandingkan dengan yang asli, dan menerima bahasa L R .LLLR

Luke Mathieson
sumber
Terima kasih banyak Luke - saya pikir saya mengerti apa yang Anda katakan. Anda tepat - saya sama sekali tidak memiliki pengalaman praktis dengan automata terbatas! Saya akan 'memilih' Anda, tetapi tampaknya saya tidak memiliki cukup poin. Maaf soal itu!
Cat
Tidak apa-apa, Anda harus dapat "menerima" jawaban yang Anda suka (harus ada tanda centang di bawah tombol pilih). Juga jawaban yang lebih formal dari Saadtaame adalah langkah selanjutnya yang luar biasa setelah saya.
Luke Mathieson
5
Menganggap hanya ada satu menerima keadaan kita baik harus memungkinkan -transitions, atau memiliki ε L . Keduanya bukan batasan nyata, saya tahu, jadi jawabannya OK. ϵϵL
Hendrik Jan
1
Ya, ide itu tampak jelas bagi saya. Bagian yang sulit adalah memverifikasi bahwa itu benar.
Tidak ada yang
24

Anda harus menunjukkan bahwa Anda selalu dapat membuat otomat terbatas yang menerima string dalam LR diberikan otomat terbatas yang menerima string dalamL . Berikut adalah prosedur untuk melakukannya.

  1. Balikkan semua tautan di automaton
  2. Tambahkan status baru (sebut saja qs )
  3. Buat tautan dengan label ϵ dari status qs ke setiap status akhir
  4. Ubah semua status akhir menjadi kondisi normal
  5. Ubah status awal menjadi status akhir
  6. Jadikan qs kondisi awal

Mari memformalkan semua ini; kita mulai dengan menyatakan teorema.

Dalil. Jika L adalah bahasa reguler, kemudian jadi adalah LR .

Misalkan A=(QA,ΣA,δA,qA,FA) menjadi NFA dan biarkan L=L(A) . The ϵ -NFA AR didefinisikan di bawah menerima bahasa LR .

  1. AR=(QA{qs},ΣA,δAR,qs,{qA}) danqsQA
  2. pδA(q,a)qδAR(p,a) , di manaaΣA danq,pQA
  3. ϵclosure(qs)=FA

Bukti. Pertama, kita membuktikan pernyataan berikut: jalan dari q ke p di A berlabel dengan w jika dan hanya jika jalan dari p ke q di AR diberi label dengan wR (kebalikan dari w ) untuk q,pQA . Buktinya adalah dengan induksi pada panjang w .

  1. Kasing dasar: |w|=1
    Dimiliki oleh definisi δAR
  2. Induksi: anggap pernyataan tersebut berlaku untuk kata-kata dengan panjang <n dan biarkan |w|=n dan w=xa
    Biarkan pδA(q,w)=δA(q,xa)
    Kita tahu bahwa δA(q,xa)=pδA(p,a) pδA(q,x)
    x dana adalah kata-kata yang kurang darin simbol. Dengan hipotesis induksi,pδAR(p,a) danqδAR(p,xR) . Ini menyiratkan bahwaqδAR(p,axR)pδA(q,xa) .

Membiarkan q=qA dan p=s untuk beberapa sFA dan mengganti wR untuk axR jaminan bahwa qδAR(s,wR) sFA . Karena ada jalan berlabel ϵ dari qs ke setiap keadaan di FA (3. dalam definisi AR) Dan jalan dari setiap negara bagian di FA ke negara qA label dengan wR , maka ada jalan diberi label dengan ϵwR=wR dari qs untuk qA . Ini membuktikan teorema.

Perhatikan bahwa ini membuktikan bahwa (LR)R=L juga.

Harap edit jika ada kesalahan pemformatan atau kekurangan pada bukti saya ....

saadtaame
sumber
1
Apa yang Anda maksud dengan ? ϵclosure(qs)=FA
user124384
Tetapi Anda tidak dapat memiliki ϵ transisi dalam bahasa reguler deterministik, bukan !?
yukashima huksay
@yukashimahuksay Benar, tetapi Anda juga dapat selalu mengambil otomat terbatas non-deterministik dan mengubahnya menjadi otomat terbatas deterministik. Mereka setara.
Pro Q
12

Untuk menambah transformasi berbasis automata dijelaskan di atas, Anda juga dapat membuktikan bahwa bahasa reguler ditutup di bawah reversal dengan menunjukkan bagaimana mengkonversi ekspresi reguler untuk menjadi ekspresi reguler untuk L R . Untuk melakukannya, kita akan mendefinisikan fungsi R E V ekspresi regular yang menerima sebagai masukan ekspresi reguler R untuk beberapa bahasa L , kemudian menghasilkan ekspresi reguler R ' untuk bahasa L R . Ini didefinisikan secara induktif pada struktur ekspresi reguler:LLRREVRLRLR

  1. REV(ϵ)=ϵ
  2. REV()=
  3. REV(a)=a for any aΣ
  4. REV(R1R2)=REV(R2)REV(R1)
  5. REV(R1|R2)=REV(R1)|REV(R2)
  6. REV(R)=REV(R)
  7. REV((R))=(REV(R))

You can formally prove this construction correct as an exercise.

Hope this helps!

templatetypedef
sumber
Hi! I landed here because I was thinking about the idea of reversed regular expressions, as a way of optimizing a right-anchored match against a string: feed the characters to the reverse automaton, in reverse order. One pass. I wrote down the algebraic properties of regex reversal, and it matches your table almost exactly, even using the rev() notation. :) I also put down REV(R1&R2) = REV(R1)&REV(R2); I have a regex implementation which has intersection. Yes; I'm thinking of adding an operator for reversal perhaps R\r (reverse preceding regex element).
Kaz
Here is a tricky one: what is the algebraic rule for REV(~R): regex negation? REV(~R) is the reverse of the set of all strings outside of R. Is that the same as ~REV(R): the set of all strings outside of the reverse of the set denoted by R? This is not clear at all because any palindromes in R are also in REV(R).
Kaz
1

Using regular expressions, prove that if L is a regular language then the \emph{reversal} of L, LR={wR:wL}, is also regular. In particular, given a regular expression that describes L, show by induction how to convert it into a regular expression that describes LR. Your proof should not make recourse to NFAs.

We will assume that we are given a regular expression that describes L. Let us first look at the concatination operator (), and then we can move onto more advanced operators. So our cases of concatenation deal with the length of what is being concatenated. So first we will break all concatenations from ab to ab. When dealing with these break the components up as much as possible: (aba)b(aba)b, but you cannot break associative order between different comprehensions of course.

When R

When s=ϵ, we have the empty string which is already reversed thus the mechanism does not change

When s is just a letter, as in sΣ, the reversal is just that letter, s

When s=σ, we have a single constituent so we just reverse that constituent and thus σR

When s=(σ0σ1...σk1σk) where k is odd, we have a regular expression which can be written as (σ0σ1...σk1σk). The reversal of these even length strings is simple. Merely switch the 0 index with the k index. Then Switch the 1 index with k-1 index. Continue till the each element was switched once. Thus the last element is now the first in the reg ex, and the first is the last. The second to last is the second and the second is the second to last. Thus we have a reversed reg ex which will accept the reversed string (first letter is the last etc.) And of course we reverse each constituent. Thus we would get (σkRσk1R...σ1Rσ0R)

When s=(σ0σ1...σk/2...σk1σk) where k is even, we have a regular expression generally which can be written as (σ0σ1...σk1σk). The reversal of these even length strings is simple. Merely switch the 0 index with the k index. Then Switch the 1 index with k-1 index. Continue till the each element was switched once, but the k/2 element (an integer because k is even). Thus the last element is now the first in the reg ex, and the first is the last. The second to last is the second and the second is the second to last. Thus we have a reversed reg ex which will accept the reversed string (first letter is the last etc.). And that middle letter. And of course we reverse each constituent. Thus we would get (σkRσk1R...σk/2R...σ1Rσ0R)

Okay the hard part is done. Let us look to the operator. This is merely a union of sets. So given two strings, s1,s2, the reverse of s1s2 is only s1Rs2R. The union will not change. And this makes sense. This will only add strings to a set. It does not matter which order they are added to the set, all that matters is that they are.

The kleene star operator is the same. It is merely adding strings to a set, not telling us how we should construt the string persay. So to reverse a kleene star of a string s, is only ((sR)). Reversal can just move through them.

Thus to reverse this (((ab)(a))((ab)(b)))R we simply follow the rules. To reverse the outer union we simply reverse its two components. To reverse this: ((ab)(a)) kleene star, we simply reverse what is inside it (((ab)(a))R). Then to reverse a concatenation, we index and then switch greatest with least. So we start with ((ab)(a))R and get ((a)R(ab)R). To reverse that single letter, we reach our base case and get (a)R(a). This process outlined above describes an inductive description of this change.

user2524930
sumber