Por que, realmente, o problema da parada é tão importante?


149

Não entendo por que o problema da parada é tão frequentemente usado para descartar a possibilidade de determinar se um programa é interrompido. O Wikipedia [artigo] [1] explica corretamente que uma máquina determinística com memória finita interromperá ou repetirá um estado anterior. Você pode usar o algoritmo que detecta se uma lista vinculada faz um loop para implementar a Função Halting com complexidade de espaço de O (1).

Parece-me que a prova do problema da parada não passa de um chamado "paradoxo", uma contradição auto-referente (pelo menos cíclica) da mesma maneira que o paradoxo do mentiroso. A única conclusão que é feita é que a função de parada é suscetível a essas perguntas malformadas.

Portanto, excluindo os programas paradoxais, a Função Halting é decidível. Então, por que a consideramos uma evidência do contrário?

4 anos depois : Quando eu escrevi isso, eu tinha acabado de assistir este vídeo . Um programador obtém alguns programas, precisa determinar quais terminam e o vídeo continua explicando por que isso é impossível. Fiquei frustrado, porque sabia que, dado alguns programas arbitrários, havia alguma possibilidade de o protagonista provar se eles terminavam. O conceito de generalidade foi perdido de alguma forma. É a diferença entre dizer "alguns programas não podem ser concluídos" e "nenhum programa pode ser finalizado". Muitos algoritmos são formalmente demonstrados para fazer isso. O fracasso em fazer essa distinção, por todas as referências que encontrei on-line, foi como cheguei ao título desta pergunta. Por esse motivo, eu realmente aprecio a resposta que redefine a função de parada como ternária em vez de booleana.


16
"uma máquina determinística com memória finita" é "chata", pois não passa de um autômato finito; estes não são úteis para modelar computação em geral. Quanto ao problema de parada: é um exemplo específico para uma função que não é (Turing) computável. Se você está satisfeito com uma prova não construtiva, não precisa dela. Ainda tem relevância histórica, no entanto.
Raphael

16
Dito isto, sua pergunta parece mal informada. Você pode querer escovar acima em suas fundamentos da computability teoria (que vai desafiar a sua intuição que é informado pela realidade, e não os modelos discutidos lá). Veja nossas perguntas de referência para começar. Se você precisar de mais "provas" de que sua intuição (no que diz respeito à teoria) é fatalmente falha, leia esta pergunta .
Raphael

12
"Você pode usar o algoritmo que detecta se uma lista vinculada faz um loop para implementar a Função Halting com complexidade de espaço de O (1)" - mas se você deseja resolver o problema em um computador com 2 GB de armazenamento, precisará de mais 2 ^ 2000000000 etapas e um computador maior.
precisa saber é o seguinte

11
Há muito tempo, eu estava conversando com um amigo sobre o problema da parada e alguém sentado perto perguntou "qual é o problema da parada, isso é importante?" e meu amigo se virou para ele e disse: "se pudéssemos resolver o problema da parada, poderíamos construir cidades nas nuvens". Isso é verdade.
9789 Francis

8
@emory A afirmação é vacuamente verdadeira: P => Qé verdadeira para qualquer Q, se sabemos que Pé falso (e sabemos que o Problema da Parada não é solucionável). Francisco poderia também dizer "Se pudéssemos resolver o problema da parada, poderíamos encontrar uma cura para a própria morte". É assim que a implicação lógica é definida.
amalloy

Respostas:


217

Porque muitos problemas realmente práticos são o problema de parada disfarçado. Uma solução para eles resolve o problema da parada.

Você quer um compilador que encontre o código de máquina mais rápido possível para um determinado programa? Na verdade, o problema de parada.

Você possui JavaScript, com algumas variáveis ​​com níveis altos de segurança e outras com nível baixo de segurança. Você deseja garantir que um invasor não consiga acessar as informações de alta segurança. Este também é apenas o problema da parada.

