Peut-on distinguer des méthodes strictement syntaxiques et sémantiques dans un langage de programmation?

14

Tout en discutant de preuves de normalisation solides, ce commentaire oppose le «modèle des formes normales» aux «méthodes purement syntaxiques».

Cela me ramène à une question plus fondamentale: peut-on encore distinguer strictement les constructions syntaxiques et sémantiques, face aux modèles syntaxiques? Qu'en est-il des modèles de termes pour les algèbres, des modèles de Henkin pour les logiques de premier ordre? Qu'en est-il de la sémantique opérationnelle structurelle? Étant donné que les modèles de termes peuvent être isomorphes à la syntaxe, il semble difficile de faire une distinction ferme.

Jusqu'à ce que j'étudie la différence entre la théorie de la preuve et la théorie des modèles en logique, j'étais même dérouté par l'idée que "les systèmes de type statique sont une méthode syntaxique". Après tout, un système de types raisonne sur les types, qui sont une abstraction du comportement du programme (et avec des types dépendants, arbitrairement précis).

Blaisorblade
la source

Réponses:

14

Non, vous ne pouvez pas distinguer strictement les méthodes syntaxiques des méthodes sémantiques, mais la distinction finit toujours par avoir un sens.

  • La sémantique opérationnelle structurelle n'est pas dénotationnelle, car ce n'est pas une méthode de composition pour donner la sémantique à un langage de programmation.

  • Cependant, vous pouvez créer des modèles dénotationnels à partir d'une sémantique opérationnelle structurelle en utilisant une méthode de réalisabilité ou de relations logiques. À titre d'exemple, voir Robert Harper's Constructing Type Systems over Operational Semantics .

  • λ

  • Dans l'autre sens, si vous avez une sémantique dénotationnelle, vous voudrez peut-être comprendre quelle en est la syntaxe. Ensuite, vous voulez aller chercher une syntaxe et une machine abstraite dont le terme modèle peut servir d'objet initial dans une catégorie appropriée de modèles.

    Par exemple, la sémantique du jeu a commencé sa vie comme une construction purement sémantique, et a finalement conduit à travailler sur la sémantique du jeu opérationnel --- dont un exemple récent est le calcul lambda lambda-bar d' Alexis Goyet : un double calcul pour des stratégies sans contraintes .

  • Dans l'ensemble, vous pouvez considérer la sémantique opérationnelle structurelle comme un moyen de spécifier des machines abstraites, qui, nous l'espérons, sont faciles à mettre en œuvre. Une sémantique dénotationnelle donne un modèle de composition d'un langage qui, nous l'espérons, est facile à raisonner. Si nous avons les deux, alors nous pouvons à la fois implémenter et raisonner sur le langage.

  • Les théorèmes de normalisation sont un cas ambigu intéressant. Habituellement, pour prouver la normalisation, vous avez besoin d'un modèle sémantique (généralement une relation logique). Cependant, une fois que vous savez que la normalisation tient, de nombreuses propriétés peuvent maintenant être prouvées par induction sur des formes normales, qui est un argument purement syntaxique.

    Pour les logiques faibles (jusqu'à la logique du premier ordre sans induction, en gros), vous pouvez prouver la normalisation syntaxiquement, en utilisant la technique de substitution héréditaire . Dans ces logiques, la propriété subformula est vérifiée et vous pouvez donc prouver la normalisation par induction sur les types. Voir l'article de Frank Pfenning Structural Cut Elimination pour une explication de la façon dont cela fonctionne.

Neel Krishnaswami
la source
Wow, merci pour la réponse rapide et complète!
Blaisorblade
Je ne suis pas d'accord sur la raison que vous avez donnée pour que la sémantique opérationnelle ne soit pas dénotationnelle. La sémantique opérationnelle n'est pas dénotationnelle car aucune dénotation n'est affectée aux programmes. Il existe un travail qui rend la sémantique opérationnelle compositionnelle.
jour