Cosa costituisce la semantica denotazionale?


45

Su un thread diverso , Andrej Bauer ha definito la semantica denotazionale come:

il significato di un programma è una funzione dei significati delle sue parti.

Ciò che mi preoccupa di questa definizione è che non sembra distinguere ciò che viene comunemente pensato come semantica denotazionale da quella che viene comunemente considerata semantica non denotazionale, vale a dire semantica operativa strutturale .

Più precisamente, l'ingrediente chiave qui è la modularità , o la compositività , della semantica, o in altri termini, il fatto che sono definiti in base alla struttura astratta del programma.

Poiché la maggior parte della semantica formale (tutti?) Oggigiorno tende ad essere strutturale, è questa la definizione richiesta?

Quindi, la mia domanda è: che cos'è la semantica denotazionale?


4
Il significato può essere dato in molte forme: condizioni pre-post, funzionamento di una macchina astratta, un'entità matematica, una strategia di gioco. In tutti gli approcci moderni, questi significati sono dati in funzione del significato delle parti.
Ohad Kammar,

1
La questione dell'esistenza di avviato lo studio della teoria dei domini. Deriva dall'approccio denotazionale, ma non lo definisce (ad esempio, il linguaggio in questione potrebbe non avere nemmeno spazi funzionali). Per quanto riguarda la modularità, come ho detto sopra, praticamente ogni approccio moderno alla semantica ha una compositività in senso adeguato. [DD]D
Ohad Kammar,

10
[DD]=D λλ

2
[DD]=DλD[DD]D

1
Non sono sicuro che sia d'aiuto, ma il modo in cui vedo il lavoro di semantica denotazionale "attuale" è "la compilazione del linguaggio in una categoria" - in effetti potresti scrivere semantica in termini di noti oggetti matematici senza insistere sulla struttura della categoria, ma questo è una giusta caratterizzazione degli esempi specifici che ho incontrato.
Gasche,

Risposte:


30

La distinzione che faccio personalmente tra semantica denotazionale e operativa è qualcosa del genere:

  • la semantica denotazionale è matematica ed equazionale. I dettagli della riduzione contano meno del risultato finale, che è un valore senza tempo in un certo spazio matematico.
  • la semantica operativa è algoritmica. Si svolge in singoli passaggi nel tempo. Il processo fa parte del significato e il risultato finale è solo un passo distinto in quel processo.

La differenza a volte può essere abbastanza sottile, e può essere difficile dire se è solo una differenza di stile o di sostanza.

Tuttavia, possiamo vedere come la definizione compositiva di Andrej segue in modo più naturale dalla definizione denotazionale e possiamo anche facilmente immaginare una semantica non confluente e non compositiva che soddisfa ancora la definizione operativa.


Un buon esempio della differenza algoritmica contro matematica è il trattamento della nonterminazione. La denotazione di un loop è bottom, ma a causa del problema di arresto, è indecidibile se la denotazione di un programma arbitrario sia bottom. Nella semantica a piccoli passi, invece, è possibile osservare i passi di riduzione, ma la teoria non ha alcun valore "inferiore". Indecidibilità e non termine passano alla metatoria: ciò che è indecidibile è se una sequenza di riduzione termina. Allo stesso modo, nella semantica big-step è indecidibile se esiste una derivazione.
Blaisorblade,

23

Se dovessi indovinare cosa direbbe Dana Scott, probabilmente direbbe che la semantica denotazionale è compositiva (come quello che ho affermato) e che il significato di un programma deve essere un vero oggetto matematico, non un'entità sintattica o formalista. Naturalmente, una tale visione richiede di distinguere tra manipolazione formale della sintassi e matematica "vera". Questa è necessariamente una distinzione non matematica.

Come ripensamento, si presumibilmente vorrebbe che il significato fosse adeguato, nel senso che due programmi osservazionalmente diversi non ricevono lo stesso significato. Naturalmente, l'adeguatezza di questo tipo dipende da ciò che si ammette come "osservazione".

Sotto questo punto di vista si potrebbe sostenere che la semantica operativa strutturale non è semantica denotazionale perché identifica il significato di un'entità sintattica con un'altra entità sintattica (un valore o una sequenza di riduzione).