Você tem um analisador para sua linguagem de programação. Você o altera, mas deseja garantir que ele ainda analise todos os programas que costumava usar. Na verdade, o problema de parada.

Você tem um programa antivírus e deseja verificar se algum dia executa uma instrução maliciosa. Na verdade, apenas o problema de parada.

Quanto ao exemplo da wikipedia, sim, você pode modelar um computador moderno como uma máquina de estado finito. Mas há dois problemas com isso.

  1. Todo computador seria um autômato diferente, dependendo do número exato de bits de RAM. Portanto, isso não é útil para examinar um pedaço de código específico, pois o autômato depende da máquina na qual ele pode ser executado.

  2. Você precisaria de estados se tiver n bits de RAM. Portanto, para o seu computador moderno de 8 GB, são 2 32000000000 . Esse é um número tão grande que o wolfram alpha nem sabe como interpretá-lo. Quando eu faço 2 10 9, ele diz que tem 300000000 dígitos decimais. Isso é claramente muito grande para armazenar em um computador normal.2n2320000000002109300000000

O problema da parada permite pensar sobre a dificuldade relativa dos algoritmos. Isso nos permite saber que existem alguns algoritmos que não existem e que, às vezes, tudo o que podemos fazer é adivinhar um problema e nunca sabemos se o solucionamos.

Se não tivéssemos o problema da parada, ainda estaríamos procurando o algoritmo mágico de Hilbert, que introduz teoremas e resultados, sejam eles verdadeiros ou não. Agora sabemos que podemos parar de procurar e podemos nos esforçar para encontrar heurísticas e o segundo melhor método para resolver esses problemas.

ATUALIZAÇÃO: Apenas para abordar algumas questões levantadas nos comentários.

@Tyler Fleming Cloutier: O problema "sem sentido" surge na prova de que o problema da parada é indecidível, mas o que está no cerne da indecidibilidade é realmente ter um espaço de pesquisa infinito. Você está procurando um objeto com uma determinada propriedade e, se não existir, não há como saber quando você termina.

A dificuldade de um problema pode estar relacionada ao número de quantificadores que possui. Tentando mostrar que existe ( ) um objeto com uma propriedade arbitrária, você deve procurar até encontrar um. Se não existe, não há como (em geral) saber disso. É difícil provar que todos os objetos ( ) têm uma propriedade, mas é possível procurar um objeto sem a propriedade para refutá-lo. Quanto mais alternâncias existirem entre todos e existir, mais difícil será o problema.

Para mais informações, consulte a Hierarquia Aritmética . Qualquer coisa acima de é indecidível, embora o nível 1 seja semi-decidível.Σ0 00 0=Π0 00 0

Também é possível mostrar que existem problemas indecidíveis sem usar um paradoxo sem sentido, como o problema de Halting ou o paradoxo de Liars. Uma máquina de Turing pode ser codificada usando uma sequência de bits, ou seja, um número inteiro. Mas um problema pode ser codificado como um idioma, ou seja, um subconjunto dos números inteiros. Sabe-se que não há bijeção entre o conjunto de números inteiros e o conjunto de todos os subconjuntos dos números inteiros. Portanto, deve haver alguns problemas (linguagens) que não possuem uma máquina de Turing associada (algoritmo).

@Brent: sim, isso admite que isso é decidível para computadores modernos. Mas é decidível para uma máquina específica. Se você adicionar uma unidade USB com espaço em disco, ou a capacidade de armazenar em uma rede, ou qualquer outra coisa, a máquina mudou e o resultado ainda não se mantém.

Também é preciso dizer que muitas vezes o algoritmo diz "esse código será interrompido" porque ele falhará e ficará sem memória, e que a adição de um único bit extra de memória faria com que o código ter sucesso e dar um resultado diferente.

