"반전 된"정규 언어가 정규 언어임을 보여주는 방법


19

다음 질문에 붙어 있습니다.

"정규 언어는 유한 오토마타에 의해 정확하게 수용된 언어입니다.이 사실을 감안할 때, 언어 이 유한 오토 마톤에 의해 수용되면 도 일부 유한에 의해 수용되고 은 모든 단어로 구성됩니다 의 역으로. "L R L R LLLRLRL


1
받아 들일 수있는 오토 마톤을 만들려고 했 LR습니까? 예를 그리는 것이 도움이 될 수 있습니다.
Gilles 'SO- 악마 그만해'

당신의 답변에 감사드립니다. 이 작업을 수행하는 방법을 잘 모르겠습니다. 나는 어떤 L ^ R도 동일한 '알파벳'으로 구성되어 있기 때문에 어떤 언어에서도 받아 들일 것이라고 확신합니다. 그래도 그것을 증명하는 방법이나 예제를 그리는 방법을 잘 모르겠습니다.
Cat

2
어서 오십시오! 숙제를 배제한 기본적인 질문의 경우, 질문에 질문자의 사전 작업이 포함되어 있는지를 좋아합니다. 당신은 확실히 당신이 공유 할 수 있는 무언가 를 시도했습니다 . 그렇지 않은 경우 정의를 다시 확인하고 Gilles의 조언에 유의하십시오.
Raphael

3
@ 빅토리아 "이것은 동일한 '알파벳'으로 구성되어 있기 때문에 일반적인 언어가 될 것입니다."-nonono. {anbmaon,m,oN} , {anbmann,mN}{anbnannN} 은 모두 동일하게 정의됩니다. 알파벳이지만 매우 다른 언어 수업에 속합니다.
Raphael

1
이 장의 마지막에있는 다른 질문은 어떤 유한 한 오토 마톤도 주어진 알파벳을 넘어 모든 회문을 받아 들일 수 없다는 것을 증명하도록 요구합니다. 나는 이것이 가능한 모든 회문 (길이 제한 없음)을 고려한다면 무한한 수의 상태가 있다는 사실에 근거한다고 생각하지만, 기계는 유한 상태 기계입니다.
Cat

답변:


26

따라서 정규 언어 주어지면 , 우리는 (본질적으로 정의에 따라) 유한 오토마타에 의해 받아 들여진다는 것을 알고 있습니다. L 의 문자열입니다 . 심지어 상황을 단순화하기 위해 받아 들일 수있는 상태가 하나 뿐이라고 주장 할 수도 있습니다. 리버스 언어를 받아들이려면 전환 방향을 바꾸고 시작 상태를 수락 상태로 변경하고 수락 상태를 시작 상태로 변경하면됩니다. 그런 다음 원래와 비교하여 "뒤로"기계가 있으며 언어 L R을 받아들 입니다.LLLR


정말 고마워요 루크-당신이 한 말을 이해한다고 생각합니다. 당신은 자리에 있습니다-나는 유한 오토마타에 대한 실질적인 경험이 전혀 없습니다! 나는 당신에게 '투표'를했지만 충분한 점수를 얻지 못했습니다. 미안합니다!
Cat

괜찮습니다. 원하는 답변을 "수락"할 수 있어야합니다 (투표 버튼 아래에 체크 표시가 있어야 함). 또한 Saadtaame의 더 공식적인 답변은 내 다음으로 훌륭한 단계입니다.
Luke Mathieson

5
수락 상태가 하나만 있다고 가정하려면 전환을 허용 하거나 ϵ L 이 있어야합니다 . 둘 다 실제 제한 사항은 아니므로 정답입니다. ϵϵL
Hendrik Jan

1
그래, 그 아이디어는 나에게 명백해 보인다. 까다로운 부분은 그것이 맞는지 확인하는 것입니다.
아무도

24

당신은 당신이 항상 문자열 받아들이는 유한 자동 장치 구축 할 수 있음을 보여 주어야 LR 에 문자열을 받아들이는 유한 자동 장치 주어진 L . 이를 수행하는 절차는 다음과 같습니다.

  1. 오토 마톤의 모든 링크 반전
  2. 새로운 상태 추가 ( qs 호출 )
  3. 상태 q s 에서 모든 최종 상태 까지 ϵ 로 표시된 링크를 그 립니다.qs
  4. 모든 최종 상태를 정상 상태로 전환
  5. 초기 상태를 최종 상태로 전환
  6. 만들기 qs 초기 상태

이 모든 것을 공식화하자. 우리는 정리를 시작하여 시작합니다.

정리. 경우 L 정규 언어이며, 다음 그렇습니다 LR .

하자 = ( Q A는 , Σ A는 , δ , q를 , F ) NFA하고하자 L = L ( ) . ε -NFA R은 아래에 정의 된 언어 받아 L의 R을 .A=(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) , 여기서aΣAq,pQA
  3. ϵclosure(qs)=FA

증명. 첫째, 우리는 다음과 같은 성명을 증명 : 에서 경로 qpA 표지 w 경우에만, 에서 경로 p 에 대한 qR이 표지 R (의 반대 w 에 대해) Q , P Q . 증명은 w 길이에 대한 유도입니다 .ARwRwq,pQAw

  1. 기본 사례 : |w|=1δ A R의
    정의에 따라 유지δAR
  2. 유도 : 문을 가정 길이의 단어를 보유 <n 및하자 |w|=nw=xa
    하자 pδA(q,w)=δA(q,xa)
    우리가 알고 δA(q,xa)=pδA(p,a) pδA(q,x)
    xan 보다 작은 단어입니다. 유도 가설에 의해pδAR(p,a)qδAR(p,xR) . 이는qδAR(p,axR)pδA(q,xa) .

시키는 q=qAp=s 일부 sFA 및 치환 wR 위해 X의 R의 보증이 Q δ * R ( S , w R ) S F . F A (3. A R 정의 에서 q s 에서 모든 상태 까지 ϵ 로 표시된 경로가 있기 때문에axRqδ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.