Layman의 관점에서 Pumping Lemma는 무엇입니까?


81

나는 이 질문을 보고 펌핑 기본형 이 무엇인지 궁금했습니다. 위키피디아 는별로 도움이되지 않았습니다).

기본적으로 언어가 특정 클래스에 속하기 위해서는 사실이어야하는 이론적 증거라는 것을 이해하지만 그 이상으로는 이해하지 못합니다.

비 수학자 / Comp sci 박사가 이해할 수있는 방식으로 상당히 세분화 된 수준에서 설명하려고하는 사람이 있습니까?


2
나는 수학 / TCS에 지름길이 없다는 확고한 믿음을 가지고 있습니다. "평신도의 용어"는 이해를 얻지 못할 것입니다. 즉, 우리는 물론 이것을 컴퓨터 과학 에 대해 광범위하게 다루었습니다 . 참조 여기 , 여기여기 .
Raphael

1
1 학년 학생들은 일반적으로 정리와 그 증명을 이해하고 적용해야합니다. 따라서 "[...] 박사가 아닌 사람도 이해할 수있는"무언가에 대한 요청은 공식 언어 교과서를 살펴보면 쉽게 충족됩니다.
Raphael

펌핑 기본형은 증거가 아닙니다. 이름에서 알 수 있듯이 기본형 입니다.
nbro

답변:


157

펌핑 기본형은 언어가 규칙적이지 않다는 것을 보여주는 간단한 증거입니다. 즉, 유한 상태 머신이이를 위해 구축 될 수 없음을 의미합니다. 표준 예는 언어 (a^n)(b^n)입니다. 이것은 단지 임의의 수의 as와 같은 수의 bs가 뒤 따르는 단순한 언어입니다 . 그래서 문자열

ab
aabb
aaabbb
aaaabbbb

등은 언어로되어 있지만

aab
bab
aaabbbbbb

등은 아닙니다.

다음 예제에 대한 FSM을 구축하는 것은 간단합니다.

FSM

이것은 n = 4까지 작동합니다. 문제는 우리 언어가 n에 어떤 제약도주지 않았고 유한 상태 머신은 유한해야한다는 것입니다. 내가이 기계에 얼마나 많은 상태를 추가하든, 누군가는 n이 상태 수에 1을 더한 값과 같고 내 기계가 실패하는 입력을 줄 수 있습니다. 따라서이 언어를 읽을 수있는 기계가 있다면, 상태 수를 유한하게 유지하기 위해 어딘가에 루프가 있어야합니다. 이러한 루프가 추가되면 :

FSM 2

우리 언어로 된 모든 문자열이 허용되지만 문제가 있습니다. 처음 4 a초 후에 머신은 a동일한 상태를 유지하기 때문에 입력 된 s 수를 잃습니다 . 즉, 4 개 이후에 as를 추가하지 않고 원하는만큼의 s를 문자열에 추가 할 b수 있으며 여전히 동일한 반환 값을 얻을 수 있습니다. 이것은 문자열 :

aaaa(a*)bbbb

s의 (a*)수 를 나타내는 a것으로 분명히 모두 언어로되어 있지는 않지만 기계에서 모두 허용됩니다. 이 맥락에서 우리는 현의 일부를 (a*)펌핑 할 수 있다고 말할 것 입니다. 유한 상태 기계가 유한하고 n이 제한되지 않는다는 사실은 언어의 모든 문자열을 받아들이는 기계가이 속성을 가져야 함을 보장합니다. 기계는 어떤 지점에서 반복되어야하며, 반복되는 지점에서 언어를 펌핑 할 수 있습니다. 따라서이 언어에 대해 유한 상태 머신을 빌드 할 수 없으며 언어가 규칙적이지 않습니다.

그 기억 정규 표현식과 유한 상태 기계 동일을 , 다음 교체ab서로에 내장 할 수 개통 및 닫는 HTML 태그를, 그리고 왜 당신이 볼 수 는 구문 분석 HTML로 정규 표현식을 사용할 수 없습니다