O problema é que as máquinas de Turing não têm uma quantidade infinita de memória. Nunca há um tempo em que uma quantidade infinita de símbolos seja gravada na fita. Em vez disso, uma máquina de Turing tem memória "ilimitada", o que significa que você pode continuar obtendo mais fontes de memória quando precisar. Computadores são assim. Você pode adicionar RAM, pen drives ou discos rígidos ou armazenamento em rede. Sim, você fica sem memória quando fica sem átomos no universo. Mas ter memória ilimitada é um modelo muito mais útil.


4
@Mehrdad Para qualquer definição razoável de "código de máquina mais rápido possível para um determinado programa", a pergunta faz sentido e a resposta é "Não pode haver esse compilador".
precisa saber é o seguinte

13
Ele também trabalha para encontrar o menor código de máquina possível para a saída, aquele com menos acessos de memória, etc. etc. Para programas gerais, encontrar qualquer transformação ideal é indecidível. Este é basicamente o teorema de Rice.
jmite

4
Como corolário ao ponto de ainda procurar o algoritmo mágico de Hilbert, sem o conceito intimamente relacionado de equivalência de Turing, ainda estaríamos discutindo se gotos ou código auto-modificador permitem uma computação mais poderosa, procurando formas de hardware computacionalmente mais poderosas , e os argumentos sobre qual é a melhor linguagem de programação seriam muito mais subjetivos, mesmo do que são agora.
sdenham

3
Até aparece em lugares que você não esperaria. Deseja escrever um compilador C ++ que rejeite todos os programas inválidos enquanto compila todos os válidos? Resolva o problema de parada primeiro - a metaprogramação de modelos C ++ é Turing-completa, portanto, saber se seus modelos são válidos ou não no caso geral exige resolvê-lo.
Mark

7
@Merhrdad: Seu exemplo de "simulação de todo o programa de computador" é um excelente exemplo de por que o problema da parada é tão importante. Para alguns programas, a simulação do programa não é tão direta quanto parece (por exemplo, veja a página da Wikipedia sobre parada). Se o problema pode ser enganando desta forma, você pode imaginar o quão difícil é explicar a alguém uma forma mais oculto (tais como o problema do anti-vírus)
Cort Ammon

49

Em termos práticos, é importante porque permite que você diga a seus chefes ignorantes "o que você está pedindo é matematicamente impossível".

O problema da parada e vários problemas completos do NP (por exemplo, o problema do vendedor ambulante) surgem muito na forma de "Por que você não pode simplesmente criar um programa que executa o X?" E você precisa ser capaz de dar uma explicação de por que é impossível ou inviável durante a vida útil restante do universo.

Observe que é possível projetar uma linguagem que não seja completa em Turing, para que possa ser analisada, proibindo a recursão e a iteração ilimitadas.




8
é possível projetar uma linguagem que não seja completa em Turing : Exemplo de uma linguagem completa não-Turing útil: SQL (na verdade, um SQL simplificado). Turing-completeness adicionaria automaticamente não-terminação ao idioma, algo que você provavelmente não deseja ao executar uma consulta db. (Embora, eu tenho medo todas as implementações SQL modernos oferecem Turing-completude de qualquer maneira)
Bakuriu

8
@FranciscoPresencia: eles usaram uma equipe de pesquisa, então o argumento geral ainda é válido.
RemcoGerlich

4
@MooingDuck: a coisa do Flickr não escolhe entre parques e pássaros, (tenta) confirmar um ou ambos. OU, não XOR.
Rickster

45

Você pode usar o algoritmo que detecta se uma lista vinculada faz um loop para implementar a Função Halting com complexidade de espaço de O (1).

Para fazer isso, você precisa armazenar pelo menos duas cópias do estado parcial do programa na memória, além da sobrecarga do programa de verificação. Portanto, em um determinado computador, você não pode testar todos os programas que podem ser executados nesse computador, apenas os programas executados em um computador menor com menos da metade da memória.

