À quelles questions la sémantique dénotationnelle peut-elle répondre que la sémantique opérationnelle ne peut pas?

14

Je connais la sémantique opérationnelle (petite et grande étape) pour définir les langages de programmation. Je suis également intéressé à apprendre la sémantique dénotationnelle, mais je ne sais pas si cela en vaudra la peine. Vais-je simplement apprendre le même matériel d'un point de vue différent, ou y a-t-il des idées que je ne peux acquérir qu'en comprenant la sémantique dénotationnelle?

gardenhead
la source

Réponses:

11

Il n'y a pas vraiment d'accord sur ce qui caractérise la sémantique dénotationnelle (voir aussi cet article), si ce n'est qu'elle doit être compositionnelle . Cela signifie que si est la fonction sémantique, mappant les programmes à leur signification, quelque chose comme ce qui suit doit être le cas pour tous lesconstructeurs de programmes n -aires f et tous les programmes M 1 , ..., M n (en supposant implicitement un bon typage):[[]]nFM1Mn

[[F(M1,...,Mn)]]=trunens(F)([[M1]],...,[[Mn]])

Ici est le constructeur correspondant à f dans le domaine sémantique. La compositionnalité est similaire au concept d'homomorphisme en algèbre.trunens(F)F

La sémantique opérationnelle n'est pas compositionnelle dans ce sens. Historiquement, la sémantique dénotationnelle a été développée en partie parce que la sémantique opérationnelle n'était pas compositionnelle. Après la percée de la sémantique dénotationnelle théorique de l'ordre de D. Scott de -calculus, la plupart des sémantiques dénotationnelles étaient auparavant de la théorie de l'ordre. J'imagine que - en dehors de l'intérêt intellectuel pur - la sémantique dénotationnelle a été principalement inventée parce qu'à l'époque (années 1960):λ

  1. Avant, il était difficile de raisonner sur la sémantique opérationnelle.
  2. Autrefois, il était difficile de donner une sémantique axiomatique à des langages non triviaux.

Le problème tient en partie au fait que la notion d’égalité des programmes n’est pas aussi bien comprise qu’aujourd’hui. Je dirais que les deux problèmes ont été considérablement améliorés, (1) par exemple par des techniques basées sur la bisimilation provenant de la théorie des processus (qui peuvent être considérées comme une forme spécifique de sémantique opérationnelle) ou par exemple Pitts travaille sur la sémantique opérationnelle et le programme l'équivalence, et (2) par les développements, par exemple, de la logique de séparation ou des logiques de Hoare dérivées sous forme de versions typées des logiques de Hennessy-Milner via des intégrations de langage de programmation dans des π-calculs typés. Notez que la logique du programme (= sémantique axiomatique) est également compositionnelle.

Une autre façon de voir la sémantique dénotationnelle est qu'il existe de nombreux langages de programmation et ils se ressemblent tous, donc peut-être pouvons-nous trouver un méta-langage simple, mais universel, et mapper tous les langages de programmation de manière compositionnelle à cette méta- Langue. Dans les années 1960, on pensait que certains -calculus typés étaient ce méta-langage. Une image peut dire plus de 1000 mots:λ

entrez la description de l'image ici

Quel est l'avantage de cette approche? Peut-être qu'il est logique de le regarder à partir d'un PDV économique. Si nous voulons prouver quelque chose d'intéressant sur une classe de programme objet, nous avons deux options.

  • Prouvez-le directement au niveau de l'objet.

  • Prouvez que la traduction au méta-niveau (et retour) «préserve» la propriété, puis prouvez-la pour le méta-niveau, puis repoussez le résultat au niveau objet.

Le coût combiné de ce dernier est probablement plus élevé que le coût du premier, mais le coût de la preuve de la traduction peut être amorti sur toutes les utilisations futures, tandis que le coût de la preuve de la propriété pour le méta-niveau est beaucoup plus faible que celui de la preuve au niveau de l'objet.

L'approche originale de la théorie de l'ordre à la sémantique dénotationnelle n'a jusqu'à présent pas été à la hauteur de cette promesse, car les fonctionnalités de langage compliquées telles que l'orientation des objets, la concurrence et le calcul distribué n'ont pas encore reçu de sémantique de la théorie de l'ordre précise. Par «précis», j'entends une sémantique qui correspond à la sémantique opérationnelle naturelle de ces langages.


Vaut-il la peine d'apprendre la sémantique dénotationnelle? Si vous parlez d'approches théoriques de l'ordre de la sémantique dénotationnelle, ce n'est probablement pas le cas, sauf si vous voulez travailler dans la théorie des langages de programmation et devez comprendre des articles plus anciens. Une autre raison d'apprendre des approches théoriques de l'ordre de la sémantique dénotationnelle est la beauté de cette approche.

Martin Berger
la source
4

O(p,σ)σp,σσ(p)pO(p,σ)=(p)(σ)S(p)σO(p,σ)(p)

C:XXS(C(p))=S(p)pσO(C(p),σ)=O(p,σ)p(C(p))=(p)σ

Exemple idiot:

C(p)=(q;q)(skjep;q;skjep;q;skjep)

pC

xavierm02
la source