2
두 번째 다이어그램도 baaaabbbb를 생성 할 수 있다는 점에서 올바르지 않습니다.
James

3
@James는 사실입니다. 다른 수락 상태를 추가하여 간단하게 수정할 수 있지만 단순성을 위해 그대로 두겠습니다.
Graphics Noob

1
좋은 대답이지만 펌핑
기본형을

1
이것은 a^n b^n비정규 적임을 결정적으로 보여 주지도 않으며 Pumping 기본형에 대한 많은 직관을 제안하지도 않습니다.
Raphael

1
펌핑 보조 정리는 @GraphicsNoob NOT 이름에서 알 수 있듯이 그것은, 표제어의, 증명. 보조 정리 증명 된 명제입니다. 보조 정리는 일반적으로 다른 명제 또는 진술을 증명하거나 보여주는 데 사용되는 중요하지 않은 작은 정리로 생각할 수 있습니다. 나는 "펌핑 기본형은 증거이다"라고 말하는 답변이 현재 114 개의 찬성표를 가지고 있다고 생각하지 않습니다. 이것이 질문과 답변이 설명이나 설명과 함께 찬성되어야하는 이유입니다.
nbro

15

특정 언어가 특정 클래스에 속할 수 없음을 증명하기위한 장치입니다.

균형 잡힌 괄호 (기호 '('및 ')'를 의미하고 일반적인 의미로 균형이 잡힌 모든 문자열을 포함하고 그렇지 않은 문자열은 포함하지 않음)의 언어를 고려해 봅시다. 우리는 이것이 규칙적이지 않다는 것을 보여주기 위해 pumping lemma를 사용할 수 있습니다.

(언어는 가능한 문자열의 집합입니다. 파서는 문자열이 언어에 있는지 확인하는 데 사용할 수있는 일종의 메커니즘입니다. 따라서 언어의 문자열과 외부의 문자열 간의 차이를 구분할 수 있어야합니다. 언어를 인식 할 수있는 정규 파서가있는 경우 언어는 "일반"(또는 "문맥 없음"또는 "문맥 구분"또는 기타)입니다. 언어의 문자열과 그렇지 않은 문자열을 구분합니다. 언어.)

LFSR Consulting은 좋은 설명을 제공했습니다. 문자를 나타내는 화살표와 이들을 연결하는 상자 ( "상태"로 작동)를 사용하여 상자와 화살표의 유한 모음으로 일반 언어에 대한 구문 분석기를 그릴 수 있습니다. (그것보다 더 복잡하다면 일반 언어가 아닙니다.) 상자 수보다 긴 문자열을 얻을 수 있다면 한 상자를 두 번 이상 통과했음을 의미합니다. 즉, 루프가 있었고 원하는만큼 루프를 통과 할 수 있습니다.

따라서 일반 언어의 경우 임의의 긴 문자열을 만들 수 있다면 xyz로 나눌 수 있습니다. 여기서 x는 루프의 시작에 도달하는 데 필요한 문자, y는 실제 루프, z는 우리가 무엇이든 상관 없습니다. 루프 후에 문자열을 유효하게 만들어야합니다. 중요한 것은 x와 y의 총 길이가 제한되어 있다는 것입니다. 결국 길이가 상자 수보다 크면이 작업을하는 동안 분명히 다른 상자를 통과 한 것이므로 루프가 있습니다.

따라서 균형 잡힌 언어로 왼쪽 괄호를 여러 개 작성하여 시작할 수 있습니다. 특히 주어진 파서에 대해 상자보다 왼쪽 괄호를 더 많이 쓸 수 있으므로 파서는 왼쪽 괄호가 몇 개 있는지 알 수 없습니다. 따라서 x는 왼쪽 괄호의 양이며 이것은 고정되어 있습니다. y는 또한 왼쪽 괄호의 수이며 이는 무한히 증가 할 수 있습니다. z는 오른쪽 괄호의 수라고 말할 수 있습니다.

