Welche Fragen kann die Bezeichnungssemantik beantworten, die die Betriebssemantik nicht beantworten kann?

14

Ich bin mit der operativen Semantik (sowohl in kleinen als auch in großen Schritten) zur Definition von Programmiersprachen vertraut. Ich interessiere mich auch für das Erlernen der Denotationssemantik, bin mir aber nicht sicher, ob sich die Mühe lohnt. Werde ich das gleiche Material nur aus einer anderen Perspektive lernen, oder gibt es Erkenntnisse, die ich nur durch das Verstehen der Denotationssemantik gewinnen kann?

Gartenkopf
quelle

Antworten:

11

Es gibt keine echte Übereinstimmung, die die Denotationssemantik charakterisiert (siehe auch diesen Artikel), außer dass sie kompositorisch sein muss . Das bedeutet, dass, wenn die semantische Funktion ist, Programme ihrer Bedeutung , etwa die folgende muss für alle -ary-Programmkonstruktoren und alle Programme , ..., (implizit unter der Annahme einer guten Typisierung):[[]]nfM1Mn

[[f(M1,...,Mn)]]=trans(f)([[M1]],...,[[Mn]])

Hier ist der Konstruktor, der im semantischen Bereich entspricht. Die Komposition ähnelt dem Konzept des Homomorphismus in der Algebra.trans(f)f

Operative Semantik ist in diesem Sinne nicht kompositorisch. Historisch gesehen wurde die Denotationssemantik teilweise entwickelt, weil die Operationssemantik nicht kompositorisch war. Nach D. Scotts Durchbruch in der ordnungstheoretischen Denotationssemantik von -calculus waren die meisten Denotationssemantiken ordnungstheoretisch. Ich stelle mir vor, dass - abgesehen von reinem intellektuellen Interesse - die Denotationssemantik hauptsächlich erfunden wurde, weil zu der Zeit (1960er Jahre):λ

  1. Früher war es schwierig, über die operationale Semantik nachzudenken.
  2. Früher war es schwierig, nicht-trivialen Sprachen eine axiomatische Semantik zu geben.

Ein Teil des Problems bestand darin, dass der Begriff der Programmgleichheit nicht so gut verstanden wurde wie jetzt. Ich würde argumentieren, dass beide Probleme in erheblichem Maße verbessert wurden (1), zum Beispiel durch auf Bisimilation basierende Techniken aus der Prozesstheorie (die als eine spezifische Form der operationellen Semantik angesehen werden kann) oder durch Pitts-Arbeiten zur operationellen Semantik und zum operationellen Programm Äquivalenz und (2) durch die Entwicklungen von zB Trennungslogik oder Hoare-Logik, die als typisierte Versionen von Hennessy-Milner-Logiken über Einbettungen von Programmiersprachen in typisierte π-Kalküle abgeleitet wurden. Beachten Sie, dass Programmlogiken (= axiomatische Semantik) auch kompositorisch sind.

Eine andere Sichtweise der Denotationssemantik ist, dass es viele Programmiersprachen gibt, die alle ähnlich aussehen. Vielleicht können wir eine einfache, aber universelle Metasprache finden und alle Programmiersprachen kompositorisch auf diese Metasprache abbilden. Sprache. In den 1960er Jahren glaubte man, dass ein typisierter Kalkül diese Metasprache ist. Ein Bild kann mehr als 1000 Wörter enthalten:λ

enter image description here

Was ist der Vorteil dieses Ansatzes? Vielleicht ist es sinnvoll, es aus einer wirtschaftlichen Perspektive zu betrachten. Wenn wir etwas Interessantes an einer Klasse von Objektprogrammen beweisen wollen, haben wir zwei Möglichkeiten.

  • Beweisen Sie es direkt auf Objektebene.

  • Beweisen Sie, dass die Übersetzung in die Metaebene (und zurück) die Eigenschaft "bewahrt", und beweisen Sie sie dann für die Metaebene, und verschieben Sie das Ergebnis zurück auf die Objektebene.

Die kombinierten Kosten des letzteren sind wahrscheinlich höher als die Kosten des ersteren, aber die Kosten für den Nachweis der Übersetzung können über alle zukünftigen Verwendungen abgeschrieben werden, während die Kosten für den Nachweis der Eigenschaft für die Metaebene viel geringer sind als die des Beweises auf der Objektebene.

Die ursprüngliche ordnungstheoretische Herangehensweise an die Denotationssemantik hat dieses Versprechen bisher nicht eingehalten, da komplizierte Sprachmerkmale wie Objektorientierung, Nebenläufigkeit und verteilte Berechnung noch keine genaue ordnungstheoretische Semantik erhalten haben. Mit "genau" meine ich eine Semantik, die der natürlichen operativen Semantik solcher Sprachen entspricht.


Lohnt es sich, die Denotationssemantik zu lernen? Wenn Sie ordnungstheoretische Ansätze zur Denotationssemantik meinen, dann wahrscheinlich nicht, es sei denn, Sie möchten in der Theorie der Programmiersprachen arbeiten und müssen ältere Arbeiten verstehen. Ein weiterer Grund für das Erlernen von ordnungstheoretischen Ansätzen zur Denotationssemantik ist die Schönheit dieses Ansatzes.

Martin Berger
quelle
4

O(p,σ)σp,σσD(p)pO(p,σ)=D(p)(σ)S(p)entweder oder D ( p ) bedeuten .σO(p,σ)D(p)

Nehmen Sie nun einen Compiler . Zu sagen, dass es sich um einen Compiler handelt, bedeutet, dass die Semantik erhalten bleibt, dh S ( C ( p ) ) = S ( p ) . Wenn Sie versuchen würden, dies mithilfe der operationellen Semantik zu beweisen, müssten Sie dies für jedes p und für jedes σ beweisen , O ( C ( p ) , σ ) = O ( p , σ )C:XXS(C(p))=S(p)pσO(C(p),σ)=O(p,σ)pD(C(p))=D(p)σ

Dummes Beispiel:

C(p)=(q;q)(skip;q;skip;q;skip)

pC

xavierm02
quelle