3
Di tanto in tanto mi viene detto che i sistemi di transizione non sono matematici come domini o reticoli o ordini. Trovo questa visione sconcertante. Tutto può essere espresso nella teoria degli insiemi ZFC.
Martin Berger,

1
Considerare quanto precisamente una data semantica possa modellare un fenomeno compuazionale è un approccio più interessante, e in effetti dipende in modo cruciale dalla nozione di osservazione scelta. Uno dei vantaggi chiave della semantica operativa (ad es. Teoria dei processi) è proprio che le nozioni naturali di osservazione sono molto più facilmente definibili rispetto alla semantica teorica dell'ordine.
Martin Berger,

3
@Marc: sono d'accordo con te sul fatto che i metodi operativi non modellano il calcolo come funzione. Ma non vedo perché ciò renda gli approcci teorici all'ordine "più matematici". La matematica influenzata dalla fisica come le equazioni differenziali modella le valutazioni di alcuni sistemi nel tempo. L'approccio input-output stesso utilizza una struttura temporale rudimentale, ovvero che l'output non è disponibile prima dell'input.
Martin Berger,

2
@Martin: I matematici spesso si lamentano del fatto che ciò che i fisici fanno non è nemmeno una vera matematica. ;-) La fisica è solo una scienza stabilita più comodamente in questo momento. TCS è ancora relativamente il nuovo capretto sul blocco. Penso che TCS non dovrebbe preoccuparsi di rendere felici le persone in una disciplina diversa (non importa quanto ci piaccia personalmente); abbiamo il nostro mojo in movimento (proprio come i fisici).
Marc Hamann,

2
@Marc: la spazzatura arbitraria può essere espressa in ZFC, quindi non è un gran che un criterio su cui fare affidamento. La semantica in cui le "funzioni" in un linguaggio di programmazione sono interpretate come funzioni in senso matematico presenta almeno due vantaggi. Innanzitutto, si adatta bene a come le persone pensano delle funzioni in un linguaggio di programmazione. In secondo luogo, le funzioni sono oggetti matematici familiari, quindi è possibile utilizzare molti macchinari. Naturalmente, anche i sistemi di transizione hanno i loro usi.
Andrej Bauer,

19

Concordo sul fatto che l'identificazione da parte di A. Bauer della semantica denotazionale con la composizionalità (nei Libri sulla semantica del linguaggio di programmazione ) non caratterizza davvero ciò che è stato tradizionalmente significato per semantica denotazionale, poiché la semantica chiaramente operativa e la logica del programma (semantica assiomatica) sono composizionali .