O problema de parada para um determinado computador de tamanho finito não pode ser resolvido nesse computador de tamanho finito. Só pode ser resolvido em um computador maior. (Isso é verdade para qualquer método, não apenas o que você propõe. Não darei uma prova formal, mas aqui está a essência. Se um computador C pode executar N programas diferentes dos quais pelo menos um P não termina , um computador V que pode testar se esses N programas param também deve executar N programas verificadores diferentes. Se C e V são o mesmo computador, P não é um dos N programas diferentes que V executa, portanto, o o computador deve executar pelo menos N + 1 programas diferentes, o que contradiz a suposição de que C executa N programas diferentes.)

M2M256.

Os números ilustram que pensar em um computador como uma máquina de estados finitos raramente é prático. O número de estados pode ser finito, mas é incompreensivelmente enorme. A única maneira de raciocinar sobre programas que não são de brinquedos é em abstrato, não enumerando estados, mas através do raciocínio lógico.

Então, excluindo programas paradoxais, o Problema da Parada é decidível

O paradoxo não vem do problema, mas da tentativa de solução. Para qualquer programa, existe um algoritmo que diz "sim" se o programa terminar e "não" se o programa não terminar. É trivial: um print "yes"ou print "no"fará. O problema é determinar qual chamar. A impossibilidade de resolver o problema de parada significa que não há algoritmo para fazer essa determinação. A razão pela qual a prova usa um argumento de diagonalização é que ela precisa mostrar que nenhumasolução funciona; para fazer isso, ele inicia a partir de uma solução supostamente arbitrária e mostra que deve perder alguns programas construindo um programa perdido. A diagonalização (o que você chama inadequadamente de “paradoxo”) está na construção, não no programa resultante. Os programas resultantes não são auto-referenciais.

Existe um resultado mais geral chamado teorema de Rice, que afirma que qualquer propriedade não trivialde programas é indecidível - qualquer propriedade que dependa apenas do comportamento do programa e não da maneira específica em que foi escrita (por exemplo, “o código-fonte consiste em menos de 42 caracteres?” é claramente decidível, enquanto “existe um programa cujo código fonte consiste em menos de 42 caracteres e que retorna o mesmo resultado para todas as entradas? ”não é, nem“ esse programa nunca produz alguma coisa? ”). Parar é apenas um exemplo. É importante porque geralmente aparece na prática (geralmente, queremos saber se um programa retornará um resultado em tempo razoável, considerando os recursos finitos do computador em que está sendo executado, mas como isso raramente é praticamente responsável, estamos dispostos a aceitar a pergunta mais simples sobre se o programa terminará com tempo e memória suficientes).


2
Eu pensaria que a questão de "existe um programa que produziria a mesma saída que um determinado programa independente (nenhuma entrada além do próprio programa), mas em menos tempo, incluindo o tempo para carregar o programa ?" seria decidível, embora intratável, uma vez que a duração máxima dos programas candidatos seria limitada, assim como o tempo para testar cada um.
Supercat 10/14 /

@supercat Sim, esta propriedade é decidível. Não é decidível para o caso geral de um programa que recebe entrada.
Gilles

1
Fiquei com a impressão de que o Problema de Parada normalmente supõe que todas as entradas que um programa receberá no decorrer de sua execução estejam incluídas no programa. Se alguém tivesse uma máquina que pudesse resolver magicamente o Problema da Parada para qualquer programa que alimentasse uma sequência específica de entrada, tal máquina poderia determinar se um programa seria interrompido para todas as entradas de comprimento limitado?
Supercat

3
@supercat Não, o oráculo para todas as entradas seria um passo a mais do que o oráculo para todas as entradas. Isso faria uma boa pergunta para este site ... de fato , temos . A propósito, meu modelo mental padrão é funções recursivas, em que "entrada" significa "argumento" e executar um programa significa aplicá-lo a um argumento; você está certo de que minha afirmação é falsa em um contexto que é sobre máquinas de Turing, eu atualizarei.
Gilles

28

