Possiamo distinguere metodi strettamente sintattici e semantici nel linguaggio di programmazione?


14

Mentre si discute di forti prove di normalizzazione, questo commento contrappone il "modello di forme normali" con "metodi puramente sintattici".

Questo mi riporta a una domanda più basilare: possiamo ancora distinguere rigorosamente le costruzioni sintattiche e semantiche, di fronte ai modelli basati sulla sintassi? E i modelli a termine per algebre, i modelli Henkin per le logiche del primo ordine? Che dire della semantica operativa strutturale? Poiché i modelli di termini possono essere isomorfi per la sintassi, sembra difficile fare una distinzione ferma.

Fino a quando non ho studiato la differenza tra la teoria della dimostrazione e la teoria dei modelli in logica, ero persino sconcertato dall'idea che "i sistemi di tipo statico sono un metodo sintattico". Dopotutto, un sistema di tipi ragiona sui tipi, che sono un'astrazione del comportamento del programma (e con tipi dipendenti, arbitrariamente precisi).

Risposte:


14

No, non puoi distinguere rigorosamente i metodi sintattici dai metodi semantici, ma la distinzione finisce per avere un senso.

  • La semantica operativa strutturale non è denotazionale, perché non è un metodo compositivo per dare semantica a un linguaggio di programmazione.

  • Tuttavia, è possibile creare modelli denotazionali da una semantica operativa strutturale utilizzando un metodo di realizzabilità o relazioni logiche. Ad esempio, vedi Costruire sistemi di tipo di Robert Harper sulla semantica operativa .

  • λ

  • Nella direzione opposta, se hai una semantica denotazionale, potresti voler capire quale sia la sintassi per essa. Quindi vuoi andare a trovare una sintassi e una macchina astratta il cui termine modello possa fungere da oggetto iniziale in una categoria di modelli adatta.

    Ad esempio, la semantica dei giochi ha iniziato la sua vita come una costruzione puramente semantica, e alla fine ha portato a lavorare sulla semantica dei giochi operativi, un recente esempio del calcolo di Lambda lambda-bar di Alexis Goyet : un doppio calcolo per strategie non vincolate .

  • Nel complesso, puoi pensare alla semantica operativa strutturale come un modo per specificare macchine astratte, che speriamo siano facili da implementare. Una semantica denotazionale fornisce un modello compositivo di un linguaggio, di cui speriamo sia facile ragionare. Se abbiamo entrambi, allora possiamo implementare e ragionare sulla lingua.

  • I teoremi di normalizzazione sono un caso ambiguo interessante. Di solito, per dimostrare la normalizzazione, è necessario un modello semantico (in genere una relazione logica). Tuttavia, una volta che sai che la normalizzazione è valida, molte proprietà possono ora essere dimostrate dall'induzione su forme normali, che è un argomento puramente sintattico.

    Per logiche deboli (qualsiasi cosa fino alla logica del primo ordine senza induzione, approssimativamente), puoi provare la normalizzazione sintatticamente, usando la tecnica della sostituzione ereditaria . In queste logiche, la proprietà dei subformula è valida e quindi puoi provare la normalizzazione mediante l'induzione sui tipi. Vedi l'articolo di Frank Pfenning Structural Cut Elimination per una spiegazione di come funziona.


Caspita, grazie per la risposta rapida e completa!
Blaisorblade,

Non sono d'accordo sul motivo per cui hai indicato che la semantica operativa non è denotazionale. La semantica operativa non è denotazionale perché nessuna denotazione è assegnata ai programmi. Esistono lavori che rendono compositiva la semantica operativa.
giorno
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.