Suggerirei che il termine sia meglio compreso dal punto di vista socio-storico, in quanto riferito vagamente a una certa tradizione teorica (iniziata sul serio quando Scott ha prodotto un modello teorico reticolare del lambda-calcolo non tipizzato) con alcuni strumenti preferiti (teoria dell'ordine, teoremi del punto fisso , topologia, teoria delle categorie) e lingue target preferite (puramente funzionali e sequenziali). Immagino che - a parte il puro interesse intellettuale - la semantica denotazionale sia stata per lo più inventata perché:

  1. In passato era difficile ragionare sulla semantica operativa.

  2. In passato era difficile dare semantica assioma a linguaggi non banali.

π

Quindi, in sintesi, direi che il termine "semantica denotazionale" è diventato meno preciso e quindi meno utile. Potrebbe essere utile per la comunità della semantica convergere verso una migliore terminologia.


1
Per ricapitolare il mio ultimo post, una "semantica denotazionale" deve dire "il significato di questa notazione è quello". La semantica "operativa" e la semantica "assiomatica" non sono definizioni semantiche di questo tipo. È fuorviante farli apparire così. Si noti inoltre che ciò che viene chiamato "approccio operativo" è un approccio al ragionamento sui programmi. Non è una semantica operativa. L'approccio operativo e l'approccio assiomatico possono sostituire le applicazioni ingegneristiche della semantica denotazionale. Ma non diventano semantica denotazionale.
Uday Reddy,

LπL

1
@ Martin. Perché assegnare processi in modo compositivo non è denotazionale. Potrebbe essere, se si convincono tutti noi che i processi sono una teoria di base proprio come la teoria degli insiemi e non si dovrebbe chiedere la sua semantica. Sono d'accordo con l'idea che potrebbe esistere un linguaggio di base che modella i calcoli con stato. Forse un giorno il calcolo del processo di una qualche forma sarà accettato come tale base. Ma non credo che ci siamo ancora.
Uday Reddy,

1
@MartinBerger È l'unico che abbia mai imparato, ma ho difficoltà a fornire subito un buon riferimento. Ad esempio, "Finalmente senza tag, parzialmente valutato" ( citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.99.9287 ) utilizza "fold", "composizionale" e "primitivo ricorsivo" nell'introduzione come sinonimi ovvi (ma questo non è molto discusso nel documento, è scontato). Viceversa, sembrerebbe che questo sia un punto di dibattito in filosofia, se qui ci si può fidare di Wikipedia: en.wikipedia.org/wiki/Principle_of_compositionality#Critiques
Blaisorblade

1
@Blaisorblade Quando ero uno studente di dottorato, socializzavo con semantisti denotazionali, perché dovevo lavorare sulla semantica denotazionale. Ho sempre chiesto loro quale fosse la semantica denotazionale, se potessero darmi una definizione astratta, ma ho avuto solo risposte evasive o vaghe come "la semantica denotazionale è semantica matematica", vedi anche la spiegazione di A. Bauer. Non penso che il concetto sia ben definito. Inoltre non vedo perché richiedere, ad esempio, la ricorsività primitiva sia abbastanza vincolante, perché il potere della ricorsione primitiva dipende da cos'altro è disponibile: (continua)
Martin Berger,

16

Sono contento della risposta di Adrej, ma vorrei approfondire ulteriormente.

Per cominciare, la semantica denotazionale vuole dire qualcosa del tipo "il significato di questa notazione è quello". Un vero semantico vorrebbe immaginare che i significati siano ciò che esiste nella nostra mente e le notazioni sono solo un modo per esprimere quei significati. Da ciò deriva il requisito secondo cui la semantica denotazionale dovrebbe essere compositiva. Se i significati sono primari e le notazioni secondarie, allora non abbiamo altra scelta che definire i significati di notazioni più grandi come funzioni dei significati dei loro costituenti.

Se accettiamo questo punto di vista, allora una buona semantica denotazionale deve catturare i significati che presumiamo di avere nella nostra mente. Qualsiasi semantica compositiva non si adatterebbe necessariamente al conto. Se trovo una definizione semantica compositiva e nessuno è d'accordo sul fatto che affermi qualsiasi significato abbiano in testa, allora è di scarsa utilità. La semantica dei giochi è attualmente in questa situazione. È una definizione compositiva e tecnicamente abbastanza forte, ma pochissime persone concordano sul fatto che abbia qualcosa a che fare con i significati che hanno in mente.

Detto questo, qualsiasi definizione compositiva presenta vari vantaggi tecnici. Possiamo usarlo per verificare equivalenze o altre proprietà per induzione sulla sintassi dei termini. Possiamo usarlo per verificare la solidità dei sistemi di prova, sempre per induzione sulla sintassi dei termini. Possiamo verificare la correttezza dei compilatori o delle tecniche di analisi del programma (che, per loro natura, sono definite dall'induzione sulla sintassi). Una definizione semantica completamente astratta presenta vantaggi ancora più tecnici. Puoi usarlo per mostrare che due programmi non sono equivalenti, cosa che non puoi fare con nessuna semantica compositiva arbitraria. Una definizione semantica completamente definibile è persino migliore. Qui i domini semantici hanno esattamente ciò che puoi esprimere nel linguaggio di programmazione (con alcune disposizioni). Quindi, puoi enumerare i valori nei domini per vedere quali valori ci sono, il che sarebbe difficile da fare con le notazioni sintattiche. Per tutti questi motivi, la semantica dei giochi ha un punteggio brillante.

Tuttavia, le definizioni semantiche compositive hanno perso il loro vantaggio nel corso degli anni. Robin Milner e Andy Pitts hanno sviluppato una serie di tecniche di " ragionamento operativo ", che lavorano esclusivamente sulla sintassi ma usando la semantica operativa dove necessario per parlare di comportamento. Queste tecniche di ragionamento operativo sono a bassa tecnologia. Nessuna matematica elaborata. Nessun oggetto infinito. Possiamo insegnare loro a laureandi e chiunque può usarli. Quindi, molte persone si chiedono perché abbiamo bisogno della semantica denotazionale. (Martin Berger è probabilmente in questo campo.)

Personalmente, non ho problemi ad avere molti strumenti nella mia cassetta degli attrezzi. Le tecniche denotazionali potrebbero avere un punteggio migliore per alcuni problemi e tecniche operative per altri. I ricercatori che sviluppano la teoria potrebbero essere meglio sintonizzati su un approccio o sull'altro. Abbastanza spesso, possiamo sviluppare le intuizioni in un approccio e trasferirle nell'altro approccio. (Molto del lavoro di Andy Pitts è di questo tipo. La parametricità relazionale è stata sviluppata nel contesto denotazionale ma è in grado di capire come riaffermarlo come ragionamento operativo. Quando lo guardo, dico "wow, non avrei mai ho pensato che sarebbe stato possibile. "Anche la logica di separazione sta andando in questo modo. Steve Brookes ha fornito una prova di validità di 60 pagine per la logica di separazione simultanea usando la semantica denotazionale.

Gli approcci operativi ottengono ottimi risultati anche quando i linguaggi di programmazione diventano molto elaborati, con tutti i tipi di tipi di ordine superiore. Potremmo non avere idea di come modellare queste cose matematicamente. Oppure, i modelli matematici standard potrebbero rivelarsi incoerenti sotto lo stress del loopiness. (Ad esempio, vedi "Il polimorfismo non è una teoria teorica" ​​di Reynolds.) Approcci operativi che funzionano esclusivamente sulla sintassi possono schierare nettamente tutti questi problemi matematici.

Un altro approccio che è intermedio tra approccio operativo e approccio denotazionale è la realizzabilità . Invece di lavorare con termini sintattici come negli approcci operativi, andiamo in parte denotativi usando qualche altra forma di rappresentanti matematici. Questi rappresentanti potrebbero non qualificarsi come veri e propri "significati" denotazionali, ma sarebbero almeno un po 'più astratti dei termini sintattici. Ad esempio, per il calcolo lambda polimorfico, possiamo prima dare significati a termini non tipizzati (in alcuni modelli del calcolo lambda non tipizzato) e quindi usarli come rappresentanti ("realizzatori") per fare un po 'di "ragionamento operativo" livello più astratto.

Quindi, lascia che ci sia una sana competizione tra approcci denotazionali, operativi e di realizzabilità. Non c'è nulla di male.

D'altra parte, potrebbe esserci anche una competizione "malsana" in crescita tra i diversi approcci. Le persone che lavorano con un approccio potrebbero esserne così strettamente legate da non vedere il punto degli altri approcci. Idealmente dovremmo essere tutti consapevoli dei punti di forza e di debolezza dei diversi approcci e sviluppare un atteggiamento scientifico nei loro confronti anche se non sono i nostri preferiti individuali.


Un approccio costruttivo per risolvere questo problema potrebbe essere quello di trovare traduzioni tra i diversi approcci.
Martin Berger,

1
Si noti che non ho alcun problema con la semantica denotazionale convenzionale come strumento nella casella degli strumenti. Trovo solo i suggerimenti impliciti o espliciti che sono in qualche modo migliori per essere problematici e privi di giustificazione coerente.
Martin Berger,

Vorrei pubblicare i volumi "Algollike Languages" ( eecs.qmul.ac.uk/~ohearn/Algol/algol.html ), a cura di Peter O'Hearn e Bob Tennent come modello di buona pratica. Includono articoli sulla "semantica denotazionale convenzionale" (Strachey, Reynolds, Tennent, Meyer et al), nonché sulla semantica denotazionale "non convenzionale" (la mia, Abramsky & McCusker, Brookes) e gli approcci operativi (Andy Pitts, Felleisen). Per inciso, due articoli di Reynolds nei volumi (Specification Logic e Syntactic Control of Interference) erano "assiomatici" quando sono stati scritti!
Uday Reddy,

1
Riguardo alla sana competizione, un problema chiave è che ci sono così tanti approcci, formalismi, ricercatori e documenti, che è difficile tenere il passo con lo sviluppo. Potrebbe valere la pena, in quanto comunità di ricerca, impegnarci a fondo per sintetizzare e unificare gli approcci esistenti.
Martin Berger,

2
@MartinBerger, un punto di partenza di cui sono a conoscenza è il documento di Patrick Cousot "Disegno costruttivo di una gerarchia di semantica" che mostra che una gamma molto ampia di modelli semantici, tra cui sistemi di transizione, semantica assiomatica, modelli denotazionali, può essere correlata mediante aggiunte, quindi visto come diverse astrazioni.
Vijay D,

12

[Un'altra risposta. Probabilmente non è bello accumulare diverse risposte. Ma, ehi, questo è un problema profondo.]

Ho detto di essere d'accordo con la risposta di Andrej, ma sembra che non sia completamente d'accordo. C'è una differenza.

Ho detto che una semantica denotazionale deve dire "il significato di questa notazione è quello". Intendevo dire che alle notazioni devono essere assegnati significati, che sono una qualche forma di entità concettuali , non altre notazioni. Al contrario, Andrej ha anche richiesto, parafrasando Scott, che i significati debbano essere oggetti "matematici". Non credo che la parte matematica sia necessaria.

Ad esempio, dal mio punto di vista andrebbe perfettamente bene che i significati delle notazioni siano processi fisici. Dopo che tutti i programmi per computer mettono i freni in macchina, fanno volare aerei, lanciano bombe e cosa no. Questi sono processi fisici, non elementi in un certo spazio matematico. Non puoi sganciare una bomba, vedere se uccide qualcuno e riprenderla se non lo fa. I programmi per computer non possono farlo. Ma le funzioni matematiche possono. (Si chiamano operazioni di "snapback"). Quindi, non è affatto chiaro che le funzioni matematiche avranno un buon significato per i programmi per computer.

D'altra parte, non sappiamo ancora come parlare in modo astratto dei processi fisici. Quindi, potremmo davvero usare una descrizione matematica dei processi per articolare le nostre idee. Ma queste descrizioni matematiche sarebbero proprio questo, "descrizioni". Non sono significati. I veri significati sarebbero solo i processi fisici che immaginiamo concettualmente.

Nel suo discorso di accettazione per il premio SIGPLAN (che presto dovrebbe essere su YouTube), Hoare ha affermato che ACP ha usato un "approccio algebrico", CSP ha usato un "approccio denotazionale" e CCS ha usato un "approccio operativo" per descrivere i processi. Ohad e io eravamo seduti insieme nella sessione, ci guardavamo l'un l'altro e dicevamo "è davvero interessante". Quindi, c'è molto spazio concettuale qui che viene esplorato. Penso che gran parte del lavoro successivo di Scott, sui sistemi di vicinato e sui sistemi di informazione ecc., Sia stato effettivamente uno sforzo per spiegare le funzioni come "processi" di qualche forma. La geometria dell'interazione di Girard e la semantica dei giochi successivi sono anche sforzi per spiegare le funzioni come processi. Direi che lo sviluppo di una solida teoria dei processi potrebbe essere il grande contributo che l'Informatica potrebbe apportare alla matematica del 21 ° secolo. Non accetterei la convinzione che la matematica abbia tutte le risposte e dovremmo tentare di ridurre i fenomeni computazionali a concetti matematici per comprenderli.

Ciò che mi stupisce è il modo in cui il nascondimento delle informazioni funziona magnificamente in calcoli con stato (programmazione imperativa e calcoli di processo), mentre è goffo e complicato nei formalismi matematici / funzionali. Sì, abbiamo parametricità relazionale e ci consente di aggirare molto bene i limiti dei formalismi matematici. Ma non corrisponde alla semplicità e all'eleganza della programmazione imperativa. Quindi, non credo che i formalismi matematici siano la risposta giusta, anche se ammetterei che sono la migliore risposta che abbiamo al momento. Ma dovremmo continuare a cercare. Esiste una buona teoria dei processi là fuori che batterà a mani basse la matematica tradizionale.


10

[Spero che questa sia la mia ultima risposta a questa domanda!]

La domanda originale di Ohad era su come la semantica denotazionale differisce dalla semantica operativa strutturale. Pensava che entrambi fossero compositivi. In realtà, non è vero. La semantica operativa strutturale è data come sequenze di passaggi. Ogni passaggio è espresso compositivamente (ed è notevole per Plotkin fare la scoperta che ciò è possibile!), Ma l'intero comportamento non è definito compositivamente. Ecco cosa dice Plotkin nella sua introduzione all'articolo SOS [enfasi aggiunta]:

Nella semantica denotazionale si segue un ideale di composizionalità, in cui il significato di una frase composta è dato in funzione del significato delle sue parti. Nel caso della semantica operativa si considera il comportamento di una frase di programma, che è solo la raccolta delle transizioni che può effettuare. Questo comportamento, tuttavia, non è compositivo se considerato come una funzione delle frasi del programma. Tuttavia le regole lo danno strutturalmente, cioè primitivo in modo ricorsivo, nella sintassi; ...

Il fatto che ogni passaggio sia espresso compositivamente non significa che l'intero comportamento sia espresso compositivamente.

C'è un bell'articolo di Carl Gunter chiamato Forms of Semantic Specification , in cui i diversi metodi per specificare la semantica vengono confrontati e contrastati. Gran parte di questo materiale è anche riprodotto nel primo capitolo del suo testo "Semantica dei linguaggi di programmazione". Questo dovrebbe chiarire l'immagine.

Un'altra parola su "semantica operativa". All'inizio, il termine "operativo" veniva utilizzato per fare riferimento a qualsiasi definizione semantica che faceva riferimento a fasi di valutazione dettagliate. Sia i semanticisti denotazionali che i proponenti assiomatici guardavano dall'alto in basso la semantica "operativa", considerandola di basso livello e orientata alla macchina. Penso che questo fosse davvero basato sulla loro convinzione che erano possibili descrizioni di livello superiore. Queste convinzioni furono infrante non appena considerarono la concorrenza. I processi di de Bakker e Zucker e la semantica denotazionale della concorrenza ha questi passaggi interessanti:

Useremo la metodologia della semantica denotazionale . "Denotazionale" dovrebbe essere qui contrapposto a "operativo": l'idea chiave del primo approccio è che le espressioni in un linguaggio di programmazione denotano valori in domini matematici dotati di una struttura appropriata, mentre in quest'ultimo le operazioni come prescritte dai costrutti del linguaggio sono modellato da passaggi eseguiti da qualche macchina astratta adatta ....

Il modello matematico contiene varie nozioni che, sebbene in stile denotazionale, sono operative nello spirito [enfasi aggiunta]. Questi includono la caratteristica "storia" della nozione di processo stesso e l'uso delle cosiddette mosse silenziose nel gestire la sincronizzazione e la ricorsione.

Qui vediamo gli autori alle prese con le due nozioni di "operativo", una la nozione tecnica - comportamento espresso usando manipolazioni sintattiche, e l'altra, la nozione concettuale - essendo di basso livello e dettagliata. Il merito va in gran parte a Plotkin e Milner per la riabilitazione della semantica "operativa", rendendola il più alto livello possibile e dimostrando che potrebbe essere elegante e perspicace.

Nonostante tutto, la nozione operativa di processo è ancora abbastanza diversa dalla nozione denotazionale di processo, quest'ultima sviluppata sia da De Bakker che da Hoare e dai loro team. E penso che ci siano molte cose misteriose e belle nel concetto di processo denotazionale che deve ancora essere compreso.


Siamo spiacenti di non aver risposto alla richiesta di chat. Sono molto impegnato per le prossime due settimane. Grazie per aver scritto questo! È la prima risposta tecnica sulla pagina che capisco.
Vijay D,

Potrei cogliere l'occasione per inserire una spina per la nostra Midlands Graduate School in Theoretical Computer Science, che ha lo scopo di affrontare tutti questi tipi di problemi. È aperto a tutti gli studenti di dottorato di ricerca, da qualsiasi parte del mondo.
Uday Reddy

9

Questa risposta aggiuntiva è di amplificare il punto in cui i modelli semantici denotazionali sono progettati per "spiegare" i fenomeni computazionali. Darò una serie di esempi tratti dalla semantica dei linguaggi di programmazione imperativa (chiamati anche linguaggi "simili ad Algol").

Prima c'era il modello semantico formulato da Scott e Strachey. (Cfr. Gordon: descrizione denotazionale dei linguaggi di programmazione - il mio preferito di tutti i tempi o il libro di Winskel.) Questo modello presuppone che esista uno stato globale , costituito dallo stato di tutte le posizioni assegnate da un programma. Ogni comando viene interpretato come una sorta di funzione dagli stati globali agli stati globali.

Reynolds ha detto che non ha modellato la disciplina dello stack delle variabili locali. Quando viene inserito un ambito locale, le sue variabili vengono allocate e vengono deallocate quando si esce dall'ambito. Fondamentalmente, questa è la domanda "in che senso le variabili locali sono locali?" In che modo la semantica cattura la località? Per spiegarlo, ha inventato un modello di categoria di funzioni. (Cfr. Reynolds: L'essenza di Algol e Tennent: semantica dei linguaggi di programmazione).

Tennent voleva modellare i principi di ragionamento formulati nella Logica delle specifiche di Reynolds (un'estensione di Hoare Logic per le procedure di ordine superiore). La logica ha idee come calcoli simili a espressioni (sola lettura), non interferenza tra calcoli simili a comandi e simili a espressioni e alcuni principi di ragionamento di astrazione dei dati. Ha perfezionato il modello della categoria di funzioni di Reynolds per trovarne uno nuovo. Questo chiamò il modello "SASL", anch'esso trattato nel libro di Tennent.

Meyer e Sieber, e anche O'Hearn e Tennent, hanno notato che nessuno di questi modelli ha ancora catturato completamente la località delle variabili locali. Quando due implementazioni di un tipo di dati astratto o una classe differiscono nelle loro variabili locali ma le manipolano in modi che hanno lo stesso comportamento se viste dall'esterno, sono equivalentemente osservazionali. La semantica denotazionale dovrebbe equipararli. Per modellarlo, O'Hearn e Tennent hanno aggiunto la parametricità relazionale a una variante del modello della categoria di funzioni di Reynolds.

Quando ho esaminato il problema allo stesso tempo, non credevo nell'approccio della categoria funzionale. Ho anche pensato che fosse eccessivamente tecnico e credevo che ci dovesse essere un modello più semplice. Questo mi ha portato a inventare il modello "Stato globale considerato non necessario", che è piuttosto come un modello di tracce CSP, ma per un linguaggio di ordine superiore. Come ulteriore vantaggio, questo modello ha anche catturato l' irreversibilità del cambiamento di stato, che non era presente nei modelli precedenti.

Il mio modello ha funzionato solo per una sublanguage ben educata di Algol, chiamata Syntactic Control of Interference . Abramsky e McCusker hanno esteso il mio modello usando idee di semantica di giochi in modo che possa funzionare per Algol. Quindi, il loro modello spiega gli stessi fenomeni del mio, ma per il linguaggio più ampio.

In ogni caso, siamo in grado di dimostrare che i nuovi modelli catturano equivalenze osservative (o altre forme di formule logiche) che mostrano i fenomeni computazionali menzionati, che non sono stati validati dai modelli precedenti. Quindi, c'è un senso molto preciso in cui questi modelli "spiegano" i fenomeni computazionali.

[Tutto il lavoro che ho citato qui può essere trovato nei volumi "Lingue simili all'Algol": link and link ]

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.