Parece-me que o Problema da Parada não passa de um chamado "paradoxo", uma contradição auto-referente (pelo menos cíclica) da mesma maneira que o paradoxo do mentiroso. A única conclusão que ele faz é que a função Halting é suscetível a essas perguntas malformadas

Não, não é disso que se trata o problema da parada. Paradoxos como o paradoxo do mentiroso não são verdadeiros ou falsos, eles simplesmente não fazem sentido. Um algoritmo determinístico, por outro lado, será interrompido para uma determinada entrada ou será executado para sempre. A função halts(program, input)possui um valor determinístico perfeitamente bem definido para cada programa, para cada entrada. Nós simplesmente não podemos decidir isso por nenhum programa. Ou, mais precisamente: não podemos escrever um programa que o decida para cada par de programa / entrada.

Um exemplo semelhante (talvez menos abstrato) é a função "ocupado castor" , definida intuitivamente comoΣ(n): =nnnnΣ(n)


2
Vale a pena notar que, na forma comum, o Paradoxo do Mentiroso faz referência explícita a si mesmo, mas o mesmo problema pode surgir, mesmo que não. A resposta à afirmação é formada pegando o texto: "A resposta à afirmação é formada pegando o texto e inserindo após a primeira vírgula uma cópia entre aspas, não?" e inserindo após a primeira vírgula uma cópia entre aspas simples, não? Tal afirmação não é explicitamente autorreferencial, mas refere-se à veracidade de uma afirmação que é idêntica a cada caractere.
Supercat

2
@supercat: hein, acho que nunca vi um quine em inglês antes ...
SamB

@ SamB: Eu já vi alguns, mas decidi tentar uma formulação original que, embora mais detalhada do que alguns, leia (talvez) mais naturalmente.
Supercat #

24

Não entendo por que o problema da parada é tão frequentemente usado para descartar a possibilidade de determinar se um programa é interrompido. O artigo da Wikipedia explica corretamente que uma máquina determinística com memória finita interromperá ou repetirá um estado anterior. Você pode usar o algoritmo que detecta se uma lista vinculada faz um loop para implementar a Função Halting com complexidade de espaço de O (1).

Primeiro, sim, teoricamente , faz sentido ver um computador real, que possui memória finita, como uma máquina de estados finitos. Mas, na prática, o número de estados de um computador real é tão grande que os computadores reais são muito melhor modelados por máquinas de Turing ou outros modelos de computação de estado infinito.

E segundo, mesmo teoricamente , faz sentido ver um computador moderno como uma máquina de estados infinitos. Uma máquina de Turing não possui uma fita infinita; ela possui uma fita que sempre pode ser estendida quando a máquina fica sem memória. E não é exatamente isso que podemos fazer com computadores reais? (E se o espaço de endereço da CPU acabar, podemos usar a nuvem etc.)

Parece-me que o Problema da Parada não passa de um chamado "paradoxo", uma contradição auto-referente (pelo menos cíclica) da mesma maneira que o paradoxo do mentiroso. A única conclusão que é feita é que a função de parada é suscetível a essas perguntas malformadas. Portanto, excluindo programas paradoxais, o Problema da Parada é decidível. Então, por que a consideramos evidência do contrário?

HPxHPx

A prova de Turing da indecidibilidade do problema da parada usa um truque que é semelhante ao paradoxo do mentiroso, sim. Um paradoxo é frequentemente definido como uma aparente contradição, e algumas pessoas inferem disso que um paradoxo não é, portanto, uma contradição real . No entanto, o paradoxo de Russel (a contrapartida formal da teoria dos conjuntos do paradoxo do mentiroso) mostrou uma contradição real na matemática, e a prova da indecidibilidade do problema da parada usa uma contradição real para sua prova por contradição.


1
+1 para explicar a relação entre computadores reais, máquinas de estados finitos e máquinas de Turing, o que é uma parte significativa da configuração da pergunta.
precisa saber é o seguinte

1
Você despertou meu interesse. Qual é a diferença entre uma aparente contradição e uma contradição real?
Brent

