답변
펌핑 기본형은 언어가 규칙적이지 않다는 것을 보여주는 간단한 증거입니다. 즉, 유한 상태 머신이이를 위해 구축 될 수 없음을 의미합니다. 표준 예는 언어 (a^n)(b^n)
입니다. 이것은 단지 임의의 수의 a
s와 같은 수의 b
s가 뒤 따르는 단순한 언어입니다 . 그래서 문자열
ab
aabb
aaabbb
aaaabbbb
등은 언어로되어 있지만
aab
bab
aaabbbbbb
등은 아닙니다.
다음 예제에 대한 FSM을 구축하는 것은 간단합니다.
이것은 n = 4까지 작동합니다. 문제는 우리 언어가 n에 어떤 제약도주지 않았고 유한 상태 머신은 유한해야한다는 것입니다. 내가이 기계에 얼마나 많은 상태를 추가하든, 누군가는 n이 상태 수에 1을 더한 값과 같고 내 기계가 실패하는 입력을 줄 수 있습니다. 따라서이 언어를 읽을 수있는 기계가 있다면, 상태 수를 유한하게 유지하기 위해 어딘가에 루프가 있어야합니다. 이러한 루프가 추가되면 :
우리 언어로 된 모든 문자열이 허용되지만 문제가 있습니다. 처음 4 a
초 후에 머신은 a
동일한 상태를 유지하기 때문에 입력 된 s 수를 잃습니다 . 즉, 4 개 이후에 a
s를 추가하지 않고 원하는만큼의 s를 문자열에 추가 할 b
수 있으며 여전히 동일한 반환 값을 얻을 수 있습니다. 이것은 문자열 :
aaaa(a*)bbbb
s의 (a*)
수 를 나타내는 a
것으로 분명히 모두 언어로되어 있지는 않지만 기계에서 모두 허용됩니다. 이 맥락에서 우리는 현의 일부를 (a*)
펌핑 할 수 있다고 말할 것 입니다. 유한 상태 기계가 유한하고 n이 제한되지 않는다는 사실은 언어의 모든 문자열을 받아들이는 기계가이 속성을 가져야 함을 보장합니다. 기계는 어떤 지점에서 반복되어야하며, 반복되는 지점에서 언어를 펌핑 할 수 있습니다. 따라서이 언어에 대해 유한 상태 머신을 빌드 할 수 없으며 언어가 규칙적이지 않습니다.
그 기억 정규 표현식과 유한 상태 기계 동일을 , 다음 교체a
및 b
서로에 내장 할 수 개통 및 닫는 HTML 태그를, 그리고 왜 당신이 볼 수 는 구문 분석 HTML로 정규 표현식을 사용할 수 없습니다
답변
특정 언어가 특정 클래스에 속할 수 없음을 증명하기위한 장치입니다.
균형 잡힌 괄호 (기호 ‘(‘및 ‘)’를 의미하고 일반적인 의미로 균형이 잡힌 모든 문자열을 포함하고 그렇지 않은 문자열은 포함하지 않음)의 언어를 고려해 봅시다. 우리는 이것이 규칙적이지 않다는 것을 보여주기 위해 pumping lemma를 사용할 수 있습니다.
(언어는 가능한 문자열의 집합입니다. 파서는 문자열이 언어에 있는지 확인하는 데 사용할 수있는 일종의 메커니즘입니다. 따라서 언어의 문자열과 외부의 문자열 간의 차이를 구분할 수 있어야합니다. 언어를 인식 할 수있는 정규 파서가있는 경우 언어는 “일반”(또는 “문맥 없음”또는 “문맥 구분”또는 기타)입니다. 언어의 문자열과 그렇지 않은 문자열을 구분합니다. 언어.)
LFSR Consulting은 좋은 설명을 제공했습니다. 문자를 나타내는 화살표와 이들을 연결하는 상자 ( “상태”로 작동)를 사용하여 상자와 화살표의 유한 모음으로 일반 언어에 대한 구문 분석기를 그릴 수 있습니다. (그것보다 더 복잡하다면 일반 언어가 아닙니다.) 상자 수보다 긴 문자열을 얻을 수 있다면 한 상자를 두 번 이상 통과했음을 의미합니다. 즉, 루프가 있었고 원하는만큼 루프를 통과 할 수 있습니다.
따라서 일반 언어의 경우 임의의 긴 문자열을 만들 수 있다면 xyz로 나눌 수 있습니다. 여기서 x는 루프의 시작에 도달하는 데 필요한 문자, y는 실제 루프, z는 우리가 무엇이든 상관 없습니다. 루프 후에 문자열을 유효하게 만들어야합니다. 중요한 것은 x와 y의 총 길이가 제한되어 있다는 것입니다. 결국 길이가 상자 수보다 크면이 작업을하는 동안 분명히 다른 상자를 통과 한 것이므로 루프가 있습니다.
따라서 균형 잡힌 언어로 왼쪽 괄호를 여러 개 작성하여 시작할 수 있습니다. 특히 주어진 파서에 대해 상자보다 왼쪽 괄호를 더 많이 쓸 수 있으므로 파서는 왼쪽 괄호가 몇 개 있는지 알 수 없습니다. 따라서 x는 왼쪽 괄호의 양이며 이것은 고정되어 있습니다. y는 또한 왼쪽 괄호의 수이며 이는 무한히 증가 할 수 있습니다. z는 오른쪽 괄호의 수라고 말할 수 있습니다.
즉, 파서에서 인식 한 왼쪽 괄호 43 개와 오른쪽 괄호 43 개로 구성된 문자열이있을 수 있지만 파서는 우리 언어가 아닌 44 개의 왼쪽 괄호와 43 개의 오른쪽 괄호로 구성된 문자열에서이를 알 수 없습니다. 파서는 우리 언어를 파싱 할 수 없습니다.
가능한 일반 파서에는 고정 된 수의 상자가 있으므로 항상 그보다 더 많은 왼쪽 괄호를 작성할 수 있으며 펌핑 기본형에 의해 파서가 말할 수없는 방식으로 더 많은 왼쪽 괄호를 추가 할 수 있습니다. 따라서 균형 잡힌 괄호 언어는 일반 파서로 구문 분석 할 수 없으므로 정규 표현식이 아닙니다.
답변
평신도의 용어로 이해하기는 어렵지만 기본적으로 정규식에는 전체 새 단어가 언어에 대해 유효한 상태로 유지되는 동안 원하는만큼 반복 할 수있는 비어 있지 않은 하위 문자열이 있어야합니다.
에서 연습 , 펌핑 보조 정리는 올바른 언어를 증명하기에 충분한 것이 아니라 (없는 상황 정기 또는) 펌핑 보조 정리를 보여줌으로써 언어의 클래스에 맞지 않는 언어를 모순에 의한 증명을하고 표시하는 방법으로하지 않습니다 그것을 위해 작동하지 않습니다.
답변
기본적으로 XML과 같은 언어의 정의가 있는데, 이는 주어진 문자열 ( “단어”)이 해당 언어의 구성원인지 여부를 알려주는 방법입니다.
펌핑 기본형은 언어에서 “단어”를 선택하고 일부 변경 사항을 적용 할 수있는 방법을 설정합니다. 정리는 만약 언어가 규칙적이라면, 이러한 변화는 여전히 같은 언어에서 온 “단어”를 산출해야한다고 말합니다. 당신이 생각 해낸 단어가 언어에 없다면, 그 언어는 처음에 규칙적이지 않았을 것입니다.
답변
단순 펌핑 기본형은 다른 것들 중에서 유한 오토마타에 의해 설명되는 문자열 집합 인 정규 언어를위한 것입니다. 유한 자동화의 주요 특징은 상태로 설명되는 제한된 양의 메모리 만 가지고 있다는 것입니다.
이제 유한 오토 마톤에 의해 인식되고 자동화의 메모리를 “초과”할 수있는 길이, 즉 상태가 반복되어야하는 문자열이 있다고 가정합니다. 그런 다음 부분 문자열의 시작 부분에있는 오토 마톤의 상태가 부분 문자열의 끝 부분에있는 상태와 동일한 부분 문자열이 있습니다. 하위 문자열을 읽는 것은 상태를 변경하지 않기 때문에 자동 장치가 더 현명 해지지 않고 임의의 횟수만큼 제거되거나 복제 될 수 있습니다. 따라서 이러한 수정 된 문자열도 허용되어야합니다.
문맥없는 언어를위한 좀 더 복잡한 펌핑 기본형도 있는데, 여기서 문자열의 두 위치에서 괄호와 일치하는 것으로 직관적으로 볼 수있는 것을 제거 / 삽입 할 수 있습니다.
답변
정의에 따라 정규 언어는 유한 상태 자동화에 의해 인식되는 언어입니다. 미로로 생각하세요. 상태는 방이고, 전환은 방 사이의 일방 통행 통로이며, 초기 방과 출구 (최종) 방이 있습니다. ‘유한 상태 오토 마톤’이라는 이름에서 알 수 있듯이 한정된 수의 방이 있습니다. 복도를 따라 여행 할 때마다 벽에 적힌 편지를 적습니다. 이니셜에서 마지막 방까지의 경로를 찾으면 글자가 적힌 복도를 올바른 순서로 통과하면 단어를 인식 할 수 있습니다.
펌핑 기본형은 이전에 통과 한 방으로 돌아 가지 않고도 미로를 돌아 다닐 수있는 최대 길이 (펌핑 길이)가 있다고 말합니다. 아이디어는 특정 지점을지나 걸어 들어갈 수있는 별개의 방이 너무 많기 때문에 미로를 빠져 나가거나 트랙을 건너야한다는 것입니다. 미로에서이 펌핑 길이보다 더 긴 경로를 걸을 수 있다면 우회로를 선택하는 것입니다. 경로에 제거 할 수있는 (적어도 하나의)주기를 삽입하고 있습니다 (미로의 교차점을 원하는 경우). 작은 단어 인식) 또는 무한 반복 (펌핑) (초장 단어 인식 가능).
문맥없는 언어에 대한 유사한 기본형이 있습니다. 이러한 언어는 스택을 사용하여 수행 할 전환을 결정할 수있는 유한 상태 자동 인 푸시 다운 자동 장치에 의해 허용되는 단어로 표현 될 수 있습니다. 그럼에도 불구하고 여전히 유한 수의 상태가 있기 때문에 위에서 설명한 직관은 속성의 공식적인 표현을 통해서도 약간 더 복잡 할 수 있습니다 .
답변
평신도 용어로는 거의 옳다고 생각합니다. 언어가 아닌 것을 증명하는 증명 기법 (실제로는 두 가지)입니다. 특정 클래스에 .
예를 들어, 무한한 수의 문자열이 포함 된 일반 언어 (regexp, automata 등)를 고려하십시오. 특정 시점에서 starblue가 말했듯이 문자열이 자동 장치에 비해 너무 길기 때문에 메모리가 부족합니다. 이것은 자동 장치가 당신이 얼마나 많은 복사본을 가지고 있는지 알 수없는 문자열의 덩어리가 있어야한다는 것을 의미합니다 (당신은 루프에 있습니다). 따라서 문자열 중간에 해당 하위 문자열의 복사본이 얼마든지 있지만 여전히 언어에 있습니다.
이 속성이없는 언어가있는 경우, 즉,에 충분히 긴 문자열이 있음이 수단 NO는 당신이 여러 번 반복하고 여전히 언어로 할 수있는 부분 문자열은 다음 언어는 정기적으로하지 않습니다.