언어가 규칙적임을 증명하는 방법?


48

언어가 규칙적이지 않다는 것을 증명하는 방법이 많이 있지만, 어떤 언어 규칙적 이라는 것을 증명하려면 어떻게해야 합니까?

예를 들어, 이 규칙적이라고한다면 다음 도 규칙적 임을 어떻게 증명할 수 있습니까?LL

L:={wL:uv=w for uΣL and vΣ+}

이것을 결정하기 위해 비 결정적 유한 오토 마톤을 그릴 수 있습니까?


1
정의에 오타가 있습니다 . 수정하려면 수정하세요. L
Ran G.

2
"도면"은 증거가 아닙니다. NFA를 제공 하고 언어를 받아들이는 것을 증명 해야합니다.
Raphael

언어 정의가 여전히 이해가되지 않는다고 생각합니다 ...
hugomg

2
어쨌든, 질문이 "정기적임을 증명하기 위해 NFA를 그릴 수 있습니까?"인 경우 특정 언어는 관련이 없습니다. @ corium, 더 일반적인 질문 인 " 특정 이 규칙적 임을 증명하는 방법"을 반영하도록 질문을 편집 할 수 있습니까? L
Ran G.

답변:


48

예, 다음 중 하나를 생각 해낼 수 있다면 :

일부 언어 의 경우 은 규칙적입니다. 있습니다 더 해당 모델은 있지만, 위의 가장 일반적이다.LLL

"계산"세계 이외의 유용한 속성도 있습니다. 도 규칙적인 경우L

  • 유한하다
  • 일반 언어로 특정 작업을 수행하여 구성 할 수 있으며 이러한 작업은 다음 과 같은 일반 언어에 대해 닫힙니다.

    • 교차로
    • 보어,
    • 동질성,
    • 반전,
    • 왼쪽 또는 오른쪽 몫,
    • 규칙적인 형질 도입

    그리고 , 또는

  • 에 대한 등가 클래스 수가 유한 한 경우 Myhill-Nerode 정리 사용 .L

주어진 예에서, 우리는 몇 가지 (일반) langage의이 기준으로하고 언어에 대해 뭔가 말하고 싶은 에서 파생합니다. 첫 번째 방법을 따르면 -에 적합한 모델 구축 - 우리가 동등한 중 모델을 가정 할 수 우리가 원하는; 물론 은 알려지지 않았기 때문에 초록으로 남아있을 것입니다 . 두 번째 방법에서는 에 대한 설명에 도달하기 위해 직접 사용 하고 클로저 속성을 적용 할 수 있습니다 .L ' L ' L의 L의 L의 L 'LLLLLLL


4
언어가 유한하다는 것을 증명하는 것만으로는 언어가 규칙적임을 보여주기에 충분하다는 점에 주목할 가치가 있습니다. 이는 특히 사례 별 비 구조적 증거에서 유용 할 수 있습니다.
Patrick87

2
프로그래밍 언어에서 발견되는 정규 표현식은 일반 언어보다 훨씬 더 많은 것을 할 수 있습니다. "고전적인"구조로 제한해야합니다.
David Lewis

4
@DavidLewis :이 사이트에서는 "일반적인 표현"으로 고전적인 개념을 의미한다고 가정 할 수 있습니다.
Raphael

@DavidLewis 나는 이론의 맥락에서 혼동을 피하기 위해 "regexp"를 피해야한다는 것에 동의한다.
Raphael

처음 네 개의 글 머리표 중 하나에 대해 자신의 표현이 실제로 정확하다는 증거가 필요합니다.
Raphael

10

기본 방법

  1. 유한 한 오토마타 (비 결정적 일 수 있고 빈 전이).
  2. 정규식.
  3. 과 같은 오른쪽 (또는 왼쪽이지만 둘다는 아님) 선형 방정식 여기서 와 은 규칙적입니다.K LX=KX+LKL
  4. 정규 (유형 3) 문법.
  5. 정규 언어를 보존하는 연산 (부울 연산, 곱, 별표, 셔플, 형태, 역수, 반전 등)
  6. 유한 한 monoid로 인식됩니다.

