Como provar o teorema do programa estruturado?

7

Wikipedia :

O teorema do programa estruturado [...] afirma que qualquer [...] algoritmo pode ser expresso usando apenas três estruturas de controle. Eles são

  • Executando um subprograma e depois outro subprograma (sequência)
  • Executando um dos dois subprogramas de acordo com o valor de uma expressão booleana (seleção)
  • Executando um subprograma até que uma expressão booleana seja verdadeira (iteração)

Este teorema é desenvolvido nos seguintes artigos:

  • C. Böhm, "Em uma família de máquinas de Turing e a linguagem de programação relacionada", ICC Bull., 3, 185-194, julho de 1964.
  • C. Böhm, G. Jacopini, "Diagramas de fluxo, máquinas de Turing e idiomas com apenas duas regras de formação", Comm. of the ACM, 9 (5): 366-371,1966.

Infelizmente, o primeiro está praticamente indisponível, e o segundo, além de um pouco enigmático (pelo menos para mim), refere-se ao primeiro, por isso tenho problemas para entender a prova. Alguém pode me ajudar? Existe um papel ou livro moderno que apresente a prova? Obrigado.


ATUALIZAR

Para ser exato, eu gostaria de entender a segunda parte do documento do CACM (seção 3). Os autores escrevem na seção 1 o seguinte:

Na segunda parte do artigo (por C. Böhm), ​​alguns resultados de um artigo anterior são relatados [8] e os resultados da primeira parte deste artigo são usados ​​para provar que toda máquina de Turing é redutível em, ou em um sentido determinado é equivalente a um programa escrito em um idioma que admite como formação rege apenas composição e iteração.

Aqui [8] refere-se ao documento indisponível do ICC Bulletin. É fácil ver que a citação acima da Wikipedia se refere a esta segunda parte do artigo do CACM (a máquina de Turing serve como uma definição precisa de algoritmos; "composição" significa sequência; uma iteração pode substituir uma seleção).

kol
fonte
Você pode ler a entrada da Wikipedia sobre o idioma primitivo P '' descrito no primeiro artigo.
res
11
BTW, nesse primeiro artigo, Böhm realmente forneceu um programa P '' explícito para cada um de um conjunto de funções básicas que juntas servem para calcular qualquer função computável. (A citação na sua "atualização" refere-se ao idioma P ''.)
res
11
@res Sim, eu poderia encontrar informações sobre P '', mas ainda gostaria de ler o artigo original do ICC Bulletin. Martin Davis escreveu uma breve resenha sobre o assunto: "O autor prova que todas as funções recursivas parciais podem ser computadas por uma máquina de Turing de um tipo particularmente simples. A prova, fazendo uso das técnicas da linguagem de programação, é pura e breve". Isto faz-me curioso :)
kol
11
Se for útil, aqui está um link do WorldCat da UCLA / SRLF (clique no item "Bibliotecas mundiais" nessa página) mostrando muitas bibliotecas - incluindo algumas na Europa - que possuem cópias do Boletim do Centro de Computação Internacional . (Que eu criei que artigo da Wikipedia sobre P '' depois arriscando no papel de Böhm 1964 durante a pesquisa no SRLF cerca de dez anos atrás.)
res
@res Obrigado! Enviei uma solicitação ao Serviço de Entrega de Documentos da UCLA / SRLF: library.ucla.edu/service/…
kol

Respostas:

10

O teorema de Böhm-Jacopini diz essencialmente que um programa baseado em 'goto' é uma funcionalidade equivalente a um composto por 'while' e 'if'.

Esboço da prova com base nas seguintes notas de aula :

Digamos que você tenha um programa que consiste em uma sequência de instruções ; prefixe cada instrução com um rótulo e atualize as instruções goto existentes para apontar para os locais corretos. Declare uma variável de local, e agrupe as instruções prefixadas em um loop while que continuará até a última instrução ser alcançada, .SEuSEueuEu:SEueu1 1enquanto(euM) Faz S

Aplique as seguintes regras de reescrita em :S

  • Regra Goto: Substitua poreuEu vamos para eujE se (eu=Eu) então euj
  • Regra If-goto: Substitua poreuEu:E se (cond) então vamos para eujE se (eu=Eu(cond)) então euj outro eueu+1 1
  • Caso contrário, regra: Substitua poreuEu:SEuE se eu=Eu então SEu,eueu+1 1

O programa resultante fica então livre de declarações goto mostrando a correspondência entre os dois paradigmas.

Uma prova mais formal é fornecida em sua segunda referência .

Atualizar

Depois de estudar o artigo com mais detalhes, esta é minha interpretação:

Com base nas definições do CACM, permita que seja a classe de máquinas de Turing representadas pelo idioma que abrange os diagramas de fluxo. Seja seja a classe de máquinas de Turing representada pela linguagem que cobre a transformação coberta acima.B=D(α,{λ,R})PB=E(α,{λ,R})P

De acordo com o CACM, o autor deseja provar que, se uma máquina de Turing existe na família de máquinas de Turing descrita por , existe uma máquina de Turing correspondente na família de máquinas de Turing descrito por .MBMB

Esboço da prova do autor: Ele faz isso usando o relacionamento derivado e (definição (5)) e depois define o relacionamento . Para cada componente de ele desenha um mapeamento individual com os de . Assim, ao estabelecer a ponte entre e através de o autor comprova .MBME()ME()E()E()MME()MBMB

GEL
fonte
Muito obrigado! Na segunda parte do artigo do CACM (seção 3), os autores conectam esses resultados à linguagem P '' (definida no artigo do ICC Bulletin) e às máquinas de Turing. Você gostaria de escrever algumas palavras sobre essa conexão também?
kol
Eles escrevem "Na segunda parte do artigo, os resultados [...] da primeira parte são usados ​​para [...] provar que toda máquina de Turing é redutível ou, em um determinado sentido, é equivalente a um programa escrito. em um idioma que admite como formação rege apenas composição e iteração ". A citação acima da Wikipedia refere-se a esta segunda parte, e essa é a parte do artigo do CACM que eu gostaria de entender.
kol