วิธีแสดงให้เห็นว่าภาษาปกติ“ ตรงกันข้าม” นั้นเป็นภาษาปกติ


19

ฉันติดคำถามต่อไปนี้:

"ภาษาปกติเป็นภาษาที่แน่นอนที่ได้รับการยอมรับโดยออโต จำกัด เนื่องจากข้อเท็จจริงนี้แสดงให้เห็นว่าหากภาษาได้รับการยอมรับจากออโตเมติก จำกัดบางอันดังนั้นก็เป็นที่ยอมรับของบางอัน จำกัดประกอบด้วยทุกคำ ของย้อนกลับ "LLRLRL


1
คุณลองสร้างหุ่นยนต์ที่ยอมรับหรือไม่? มันอาจช่วยในการวาดตัวอย่าง LR
Gilles 'หยุดความชั่วร้าย'

ขอบคุณสำหรับการตอบกลับของคุณ. ฉันไม่แน่ใจว่าจะทำอย่างไร ฉันแน่ใจว่า L ^ R จะได้รับการยอมรับจากบางภาษาเพราะมันถูกสร้างขึ้นจาก 'ตัวอักษร' เดียวกันและดังนั้นจึงจะเป็นภาษาปกติ ฉันไม่แน่ใจว่าจะพิสูจน์ได้อย่างไรหรือจะวาดตัวอย่างได้อย่างไร
Cat

2
ยินดีต้อนรับ! สำหรับคำถามพื้นฐานดังกล่าวที่ได้รับมอบหมายการบ้านตีเราชอบถ้าคำถามมี (สำคัญ) งานก่อนหน้าของผู้ถาม แน่นอนคุณได้ลองบางสิ่งที่คุณสามารถแบ่งปันได้ (ซึ่งเราสามารถใช้เพื่อแนะนำคุณในทิศทางที่ถูกต้อง) ถ้าไม่ฉันขอแนะนำให้คุณตรวจสอบคำจำกัดความของคุณอีกครั้งและฟังคำแนะนำของ Gilles
ราฟาเอล

3
@Victoria "มันสร้างขึ้นจาก 'อักษร' เดียวกันดังนั้นจะเป็นภาษาปกติด้วย" - โอ้โนโนะโนะ ,และ{anbmaon,m,oN}{anbmann,mN}{anbnannN}ทั้งหมดถูกกำหนดไว้ในตัวอักษรเดียวกัน แต่ตกอยู่ในชั้นเรียนภาษาที่แตกต่างกันมาก
ราฟาเอล

1
อีกคำถามท้ายบทขอให้ฉันพิสูจน์ว่าไม่มีหุ่นยนต์ จำกัด ที่สามารถรับ palindromes ทั้งหมดตามตัวอักษรที่กำหนดได้ ฉันคิดว่าการพิสูจน์สำหรับบานพับนี้กับความจริงที่ว่ามีจำนวนไม่ จำกัด ของรัฐถ้าเรากำลังพิจารณา palindromes ที่เป็นไปได้ทั้งหมด (ไม่จำกัดความยาว) ในขณะที่เครื่องเป็นเครื่องจักรสถานะ จำกัด
Cat

คำตอบ:


26

เมื่อได้รับภาษาปกติLเรารู้ (เป็นหลักโดยคำจำกัดความ) ว่าเป็นที่ยอมรับโดยออโตไฟไนต์ จำกัด บางตัวดังนั้นจึงมีชุด จำกัด ของรัฐที่มีการเปลี่ยนผ่านที่เหมาะสมซึ่งนำเราจากสถานะเริ่มต้นไปสู่สถานะที่ยอมรับ เป็นสตริงในLLเราสามารถยืนยันได้ว่ามีเพียงรัฐเดียวที่ยอมรับได้เพื่อทำให้สิ่งต่าง ๆ ง่ายขึ้น การยอมรับภาษาย้อนกลับสิ่งที่เราต้องทำคือย้อนกลับทิศทางของการเปลี่ยนเปลี่ยนสถานะเริ่มต้นไปเป็นสถานะยอมรับและรัฐยอมรับเป็นสถานะเริ่มต้น แล้วเรามีเครื่องที่เป็น "ย้อนกลับ" เมื่อเทียบกับเดิมและยอมรับภาษาLR R


ขอบคุณมากลุค - ฉันคิดว่าฉันเข้าใจสิ่งที่คุณพูด คุณกำลังอยู่บนจุด - ฉันไม่มีประสบการณ์จริงกับออโต จำกัด แน่นอน! ฉันจะ 'ลงคะแนน' ให้คุณ แต่ฉันไม่มีคะแนนเพียงพอ ขอโทษสำหรับเรื่องนั้น!
Cat