즉, 파서에서 인식 한 왼쪽 괄호 43 개와 오른쪽 괄호 43 개로 구성된 문자열이있을 수 있지만 파서는 우리 언어가 아닌 44 개의 왼쪽 괄호와 43 개의 오른쪽 괄호로 구성된 문자열에서이를 알 수 없습니다. 파서는 우리 언어를 파싱 할 수 없습니다.

가능한 일반 파서에는 고정 된 수의 상자가 있으므로 항상 그보다 더 많은 왼쪽 괄호를 작성할 수 있으며 펌핑 기본형에 의해 파서가 말할 수없는 방식으로 더 많은 왼쪽 괄호를 추가 할 수 있습니다. 따라서 균형 잡힌 괄호 언어는 일반 파서로 구문 분석 할 수 없으므로 정규 표현식이 아닙니다.


정규 표현식으로 균형 잡힌 문자열을 캡처하려는 사람들을위한 훌륭한 대답과 읽기.
Justin Johnson

9

평신도의 용어로 이해하기는 어렵지만 기본적으로 정규식에는 전체 새 단어가 언어에 대해 유효한 상태로 유지되는 동안 원하는만큼 반복 할 수있는 비어 있지 않은 하위 문자열이 있어야합니다.

에서 연습 , 펌핑 보조 정리는 올바른 언어를 증명하기에 충분한 것이 아니라 (없는 상황 정기 또는) 펌핑 보조 정리를 보여줌으로써 언어의 클래스에 맞지 않는 언어를 모순에 의한 증명을하고 표시하는 방법으로하지 않습니다 그것을 위해 작동하지 않습니다.


" 올바른 언어를 증명 하기에 충분 하지 않다 "는 의미는 무엇입니까 ? "정답"은 당신이 규칙적인 것을 의미한다고 생각합니다. 사실, 일반 언어는 펌핑 속성을 나타내지 만 언어가 펌핑 속성을 나타낸다고해서 반드시 규칙적임을 의미하지는 않습니다. 반면에 언어가 펌핑 속성을 나타내지 않으면 규칙적이지 않다고 확신합니다. 기본적으로 펌핑 속성은 필요 하지만 언어가 규칙적임을 보여주기 에는 충분하지 않습니다 .
nbro

4

기본적으로 XML과 같은 언어의 정의가 있는데, 이는 주어진 문자열 ( "단어")이 해당 언어의 구성원인지 여부를 알려주는 방법입니다.

펌핑 기본형은 언어에서 "단어"를 선택하고 일부 변경 사항을 적용 할 수있는 방법을 설정합니다. 정리는 만약 언어가 규칙적이라면, 이러한 변화는 여전히 같은 언어에서 온 "단어"를 산출해야한다고 말합니다. 당신이 생각 해낸 단어가 언어에 없다면, 그 언어는 처음에 규칙적이지 않았을 것입니다.


3

단순 펌핑 기본형은 다른 것들 중에서 유한 오토마타에 의해 설명되는 문자열 집합 인 정규 언어를위한 것입니다. 유한 자동화의 주요 특징은 상태로 설명되는 제한된 양의 메모리 만 가지고 있다는 것입니다.

이제 유한 오토 마톤에 의해 인식되고 자동화의 메모리를 "초과"할 수있는 길이, 즉 상태가 반복되어야하는 문자열이 있다고 가정합니다. 그런 다음 부분 문자열의 시작 부분에있는 오토 마톤의 상태가 부분 문자열의 끝 부분에있는 상태와 동일한 부분 문자열이 있습니다. 하위 문자열을 읽는 것은 상태를 변경하지 않기 때문에 자동 장치가 더 현명 해지지 않고 임의의 횟수만큼 제거되거나 복제 될 수 있습니다. 따라서 이러한 수정 된 문자열도 허용되어야합니다.