Outra maneira de colocar isso: de um modo geral, a programação não assume recursos limitados. A maioria dos algoritmos que projetamos ou programas que escrevemos não são escritos para usar uma quantidade limitada, ou mesmo fixa, de recursos de computação, a menos que os projetemos especificamente para isso. (por exemplo, isso geralmente é necessário na programação de sistemas embarcados).
reinierpost

3
@Brent. Muitos paradoxos não são contraditórios, mas apenas à primeira vista. Quando olhamos mais de perto, verifica-se um erro no raciocínio, ou alguma palavra cujo significado mudou ligeiramente ao usá-lo em um contexto diferente, ou algo semelhante. Às vezes, porém, um paradoxo traz à tona uma contradição real.
11118 Hoopje

Estou estudando esse problema desde o meu OP. O teorema da incompletude de Gödel implica que é sempre possível criar algum paradoxo, independentemente do sistema de lógica em uso?
Brent

17

jmite respondeu à pergunta muito bem. Deixe-me acrescentar uma pequena nota lateral sobre a similaridade percebida com o "Paradoxo do Mentiroso", que eu acho que é causada pelo uso de um mecanismo de auto-referência.

A auto-referência não é paradoxal!

A auto-referência é uma ferramenta realmente útil na computação (que um algoritmo pode se referir ao seu código, reflexão ) e linguagem humana (que podemos nos referir a nós mesmos, autoconsciência ).

O problema que causa o paradoxo do mentiroso não é a auto-referência, ele está tentando usar o predicado de verdade para uma linguagem (formal) dentro da linguagem. Isso causará problemas mesmo sem a auto-referência; não precisamos da capacidade de usar a auto-referência para obter um paradoxo: a auto-referência pode ser eliminada! . Isso tornaria a frase menos agradável e concisa, mas não é difícil de fazer. É essencialmente como o teorema do ponto fixo de Kleene é comprovado. O que o Paradoxo do Mentiroso implica é que a verdade das afirmações em uma linguagem (formal) é transcendental a essa linguagem, não que a auto-referência seja problemática.


Parece-me que seu desconforto não se deve à indecidibilidade do problema de parada (para máquinas de Turing), mas à aceitação das máquinas de Turing como modelo teórico para computadores. Normalmente (embora nem sempre) máquinas de Turing (e modelos equivalentes de computação como máquinas de acesso aleatório ) são muito úteis para discutir a computação em computadores reais do que os autômatos finitos e existem boas razões para isso (lembre-se de que uma máquina de Turing não possui uma quantidade infinita de memória, possui uma quantidade ilimitada de memória e estas são coisas diferentes: ilimitado significa que podemos fornecer à máquina mais memória quando ela precisar, e não que ela use uma quantidade infinita de memória).

Claro, se você quer pensar em computadores como autômatos finitos, e isso faz sentido para o seu propósito, então o problema de parada para autômatos finitos é decidível (e por decidível queremos dizer decidível por uma máquina de Turing, não por autômatos finitos). Entretanto, não é isso que as pessoas normalmente querem dizer quando usam o problema de parada, elas querem dizer o problema de parada para as máquinas de Turing.

s2s


14

o problema da parada introduziu um novo conceito matemático de "indecidibilidade" que não existia anteriormente em matemática. era uma prova ("aparentemente paradoxal") de que alguns problemas não têm "provas". está ligado ao conceito godeliano de improvabilidade. O teorema de Godels precedeu a formulação do problema de parada por Turing por alguns anos. O resultado de Godels era considerado bastante abstrato na época e era conhecido apenas por pesquisadores e especialistas. A formulação de Turings mostrou que o princípio da indecidibilidade estava relacionado a práticas / pragmáticas / aplicadas em ciência da computação, como determinar se programas arbitrários são interrompidos e é considerado um conceito muito menos teórico, que aparece em desafios modernos como " (um desafio se os computadores podem descobrir teoremas) e comprovar o encerramento do programa.

