Na aula, nosso professor nos mostrou três métodos para provar a não regularidade:
- Teorema de Myhill – Nerode
- Lemma de bombeamento para idiomas regulares
- Prova de não regularidade, com base na complexidade de Kolmogorov
Agora, os dois primeiros, teorema de Myhill-Nerode e lema de Pumping, eu entendi bem e também pude fazer os exercícios para os dois primeiros métodos. Mas eu não entendi o terceiro. A definição do terceiro método é a seguinte:
Deixei ser uma linguagem regular. Deixei para cada. Então existe uma constante, de modo que para todos
E se é a n-ésima palavra no idioma .
Agora eu não entendo como usar esse teorema para provar que uma linguagem não é regular, eu realmente não entendo o conceito. Usamos a complexidade de kolmogorov antes para determinar o comprimento do programa de computador mais curto de um objeto. Como provar a não regularidade com esse teorema? E qual é o pensamento por trás disso?
Muito obrigado!
Outro exemplo muito fácil é o seguinte: use a complexidade de Kolmogorov para provar queLww={ww∣w∈{0,1}∗} não é regular.
Dou-lhe uma prova muito informal, esperando que possa ajudá-lo a entender melhor o papel da complexidade de Kolmogorov.
A ideia principal é a seguinte: um autômato finitoD (que reconhece um idioma normal LD ) possui uma quantidade finita de "memória"; então rodando em uma string de entradax=yz quando "processou" a primeira parte da entrada y a associação de x no LD depende apenas do seu estado atual e da segunda parte da entrada z .
Agora suponha queLww é regular; então existe um DFADww que reconhece isso.
Deixeiy ser uma sequência incompressível de comprimento |y|=n≫|D|
Para todas as entradasx=yz , no final da primeira parte y , o DFA Dww estará claramente no mesmo estado qi e, por hipótese, ele aceitará apenas se a parte restante z é tal que x=yz pode ser dividido em duas partes iguais (ou seja, yz=ww ); por exemplo
Mas é importante notar que existe apenas uma stringz de comprimento |y| isso é aceito (z=y )
Então, dada a descrição deDww , o Estado qi no fim de y e o comprimento |y| podemos simular o comportamento de Dww em todo o 2|y| cordas e veja qual delas aceita ... mas aceita exatamente z=y .
Então, com um programa de tamanhoℓ=|Dww|+logi+logy+c
(|Dww| é necessário espaço para armazenar a descrição de Dww ,
logi espaço para guardar qi , logy espaço para armazenar o comprimento de y , c é necessário espaço para as instruções que simulam o DFA)
podemos "reconstruir" a corday ; mas para grande o suficientey temos ℓ<|y| o que é uma contradição porque y é incompressível.
fonte