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.