Piena completezza e completa astrazione della traduzione di un programma


15

Gli sforzi di verifica del compilatore spesso si riducono a dimostrare che il compilatore è completamente astratto: che preserva e riflette le equivalenze (contestuali).

Invece di fornire prove complete di astrazione, alcuni recenti lavori di verifica del compilatore (basati su categorie) di Hasegawa [ 1 , 2 ] e Egger et. al. [ 3 ] dimostra la completezza completa di varie traduzioni CPS.

Domanda: Qual è la differenza tra completezza completa e piena astrazione?

Per me, la completezza sembra solo un riflesso di equivalenza per una traduzione e la pienezza sembra essere una conseguenza della conservazione dell'equivalenza.

Nota : Sia Curien [ 7 ] che Abramsky [ 8 ] esplorano la relazione tra definibilità, piena astrazione e, in certa misura, piena completezza. Sospetto che queste risorse possano avere la risposta alla mia domanda, ma dopo una lettura superficiale devo ancora confermarlo.

Alcuni retroscena: il termine "piena completezza" è stato coniato da Abramsky e Jagadeesan [ 4 ] per caratterizzare la correttezza di un modello semantico di gioco della logica lineare moltiplicativa.

Blute [ 5 ] fornisce la seguente definizione:

Sia una categoria libera. Diciamo che un modello categorico è completamente completo per o che abbiamo piena completezza di rispetto a se, rispetto ad alcune interpretazioni dei generatori , l'unica funzione gratuita è piena.FF F M [M FFM[[]]:FM

Per quanto ne so, Hasegawa in [ 6 ] è il primo ad adattare la completezza completa per descrivere una traduzione del programma anziché un modello semantico categorico. In questo caso, la traduzione di Girard dal semplice calcolo lambda digitato al calcolo lambda lineare. Successivamente, in [ 1 ], definisce la completezza completa della traduzione CPS come:()

Se è derivabile nel calcolo lambda lineare, allora esiste \ Gamma \ vdash M: \ sigma nel calcolo calcolo lambda tale che \ Gamma ^ {\ circ}; \ emptyset \ vdash M ^ \ circ = N: (\ sigma ^ \ circ \ rightarrow o) \ multimap o contiene nel calcolo lambda lineare.Γ;N:(σo)oΓM:σΓ;M=N:(σo)o

(dove è un tipo di base nel calcolo lambda lineare (lingua di destinazione), ma non nel calcolo lambda computazionale (lingua di origine).)o

Per me, la definizione di Hasegawa sembra una pienezza e dovrebbe davvero essere combinata con completezza per ottenere piena completezza.

Egger et. al. [ 3 ] definisce la completezza completa di una traduzione CPS come una combinazione di (1) completezza e (2) pienezza:()v

(1): Se e thenΘM,N:τΘv|Mv=βηNv:!τvΘM=λcN:τ

(2): If allora esiste un termine tale cheΘv|t:!τvΘM:τΘv|Mv=βηt:!τv

(dove è la teoria equazionale computazionale di Moggi)=λc


[1] " Effetti usati linearmente: trasformazioni monadiche e CPS in calcolo lambda lineare ", Hasegawa 2002

[2] " Semantica della continuazione lineare del passaggio per chiamata ", Hasegawa 2004

[3] " Traduzioni CPS ad uso lineare nel calcolo dell'effetto arricchito ", Egger et. al. 2012

[4] " Giochi e completezza completa per la logica lineare moltiplicativa ", Abramsky e Jagadeesan 1992

[5] " Teoria delle categorie per logici lineari ", Blute 2003

[6] " Predicati logici e di traduzione Girard ", Hasegawa 2000

[7] " Definibilità e piena astrazione ", Curien 2007

[8] " Axioms for Definability and Full Completeeness ", Abramsky 1999

Risposte:


12

Sfortunatamente, ci sono troppe cose che stanno succedendo qui. Quindi, è facile mescolare le cose. L'uso di "pieno" in "piena completezza" e "piena astrazione" si riferisce a idee completamente diverse di pienezza. Ma c'è anche una vaga connessione tra loro. Quindi, questa sarà una risposta complicata.

