Desafio
Escreva um programa P, sem nenhuma entrada, de modo que a proposição “a execução de P eventualmente termine” seja independente da aritmética do Peano .
Regras formais
(Caso você seja um lógico matemático que considere a descrição acima muito informal.)
Pode-se, em princípio, converter alguma máquina Universal Turing U (por exemplo, sua linguagem de programação favorita) em uma fórmula aritmética Peano HALT sobre a variável p , onde HALT ( p ) codifica a proposição “ U termina no programa ( codificado por Gödel ) p ”. O desafio é encontrar p tal que nem HALT ( p ) nem ¬HALT ( p ) possam ser comprovados na aritmética Peano.
Você pode supor que seu programa seja executado em uma máquina ideal com memória ilimitada e números inteiros / ponteiros grandes o suficiente para acessá-lo.
Exemplo
Para ver que tais programas existem, um exemplo é um programa que procura exaustivamente uma prova aritmética Peano de 0 = 1. A aritmética Peano prova que esse programa interrompe se e somente se a aritmética Peano for inconsistente. Como a aritmética do Peano é consistente, mas não pode provar sua própria consistência , ele não pode decidir se esse programa é interrompido.
No entanto, existem muitas outras proposições independentes da aritmética do Peano nas quais você pode basear seu programa.
Motivação
Esse desafio foi inspirado em um novo artigo de Yedidia e Aaronson (2016) exibindo uma máquina de Turing com 7.918 estados cuja não terminação é independente do ZFC , um sistema muito mais forte que a aritmética do Peano. Você pode estar interessado em sua citação [22]. Para esse desafio, é claro, você pode usar sua linguagem de programação preferida no lugar das máquinas de Turing reais.
x = 1.0; while (x) { x = x / 2.0; }
o de fato parará muito rapidamente.Respostas:
Haskell, 838 bytes
"Se você quer algo feito, ..."
Explicação
Este programa procura diretamente uma prova aritmética Peano de 0 = 1. Como o PA é consistente, este programa nunca termina; mas como o PA não pode provar sua própria consistência, o não término deste programa é independente do PA.
T
é o tipo de expressões e proposições:A P
representa a proposição ∀ x [ P ( x )].(V 1 :$ P) :$ Q
representa a proposição P → Q .V 2 :$ P
representa a proposição ¬ P .(V 3 :$ x) :$ y
representa a proposição x = y .(V 4 :$ x) :$ y
representa o x + y natural .(V 5 :$ x) :$ y
representa os naturais x ⋅ y .V 6 :$ x
representa o natural S ( x ) = x + 1.V 7
reprime o 0 natural.Em um ambiente com i variáveis livres, nós codificar expressões, proposições e provas como 2 × 2 matrizes de números inteiros [1, 0; a , b ], como segue:
Os axiomas restantes são codificados numericamente e incluídos no ambiente inicial Γ :
Uma prova com matriz [1, 0; a , b ] pode ser verificado dado apenas o canto inferior esquerdo a (ou qualquer outro valor congruente a um módulo b ); os outros valores existem para permitir a composição de provas.
Por exemplo, aqui está uma prova de que a adição é comutativa.
Você pode verificá-lo com o programa da seguinte maneira:
Se a prova fosse inválida, você obteria a lista vazia.
fonte