Teorema da incompletude de Gödels (primeiro) e o problema da parada - Quão limitante é?


8

Quando ouvi essas coisas pela primeira vez, fiquei muito fascinado, pois pensava que isso realmente limita a matemática e as ciências em geral. Mas quão praticamente relevantes são essas coisas?

Para o problema da parada: Existem mais do que alguns casos construídos artificialmente, em que não se pode decidir se o algoritmo será encerrado ou não?

Para o Teorema da Incompletude: Existem mais do que alguns casos construídos artificialmente, em que não se pode provar / refutar a afirmação?

Estou perguntando isso, porque parece que na maioria das áreas da ciência não importa realmente que haja limitações tão fundamentais. Eles estão lá? Gostaria de saber onde isso realmente define um limite e onde é realmente relevante.


4
O resultado do problema de parada não indica que você não pode decidir se uma determinada MT não é interrompida. Ele afirma que não há algoritmo geral que possa decidir isso para todas as MT.
Babou 28/05

2
Bem, sim, mas quais são as implicações práticas disso? É realmente relevante ou importa apenas em casos construídos artificialmente?
Nocta 28/05

Talvez algo para analisar seja a programação funcional total, que permite apenas o encerramento de programas. Então você pode ver com que frequência os profissionais passam a ter que recorrer à programação funcional fraca (Turing complete) para resolver problemas. No que diz respeito às linguagens de programação de propósito geral, eu só ouvi falar de Idris - o resto parece ser provador de teoremas.
Guildenstern

1
Muitos problemas matemáticos interessantes e difíceis poderiam ser resolvidos facilmente se o problema de parada pudesse ser resolvido. Por exemplo, o último teorema de Fermat. Demoro 5 minutos para escrever um programa que será interrompido se e somente se houver uma solução para a ^ n + b ^ n = c ^ n com a, b, c> 0 e n> = 3. Se você provar ou refutar que para, é comprovado por FLT. "Existem infinitos primos gêmeos" é apenas um pouco mais difícil de provar se o problema de parada for resolvido.
gnasher729

2
Por favor, restrinja-se a uma pergunta por postagem; os dois teoremas a que você se refere têm pouco a ver um com o outro. Seu fraseado também sugere que você realmente não entendeu o que eles dizem (veja o comentário de babou); você tem que ler um pouco mais! Estas são declarações profundamente matemáticas e formais que não podem ser entendidas adequadamente da maneira da ciência pop.
Raphael

Respostas:


9

O problema da parada sendo indecidível tem muita relevância prática, aqui está um exemplo rápido:

Escrever um software antivírus é difícil: não podemos decidir se um determinado pedaço de código é malicioso, porque, se pudéssemos, poderíamos decidir o problema da interrupção.

Para ver isso, pegue um código que usa como entrada uma máquina de Turing M e uma palavra de entrada W e faz algo malicioso se e somente se M pára na entrada W. Se pudéssemos decidir se um determinado pedaço de código era malicioso, poderíamos decidir se esse pedaço de código era malicioso, mas poderíamos decidir o problema da interrupção, que sabemos que não podemos fazer.

O que isto está dizendo é que não existe um software antivírus perfeito, isso não pode ser feito. Isso não significa que não devemos tentar escrever um software antivírus, apenas que nunca conseguiremos escrever um software perfeito. De fato, qualquer declaração sobre como decidir o que os programas fazem é indecidível (veja o teorema de Rice ).

No que diz respeito ao teorema de Godel, o teorema de Goodstein é um exemplo de uma declaração que é improvável usando os axiomas de Peano.


5
Com relação a isso, acho que essa resposta é um exemplo perfeito de não fazer a distinção que o OP está perguntando: você está usando o problema da interrupção de uma maneira que não tem relevância prática. Na prática, não há razão para um trecho de código benigno conter instruções que executam uma ação maliciosa; portanto, não importa que não possamos descobrir se essas instruções são executadas ou não; se estiverem lá, o código pode ser considerado malicioso.
Harry Johnston

(Suspeito que você possa tirar a mesma conclusão de maneira mais apropriada, considerando conjuntos de instruções cujo efeito combinado pode ser benigno ou mal-intencionado, dependendo de qual combinação de instruções é executada, e depois argumentando que, nas circunstâncias certas, você não consegue descobrir quais combinações são possíveis, mas não tenho certeza bastante como colocar tudo isso junto com rigor)..
Harry Johnston

@HarryJohnston Uma possibilidade é disfarçar instruções maliciosas nos dados. Para alguns programas, talvez não possamos decidir se esses dados serão executados como código ou se é simplesmente uma sequência benigna que parece instruções mal-intencionadas. É claro que nos sistemas operacionais convencionais (e até nos processadores) existe uma separação forçada entre a memória executável somente leitura e a memória de dados graváveis, mas há cenários em que esse não é o caso.
WaelJ

@HarryJohnston: Isso seria verdade se pudéssemos consultar a parte ruim da instrução, mas não podemos. Meu software arbitrário lê um arquivo de configuração em ~ / Documents e suporta a exclusão de sua própria configuração. Há um caminho de execução em que o "arquivo a ser excluído" é definido como ~ / Documents antes de "delete" ser chamado, o que é extremamente malicioso, mas não há como dizer "ei, esse aplicativo tem essas duas coisas, deve ser malicioso ! " sem olhar o que está fazendo com eles. O que você não pode fazer no caso geral, porque interrompe o problema.
Phoshi 29/05