Completezza completa : "Suono e completezza" è una proprietà che una logica tradizionale desidera avere rispetto alla sua semantica. La solidità significa che qualunque cosa tu possa dimostrare nella logica è vera nel modello semantico. Completezza significa che tutto ciò che è vero nel modello semantico è dimostrabile nella logica. Diciamo che una logica è solida e completa per un particolare modello semantico. Quando arriviamo alla logica costruttiva, come la teoria dei tipi di Martin-Lof o la logica lineare, ci preoccupiamo non solo se le formule siano dimostrabili, ma anche quali siano le loro prove. Una formula dimostrabile può avere molte prove e una logica costruttiva vuole tenerle separate. Quindi, una semantica per una logica costruttiva implica specificare non solo se una formula è vera, ma anche qualche nozione astratta semantica di "prova" ("evidenza") per la sua verità. Abramsky e colleghi hanno coniato il termine "completezza totale" per indicare che le prove nella logica possono esprimere tutte le prove semantiche nel modello. Quindi, "completo" si riferisce alle prove qui. Una logica "completa" può dimostrare tutto ciò di cui ha bisogno. Una logica "completamente completa" ha tutte le prove che deve avere. Quindi "completezza completa" significa "completezza costruttiva" o "completezza di prova". Questo non ha nulla a che fare con la piena astrazione.

Astrazione totale : "Adeguato e completamente astratto" è una proprietà desiderata per il modello semantico di un linguaggio di programmazione. (Nota la prima differenza: ora abbiamo a che fare con le proprietà del modello semantico, non le proprietà del linguaggio!) Adeguatezza significa che, ogni volta che due termini hanno lo stesso significato nel modello semantico, sono osservativamente equivalenti nel linguaggio di programmazione (rispetto ad alcune nozioni di esecuzione). Astrazione totale significa che, se due termini sono equivalentemente osservazionali, hanno lo stesso significato nel modello semantico. Queste idee possono essere correlate alla solidità e completezza, ma in modo un po 'inventato. Se pensiamo al modello semantico di un linguaggio di programmazione come una "logica" o un "metodo di prova" per parlare di equivalenza osservativa, allora l'adeguatezza significa che questo metodo di prova è valido; astrazione completa significa che questo metodo di prova è completo. Non vi è alcuna nozione di "completezza totale"metodo di prova. (Ma una cosa del genere è teoricamente possibile e uno di questi giorni qualcuno potrebbe farlo.)

Nel tuo caso, sei interessato alle traduzioni piuttosto che ai modelli semantici. Le proprietà dell'adeguatezza e della piena astrazione possono essere estese per trattare le traduzioni come segue. Pensi alla lingua target come al tuo "modello semantico", cioè a un formalismo che in qualche modo comprendi appieno. Se è così, hai qualche nozione di equivalenza per questo. Quindi, diciamo che la traduzione è adeguata se, ogni volta che le traduzioni di due programmi sorgente sono equivalenti nella lingua di destinazione, sono equivalentemente osservazionali nella lingua sorgente. Diciamo che è completamente astratto se, ogni volta che due programmi sorgente sono equivalentemente osservazionali nella lingua sorgente, le loro traduzioni sono equivalenti nella lingua target.

In realtà, non conosco alcuna lingua di destinazione che "capiamo" completamente. Tutto ciò che sappiamo è un'altra nozione di equivalenza osservativa per la lingua di destinazione. In tal caso, la traduzione è adeguata se l'equivalenza osservativa delle traduzioni nella lingua di arrivo implica l'equivalenza osservativa nella lingua di partenza. La traduzione è completamente astratta se l'equivalenza osservativa dei termini nella lingua di partenza implica l'equivalenza osservativa delle traduzioni nella lingua di destinazione. Alcuni autori prendono "traduzione completamente astratta" per indicare la combinazione di queste due proprietà:

τ(M)τ(N)MN
MNτ(M)τ(N)
MNτ(M)τ(N)

Egger et al sembrano estendere allo stesso modo l'idea di piena completezza alle traduzioni. Nel loro set-up, le formule sono tipi e le prove sono termini. La loro traduzione traduce sia tipi che termini. Chiamano loro traduzione pienamente compiuta se la definizione di un tipo ha solo quei termini che sono ottenuti traducendo le condizioni iniziali di tipo . AA

N:τ(A).M:A.τ(M)=N