문맥없는 언어를위한 좀 더 복잡한 펌핑 기본형도 ​​있는데, 여기서 문자열의 두 위치에서 괄호와 일치하는 것으로 직관적으로 볼 수있는 것을 제거 / 삽입 할 수 있습니다.


두 번째 단락은 좋지만 첫 번째 단락은 약간 나쁩니다. "간단한 펌핑 기본형은 일반 언어를위한 것입니다". 일반 언어가 무엇을 할 수 있습니까? 펌핑 기본형이 필요한 이유는 무엇입니까? 펌핑 기본형과 일반 언어 사이의 관계는 무엇입니까? 이 모든 질문에 답해야합니다, IMO.
nbro

@starblue : 언어가 $ {a} $ 인 경우 최소 펌핑 길이가 $ 2 $ 인 이유를 말씀해 주시겠습니까? 언어가 $ {a ^ n : n∈ℕ} $ 인 경우 최소 펌핑 길이는 $ 1 $ .more 입니다. ( math.stackexchange.com/questions/1508471/minimum-pumping-length/… ).
justin

0

정의에 따라 정규 언어는 유한 상태 자동화에 의해 인식되는 언어입니다. 미로로 생각하세요. 상태는 방이고, 전환은 방 사이의 일방 통행 통로이며, 초기 방과 출구 (최종) 방이 있습니다. '유한 상태 오토 마톤'이라는 이름에서 알 수 있듯이 한정된 수의 방이 있습니다. 복도를 따라 여행 할 때마다 벽에 적힌 편지를 적습니다. 이니셜에서 마지막 방까지의 경로를 찾으면 글자가 적힌 복도를 올바른 순서로 통과하면 단어를 인식 할 수 있습니다.

펌핑 기본형은 이전에 통과 한 방으로 돌아 가지 않고도 미로를 돌아 다닐 수있는 최대 길이 (펌핑 길이)가 있다고 말합니다. 아이디어는 특정 지점을지나 걸어 들어갈 수있는 별개의 방이 너무 많기 때문에 미로를 빠져 나가거나 트랙을 건너야한다는 것입니다. 미로에서이 펌핑 길이보다 더 긴 경로를 걸을 수 있다면 우회로를 선택하는 것입니다. 경로에 제거 할 수있는 (적어도 하나의)주기를 삽입하고 있습니다 (미로의 교차점을 원하는 경우). 작은 단어 인식) 또는 무한 반복 (펌핑) (초장 단어 인식 가능).

문맥없는 언어에 대한 유사한 기본형이 있습니다. 이러한 언어는 스택을 사용하여 수행 할 전환을 결정할 수있는 유한 상태 자동 인 푸시 다운 자동 장치에 의해 허용되는 단어로 표현 될 수 있습니다. 그럼에도 불구하고 여전히 유한 수의 상태가 있기 때문에 위에서 설명한 직관은 속성의 공식적인 표현을 통해서도 약간 더 복잡 할 수 있습니다 .


@ 이런 대답을 찾고 있습니다. 초기 및 최종 방이 동일 할 수 있습니까?이 주석에 붙어 있습니다. 언어가 $ {a} $ 인 경우 최소 펌핑 길이는 $ 2 $입니다. 언어가 $ {a ^ n : n∈N} $이면 최소 펌핑 길이는 $ 1 $입니다. 도와 주실 수 있나요 ? /… ).
justin 2016

0

평신도 용어로는 거의 옳다고 생각합니다. 언어가 아닌 것을 증명하는 증명 기법 (실제로는 두 가지)입니다. 특정 클래스에 .