@ Phoshi: sim, esse é um exemplo do argumento que descrevo no meu segundo comentário. Meu palpite é que é possível fazer isso rigorosamente, com base em certas suposições, embora não seja óbvio para mim qual a melhor maneira de abordá-lo. OTOH, pode ser que, para torná-lo rigoroso, você precise permitir que o aplicativo se analise (por exemplo, inspecione seu próprio código) e, na prática, seja seguro impedir isso.
Harry Johnston

6

Para o problema da parada: Existem mais do que alguns casos construídos artificialmente, em que não se pode decidir se o algoritmo será encerrado ou não?

existem alguns contextos "aproximadamente práticos / aplicados" com pesquisa ativa em que o problema da parada desempenha um papel:

  • prova automatizada de teoremas . provar que os teoremas dos computadores estão dentro dos mesmos limites de indecidibilidade do problema de parada.

  • provar que o encerramento de programas para programas reais é uma área de pesquisa e aparece em, por exemplo, lógica do compilador e análise de programas.

  • A complexidade de Kolmogorov tenta estudar os limites teóricos dos algoritmos de compactação de dados. encontrar uma compressão ideal (em certo sentido, ou seja, encontrar a menor MT comprimindo uma string) é indecidível.

  • a indecidibilidade aparece em alguns problemas físicos. por exemplo, sistemas dinâmicos .

  • um problema básico estudado chamado " problema do castor ocupado" . ainda teórico, mas menos abstrato que o problema da parada e estudado em particular por sua conexão. os pesquisadores tentaram resolver isso por décadas para "pequenas" MTs com poucos estados / símbolos.

Aqui está uma citação relacionada / interessante de um artigo recente que estuda o problema dos castores ocupados "problemas na teoria dos números da competição dos castores ocupados" de Michel (p.3):

Na verdade, o problema de parada de máquinas de Turing lançado em uma fita em branco é m-completo, e isso implica que esse problema é tão difícil quanto o problema da provabilidade de uma afirmação matemática em uma teoria lógica como o ZFC (Zermelo Fraenkel axioma da escolha). Assim, quando máquinas de Turing com mais e mais estados e símbolos são estudadas, potencialmente todos os teoremas da matemática serão atendidos. Quando mais e mais máquinas de Turing sem interrupção são estudadas para se provar sem interrupção, é preciso esperar enfrentar problemas difíceis em matemática, ou seja, problemas que o conhecimento matemático atual não pode resolver.

em outras palavras, o problema da parada realmente codifica / encapsula o desafio de tentar provar novos teoremas matemáticos em matemática / CS e, portanto, pode ser considerado extremamente profundo / prático / aplicado nesse sentido. (no entanto, enquanto alguns consideram essa observação óbvia ou trivial, essa também geralmente não é uma opinião comum / expressa em voz alta.)


também, por exemplo, Penrose argumenta que indecidibilidade é um fator que impede AI no Emperors nova mente
vzn

Outro grande contexto em que a indecidibilidade aparece está em algumas questões matemáticas básicas. talvez o mais básico / famoso seja o 10º problema de Hilberts , eqns diofantinos em polinômios. também, mostras Indecidibilidade em algumas perguntas sobre fractais , por exemplo, o conjunto de Mandelbrot etc
vzn

5

Estou respondendo a uma de suas duas perguntas, sobre o problema da parada.

Primeiro, a indecidibilidade do problema de parada não indica que você não pode decidir se uma determinada MT não é interrompida. Ele afirma que não há algoritmo geral que possa decidir isso para todas as MT.

Esta é uma declaração sobre nossos modelos do que constitui computação. Mas, de acordo com a tese de Turing-Church, é tudo o que temos para expressar compaixão.

Em relação à relevância, ela se baseia em máquinas de Turing construídas artificialmente. Mas então, todas as MT são bastante artificiais e construídas apenas para afirmar alguns fatos sobre computação. Se uma MT é mais relevante do que outras na prática é uma questão tão importante quanto o sexo dos anjos, ou o número deles que podem ficar na cabeça de uma agulha.

A indecidibilidade do problema da parada nos diz que existem questões gerais que não podem ser resolvidas por uma técnica geral aplicável a todos os casos. O que quero dizer com pergunta geral é uma pergunta dependendo de alguns parâmetros, onde a resposta deve ser encontrada para alguns valores dos parâmetros.

Lembre-se de que o objetivo de grande parte de nossa matemática é encontrar técnicas gerais para resolver uma família de problemas. Um exemplo típico é a resolução de equações. A indecidibilidade do problema da parada nos diz que isso nem sempre é possível.

Por exemplo, ele pode ser usado para mostrar que não existe uma técnica geral para decidir se uma gramática livre de contexto é ambígua.

No entanto, sua pergunta é válida. Pode ser que um problema seja indecidível porque você o tornou um pouco geral demais. Possivelmente, restringindo-o um pouco, você pode decidir por uma subfamília útil e ainda grande o suficiente.

Não tenho um exemplo espetacular em mente, mas tenho certeza de que deve haver alguns.

Lembro-me de um caso real de um problema de análise de programa que foi provado completo como NP (a menos que fosse indecidível, não me lembro bem). Contra todos os conselhos, um estudante de doutorado decidiu enfrentá-lo de qualquer maneira. Ele conseguiu mostrar que algumas restrições ao problema, que pouco importavam na prática, o transformaram em um problema muito tratável, possibilitando o uso de várias ferramentas de análise e otimização de programas.


4
Um exemplo que eu acho que se encaixaria bem na sua resposta é otimizar compiladores. A indecidibilidade do problema de parada significa que, por exemplo, não há algoritmo que possa remover perfeitamente o código morto ou produzir o executável mais rápido possível para um arquivo de origem específico. Mas isso não impede que os compiladores façam um bom trabalho dessas coisas, na maioria dos casos, na prática.
David Richerby
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.