Estou lendo um comentário sobre Milner, "O uso de máquinas para ajudar em provas rigorosas", de Mike Gordon. Neste artigo, ele explica como LCF nasceu das idéias da semântica denotacional de Dana Scott e Strachey.
Parece-me que a lógica Floyd-Hoare não foi suficiente para o desenvolvimento da LCF, mas não sei por que esse é o caso. No final, na lógica de Hoare, lidamos com estados de programa que satisfazem alguma pré-condição e que, através de uma relação está de acordo com alguma pós-condição e eu posso fornecer uma fórmula para isso. A Wikipedia afirma que a semântica denotacional:
é uma abordagem para formalizar os significados das linguagens de programação, construindo objetos matemáticos (chamados de denotações) que descrevem os significados das expressões das linguagens.
Estou familiarizado com algumas intuições sobre como, por exemplo, a recursão é modelada nessa abordagem como um ponto fixo de alguma relação, enquanto na lógica Hoare não me lembrava realmente de lidar com a recursão. Ainda assim, ambas as abordagens parecem tentar descrever as relações entre entradas e saídas usando relações matemáticas.
Questão
Então, o que fez a diferença entre a lógica de Hoare e a semântica denotacional? A semântica denotacional gerencia melhor algumas complexidades de programas? Nesse caso, ilustre com um exemplo.
Talvez a seguinte citação de Milner referente à semântica denotacional seja interessante para guiar sua resposta:
Eu poderia escrever a sintaxe de uma linguagem de programação nessa lógica e escrever a semântica na lógica.
Respostas:
Não sei por que as pessoas não desenvolveram lógicas Hoare para lambda-calculi anteriormente. O primeiro trabalho para acertar foi Honda e cols.
Uma lógica de programa de composição para funções polimórficas de ordem superior
Houve algumas tentativas anteriores antes disso, mas elas não resolveram o problema, por exemplo: como você denota o valor de um programa funcional? Que parte da sintaxe corresponde ao construtor do espaço de funções? Há algumas pequenas coisas que precisam ser acertadas.
Deixe-me especular: talvez a questão principal seja que a lógica de Hoare geralmente se preocupa com a computação com estado. Se você combinar funções de estado e de ordem superior, precisará imediatamente lidar com o alias, por exemplo, programas como
Este trabalho foi implementado no Coq por A. Charguéraud em seu trabalho , e que também é usado na semântica do Javascript agora.
fonte