Para demonstrar que um idioma L é decidível, você precisa mostrar que existe uma máquina de Turing (TM) que:
1.
interrompe em todas as entradas: A MT deve, eventualmente, atingir um estado de aceitação ou um estado de rejeição, independentemente da sequência de entrada. Não pode fazer um loop para sempre.
2. Se uma string `W` estiver em L, a TM é interrompida em um estado de aceitação.
3.
rejeita as cordas não na linguagem l: Se uma string `W` não estiver em L, o TM é interrompido em um estado de rejeição.
Em outras palavras, uma linguagem decidível possui uma máquina de Turing que atua como um testador de associação perfeito:sempre fornece uma resposta "sim" ou "não" e sempre o faz em um período de tempo finito.
Aqui está um colapso de técnicas e considerações comuns:
1. Construindo uma máquina de Turing (TM) Descrição: *
Descrição de alto nível: Comece com uma descrição clara e legível pelo homem do algoritmo da MT. Isso deve explicar a lógica e as etapas necessárias para processar a entrada. Pense nisso como pseudo-código.
*
Descrição do nível de implementação (opcional): Você * pode * fornecer uma descrição de nível inferior, especificando os estados, função de transição, alfabeto de fita, etc. Isso geralmente é tedioso e não é necessário, a menos que seja explicitamente solicitado, ou se o algoritmo é muito sutil e requer definição precisa. Concentre-se na descrição de alto nível primeiro.
*
clareza é chave: O mais importante é que sua descrição é compreensível e convincente. Uma descrição de alto nível mal escrita pode ser mais difícil de entender do que uma descrição formal bem escrita.
2. Estratégias gerais para projetar decisores: *
Simule outras máquinas: Se você pode mostrar que L pode ser decidido simulando outro idioma decidível (ou vários desses idiomas), você demonstrou que L é decidível. A decidabilidade é fechada em muitas operações (união, interseção, complemento, concatenação, estrela de Kleene).
*
converter para um problema mais simples: Tente reformular o problema em um problema equivalente, mas mais fácil de resolver.
*
Considere casos básicos e recursão: Se o problema tiver uma estrutura recursiva, um algoritmo recursivo poderá ser traduzido em uma máquina de Turing. Verifique se a recursão está limitada para garantir a rescisão.
*
Pesquisa exaustiva: Se o espaço de entrada for finito ou puder ser limitado, você pode usar a pesquisa exaustiva para verificar todas as possibilidades. O ponto crucial é que a pesquisa deve ser garantida para terminar.
*
alavancar idiomas decidíveis conhecidos: Construa o conhecimento de que certos idiomas já são decidíveis. Por exemplo, idiomas regulares, idiomas livres de contexto e muitos outros.
3. Técnicas para demonstrar terminação: *
Contagem: Mostre que o algoritmo envolve um contador que aumenta ou diminui estritamente em direção a um limite.
*
Tamanho diminuindo: Mostre que cada etapa do algoritmo reduz o tamanho do problema até atingir um caso base trivial.
*
sem loops infinitos: Argumentam de forma convincente que o algoritmo não pode entrar em um loop infinito. Isso pode envolver mostrar que a máquina sempre move a cabeça da fita, ou que os estados visitados são sempre distintos dentro de um determinado período.
*
Comprimento da simulação: Se o algoritmo simular outra MT, estabeleça um limite superior no número de etapas que a simulação tomará. Isso geralmente depende do tamanho da entrada.
4. Exemplos e cenários comuns: *
idiomas regulares: Para mostrar um idioma regular, é decidível, forneça um DFA para o idioma. Uma TM pode simular o DFA e interromper um estado de aceitação ou rejeição com base no estado final do DFA.
*
Idiomas livres de contexto: Use o algoritmo Cyk ou um algoritmo de análise semelhante. Esses algoritmos têm um tempo de execução finito.
*
indecidibilidade: Entenda o problema de parada. Você * não pode * decidir se uma máquina de Turing arbitrária é interrompida em uma entrada arbitrária. Se você pode reduzir o problema de parada para o seu problema, você mostrou que seu problema não é exigente (não é decidível).
*
teste de vazio: Mostrar um idioma está * vazio * (não contém strings) às vezes é mais fácil do que mostrar que é decidível. Por exemplo, o idioma de uma máquina de Turing * não é * decidível. No entanto, dado um DFA ou CFG, determinar se o idioma que ele representa está vazio * é * é decidível.
5. O que não fazer: *
Não apenas afirme que é decidível sem justificação. Você deve fornecer um argumento razoável, que geralmente significa descrever o algoritmo.
*
Não forneça uma tm que * apenas * aceite seqüências de caracteres no idioma. Ele também deve * rejeitar * Strings * não * no idioma e deve parar.
*
Não forneça um algoritmo que * possa * parar, mas tem o potencial de fazer um loop para sempre. Uma decisão * deve * parar.
*
Não confunda a decidabilidade com o reconhecimento. Uma linguagem reconhecível exige apenas uma MT para parar e aceitar se a entrada estiver no idioma. Pode fazer um loop para sempre se a entrada não estiver no idioma. Os idiomas decidíveis são sempre reconhecíveis, mas o inverso não é verdadeiro.
*
Não tente fornecer uma "prova pelo exemplo" Mostrar que uma entrada específica é aceita ou rejeitada não prova nada sobre a decidabilidade do idioma.
Exemplo 1:a ={0
n
1
n
| n> =0} é decidível. *
Descrição de alto nível: 1. Digitalize a sequência de entrada para garantir que ela consista apenas 0s seguida por 1s. Caso contrário, rejeite.
2. Embora existam 0s e 1s restantes:
* Atravesse o mais à esquerda 0.
* Atravesse o mais à esquerda 1.
3. Se não houver 0s e nenhum 1s permanecer, aceite.
4. Se apenas 0s ou apenas 1s permanecer, rejeite.
*
justificativa: Este algoritmo é interrompido para todas as entradas. As etapas 1 e 3/4 estão encerrando verificações. Etapa 2 cruza um 0 e um 1 em cada iteração. O número de 0s e 1s é finito, portanto o loop será encerrado. Se o número de 0s e 1s foi igual, aceitamos. Caso contrário, rejeitamos.
Exemplo 2:Dado um DFA D, sua linguagem l (d) está vazia? A DFA ={ | D é um dfa e l (d) =∅} é decidível. *
Descrição de alto nível: 1. Marque o estado inicial de D.
2. Repita até que nenhum novo estado seja marcado:
* Marque qualquer estado que possa ser alcançado de um estado atualmente marcado, seguindo uma flecha em D.
3. Se algum estado aceita é marcado, rejeite.
4. Caso contrário, aceite.
*
justificativa: Este algoritmo é interrompido. A etapa 2 explora todos os estados acessíveis possíveis. O número de estados em D é finito, portanto o loop será encerrado. Se pudermos alcançar um estado de aceitação, o idioma não está vazio e rejeitamos. Caso contrário, é e aceitamos. Observe que `d` é garantido como um DFA por suposição e, portanto, possui estados finitos.
Ao seguir essas estratégias e entender as propriedades das máquinas de Turing e idiomas decidíveis, você pode efetivamente demonstrar que um idioma é decidível. Lembre -se de se concentrar em uma descrição clara e convincente do algoritmo e um argumento sólido para sua rescisão e correção.