언어가 규칙적인지 테스트하는 알고리즘 / 체계적인 절차가 있습니까?
다시 말해, 대수 형태로 지정된 언어 ( 와 같은 것으로 )에 언어가 정규 언어인지 여부를 테스트하십시오. 학생들이 모든 숙제를하도록 돕기 위해 웹 서비스를 작성한다고 상상해보십시오. 사용자는 언어를 지정하고 웹 서비스는 "일반", "정규 아님"또는 "모름"으로 응답합니다. (웹 서비스가 가능한 한 자주 "모름"이라고 대답하고 싶습니다.) 이것을 자동화하는 좋은 방법이 있습니까? 다루기 쉬운가요? 결정할 수 있습니까 (즉, "모름"이라고 대답 할 필요가 없음을 보장 할 수 있습니까)? 이 문제를 해결하기 위해 합리적으로 효율적인 알고리즘이 있습니까? "모름"이외의 답변을 제공 할 수 있어야합니다.
언어가 규칙적이지 않다는 것을 증명하는 고전적인 방법은 펌핑 보조입니다. 그러나 어떤 시점에서 수동 통찰력이 필요한 것처럼 보입니다 (예 : 펌핑 할 단어 선택). 이것이 알고리즘으로 바뀔 수 있는지 확실하지 않습니다.
언어가 규칙적임을 증명하는 고전적인 방법은 Myhill–Nerode 정리를 사용하여 유한 상태 오토 마톤을 도출하는 것입니다. 이것은 유망한 접근법처럼 보이지만 대수적 형태로 언어에 대한 기본 작업을 수행하는 능력이 필요합니다. 대수적인 언어로 필요한 모든 연산을 상징적으로 수행 할 수있는 체계적인 방법이 있는지는 분명하지 않습니다.
이 질문을 잘 만들려면 사용자가 언어를 지정하는 방법을 결정해야합니다. 나는 제안에 열려 있지만 다음과 같은 생각을하고 있습니다.
여기서 는 단어 표현이고 S 는 길이 변수에 대한 선형 불평등 시스템이며 다음과 같은 정의를 갖습니다.
각각의 워드 표현이다. (이 단어는 Σ ∗의 모든 단어를 취할 수있는 변수를 나타냅니다 .)
각각 워드 표현이다. (여기서 x r 은 문자열 x 의 역을 나타냅니다 .)
각각의 는 단어 표현입니다. 묵시적으로 Σ = { a , b , c , … } 이므로 a , b , c , … 는 기본 알파벳의 단일 기호를 나타냅니다.
각 η , B η , C η는 , ... 경우, 워드 표현 η는 길이가 가변된다.
단어 표현의 연결은 단어 표현입니다.
각 길이 변수이다. (이것은 모든 자연수를 취할 수있는 변수를 나타냅니다.)
각각 길이 변수이다. (이는 해당 단어의 길이를 나타냅니다.)
이것은 우리가 교과서 연습에서 볼 수있는 많은 경우를 처리 할만큼 충분히 넓은 것 같습니다. 물론, 더 나은 제안이 있다면, 대수 형태로 언어를 지정하는 다른 텍스트 방법을 대체 할 수 있습니다.