¿Qué preguntas puede responder la semántica denotacional que la semántica operacional no puede?

14

Estoy familiarizado con la semántica operativa (tanto pequeños como grandes) para definir lenguajes de programación. También estoy interesado en aprender semántica denotacional, pero no estoy seguro de si valdrá la pena el esfuerzo. ¿Aprenderé el mismo material desde un punto de vista diferente, o hay ideas que solo puedo obtener al comprender la semántica denotacional?

cabeza de jardín
fuente

Respuestas:

11

No existe un acuerdo real sobre lo que caracteriza la semántica denotacional (ver también este artículo), excepto que debe ser compositivo . Eso significa que si es la función semántica, asignando programas a su significado, algo como lo siguiente debe ser el caso para todos los constructores de programas - y todos los programas , ..., (suponiendo implícitamente una buena tipificación):n f M 1 M n[[]]norteFMETRO1METROnorte

[[F(METRO1,...,METROnorte)]]=trunnortes(F)([[METRO1]],...,[[METROnorte]])

Aquí es el constructor correspondiente a en el dominio semántico. La composicionalidad es similar al concepto de homomorfismo en álgebra.ftrunnortes(F)F

La semántica operacional no es compositiva en este sentido. Históricamente, la semántica denotacional se desarrolló en parte porque la semántica operativa no era compositiva. Siguiendo la innovadora semántica de denotación teórica de orden de cálculo, la mayoría de la semántica de denotación solía ser de orden teórico. Me imagino que, aparte del interés intelectual puro, la semántica denotacional se inventó principalmente porque en ese momento (1960):λ

  1. Solía ​​ser difícil razonar sobre la semántica operativa.
  2. Solía ​​ser difícil dar semántica axiomática a lenguajes no triviales.

Parte del problema era que la noción de igualdad de programas no se entendía tan bien como ahora. Yo diría que ambos problemas se han mejorado en gran medida, (1) por ejemplo, mediante técnicas basadas en bisimilación provenientes de la teoría de procesos (que puede verse como una forma específica de semántica operativa) o, por ejemplo, el trabajo de Pitts en semántica operativa y programa equivalencia, y (2) por los desarrollos de, por ejemplo, la lógica de separación o las lógicas de Hoare derivadas como versiones escritas de las lógicas de Hennessy-Milner mediante incrustaciones de lenguaje de programación en cálculos π escritos. Tenga en cuenta que las lógicas del programa (= semántica axiomática) también son compositivas.

Otra forma de ver la semántica denotacional es que hay muchos lenguajes de programación y todos se ven algo similares, por lo que tal vez podamos encontrar un metalenguaje simple pero universal, y asignar todos los lenguajes de programación de manera compositiva a ese meta- idioma. En la década de 1960, se pensó que algún cálculo escrito es ese metalenguaje. Una imagen puede decir más de 1000 palabras:λ

ingrese la descripción de la imagen aquí

¿Cuál es la ventaja de este enfoque? Tal vez tenga sentido mirarlo desde un punto de vista económico. Si queremos demostrar algo interesante sobre una clase de programa de objeto, tenemos dos opciones.

  • Demuéstralo directamente en el nivel del objeto.

  • Demuestre que la traducción al meta-nivel (y viceversa) 'conserva' la propiedad, y luego pruébela para el meta-nivel, y luego empuje el resultado nuevamente al nivel del objeto.

El costo combinado de este último es probablemente más alto que el costo del primero, pero el costo de probar la traducción puede amortizarse en todos los usos futuros, mientras que el costo que prueba la propiedad para el meta-nivel es mucho menor que el de la prueba en el nivel del objeto.

Hasta ahora, el enfoque original de la teoría del orden de la semántica denotativa no ha cumplido con esta promesa, porque las características del lenguaje complicadas, como la orientación a objetos, la concurrencia y la computación distribuida, todavía no han recibido una semántica precisa de la teoría del orden. Por "preciso" me refiero a la semántica que coincide con la semántica operacional natural de dichos lenguajes.


¿Vale la pena aprender semántica denotacional? Si te refieres a enfoques teóricos del orden de la semántica denotativa, entonces probablemente no, a menos que quieras trabajar en la teoría de los lenguajes de programación y necesites comprender documentos más antiguos. Otra razón para aprender enfoques teóricos del orden de la semántica denotacional es la belleza de este enfoque.

Martin Berger
fuente
4

Escribiré para el único para que (y si no existe) y para el semántica denotacional de . Tenga en cuenta que si define ambas semánticas correctamente, lo más probable es que tenga . Escribiré para significar o .O(pag,σ)σpag,σσre(pag)pagO(pag,σ)=re(pag)(σ)S(pag)σO(pag,σ)re(pag)

Ahora tome un compilador . Decir que es un compilador significa que conserva la semántica, es decir, . Si intentara probar que utilizando la semántica operativa, tendría que demostrarlo para cualquier y para cualquier , . Para probarlo usando semántica denotacional, solo tiene que demostrar que para cualquier , . No tener que cuantificar en menudo ahorra mucho trabajo.C:XXS(C(pag))=S(pag)pagσO(C(pag),σ)=O(pag,σ)pagre(C(pag))=re(pag)σ

Ejemplo tonto:

C(pag)= reemplazar todo por .(q;q)(skyopag;q;skyopag;q;skyopag)

En semántica denotacional, solo hará una prueba por inducción en y obtendrá fácilmente que es un compilador. En la semántica operativa, tendrá que llevar sus derivaciones y enchufar piezas de derivaciones a todas partes para dar cuenta de los saltos y será una pesadilla.pagC

xavierm02
fuente