Ideias principais
Ser reconhecível significa que você pode criar um processo automático (voltaremos a isso mais tarde) que usa uma palavra como parâmetro, de forma que
- Se o processo automático terminar, ele retornará SIM ou NÃO.
- Esse processo automático não precisa ser finalizado em todas as entradas, mas deve ser finalizado se a palavra de entrada estiver no idioma.
Ser co-reconhecível significa a linguagem w∈Σ∗,w∉L (ou, em inglês, o conjunto de todas as palavras que não estão em L, ou seja, complementar) é reconhecível.
Ser decidível significa que você pode criar um processo automático que use uma palavra como entrada, para que
- O processo automático sempre termina
- Responde SIM ou NÃO. Se responder SIM, a palavra está no idioma; se responder NÃO, a palavra não está no idioma.
Um resultado importante é que L é decidível se e somente se L é reconhecível e co-reconhecível.
A idéia para provar esse resultado é que você pode criar um processo automático a partir dos processos reconhecíveis e co-reconhecíveis, alternando etapas dos dois processos, até que um deles lhe dê a resposta SIM. Um deles precisa fazê-lo, pois cada palavra está ou não no idioma)
Processos automáticos
Sem ser muito formal, muitos tipos de máquinas foram projetados, e basicamente todos eles foram vinculados a tipos de linguagens (esses tipos dependem das ferramentas necessárias para definir tais linguagens. Para obter mais informações, Chomsky Hierarchy pode ajudar).
O significado usual do processo automático, em relação à decidibilidade, é uma Máquina de Turing. Você pode definir uma máquina de Turing para que ela possa:
- Receber valores da entrada
- Armazenar valores
- Leia os valores armazenados
- Computar operações matemáticas básicas em valores
- Teste propriedades matemáticas básicas sobre esses valores e aja de acordo, eventualmente fazendo um loop.
Basicamente, uma máquina de Turing pode fazer tudo o que você pode definir em um programa, exceto que é um objeto matemático, com memória infinita e tempo para gastar em um cálculo. Nem sempre termina.
Outra propriedade importante das Máquinas de Turing é que você pode descrever uma máquina de Turing como uma única palavra (isso é codificação), e existe uma máquina de Turing que, dada como entrada, a codificação de uma máquina Me uma palavra w, pode simular o cálculo de M na entrada w. Isso será importante daqui a pouco.
Vamos apenas salientar que as linguagens regulares - que são (quase) o tipo mais simples de linguagem que você pode pensar do ponto de vista da matemática - têm a propriedade peculiar de serem fechadas sob complemento. Isso significa basicamente que nessas línguas as noções de reconhecibilidade e decidibilidade são equivalentes. Isso não se aplica à medida que você avança na hierarquia de Chomsky.
Exemplo de um idioma indecidível
Estudaremos o problema da parada . A questão é: podemos construir uma máquina de Turing que, dada a codificação de outra máquina de TuringM e uma palavra w, Decide wetherM termina na entrada w ?
Obviamente, isso é reconhecível , pois precisamos simularM em waté que termine e, quando terminar, diga SIM. No entanto, seMnunca termina, não diremos NÃO, por isso reconhecemos esse idioma, mas não o decidimos. Está provado que esse idioma não pode ser decidido por uma máquina de Turing. Isso envolve um esquema matemático usual: um argumento diagonal, que eu não chamaria de intuitivo. Você pode verificar este esboço de prova para se acostumar.
Resumindo
Você não poderá, em um idioma, apenas declarar se é decidível ou não. Não existe nenhum algoritmo que possa fazer isso, e provar que uma linguagem não é decidida requer algum pensamento e pode exigir algum conhecimento sobre Máquinas de Turing, argumentos diagonais, etc.
No entanto, aqui está minha maneira pessoal de lidar com essa questão. Normalmente, ao estudar um idioma, presumo que seja decidível, a menos que mostre alguma forma de referência à maneira como a Turing Machine funciona. Nesse caso, começo a desconfiar e tento definir um algoritmo que decide a linguagem. Se isso não parecer fácil, às vezes ajuda a dividir o trabalho em algoritmos de reconhecimento e co-reconhecimento. Se eu ainda não conseguir, tentarei estabelecer uma conexão entre esse idioma e outro indecidível, como "Se eu posso decidir esse idioma, posso decidir o problema da interrupção". Esta é uma redução de Turing a um problema indecidível, portanto o primeiro problema não pode ser decidido. Se tudo isso falhar, posso tentar usar argumentos diagonais, mas isso pode ser um pouco complicado.