Ich bin mit der Antwort von Adrej zufrieden, aber ich würde gerne noch näher darauf eingehen.
So starten Sie mit, denotational Semantik will etwas sagen wie „die Bedeutung dieser Notation ist , dass“. Ein echter Semantiker möchte sich vorstellen, dass die Bedeutungen das sind, was in unserem Geist existiert und die Notationen nur eine Möglichkeit sind, diese Bedeutungen auszudrücken. Daraus folgt die Anforderung, dass die Denotationssemantik kompositionell sein muss. Wenn die Bedeutungen primär und die Notationen sekundär sind, haben wir keine andere Wahl, als die Bedeutungen größerer Notationen als Funktionen der Bedeutungen ihrer Bestandteile zu definieren.
Wenn wir diesen Standpunkt akzeptieren, muss eine gute Denotationssemantik die Bedeutungen erfassen, von denen wir annehmen, dass sie wir im Kopf haben. Jede kompositorische Semantik würde nicht unbedingt in die Rechnung passen. Wenn ich eine semantische Definition für eine Komposition vorstelle und niemand zustimmt, dass darin eine Bedeutung angegeben ist, die er in seinem Kopf hat, dann nützt das wenig. Die Spielesemantik ist derzeit in dieser Situation. Es ist eine kompositorische Definition und technisch ziemlich stark, aber nur sehr wenige Menschen sind sich einig, dass es etwas mit den Bedeutungen zu tun hat, die sie im Kopf haben.
Allerdings hat jede Zusammensetzungsdefinition verschiedene technische Vorteile. Wir können es verwenden, um Äquivalenzen oder andere Eigenschaften durch Induktion auf die Syntax von Begriffen zu überprüfen. Wir können es verwenden, um die Richtigkeit von Beweissystemen zu überprüfen, indem wir wiederum die Syntax von Begriffen einführen. Wir können die Korrektheit von Compilern oder Programmanalysetechniken überprüfen (die ihrer Natur nach durch Induktion der Syntax definiert sind). Eine vollständig abstrakte semantische Definition bietet noch mehr technische Vorteile. Sie können damit zeigen, dass zwei Programme nicht gleichwertig sind, was man mit keiner beliebigen Kompositionssemantik machen kann. Eine vollständig definierbare semantische Definition ist noch besser. Hier haben die semantischen Domänen genau das, was Sie in der Programmiersprache ausdrücken können (mit einigen Vorbehalten). Sie können also die Werte in den Domänen auflisten, um zu sehen, welche Werte vorhanden sind. Dies ist mit syntaktischen Notationen nur schwer möglich. Aus all diesen Gründen punktet die Spielesemantik hervorragend.
Die Definitionen der Kompositionssemantik haben jedoch im Laufe der Jahre an Bedeutung verloren. Robin Milner und Andy Pitts haben eine Reihe von " Operational Reasoning " -Techniken entwickelt, die ausschließlich auf der Syntax basieren, aber die operationale Semantik verwenden, wo immer dies für die Erörterung des Verhaltens erforderlich ist. Diese betrieblichen Argumentationstechniken sind Low-Tech. Keine ausgefallene Mathematik. Keine unendlichen Objekte. Wir können sie Studenten beibringen und jeder kann sie benutzen. Viele Leute fragen sich, warum wir überhaupt eine Denotationssemantik brauchen. (Martin Berger ist wahrscheinlich in diesem Lager.)
Persönlich habe ich kein Problem damit, viele Werkzeuge in meinem Werkzeugkasten zu haben. Denotationstechniken können bei einigen Problemen besser und Operationstechniken bei anderen besser abschneiden. Die Forscher, die die Theorie entwickeln, könnten besser auf den einen oder anderen Ansatz abgestimmt sein. Ziemlich oft können wir die Erkenntnisse in einem Ansatz entwickeln und diese Erkenntnisse auf den anderen Ansatz übertragen. (Viele Arbeiten von Andy Pitts sind von dieser Art. Die relationale Parametrizität wurde in der denotationalen Umgebung entwickelt, aber er kann herausfinden, wie man sie als operationale Argumentation wiedergibt. Wenn ich sie mir anschaue, sage ich: "Wow, hätte ich nie dachte, das wäre möglich. "Separation Logic geht auch in diese Richtung. Steve Brookes gab einen 60-seitigen Zuverlässigkeitsnachweis für Concurrent Separation Logic unter Verwendung der Denotationssemantik.
Operative Ansätze punkten auch dann, wenn die Programmiersprachen sehr ausgefallen sind und alle Arten von Loop-Typen höherer Ordnung zur Verfügung stehen. Wir haben vielleicht keine Ahnung, wie man solche Dinge mathematisch modelliert. Oder die mathematischen Standardmodelle könnten sich unter dem Stress der Irritation als inkonsistent herausstellen. (Siehe beispielsweise "Polymorphismus ist keine Mengenlehre" von Reynolds.) Operative Ansätze, die ausschließlich auf der Syntax beruhen, können all diese mathematischen Probleme übersehen.
Ein weiterer Ansatz, der zwischen operationellen und denotationalen Ansätzen liegt, ist die Realisierbarkeit . Anstatt wie bei operativen Ansätzen mit syntaktischen Begriffen zu arbeiten, verwenden wir zum Teil eine andere Form von mathematischen Repräsentanten. Diese Repräsentanten können möglicherweise nicht als echte denotationale "Bedeutungen" bezeichnet werden, aber sie wären zumindest etwas abstrakter als syntaktische Ausdrücke. Zum Beispiel können wir für die polymorphe Lambda-Rechnung zunächst untypisierten Begriffen eine Bedeutung geben (in einigen Modellen der untypisierten Lambda-Rechnung) und sie dann als Repräsentanten ("Realisierer") verwenden, um eine Art von "operativem Denken" in kleinen Schritten durchzuführen abstraktere Ebene.
Lassen Sie es also einen gesunden Wettbewerb zwischen den Ansätzen von Denotation, Operation und Realisierbarkeit geben. Es ist kein Schaden.
Andererseits könnte es auch zu einem "ungesunden" Wettbewerb zwischen den verschiedenen Ansätzen kommen. Menschen, die mit einem Ansatz arbeiten, sind möglicherweise so eng mit diesem verbunden, dass sie den Sinn der anderen Ansätze möglicherweise nicht erkennen. Im Idealfall sollten wir alle die Stärken und Schwächen der verschiedenen Ansätze kennen und eine wissenschaftliche Einstellung zu ihnen entwickeln, auch wenn sie nicht unsere individuellen Favoriten sind.