Prova de não regularidade, com base na complexidade de Kolmogorov


8

Na aula, nosso professor nos mostrou três métodos para provar a não regularidade:

  1. Teorema de Myhill – Nerode
  2. Lemma de bombeamento para idiomas regulares
  3. 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  L(Σbool)ser uma linguagem regular. Deixei Lx={y(Σbool)|xyL} para cada x(Σbool). Então existe uma constante c, de modo que para todos  x,y(Σbool)

 K(y)log2(n+1)+c

E se  y é a n-ésima palavra no idioma  Lx.

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!

Respostas:


8

Que eu saiba, essa não é uma das abordagens "clássicas" usadas para caracterizar linguagens regulares.

Essa abordagem é discutida em "Uma Nova Abordagem da Teoria da Linguagem Formal pela Complexidade de Kolmogorov" , de Ming Li e Paul MB Vitanyi (consulte a seção 3.1).

Eles dão vários exemplos em que se pode usar a declaração que você mencionou em vez de usar o lema de bombeamento. Por exemplo, provar a não regularidade deL Onde

L={1p|p is prime}.

Dado alguns xΣ, Lx={y|xy=1pp is prime}. Vamos escolherx=1p Onde p é o ké o primeiro. Deixeiy1 ser a primeira palavra em Lx. Obviamente,y1=1pp Onde p é o k+1prime. De acordo com a declaração que você mencionou,K(y1)c (n=1), por alguma constante c dependendo apenas de L (veja papel).

Uma vez que isso vale para todos x, podemos limitar a complexidade de Kolmogorov de todos os elementos em S={y1x|x=1p for prime p y1x is the first string in Lx} pela mesma constante c. No entanto, vimos queS na verdade consiste em diferenças entre primos consecutivos, ou seja, S={1pk+1pk|k1} Onde pk é o ké o primeiro. Desde que sabemosS não pode ter limitado a complexidade de Kolmogorov (as diferenças principais ficam arbitrariamente grandes), isso significa L não pode ser regular.


2
Eu não conhecia essa técnica. Você deseja adicionar uma resposta à nossa pergunta de referência ?
Raphael

1
Sim, posso adicionar um mais tarde. Devo admitir que eu também não conhecia essa técnica, apenas me deparei com este artigo depois de pesquisar a pergunta do op. Não tenho certeza de quão popular (em relação a outros métodos) essa técnica acabou sendo. O artigo em Arxiv foi realmente publicado no SIAM em 1995, portanto não é tão novo quanto eu pensava a princípio (abordagem ainda interessante e original).
Ariel

Muito obrigado pelo esforço e pelo exemplo. Você poderia me explicar por que 1pp é a primeira palavra em  Lx? p é o k-ésimo primo ep 'é o k-1 primo, então não deveríamos dizer que y1=1pp? E como eu entendi, pp 'não precisa ser necessariamente primo, é por isso que escolhemos isso?
gammaALpha

1
O prefixo é x=1p, a primeira palavra em L com prefixo x é então y1x=1pp de tal modo que p é o próximo primo, então xy1x=1p+(pp)=1p. Nós escolhemosx desta maneira, porque isso nos permite limitar a complexidade de Kolmogorov de todos esses y1xpor uma constante. Como as diferenças primárias podem se tornar arbitrariamente grandes, o conjunto de todas essasy1xé infinito (portanto, não pode ter complexidade limitada). Eu adicionei uma resposta à pergunta de referência, ela contém mais informações que você pode achar útil e outro exemplo.
Ariel

3

Outro exemplo muito fácil é o seguinte: use a complexidade de Kolmogorov para provar que Lww={www{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 finito D (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 que Lwwé regular; então existe um DFADww que reconhece isso.

Deixei y ser uma sequência incompressível de comprimento |y|=n|D|

Para todas as entradas x=yz, no final da primeira parte y, o DFA Dww estará claramente no mesmo estado qie, 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

 Let y = 10110
       y   z
 x = 10110 0  >> rejected
 x = 10110 1  >> accepted  (w=101, |y|>|z|)
 x = 10110 00 >> rejected
 x = 10110 01 >> rejected
 ....
 x = 10110 10110 >> accepted  (w=10110,  |y|=|z| !!!)
 ....
 x = 10110 1101101 >> accepted (w=101101, |z|<|y|

Mas é importante notar que existe apenas uma string z de comprimento |y| isso é aceito (z=y)

Então, dada a descrição de Dww, o Estado qi no fim de ye 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 corda y; mas para grande o suficientey temos <|y| o que é uma contradição porque y é incompressível.


Eu não conhecia essa técnica. Você deseja adicionar uma resposta à nossa pergunta de referência ?
Raphael
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.