Il "significato" è usato in modo più ampio rispetto alla denotazione.
La dicotomia originale, ereditata dalla logica e dalla filosofia, è tra "senso" e "denotazione" (che i filosofi chiamano "riferimento").
Questa distinzione può essere illustrata dall'esempio originale di Frege. Ha osservato che le frasi "la stella del mattino" e "la stella della sera" si riferivano allo stesso oggetto --- il pianeta Venere --- ma che la frase "la stella del mattino e la stella della sera sono lo stesso pianeta" trasmette effettivamente alcune informazioni ad un lettore. Ha suggerito che il significato di una frase sostantivo può andare oltre l'oggetto reale che indica, incluso qualcosa su come presenta l'oggetto che indica.
Allo stesso modo, in un linguaggio di programmazione, l'espressione non è la stessa dell'espressione , anche se possono essere (dovrebbero essere!) Completamente indistinguibili da qualsiasi programma client. Ma anche se sono indistinguibili , non sono uguali : quando si valutano i due programmi, la macchina esegue una moltiplicazione nel primo caso e non nel secondo.8×756
Quando costruiamo una semantica denotazionale, proviamo a costruire un modello di una lingua in cui programmi indistinguibili denotano --- si riferiscono a --- lo stesso oggetto matematico. L'obiettivo è semplificare il ragionamento sul comportamento dei programmi, poiché possiamo ragionare sulle denotazioni, sugli oggetti matematici, senza doversi preoccupare dei dettagli di come viene presentato il programma. Questo ci consente di evitare di dover affrontare aspetti del significato dei programmi che non ci interessano.
Il modo in cui senso e denotazione si riferiscono alla semantica operativa è più complicato e diverso. Potrei estendere la mia risposta in seguito per coprire questo, ma ora devo correre. :)
EDIT: Okay, sto estendendo questa risposta ora.
La connessione tra "denotazione" e "riferimento" è praticamente esatta, ed è esatta perché le persone che hanno inventato la semantica denotazionale (ad esempio, Scott e Strachey) si appropriavano consapevolmente delle idee dalla logica filosofica come parte del loro progetto.
Per capire come si correlano significato e semantica operativa, è utile ricordare il concetto del filosofo Michael Dummett di una "teoria del significato" e come si differenzia da una "teoria semantica".
Nella terminologia di Dummett, una teoria semantica è un modo compositivo di mettere in relazione frasi con determinati oggetti matematici. Nella logica, il significato di una frase è il suo valore di verità, ed è determinato dai valori di verità dei suoi costituenti. La semantica denotazionale dei linguaggi di programmazione utilizza una varietà molto più ampia di oggetti matematici, ma funziona allo stesso modo: diamo il significato di un termine del programma in termini di significato dei suoi sotterfidi. Quindi, nella terminologia di Dummett, la semantica denotazionale offre teorie semantiche dei linguaggi di programmazione.
Una teoria del significato è anche un modo compositivo per mettere in relazione frasi con oggetti matematici, ma in più contiene un resoconto di ciò che giustifica la relazione tra la frase e l'oggetto matematico. Ha sviluppato questa idea per capire come i matematici intuizionisti comprendessero la nozione di verità. In particolare, avevano un resoconto compositivo del significato dei connettivi logici, ma non davano loro valori semantici allo stesso modo dei logici classici. Ad esempio, nel racconto di Brouwer-Heyting-Kolmogorov della logica intuizionista, la verità è definita nel modo seguente:
- Una prova canonica di è una coppia , dove è una prova canonica di e è una prova canonica di .A∧B(p1,p2)p1Ap2B
- Una dimostrazione canonica di è una coppia , dove è o , e se è , allora è una dimostrazione canonica di , e se è , allora è un la prova canonica .A∨B(i,p)i01i0pAi1pB
- Una prova canonica di è una procedura efficace, che prende alcuna prova canonica di e calcola una prova canonica di .A→BAB
- Una dimostrazione canonica di è una procedura efficace che accetta un numero e calcola una dimostrazione canonica di .∀x.A(x)nA(n)
- Una prova canonica di è una coppia , dove è un numero e è una prova di .∃x.A(x)(n,p)npA(n)
Una proposizione si dice che sia vero quando è possibile dare una prova canonica di .AA
Ora, nota che questa definizione collega proposizioni e valori di verità, ma la connessione deve essere giustificata dalla possibilità di fornire prove canoniche.
La semantica operativa entra in scena attraverso questa nozione di giustificazione. Una semantica operativa è solo una descrizione di ciò che fa una macchina astratta. Dopo aver dato una semantica denotazionale, generalmente vogliamo dimostrare che la semantica denotazionale è fedele alla semantica operativa. Questa proprietà si chiama adeguatezza (insieme all'astrazione completa del fratello maggiore ) e equivale esattamente a dare una teoria dei significati che collega gli stati macchina astratti con oggetti denotazionali, che è chiusa sotto la riduzione della macchina astratta.
Questa non è in realtà l'intera storia, poiché quello che ho esposto qui è come collegare gli approcci operativi e denotazionali attraverso un modello di realizzabilità. Le teorie dei tipi possono anche avere una semantica teorica delle prove (in effetti, questa prospettiva era ciò a cui Dummett era maggiormente interessato), ma non ho spiegato questa connessione in questo post.