예를 들어, 무한한 수의 문자열이 포함 된 일반 언어 (regexp, automata 등)를 고려하십시오. 특정 시점에서 starblue가 말했듯이 문자열이 자동 장치에 비해 너무 길기 때문에 메모리가 부족합니다. 이것은 자동 장치가 당신이 얼마나 많은 복사본을 가지고 있는지 알 수없는 문자열의 덩어리가 있어야한다는 것을 의미합니다 (당신은 루프에 있습니다). 따라서 문자열 중간에 해당 하위 문자열의 복사본이 얼마든지 있지만 여전히 언어에 있습니다.

이 속성이없는 언어가있는 경우, 즉,에 충분히 긴 문자열이 있음이 수단 NO는 당신이 여러 번 반복하고 여전히 언어로 할 수있는 부분 문자열은 다음 언어는 정기적으로하지 않습니다.


적어도 마지막 문장은 거짓입니다. 문자열 "a"로 구성된 언어는 규칙적이지만 펌핑 할 수 없습니다. 특정 방식으로 현을 펌핑 할 수 있다면 그것은 규칙적이지 않습니다. 예를 들어, 균형 잡힌 표현이 아닌 균형 잡힌 표현으로 만들어진 '('및 ')'기호가있는 언어는 규칙적이지 않으며 "()"를 펌핑하여 증명합니다.
David Thornley

@David, 감사합니다. 마지막 문장을 수정했습니다. 그러나 나는 당신이 균형 잡힌 괄호에 대해 틀렸다고 생각합니다. 나는 당신이 괄호가 펌핑 보조제를 통해 규칙적이지 않다는 것을 증명할 수 있다고 생각하지 않습니다. 나는 parens 펌프를 생각한다.
Brian Postow 2009

0

예를 들어,이 언어 L = a n b n .

이제 일부 n에 대해 위의 언어에 대한 유한 오토 마톤을 시각화 해보십시오. .

만약 N = 1, 문자열 w = AB . 여기서 우리는 n = 2이면, 문자열 w = a 2 b 2 이면 루프를 사용하여 유한 오토 마톤을 만들 수 있습니다. . 여기에서 루프를 사용하여 유한 오토마타를 만들 수 있습니다.

만약 N = P 문자열 w = (P)의 B 형 P . 본질적으로 유한 오토 마톤은 3 단계로 가정 할 수 있습니다. 첫 번째 단계는 일련의 입력을 받아 두 번째 단계로 들어갑니다. 2 단계에서 3 단계까지 비슷하게이 단계를 x , yz 로 부르겠습니다 .

몇 가지 관찰이 있습니다

  1. 확실히 x 는 'a'를 포함 하고 z 는 'b'를 포함합니다.
  2. 이제 y 에 대해 명확히해야합니다 .
    • case a : y 는 'a'만 포함 할 수 있습니다.
    • case b : y 는 'b'만 포함 할 수 있습니다.
    • case c : y 는 'a'와 'b'의 조합을 포함 할 수 있습니다.

따라서 단계 y에 대한 유한 오토 마톤 상태는 입력 'a'와 'b'를 취할 수 있어야하며 또한 셀 수없는 a와 b를 더 많이 사용해서는 안됩니다.

  1. 단계 y 가 하나의 'a'와 하나의 'b'만 취하면 두 가지 상태가 필요합니다.
  2. 두 개의 'a'와 하나의 'b'를 취하는 경우 out 루프 등으로 세 가지 상태가 필요합니다 ....

따라서 단계 y 의 디자인 은 순전히 무한합니다. 우리는 몇 개의 루프를 넣어 유한하게 만들 수 있으며 루프를 넣으면 유한 오토 마톤은 L = a n b n 이상의 언어를 받아 들일 수 있습니다 . 따라서이 언어의 경우 유한 오토 마톤을 구성 할 수 없습니다. 따라서 그것은 규칙적이지 않습니다.


-1

이것은 설명은 아니지만 간단합니다. a ^ nb ^ n의 경우 FSM은 b가 이미 구문 분석 된 a의 수를 알아야 하고 동일한 n 개의 b를 허용 하는 방식으로 구축되어야합니다 . FSM은 단순히 그런 일을 할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.