논리적 방법 (종종 공식 검증에 사용됨)

  1. 모나 딕 2 차 논리 (Büchi 's 정리).
  2. 선형 시간 논리 (캠프 정리).
  3. 라빈의 나무 정리 (두 명의 후임자가있는 모자이크 2 차 논리). 아주 세다.

고급 방법

  1. 정교한 펌핑 보조기구. 예를 들어
    [1] J. Jaffe, 정규 언어에 필요한 충분하고 충분한 펌핑 보조, Sigact News-SIGACT 10 (1978) 48-49를 참조하십시오.
    [2] A. Ehrenfeucht, R. Parikh 및 G. Rozenberg, SIAM J. Comput. 10 (1981), 536-541.
    [3] S. Varricchio, SIAM J. Comput. 26 (1997) 764-771.

  2. 잘 준 명령.
    [4] W. Bucher, A. Ehrenfeucht, D. Haussler를 참조하십시오 . 파생 관계에 의해 생성 된 총 레귤레이터에 대해서는 Theor . 계산. 공상 과학 40 (1985) 131–148.
    [5] M. Kunz, 언어 불평등의 정식 솔루션 및 유사 준 주문 .

  3. 지원 -rational 시리즈.N

  4. 변환을 기반으로하는 대수적 방법 ( 일반 언어를 보존하는 작업 참조 ).


4

Ran G.의 답변은 일반 언어를 지정하는 데 사용할 수있는 동등한 모델의 상당히 광범위한 목록을 제공합니다 (그리고 목록은 양방향 자동 제어, MSO 논리로 이어지지 만 '더 동등한 모델'링크에 포함되어 있습니다. '). 라파엘이 강조한 것처럼, 우리는 관객이 선택한 표현이 실제로 정확하다는 것을 확신시키기 위해 논쟁이 필요합니다.

질문을 다시 고려하면 'For example '가 추가됩니다. 즉 , 위의 모델 중 언어 지정한다고 가정 하면 해당 모델을 대한 모델로 변환 하는 유효한 구성 을 제공 해야합니다 . 이것은 일반적으로 같은 유형의 모델 일 것이지만 반드시 그럴 필요는 없습니다. 예를 들어 대한 결정 론적 FSA로 시작하여 대한 비결정론 적 FSA로 끝날 수 있습니다.L L ' L L 'LLLL

여기에는 클로저 연산을 사용할 수있는 가능성이 포함됩니다. 예제에서 명시 적으로 지정된 연산에는 있습니다.L=(ΣL)Σ

따라서 요점은 대답이 훌륭하지만 특정 언어를 처음부터 작성하지 않을 때 " 에서 로 구성" 을 추가해야한다는 것 입니다.L 'LL


1
나는 당신이 무엇을 얻고 있는지 잘 모르겠습니다. 대한 모델이 있으면 다른 동등한 모델 로 변환 할 수 있습니다. L
Raphael

@Raphael 죄송합니다. 제가 요점을 말씀하셨습니다. 앞의 답변은 언어에 대한 설명을 구성 할 수 있다고 설명하는 것 같습니다 (자동, 작업 등). 동의한다. 그러나 질문은 클로저 속성에 관한 것으로 보입니다. 주어진 예를 참조하십시오. 그 시점에서 나는 다른 답변에서 누락되었습니다 : 클로저 속성을 증명하기 위해 설명이 있다고 가정하고 새로운 것을 구성하십시오.
Hendrik Jan

1
아, ! 이제 알 겠어요. 나는 Ran의 대답 에서이 측면이 누락되었다는 것에 동의합니다. L
Raphael

1
왜 그것이 누락되었는지 (또는 정확히 무엇이 누락되었는지) 확실하지 않습니다. 정기적 말해봐 , 당신은 증명하려는 , 당신이 시작할 수 있습니다뿐만 아니라 정기적 인 의 DFA와의 DFA를 구성하는 데 사용할 . 그러나 이것은 "에 대한 DFA 구성에 의해 덮여 ".. 사용에 제한이 없습니다 해당 작업에 대한 자동 장치 (그리고 경우에 자연적으로, 로 정의된다 당신은 사용을 강요 당할 것이다 의 기계적 ..) . 정규 표현식, 클로저, 문법 등에 대해서도 마찬가지입니다. L의 L ' L의 L의 L ' L의 L ' L 'LLLLLLLLL
Ran G.

1
오 그래. 실제로, 나는 질문을 편집하고 "예를 들어"부분을 제거하여 질문을 더 일반적으로 만들고 향후 유사한 질문에 대한 참조를 만들고 싶습니다. (:
Ran G.

4

때때로 당신은 "모든 문자열로 지정된 언어가 발생합니다 경우 모든 의 - 요소 문자열 만족 " 어떤 고정 된 상수입니다. 이 경우 언어는 규칙적입니다. 여기서의 아이디어는 이 질문 에 대한 답변에서와 같이 일부 국가가 가장 최근에 본 입력 기호를 "기억"하는 유한 자동 마그넷을 정의하는 입니다.sks<some property>kk


4

위의 답변으로 다루지 않은 또 다른 방법은 유한 자동 변환 입니다. 간단한 예를 들어, 다음과 같이 정의 된 셔플 작업 에서 일반 언어가 닫혀 있음을 보여 드리겠습니다 . 클로저 속성을 사용하여 셔플 아래에 클로저를 표시 할 수 있지만 DFA를 사용하여 직접 보여줄 수도 있습니다. 한다고 가정 받는 DFA이다 (위한 ). 다음과 같이 새로운 DFA 을 구성합니다.

L1SL2={x1y1xnynΣ:x1xnL1,y1ynL2}
Ai=Σ,Qi,Fi,δi,q0iLii=1,2Σ,Q,F,δ,q0
  • 상태 세트는 이며, 세 번째 구성 요소는 다음 기호가 (1 일 때)인지 (2 일 때 ) 인지를 기억합니다 .Q1×Q2×{1,2}xiyi
  • 초기 상태는 입니다.q0=q01,q02,1
  • 허용되는 상태는 입니다.F=F1×F2×{1}
  • 전이 함수는 및 .δ(q1,q2,1,σ)=δ1(q1,σ),q2,2δ(q1,q2,2,σ)=q1,δ2(q2,σ),1

이 방법의보다 복잡한 버전은 추측과 관련이 있습니다. 예를 들어, 일반 언어가 반전 으로 닫혀 있음을 보여주십시오 . 즉, (여기서 입니다.) 이것은 표준 클로저 연산 중 하나이며, 반전시 클로저는 정규 표현식 조작 (쉽게 수행되는 유한 오토 마톤 변환의 대응으로 간주 될 수 있음)에서 쉽게 따릅니다. 정규 표현식) – 정규 표현식을 반대로 바꿉니다. 그러나 NFA를 사용하여 폐쇄를 증명할 수도 있습니다. 이 DFA 의해 허용 된다고 가정하십시오 . 우리는 NFA를 구성

LR={wR:wΣ}.
(w1wn)R=wnw1LΣ,Q,F,δ,q0Σ,Q,F,δ,q0 , 여기서
  • 상태 세트는 입니다.Q=Q{q0}
  • 초기 상태는 입니다.q0
  • 고유 한 수락 상태는 입니다.q0
  • 전이 함수는 다음과 같이 정의됩니다 : , 모든 상태 및 , 입니다.δ(q0,ϵ)=FqQσΣδ(q,σ)={q:δ(q,σ)=q}

( 여러 초기 상태를 허용하면 제거 할 수 있습니다 .) 여기서 추측 구성 요소는 반전 후 단어의 최종 상태입니다.q0


추측은 종종 검증도 필요합니다. 간단한 예 중 하나는 회전 중인 클로저입니다 . 이 DFA 의해 허용 된다고 가정하십시오 . NFA 을 구성하면 다음과 같이 작동합니다. NFA는 먼저 추측 합니다. 그런 다음 및 를 확인하여 에서 비 결정적으로 이동 하는지 확인합니다. 이것은 다음과 같이 공식화 될 수 있습니다.

R(L)={yxΣ:xyL}.
LΣ,Q,F,δ,q0Σ,Q,F,δ,q0q=δ(q0,x)δ(q,y)Fδ(q0,x)=qyx
  • 상태는 입니다. 초기 상태 외에도 상태는 . 여기서 는 우리가 추측 한 상태이고 는 현재 상태이며 는 현재 상태 인지 여부를 지정합니다. 입력 의 부분 (1 일 때) 또는 입력 의 부분 (2 일 때)Q={q0}Q×Q×{1,2}q0q,qcurr,sqqcurrsyx
  • 최종 상태는 . 때 허용됩니다 .F={q,q,2:qQ}δ(q0,x)=q
  • 전이 는 추측 추측 구현 합니다.δ(q0,ϵ)={q,q,1:qQ}q
  • 전이 (모든 및 )는 원래 DFA를 시뮬레이션합니다.δ(q,qcurr,s,σ)=q,δ(qcurr,σ),sq,qcurrQs{1,2}
  • 전이 은 모든 및 에 대해 부분에서 부분. 이것은 부분 에서 최종 상태에 도달 한 경우에만 허용됩니다 .δ(q,qf,1,ϵ)=q,q0,2qQqfFyxy

이 기술의 다른 변형은 경계 카운터를 통합합니다. 예를 들어, 편집 거리 폐쇄 변경을 고려해 봅시다 : DFA에 주어 대 , E 구조체를 NFA 위한 다음과 같이 :

Ek(L)={xΣ: there exists yL whose edit distance from x is at most k}.
Σ,Q,F,δ,q0LΣ,Q,F,δ,q0Ek(L)
  • 상태 집합은 이며, 두 번째 항목은 지금까지 수행 된 변경 수를 계산합니다.Q=Q×{0,,k}
  • 초기 상태는 입니다.q0=q0,0
  • 허용되는 상태는 입니다.F=F×{0,,k}
  • 모든 대해 있습니다.q,σ,iδ(q,σ),iδ(q,i,σ)
  • 삽입은 와 같이 모든 대한 전환 에 의해 처리됩니다 .q,i+1δ(q,i,σ)q,σ,ii<k
  • 결실은 천이에 의해 처리된다 모두 되도록 .δ(q,σ),i+1δ(q,i,ϵ)q,σ,ii<k
  • 대체는 유사하게 모든 대한 에 의해 처리됩니다. 그런 식으로 입니다.δ(q,σ),i+1δ(q,i,τ)q,σ,τ,ii<k

3

당신은 그들이보다 더 이상 사용 언어에 속하는하지 여부를 임의의 문자열을 결정 스캐너 쓸 수 IFF에 언어는 정기적 인 고정 즉 인식을 수행 할 수 있습니다 - 메모리의 양이 O (1) 공간.


O (1) 공간 이니? 어쨌든 이것은 DFA가 충분하다는 사실에 의해 커버됩니다. 프로그래밍과 관련하여이 동등성을 명시 적으로 언급하는 것이 좋습니다.
Raphael

예, 그것은 단지 다른 관점입니다.
reinierpost

3

정규식 변환 은 특정 작업에서 클로저를 증명하는 한 가지 방법입니다. 가장 간단한 두 가지 예는 반전 하에서의 폐쇄와 동형 하에서의 폐쇄 이다.

정규 표현식을 감안할 때 언어 나타내는 , 우리에 대한 정규 표현식 구성 할 수 있습니다 , 모든 단어의 역의 언어 재귀를 :rLLRL

  • ϵR=ϵ , , .σR=σR=
  • (r1+r2)R=(r1R+r2R) , , .(r)R=(rR)(r1r2)R=r2Rr1R

모든 조치는 최종 규칙 합니다. 예를 들어 있습니다. 구조적 유도는 의 언어 가 실제로 임을 확립합니다 . ( 0 * 1 * ) R = 1 * 0 * r R L R(r1r2)R=r2Rr1R(01)R=10rRLR

또 다른 간단한 예는 동질성 하에서의 폐쇄이다. 동형의 주어 및 일반 식 언어에 대한 , 우리는에 대한 정규 표현 얻을 수 모든 인스턴스로 대체함으로써 에서 로 . r L h ( L ) σ r h ( σ )h:ΣΔrLh(L)σrh(σ)


0

또 다른 방법은 닫혀있는 작업을 사용하여 언어를 구축하는 것입니다. 이것은 더 많은 연산을 사용할 수 있기 때문에 정규 표현식을 나타내는 확장 기능입니다 (스트링 반전, 보완, 교차, 조각 잘라 내기, 부분 유지, 동형 및 역 동형 등).


2
Ran의 답변에서 이미 언급되었습니다.
Raphael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.