Le «sens» est utilisé d'une manière plus large que la dénotation.
La dichotomie originelle, héritée de la logique et de la philosophie, se situe entre «sens» et «dénotation» (que les philosophes appellent «référence»).
Cette distinction peut être illustrée par l'exemple original de Frege. Il a noté que les phrases "l'étoile du matin" et "l'étoile du soir" se référaient au même objet --- la planète Vénus --- mais que la phrase "l'étoile du matin et l'étoile du soir sont la même planète" transmet en fait des informations à un lecteur. Il a suggéré que le sens d'une expression nominale peut aller au-delà de l'objet réel qu'elle désigne, y compris quelque chose sur la façon dont elle présente l'objet qu'elle désigne.
De même, dans un langage de programmation, l'expression n'est pas la même que l'expression , même si elles peuvent être (devraient être!) Complètement indiscernables par n'importe quel programme client. Mais même s'ils ne se distinguent pas , ils ne sont pas les mêmes - lors de l'évaluation des deux programmes, votre machine effectue une multiplication dans le premier cas, et non dans le second.568 × 756
Lors de la construction d'une sémantique dénotationnelle, nous essayons de construire un modèle de langage dans lequel les programmes indiscernables désignent --- se réfèrent --- au même objet mathématique. Le but est de simplifier le raisonnement sur le comportement des programmes, car on peut raisonner sur les dénotations, les objets mathématiques, sans avoir à se soucier des détails de la présentation du programme. Cela nous permet d'éviter d'avoir à traiter des aspects de la signification des programmes qui ne nous intéressent pas.
La façon dont le sens et la dénotation sont liés à la sémantique opérationnelle est plus compliquée et différente. Je peux étendre ma réponse plus tard pour couvrir cela, mais je dois courir maintenant. :)
EDIT: D'accord, je prolonge cette réponse maintenant.
Le lien entre "dénotation" et "référence" est à peu près exact, et c'est exact parce que les personnes qui ont inventé la sémantique dénotationnelle (par exemple, Scott et Strachey) s'appropriaient très consciemment des idées de la logique philosophique dans le cadre de leur projet.
Pour comprendre comment le sens et la sémantique opérationnelle sont liés, il est utile de rappeler la notion du philosophe Michael Dummett d'une "théorie du sens" et en quoi elle diffère d'une "théorie sémantique".
Dans la terminologie de Dummett, une théorie sémantique est un moyen compositionnel de relier des phrases à des objets mathématiques déterminés. En logique, le sens d'une phrase est sa valeur de vérité, et elle est déterminée à partir des valeurs de vérité de ses constituants. La sémantique dénotationnelle des langages de programmation utilise une variété beaucoup plus large d'objets mathématiques, mais elle fonctionne de la même manière - nous donnons la signification d'un terme de programme en termes de signification de ses sous-termes. Ainsi, dans la terminologie de Dummett, la sémantique dénotationnelle propose des théories sémantiques des langages de programmation.
Une théorie du sens est également une manière compositionnelle de relier des phrases à des objets mathématiques, mais en plus elle contient un compte rendu de ce qui justifie la relation entre la phrase et l'objet mathématique. Il a développé cette idée afin de comprendre comment les mathématiciens intuitionnistes ont compris la notion de vérité. En particulier, ils avaient une description compositionnelle de la signification des connecteurs logiques, mais ne leur donnaient pas de valeurs sémantiques de la même manière que les logiciens classiques. Par exemple, dans le récit Brouwer-Heyting-Kolmogorov de la logique intuitionniste, la vérité est définie de la manière suivante:
- Une preuve canonique de est une paire ( p 1 , p 2 ) , où p 1 est une preuve canonique de A et p 2 est une preuve canonique de B .A ∧ B( p1, p2)p1UNEp2B
- Une preuve canonique de est une paire ( i , p ) , où i est soit 0 soit 1 , et si i est 0 , alors p est une preuve canonique de A , et si i est 1 , alors p est un canon preuve de B .A ∨ B( i , p )je01je0pUNEje1pB
- Une preuve canonique de est une procédure efficace, qui prend une preuve canonique de A et calcule une preuve canonique de B .A → BUNEB
- Une preuve canonique de ∀ x .A ( x )nA(n)
- ∃x.A(x)(n,p)npA(n)
AA
Maintenant, notez que cette définition relie les propositions et les valeurs de vérité, mais la connexion doit être justifiée par la possibilité de donner des preuves canoniques.
La sémantique opérationnelle entre en scène via cette notion de justification. Une sémantique opérationnelle n'est qu'une description de ce que fait une machine abstraite. Après avoir donné une sémantique dénotationnelle, nous voulons généralement montrer que la sémantique dénotationnelle est fidèle à la sémantique opérationnelle. Cette propriété est appelée adéquation (avec son grand frère l'abstraction complète ), et elle revient exactement à donner une théorie du sens qui relie les états de la machine abstraite aux objets dénotationnels, qui est fermée sous la réduction de la machine abstraite.
Ce n'est en fait pas toute l'histoire, car ce que j'ai exposé ici est de savoir comment connecter les approches opérationnelles et dénotationnelles via un modèle de réalisabilité. Les théories de types peuvent également avoir une sémantique de preuve-théorique (en effet, cette perspective était ce qui intéressait le plus Dummett), mais je n'ai pas expliqué cette connexion dans ce post.