Outro ângulo interessante é que existem alguns problemas muito antigos na teoria dos números (diofantinos) originários dos gregos que não são comprovados por milênios. há um resultado relacionado que perguntas gerais sobre equações diofantinas são indecidíveis chamadas Hilberts 10o problema / teorema . Hilbert viveu na virada do século XX e propôs como um programa de pesquisa que a matemática pudesse encontrar abordagens sistemáticas para os problemas de matemática. esse desafio / plano foi seriamente atingido pela descoberta da indecidibilidade algumas décadas depois. a indecidibilidade continua sendo uma área de pesquisa muito avançada e a fronteira entre problemas indecidíveis e decidíveis provavelmente sempre estará sob estudo e análise adicionais.


14

Você parece estar confundindo a prova clássica baseada em "auto-referencial" de que o problema de Halting não pode ser resolvido com o próprio problema de Halting (também conhecido como Halt).

Esse programa auto-referencial - o programa que interrompe se e somente se não parar - é construído para facilitar a prova de que você não pode resolver o Halt. O fato de provarmos que X é impossível através da técnica Y não implica que Y é a única razão pela qual não podemos resolver X.

Dito de outra forma, não apenas não podemos resolver Halt, como também não podemos detectar que um programa é o tipo de programa que não podemos determinar se ele pára, exceto uma medida grosseira como "se demorar mais de um minuto para executar, finja não para ".

Se você começar do problema de parada e reduzir outros problemas, finalmente chegará ao ponto em que reduziu quase todas as perguntas sobre os programas. Terminamos com o Teorema de Rice:

Seja S alguma propriedade não trivial de 1 o que uma Máquina de Turing aceita. Isso significa que há pelo menos uma Máquina de Turing que aceita entrada com a propriedade S e outra que não.

Então, é indecidível se uma determinada máquina de Turing T aceita entrada com a propriedade S.

Você quer saber se uma máquina de Turing aceita números inteiros? Indecidível.

Você quer saber se uma máquina de Turing aceita aceita seqüências aritméticas? Indecidível.

Você pode argumentar sobre as tripas da Turing Machine em geral. Você pode raciocinar sobre uma máquina de Turing específica e provar se ela irá parar / aceitar alguma sequência / etc. Mas você não pode saber se sua técnica funcionará na próxima máquina de Turing que você a alimentar.


1 Por property ofele, não inclui o mecanismo de como é aceito - apenas o que é aceito. "Ele aceita em 100 etapas ou menos" é uma propriedade como aceita, não do que é aceito.


Você pode explicar o que é uma "propriedade", pois a interpretação ingênua que se pode fazer provavelmente estará incorreta.
Rick Decker

@ Rick Acho que a nota de rodapé cobre agora?
Yakk

7

Você está certo de que o problema da interrupção, como comumente apresentado e declarado, é um mero problema. Isso não prova que não pode haver uma função de parada de três valores ('paradas', 'loops', 'não sei') que, na prática, sempre retorna 'paradas' ou 'loops' e retorna apenas 'don' não sei 'para caixas de canto especialmente construídas, por exemplo.

Duas razões pelas quais o problema da parada é significativo:

1) Este é um dos primeiros problemas comprovadamente indecidíveis. Mesmo que hipoteticamente houvesse apenas um "não sei", ainda seria de grande interesse matemático.

2) Alguns problemas se reduzem ao problema de parada, em que um invasor mal-intencionado pode fornecer o caso a ser analisado. Isso nos obriga a aceitar que pode haver casos válidos que ainda precisamos rejeitar.

Como uma reflexão tardia para o segundo ponto, a análise de software é um problema difícil, embora muito progresso tenha sido feito tanto na análise quanto no design da linguagem, a fim de facilitar a análise. Se você pode mostrar que uma determinada tarefa é semelhante à análise de software, sim, é difícil com letra maiúscula H. 'É impossível porque isso equivale a resolver o problema de parada', embora tecnicamente errado ou irrelevante em muitos casos, é frequentemente usado taquigrafia para esta observação.


