Eu estava assistindo as " Cinco etapas da aceitação da matemática construtiva ", de Andrej Bauer, e ele diz que existem dois tipos de provas por contradição (ou duas coisas que os matemáticos chamam de prova por contradição):
- Suponha que seja falso ... blá blá blá, contradição. Portanto, é verdadeiro.
- Suponha que seja verdadeiro ... blá blá blá, contradição. Portanto, é falso.
O primeiro é equivalente à Lei do Meio Excluído (LEM) e o segundo é como provar a negação.
A prova da indecidibilidade do Problema da Parada (HP) é uma prova por contradição: suponha que exista uma máquina que possa decidir a HP ... blá blá blá, contradição. Portanto, não existe.
Então, seja " existe e pode decidir o HP". Suponha que seja verdadeiro ... blá blá blá, contradição. Portanto, é falso.
Isso parece o segundo tipo de prova por contradição; portanto, é possível provar a indecidibilidade do problema de parada no Coq (sem assumir o LEM)?
Edição: Gostaria de ver alguns pontos sobre como provar isso usando contradição. Eu sei que isso também pode ser provado usando a diagonalização.
fonte
Respostas:
Você está exatamente certo de que o problema da parada é um exemplo do segundo tipo de "prova por contradição" - é realmente apenas uma afirmação negativa.
Suponha que
decides_halt(M)
é um predicado que diz que a máquinaM
decide se sua entrada é uma máquina que interrompe (ou seja,M
é um programa que, para algumas máquinasm
e entradasi
, decide sem
pára na entradai
).Esquecendo por um momento sobre como provar isso, o problema da parada é a afirmação de que não existe uma máquina que decida o problema da parada. Podemos afirmar isso no Coq como
(exists M, decides_halt M) -> False
, ou talvez preferimos dizer que qualquer máquina não resolve o problema da paradaforall M, decides_halt M -> False
. Acontece que, sem axiomas, essas duas formalizações são equivalentes na Coq. (Eu expliquei a prova para que você possa ver como ela funciona, masfirstorder
fará a coisa toda!)Eu acho que nenhuma das afirmações é muito difícil de provar como argumento de diagonalização, embora formalizar máquinas, computabilidade e parada seja provavelmente um desafio razoável. Para um exemplo mais simples, não é muito difícil de provar o teorema diagonalização de Cantor (veja https://github.com/bmsherman/finite/blob/master/Iso.v#L277-L291 para uma prova de que
nat -> nat
enat
não são isomorfos).A diagonalização acima fornece um exemplo de como você pode derivar uma contradição de um isomorfismo entre
nat -> nat
enat
. Aqui está a essência dessa prova descrita como um exemplo independente:Mesmo sem olhar para os detalhes, podemos ver pela afirmação de que essa prova toma a mera existência de uma bijeção e demonstra que é impossível. Primeiro, damos os dois lados da bijeção os nomes
seq
eindex
. A chave é que o comportamento da bijeção na sequência especialf := fun n => S (seq n n)
e seu índiceindex f
é contraditório. A prova do problema de parada derivaria uma contradição de maneira semelhante, instanciando sua hipótese sobre uma máquina que resolve o problema de parada com uma máquina cuidadosamente escolhida (e em particular uma que realmente depende da máquina assumida).fonte