O exemplo de Dijkstra de um programa ambíguo


12

Saudações. Dijkstra escreveu que mesmo algumas linhas de código aparentemente simples poderiam ser irremediavelmente ambíguas. Em pelo menos um trabalho, que não consigo encontrar agora para salvar minha vida, ele deu um pequeno exemplo de programa para demonstrar essa ambiguidade. Alguém pode me apontar para um artigo dele onde ele inclui um desses exemplos?

Respostas:


11

Leia isso:

http://en.wikipedia.org/wiki/Halting_problem#Recognizing_partial_solutions

http://www.cs.ucsb.edu/~pconrad/cs40/08S/notes/ possui uma boa cobertura; procure por "problema de parada"

Existem várias formas da contradição essencial de parada.

def halts( code_block ):
    # Some magical code

def whistler():
    while halts(whistler): 
        sys.whistle( 1 )

O "assobiador" apita zero, uma vez ou um número infinito de vezes?

Se a halts()função determinar que a função whistlerparece parar, ela whistlernão poderá parar.

Se a halts()função determinar que a função whistlernão aparece parada, ela será whistlerinterrompida.

Portanto, a halts()função não pode existir.


4
Você esqueceu a terceira opção, onde ele retorna FILE_NOT_FOUND;)
FrustratedWithFormsDesigner

2
Obrigado! O que Dijkstra estava descrevendo no jornal que li não era o problema da parada. São apenas algumas linhas de código simples, mas você não pode dizer o que isso significa. O contexto é que Dijkstra está falando sobre métodos que ele usa para demonstrar ao público que a programação é difícil, portanto os programadores devem ser humildes. Note que o jornal não é, lamento dizer, "O humilde programador". :)
Dijkstra Reader


Obrigado novamente. Triste dizer que não é esse. No artigo a que me refiro, Dijkstra diz especificamente que a programação é difícil, mesmo para pessoas inteligentes, temos que respeitar o seguinte: "Por exemplo, o que o pequeno programa a seguir faz?"
Dijkstra Reader

Provavelmente não cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html . Mas eu levanto isso como uma citação comum de quão difícil é a programação.
S.Lott

2

Tem certeza de que o jornal foi escrito por Dijkstra? Reflections on Trusting Trust de Ken Thompson parece que poderia ser o que você estava pensando. Ele demonstra como programas absolutamente simples, diretos e corretos podem acabar fazendo algo absolutamente inesperado que não é visível na fonte. Mesmo que não seja o que você estava pensando, é um artigo que vale a pena ler.

Indo em uma direção diferente, se você quiser excelentes exemplos de programas curtos com comportamento surpreendente, o concurso C secreto é ótimo. Por exemplo, olhe o vencedor de 2008 . O desafio era escrever um programa de linha de comando para esvaziar parte de uma imagem, de modo que a imagem fosse visualmente apagada perfeitamente, mas o arquivo retém algumas informações sobre a parte editada da imagem. E de maneira que seu código possa passar na revisão. (Você pode escolher o formato em que a imagem é armazenada.)


Obrigado! Sim, é definitivamente um artigo de Dijkstra a que estou me referindo.
Dijkstra Reader
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.