5

Há um argumento contrário apresentado por Eric Hehner em uma série de artigos que argumentam que a insolubilidade do Problema da Parada é comumente mal compreendida. Os artigos "Epimenides, Gödel, Turing: um eterno emaranhado dourado", "Problemas com o problema de parada", "Reconstruindo o problema de parada" e "Problema de parada" podem ser encontrados aqui . Para que essa resposta não seja "apenas um link", tentarei resumir uma de suas conclusões, mas não o argumento.

f(0 0)=1f(0 0)=2hh(M)MHhh


3
Eu não sigo. A função de parada é um predicado perfeitamente bem definido e válido - para qualquer máquina de Turing e qualquer entrada, a máquina pára ou faz um loop. (Você não tem uma referência adequada; qual o papar você está resumindo)
Raphael

@ Rafael Que a função seja bem definida é geralmente aceita como um fato. O ponto de vista de Hehner é diferente e é explicado em seus trabalhos. Vou editar minha resposta para fornecer os nomes dos papéis.
Theodore Norvell

Vamos apenas dizer que qualquer que seja o argumento de Hehner é [Eu não li os jornais] que acabou no controverso menos em sua primeira leitura / aproximação: ' cs.toronto.edu/~hehner/Shallitaffair.pdf e recursed.blogspot.com/ 2013/10 / eric-hehner-replies.html
Fizz

E não está claro, dada a natureza e o número de citações, que os artigos de Hehner (sobre isso) têm que quaisquer leituras adicionais (de seus trabalhos sobre isso) valem a pena.
Fizz

Suas provas parecem muito sólidas e apontam que é apenas uma repetição de coisas tolas que você pode fazer na filosofia, como tentar analisar a seguinte declaração auto-referencial por sua veracidade: "Esta frase é falsa". que se verdadeiro significa que é falso, o que significa que era realmente verdade, não que o torne falso de novo ... então isso parece uma questão filosófica naval não tão importante. en.wikipedia.org/wiki/Liar_paradox, o paradoxo da parada pode ser um caso de cientistas que não conversam com filósofos.
James Wakefield

3

Eu gostaria de oferecer uma explicação diferente da importância do problema da parada que envolve pessoas e não máquinas.

É a última palestra do curso de Estrutura e Interpretação do MIT 1986 ; o professor pergunta "Há alguma pergunta?" e se prepara para encerrar a palestra, quando um dos alunos pergunta: "Esta é a última pergunta?"

Pense nisso por um momento. Como o professor pode responder isso? Se o aluno decidir contradizer o professor, não há resposta válida que o professor possa dar - isso é exatamente como o problema da interrupção.

Estamos acostumados a pensar abstratamente sobre o problema da parada, usando funções e máquinas, mas é muito mais profundo do que isso. Fundamentalmente, isso significa que existem perguntas perfeitamente válidas que não podem ser respondidas.

PS: Se você não sabe do que estou falando, assista, é incrível.


Mas se eu executasse doesHalt(programCode, input);, o programa não pode saber o que a doesHaltfunção retorna. É impossível que o programa seja interrompido após a doesHaltfunção ter avaliado.
Tvde1

0

Eu posso escrever facilmente um programa que, dado uma entrada n, produz o menor primo p> n, de modo que p + 2 também seja um primo, ou roda para sempre, se esse p não existir. Se você puder resolver o problema para prever se meu programa é interrompido para cada entrada, você acabou de resolver a Conjectura Twin Prime.

É bem possível que essa conjectura seja indecidível; nesse caso, teríamos um programa direto em que o programa de interrupção falha.


Eu acho que você está misturando "Turing-indecidível" com uma noção muito diferente; de fato, você pode ter tropeçado na "mesma velha" falácia por acidente. Veja também aqui e aqui .
Raphael
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.