ไม่เป็นไรคุณควรจะสามารถ "ตอบรับ" คำตอบที่คุณชอบได้ (ควรมีเครื่องหมายถูกใต้ปุ่มโหวต) อีกทั้งคำตอบที่เป็นทางการของ Saadtaame นั้นเป็นขั้นตอนต่อไปที่ยอดเยี่ยมหลังจากฉัน
ลุคแมททีสัน

5
จะถือว่ามีเพียงหนึ่งยอมรับรัฐที่เราจะต้องช่วยให้ -transitions หรือมีε L ฉันรู้ว่าทั้งคู่ไม่ใช่ข้อ จำกัด ที่แท้จริงดังนั้นคำตอบก็คือตกลง ϵϵL
Hendrik Jan

1
ใช่ความคิดดูเหมือนชัดเจนสำหรับฉัน ส่วนที่ยุ่งยากคือการยืนยันว่าถูกต้อง
ไม่มีใคร

24

คุณต้องแสดงให้เห็นว่าคุณสามารถสร้างหุ่นยนต์ จำกัด ที่ยอมรับสตริงในLRที่กำหนดแน่นอนหุ่นยนต์ที่ยอมรับสตริงในLLนี่คือขั้นตอนการทำ

  1. ย้อนกลับลิงก์ทั้งหมดในหุ่นยนต์
  2. เพิ่มสถานะใหม่ (เรียกว่าqs )
  3. วาดลิงค์ที่กำกับด้วยϵจาก state qsไปยังทุกสถานะ
  4. เปลี่ยนสถานะสุดท้ายทั้งหมดเป็นสถานะปกติ
  5. เปลี่ยนสถานะเริ่มต้นเป็นสถานะสุดท้าย
  6. ทำให้qsสถานะเริ่มต้น

เราจะทำให้เป็นแบบนี้ทั้งหมด เราเริ่มต้นด้วยการระบุทฤษฎีบท

ทฤษฎีบท. ถ้าLเป็นภาษาปกติแล้วเพื่อให้เป็นLR R

ให้= ( Q , Σ , δ , Q , F )เป็น NFA และปล่อยL = L ( ) ε -NFA Rระบุไว้ด้านล่างยอมรับภาษาL RA=(QA,ΣA,δA,qA,FA)L=L(A)ϵARLR

  1. AR=(QA{qs},ΣA,δAR,qs,{qA})และqsQA
  2. pδA(q,a)qδAR(p,a)ที่Σและ Q , P QaΣAq,pQA
  3. ϵclosure(qs)=FA

พิสูจน์ ครั้งแรกที่เราพิสูจน์ได้ว่าคำสั่งดังต่อไปนี้: เส้นทางจากqที่จะpในที่มีป้ายกำกับWและถ้าหากเส้นทางจากหน้าไปQในRที่มีป้ายกำกับW R (ย้อนกลับของW ) สำหรับQ , P Q . หลักฐานอยู่โดยอุปนัยกับความยาวของWAwpqARwRwq,pQAw

  1. Base case: |w|=1
    Holds by definition of δAR
  2. การเหนี่ยวนำ: สมมติว่าคำสั่งมีไว้สำหรับคำที่มีความยาว<nและให้|w|=nและw=xa
    Let pδA(q,w)=δA(q,xa)
    เรารู้ว่าδA(q,xa)=pδA(p,a) pδA(q,x)
    xและเป็นคำน้อยกว่า nสัญลักษณ์ โดยสมมติฐานเหนี่ยวนำ, P 'δ R ( P , )และ Q δ * R ( P ' , x R ) นี่ก็หมายความว่า Q δ * R ( P ,anpδAR(p,a)qδAR(p,xR)qδAR(p,axR)pδA(q,xa) )

ปล่อยให้q=qAและp=sสำหรับบางsFAแทนwRสำหรับx Rรับประกันว่าQ δ * R ( s , W R ) s F เนื่องจากมีเส้นทางที่มีป้ายกำกับด้วยϵจากq sไปยังทุกสถานะในF A (3. ในคำจำกัดความของA RaxRqδAR(s,wR) sFAϵqsFAAR) and a path from every state in FA to the state qA labeled with wR, then there is a path labeled with ϵwR=wR from qs to qA. This proves the theorem.

Notice that this proves that (LR)R=L as well.

Please edit if there are any formatting errors or any flaws in my proof....


1
What do you mean by ϵclosure(qs)=FA?
user124384

But you can't have ϵ transition in deterministic regular languages can you!?
yukashima huksay

@yukashimahuksay True, but you can also always take a non-deterministic finite automaton and turn it into a deterministic finite automaton. They are equivalent.
Pro Q

12

To add to the automata-based transformations described above, you can also prove that regular languages are closed under reversal by showing how to convert a regular expression for L into a regular expression for LR. To do so, we'll define a function REV on regular expressions that accepts as input a regular expression R for some language L, then produces a regular expression R for the language LR. This is defined inductively on the structure of regular expressions:

  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!


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.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.