주어진 언어 , 생산 규칙을 보지 않고이 언어가 규칙적이지 않다는 것을 직접 말할 수 있습니까?
나는 펌핑 보조 정리를 사용할 수 있지만 일부 사람들은 이것이 규칙적인 것이 아니라는 문법을보고 있다고 말합니다. 그게 어떻게 가능해?
주어진 언어 , 생산 규칙을 보지 않고이 언어가 규칙적이지 않다는 것을 직접 말할 수 있습니까?
나는 펌핑 보조 정리를 사용할 수 있지만 일부 사람들은 이것이 규칙적인 것이 아니라는 문법을보고 있다고 말합니다. 그게 어떻게 가능해?
답변:
DFA / NFA의 주요 속성은 무제한 메모리 부족입니다. 당신이 생각할 수있는 언어와 유일한 알고리즘 (나중에 유한 오토 마톤 (Finite Automaton)으로 번역되어야하는)을 보면,이 속성을 필요로합니다. (처럼 귀하의 예에서) 그 언어는 아마도 규칙적이지 않을 것입니다.
물론, 당신은 항상 수학 직관이 틀릴 수 있다는 것을 기억해야하며, 직관을 확신하는 유일한 방법은 그것을 증명하는 것입니다.
편집 : 공간 부족으로 인해 주석의 마지막 질문에 대답하겠습니다.
너희들은 무한한 기억에 대해 이야기하고 있는데 그것은 당신이 그것이 규칙적이지 않은 이유라는 것을 의미합니다. 그러나 a ^ nb ^ m은 내가 원한다면 무제한 메모리를 가질 수 있습니다. 이것은 여전히 나에게 평화를주지 않습니다.
문제는 단어가 얼마나 커질 수 있는지가 아니라 (모든 유한 언어가 규칙적이고 매우 지루하기 때문에 보통 무한 일반 언어를 접하게 됨) DFA가 얼마나 많이 기억해야 하는가입니다.
에서 예를 들어, 기억할 필요가 없습니다 . 알고리즘은 단지 긍정적이고 단어가 올바르게 정렬되어 있는지 확인하면됩니다. 이것은 유한 목록이며 목록의 각 항목에는 일정한 양의 메모리가 필요합니다.
이것을 다음과 비교하십시오의 수를 기억하기 위해 간단한 알고리즘이 필요합니다. 의 수는 '에스. 무제한 메모리가 필요합니다. 언어를보고 생각할 수있는 알고리즘이 무한한 메모리가 필요하다는 것을 알면 언어가 규칙적이지 않다는 내 직감이 강해집니다. 합리적인 시간에 (스마트 한) 알고리즘 (일정한 양의 메모리를 필요로하는)을 찾을 수 없다면 (얼마나 많은 시간이 당신에게 달려 있는지) 나는 언어가 규칙적이지 않다는 것을 증명할 것입니다.
이것이 좀 더 명확 해지기를 바랍니다.
나는 펌핑 보조를 사용할 수 있습니다
바로 그거죠. Pumping lemma 또는 다른 기술 을 수십 번 사용한 후에는 규칙이 적용되지 않는 언어로 패턴을 보기 시작 합니다.아마 당신이 이미 마스터했을 매우 기본적인 것입니다. 따라서 이것은 직관뿐만 아니라 경험의 문제이기도합니다.
직감을 테스트하는 좋은 방법은 다음 언어를 보는 것입니다.
컨텍스트가없는 것은 무엇입니까?
실제로 전체 증명을 수행하는 대신 상당히 간단한 계산을 사용하여 언어가 규칙적인지 여부를 결정할 수 있습니다. 매우 강력한 기준 하나만 적용하면됩니다. 언어가 유한하게 많은 몫을 가진 경우에만 규칙이 적용됩니다.
직관적으로 몫은 입력의 일부를 이미 읽은 후 단어를 완성하는 데 필요한 것입니다. 보다 공식적으로 언어의 왼쪽 몫 끈으로 작성 문자열 집합입니다 그런 . 예를 들어그런 다음 , 동안 . 우리는 쉽게 그것을 볼 수 있습니다. 형태에는 무한히 많은 몫이 있으므로 즉시 다음을 따릅니다. 규칙적이지 않습니다.
DFA를 구성하면 L을 결정하고 상태에있을 것입니다 읽은 후 그런 다음 언어는 다음에 의해 결정됩니다 시작 상태를 갖도록 수정 . 동일한 아이디어를 사용하여 정의에서 일반 언어를 결정하는 최소 DFA를 직접 구성 할 수 있습니다.