Ora per la vaga connessione tra piena completezza e piena astrazione. Dimostrare che un modello semantico o una traduzione è completamente astratta spesso implica un po 'di definibilità. Questo perché le nostre lingue sono generalmente di ordine superiore. Quindi, se il modello semantico o la lingua target hanno troppi "contesti", allora sarà in grado di stimolare i nostri termini o significati semantici in modi indesiderati e rovinare la loro equivalenza. "Modi indesiderati" significa che il linguaggio di programmazione stesso non è in grado di colpirli. Quindi, per ottenere la piena astrazione, dobbiamo garantire che i "contesti" disponibili nel modello semantico o nella lingua di destinazione provengano da quelli nella lingua di origine in qualche forma. Si noti che ciò si riferisce alla proprietà di completezza completa.

Perché vogliamo tali proprietà? Non ha nientea che fare con i compilatori! Vogliamo queste proprietà al fine di affermare che la lingua di origine è incorporata nella lingua di destinazione. Se siamo contenti di una particolare lingua di destinazione (come essere chiari, comprensibili, in qualche modo fondamentali o dati da Dio), allora, se la lingua di partenza si incorpora in essa, allora possiamo affermare che non c'è nulla di nuovo nella lingua di partenza. È solo un frammento della lingua di destinazione che conosciamo e amiamo. È solo zucchero sintattico. Quindi, le traduzioni completamente astratte sono date dalle persone per stabilire che particolari lingue di destinazione sono ottime. A volte sono anche dati da persone che hanno un linguaggio grande o complicato da affrontare. Quindi, invece di definire direttamente una semantica per essa, la traducono in un linguaggio di base e quindi forniscono la semantica al linguaggio di base. Ad esempio, il rapporto Haskell fa questo. Ma la piena astrazione di queste traduzioni raramente viene mai provata perché le lingue di origine sono grandi e complicate. Le persone credono che la traduzione sia buona.

Ancora una volta, questo non ha nulla a che fare con i compilatori. I compilatori raramente sono mai adeguati o completamente astratti. E non hanno bisogno di esserlo! Tutto quello che un compilatore deve fare è preservare il comportamento di esecuzione di programmi completi. La lingua di destinazione di un compilatore è generalmente enorme, il che significa che ha molti contesti che possono rovinare l'equivalenza. Pertanto, i programmi equivalenti nella lingua di origine non sono quasi mai contestualmente equivalenti quando compilati.


Cosa intendi dicendo che non ci sono lingue che "capiamo" in modo completo?
Martin Berger,

Cosa intendi dicendo che nessuno ha ancora prodotto un modello semantico che rappresenti un metodo di prova costruttivo?
Martin Berger,

1
Mi dispiace, ma le implicazioni per le "traduzioni" mi sembrano nella direzione sbagliata, rispetto al tuo testo precedente. Astrazione completa per, diciamo, PCF chiede M≅N⟹τ (M) ≅τ (N) (con τ come semantica denotazionale e ignorando la necessità di cambiare i simboli): come dici tu, "Astrazione completa significa che, se due termini sono equivalentemente osservazionali, hanno lo stesso significato nel modello semantico ". Ma la tua implicazione è il contrario (ovvero scrivi τ (M) ≅τ (N) ⟹M≅N)! O le traduzioni funzionano diversamente dalla semantica denotazionale?
Blaisorblade,

1
@Blaisorblade: hai assolutamente ragione! Ho apportato una correzione al testo della mia risposta.
Uday Reddy,

1
La piena astrazione è anche di interesse per la sicurezza a livello linguistico e potenzialmente per l'integrazione tra lingue. Vale a dire, è utile sapere che nulla nella lingua di destinazione può violare le astrazioni della lingua di partenza.
dmbarbour,

5

Riepilogo: completezza totale significa che la funzione di interpretazione non è solo completa, ma anche suriettiva nei programmi. L'astrazione completa non ha bisogno di suriettività.

[[.]]

  • A[[A]]

  • Γ[[Γ]]

  • ΓP:α[[Γ]][[P]]:[[α]]

[[.]]

PSQ     iff     [[P]]T[[Q]]

P,QST

PΓ,αSQ     iff     [[P]][[Γ]],[[α]]T[[Q]]
Γ,α,P,Q[[.]]

[[.]]

[[.]][[Γ]]Q:[[α]]ΓP:αQ=[[P]][[.]]

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.