Ich lese gerade einen Kommentar zu Milners "Der Einsatz von Maschinen zur Unterstützung strenger Beweise" von Mike Gordon durch. In diesem Artikel erklärt er, wie LCF aus den Ideen der Denotationssemantik von Dana Scott und Strachey geboren wurde.
Es scheint mir, dass die Floyd-Hoare-Logik nicht ausreichte, um LCF zu entwickeln, aber ich bin mir nicht sicher, warum dies der Fall ist. Am Ende beschäftigen wir uns in der Hoare-Logik mit Programmzuständen, die einige Voraussetzungen erfüllen und das durch eine Beziehung einer gewissen Nachbedingung entsprechen und ich kann eine Formel dafür bereitstellen. Wikipedia behauptet, dass die Bezeichnungssemantik:
ist ein Ansatz zur Formalisierung der Bedeutungen von Programmiersprachen durch Konstruktion mathematischer Objekte (Bezeichnungen genannt), die die Bedeutungen von Ausdrücken aus den Sprachen beschreiben.
Ich kenne einige Intuitionen darüber, wie beispielsweise Rekursion in diesem Ansatz als fester Punkt einer Beziehung modelliert wird, während ich mich in der Hoare-Logik nicht wirklich daran erinnerte, mich mit Rekursion befasst zu haben. Dennoch scheinen beide Ansätze zu versuchen, Beziehungen zwischen Ein- und Ausgängen unter Verwendung mathematischer Beziehungen zu beschreiben.
Frage
Was hat also den Unterschied zwischen Hoare-Logik und Denotationssemantik ausgemacht? Verwaltet die Denotationssemantik einige Komplexitäten von Programmen besser? Wenn ja, veranschaulichen Sie dies bitte anhand eines Beispiels.
Vielleicht ist das folgende Zitat von Milner, das sich auf die Denotationssemantik bezieht, interessant, um Ihre Antwort zu leiten:
Ich könnte die Syntax einer Programmiersprache in dieser Logik aufschreiben und die Semantik in die Logik schreiben.