Estoy contento con la respuesta de Adrej, pero me gustaría profundizar más.
Para empezar, la semántica denotacional quiere decir algo como "el significado de esta notación es eso". Un verdadero semántico quiere imaginar que los significados son lo que existe en nuestra mente y que las anotaciones son solo una forma de expresar esos significados. El requisito de que la semántica denotacional debe ser compositiva se deduce de esto. Si los significados son primarios y las notaciones secundarias, entonces no tenemos más remedio que definir los significados de notaciones más grandes como funciones de los significados de sus constituyentes.
Si aceptamos este punto de vista, entonces una buena semántica denotacional necesita capturar los significados que presumimos que tenemos en mente. Cualquier semántica compositiva no necesariamente encajaría en la factura. Si se me ocurre una definición semántica compositiva y nadie está de acuerdo en que diga algún significado que tengan en su cabeza, entonces es de poca utilidad. La semántica de juegos en la actualidad se encuentra en esta situación. Es una definición compositiva y técnicamente bastante fuerte, pero muy pocas personas están de acuerdo en que tiene algo que ver con los significados que tienen en mente.
Dicho esto, cualquier definición de composición tiene varias ventajas técnicas. Podemos usarlo para verificar equivalencias u otras propiedades por inducción en la sintaxis de los términos. Podemos usarlo para verificar la solidez de los sistemas de prueba, nuevamente por inducción en la sintaxis de los términos. Podemos verificar la exactitud de los compiladores o las técnicas de análisis de programas (que, por su naturaleza, se definen por inducción en la sintaxis). Una definición semántica completamente abstracta tiene aún más ventajas técnicas. Puede usarlo para mostrar que dos programas no son equivalentes, que no puede hacer con ninguna semántica compositiva arbitraria. Una definición semántica totalmente definible es aún mejor. Aquí los dominios semánticos tienen exactamente lo que puede expresar en el lenguaje de programación (con algunas condiciones). Por lo tanto, puede enumerar los valores en los dominios para ver qué valores hay, lo que sería difícil de hacer con anotaciones sintácticas. Por todos estos motivos, la semántica de los juegos tiene puntajes brillantes.
Sin embargo, las definiciones semánticas compositivas han estado perdiendo su ventaja a lo largo de los años. Robin Milner y Andy Pitts han desarrollado una serie de técnicas de " razonamiento operativo ", que funcionan exclusivamente en la sintaxis, pero utilizando la semántica operativa donde sea necesario para hablar sobre el comportamiento. Estas técnicas de razonamiento operacional son de baja tecnología. Sin lujosas matemáticas. No hay objetos infinitos. Podemos enseñarles a estudiantes universitarios y cualquiera puede usarlos. Entonces, muchas personas se preguntan por qué necesitamos la semántica denotacional. (Martin Berger probablemente esté en este campamento).
Personalmente, no tengo ningún problema con tener muchas herramientas en mi caja de herramientas. Las técnicas de denominación pueden obtener mejores puntajes para algunos problemas y las técnicas operativas para otros. Los investigadores que desarrollan la teoría podrían estar mejor sintonizados con un enfoque u otro. Con bastante frecuencia, podemos desarrollar las ideas en un enfoque y transferir esas ideas al otro enfoque. (Gran parte del trabajo de Andy Pitts es de este tipo. La parametricidad relacional se desarrolló en el entorno denotacional, pero es capaz de descubrir cómo volver a expresarlo como razonamiento operativo. Cuando lo miro, digo "wow, nunca habría pensó que eso sería posible ". La lógica de separación también va por este camino. Steve Brookes dio una prueba de solidez de 60 páginas para la lógica de separación concurrente utilizando semántica denotacional.
Los enfoques operativos también obtienen una puntuación brillante cuando los lenguajes de programación se vuelven muy elegantes, con todo tipo de tipos de orden superior. Es posible que no tengamos idea de cómo modelar matemáticamente tales cosas. O bien, los modelos matemáticos estándar pueden resultar inconsistentes bajo el estrés de la locura. (Por ejemplo, vea "El polimorfismo no es una teoría de conjuntos" de Reynolds). Los enfoques operativos que funcionan exclusivamente en la sintaxis pueden dejar de lado todos estos problemas matemáticos.
Otro enfoque que es intermedio entre los enfoques operacionales y denotacionales es la realizabilidad . En lugar de trabajar con términos sintácticos como en los enfoques operacionales, vamos en parte a la denotación utilizando otra forma de representantes matemáticos. Es posible que estos representantes no califiquen como "significados" denotacionales reales, pero al menos serían un poco más abstractos que los términos sintácticos. Por ejemplo, para el cálculo lambda polimórfico, primero podemos dar significados a los términos sin tipo (en algún modelo del cálculo lambda sin tipo) y luego usarlos como representantes ('realizadores') para hacer alguna forma de "razonamiento operacional" a un poco Nivel más abstracto.
Por lo tanto, que haya una sana competencia entre los enfoques denotacional, operativo y de realizabilidad. No hay daño.
Por otro lado, también podría haber una competencia "poco saludable" entre los diferentes enfoques. Las personas que trabajan con un enfoque podrían estar tan estrechamente vinculadas con él que podrían no ver el punto de los otros enfoques. Idealmente, todos deberíamos ser conscientes de las fortalezas y debilidades de los diferentes enfoques y desarrollar una actitud científica hacia ellos, incluso si no son nuestros favoritos individuales.