A quali domande può rispondere la semantica denotazionale che la semantica operativa non può?


14

Conosco la semantica operativa (sia piccoli che grandi) per definire i linguaggi di programmazione. Sono interessato anche all'apprendimento della semantica denotazionale, ma non sono sicuro che ne varrà la pena. Imparerò solo lo stesso materiale da un diverso punto di vista o ci sono intuizioni che posso ottenere solo dalla comprensione della semantica denotazionale?

Risposte:


11

Non esiste un vero accordo su ciò che caratterizza la semantica denotazionale (vedi anche questo articolo), tranne per il fatto che deve essere compositiva . Ciò significa che se [[]] è la funzione semantica, mappando i programmi sul loro significato, qualcosa come il seguente deve essere il caso di tutti i costruttori di programmi n fe f e di tutti i programmi M1 , ..., Mn (assumendo implicitamente una buona digitazione):

[[f(M1,...,Mn)]]=trun'nS(f)([[M1]],...,[[Mn]])

Qui trun'nS(f) è il costruttore corrispondente a f nel dominio semantico. La composizionalità è simile al concetto di omomorfismo in algebra.

La semantica operativa non è compositiva in questo senso. Storicamente, la semantica denotazionale è stata sviluppata in parte perché la semantica operativa non era compositiva. In seguito alla semantica denotazionale teorica dell'ordine di D. Scott di λ -calculus, la maggior parte della semantica denotazionale era teorica dell'ordine. Immagino che - a parte il puro interesse intellettuale - la semantica denotazionale fu per lo più inventata perché all'epoca (anni '60):

  1. In passato era difficile ragionare sulla semantica operativa.
  2. In passato era difficile dare semantica assiomatica a linguaggi non banali.

Parte del problema era che la nozione di uguaglianza dei programmi non era così ben compresa come lo è ora. Direi che entrambi i problemi sono stati notevolmente migliorati, (1) ad esempio mediante tecniche basate sulla bisimilazione provenienti dalla teoria dei processi (che può essere vista come una forma specifica di semantica operativa) o, ad esempio, Pitts lavora sulla semantica e sul programma operativi equivalenza e (2) dagli sviluppi, ad esempio, della logica di separazione o delle logiche Hoare derivate come versioni tipizzate delle logiche di Hennessy-Milner tramite incorporamenti del linguaggio di programmazione in calcoli π tipizzati. Si noti che anche le logiche di programma (= semantica assiomatica) sono composizionali.

Un altro modo di guardare alla semantica denotazionale è che ci sono molti linguaggi di programmazione e sembrano tutti simili, quindi forse possiamo trovare un meta-linguaggio semplice, ma universale, e mappare tutti i linguaggi di programmazione in modo compositivo a quel meta- linguaggio. Negli anni '60, si pensava che alcuni meta-linguaggi digitati -calculus. Un'immagine potrebbe dire più di 1000 parole:λ

inserisci qui la descrizione dell'immagine

Qual è il vantaggio di questo approccio? Forse ha senso guardarlo da un POV economico. Se vogliamo dimostrare qualcosa di interessante in una classe di programmi a oggetti, abbiamo due opzioni.

  • Provalo direttamente a livello di oggetto.

  • Dimostrare che la traduzione al meta-livello (e viceversa) 'preserva' la proprietà, quindi dimostrarla per il meta-livello, quindi riportare il risultato al livello dell'oggetto.

Il costo combinato di quest'ultimo è probabilmente superiore al costo del primo, ma il costo per provare la traduzione può essere ammortizzato su tutti gli usi futuri, mentre il costo per provare la proprietà per il meta-livello è molto più piccolo di quello della prova a livello di oggetto.

L'approccio originale della teoria degli ordini alla semantica denotazionale non è stato finora all'altezza di questa promessa, perché non sono state ancora fornite precise semantiche di teoria degli ordini a caratteristiche del linguaggio complicato come orientamento degli oggetti, concorrenza e calcolo distribuito. Con "preciso" intendo la semantica che corrisponde alla semantica operativa naturale di tali lingue.


Vale la pena imparare la semantica denotazionale? Se intendi approcci teorici dell'ordine alla semantica denotazionale, probabilmente no, a meno che tu non voglia lavorare nella teoria dei linguaggi di programmazione e che tu abbia bisogno di comprendere documenti più vecchi. Un altro motivo per l'apprendimento di approcci teorici dell'ordine alla semantica denotazionale è la bellezza di questo approccio.


4

Scriverò per l'unico modo che (e se non esiste) e per il semantica denotazionale di . Nota che se definisci correttamente entrambe le semantiche, molto probabilmente avrai . Scriverò per indicare o .O(p,σ)σ'p,σσ'D(p)pO(p,σ)=D(p)(σ)S(p)σO(p,σ)D(p)

Ora prendi un compilatore . Dire che è un compilatore significa che conserva la semantica, ovvero . Se dovessi provare a provare che usando la semantica operativa, dovresti provarlo per qualsiasi e per qualsiasi , . Per dimostrarlo usando la semantica denotazionale, devi solo dimostrarlo per qualsiasi , . Non dover quantificare su spesso risparmia molto lavoro.C:XX'S(C(p))=S'(p)pσO(C(p),σ)=O'(p,σ)pD(C(p))=D'(p)σ

Esempio sciocco:

C(p)= sostituisci tutto con .(q;q')(SKiop;q;SKiop;q';SKiop)

Nella semantica denotazionale, farai semplicemente una prova per induzione su e otterrai facilmente che è un compilatore. In semantica operativa, dovrai prendere le tue derivazioni e collegare pezzi di derivazioni ovunque per tenere conto dei salti e sarà un incubo.pC

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.