¿Podemos distinguir métodos estrictamente sintácticos y semánticos en lenguaje de programación?

14

Mientras se discuten fuertes pruebas de normalización, este comentario contrasta el "modelo de formas normales" con los "métodos puramente sintácticos".

Esto me lleva de vuelta a una pregunta más básica: ¿podemos distinguir estrictamente las construcciones sintácticas y semánticas, frente a los modelos basados ​​en sintaxis? ¿Qué pasa con los modelos de término para álgebras, modelos de Henkin para lógicas de primer orden? ¿Qué pasa con la semántica operacional estructural? Dado que los modelos de términos pueden ser isomorfos a la sintaxis, parece difícil hacer una distinción firme.

Hasta que estudié la diferencia entre la teoría de la prueba y la teoría del modelo en lógica, incluso me desconcertó la idea de que "los sistemas de tipo estático son un método sintáctico". Después de todo, un sistema de tipos razona sobre los tipos, que son una abstracción del comportamiento del programa (y con tipos dependientes, uno arbitrariamente preciso).

Blaisorblade
fuente

Respuestas:

14

No, no se pueden distinguir estrictamente los métodos sintácticos de los semánticos, pero la distinción aún tiene sentido.

  • La semántica operacional estructural no es denotacional, porque no es un método compositivo para dar semántica a un lenguaje de programación.

  • Sin embargo, puede construir modelos denotacionales a partir de una semántica operacional estructural mediante el uso de un método de realización o de relaciones lógicas. Como ejemplo, vea Sistemas de construcción de tipos de Robert Harper sobre semántica operacional .

  • Los modelos de término son denotacionales, pero generalmente los semánticos no están satisfechos con ellos. Lo que generalmente quieren es una categoría de modelos en los que el término modelo sea inicial, que se puede usar para probar resultados de solidez y exhaustividad. (La solidez y la integridad del cálculo tipificado de lambda para las categorías cerradas cartesianas es el ejemplo paradigmático; consulte los Resultados de integridad categóricos deλ Alex Simpson para el cálculo simplemente- tipificado para algunos detalles).

  • En la otra dirección, si tiene una semántica denotacional, es posible que desee averiguar cuál es su sintaxis. Luego, debe buscar una máquina de sintaxis y abstracta cuyo término modelo pueda servir como un objeto inicial en una categoría adecuada de modelos.

    Por ejemplo, la semántica del juego comenzó su vida como una construcción puramente semántica, y eventualmente condujo a trabajar en la semántica del juego operacional, un ejemplo reciente es El cálculo lambda lambda-bar de Alexis Goyet : Un cálculo dual para estrategias sin restricciones .

  • En general, puede pensar en la semántica operacional estructural como una forma de especificar máquinas abstractas, que esperamos sean fáciles de implementar. Una semántica denotacional proporciona un modelo compositivo de un lenguaje, sobre el cual esperamos que sea fácil razonar. Si tenemos ambos, entonces podemos implementar y razonar sobre el lenguaje.

  • Los teoremas de normalización son un caso ambiguo interesante. Por lo general, para demostrar la normalización, necesita un modelo semántico (generalmente una relación lógica). Sin embargo, una vez que sabe que la normalización es válida, muchas propiedades ahora se pueden probar mediante la inducción en formas normales, que es un argumento puramente sintáctico.

    Para lógicas débiles (cualquier cosa hasta lógica de primer orden sin inducción, aproximadamente), puede probar la normalización sintácticamente, utilizando la técnica de sustitución hereditaria . En estas lógicas, se mantiene la propiedad de subformula, por lo que puede probar la normalización por inducción en tipos. Consulte el artículo de Frank Pfenning, Eliminación del corte estructural, para obtener una explicación de cómo funciona.

Neel Krishnaswami
fuente
¡Guau, gracias por la respuesta rápida y completa!
Blaisorblade
No estoy de acuerdo con la razón que diste para que la semántica operativa no sea denotacional. La semántica operativa no es denotacional porque no se asigna ninguna denotación a los programas. Existe un trabajo que hace que la semántica operacional sea compositiva.
día