Quali sono le differenze tra relazioni logiche e simulazioni?


29

Sono un principiante che lavora su metodi che dimostrano l'equivalenza del programma. Ho letto alcuni articoli sulla definizione di relazioni logiche o simulazioni per dimostrare che due programmi sono equivalenti. Ma sono abbastanza confuso su queste due tecniche.

So solo che le relazioni logiche sono definite induttivamente mentre le simulazioni si basano sulla coinduzione. Perché sono definiti in questi modi? Quali sono rispettivamente i loro pro e contro? Quale dovrei scegliere in diverse situazioni?


1
Potresti voler fornire link a questi documenti che hai letto. Ciò renderebbe più chiaro quali esempi specifici ti confondono.
Marc Hamann,

1
Per le relazioni logiche, ho letto il recente articolo di Hur e Dreyer "Una relazione logica tra Kripke e ML" (POPL'11). Ho anche letto i capitoli classici del libro di Pierce "Argomenti avanzati su tipi e linguaggi di programmazione". Trovo che le relazioni logiche siano definite induttivamente sulla struttura dei tipi della lingua, ma cosa succede se la lingua non ha una struttura dei tipi (come C)? (Sembra un'altra domanda, immagino.)
Hongjin Liang

1
Per le simulazioni, ho letto l'articolo originale "Leggi algebriche per il non determinismo e la concorrenza" di Hennessy e Milner. "Le piccole bisimulazioni di Koutavas e Wand per il ragionamento sui programmi imperativi di ordine superiore" (POPL'06) sono incomprensibili per me e non sono sicuro del perché abbiano chiamato il loro metodo "bisimulazione".
Hongjin Liang,

3
sarebbe meglio se includi le informazioni che hai fornito nei commenti nel post. È possibile modificare la domanda facendo clic sul collegamento Modifica sotto la domanda.
Kaveh,

1
@HongjinLiang: se non si dispone di una struttura di tipi (o se si hanno tipi ricorsivi), è possibile utilizzare le relazioni logiche indicizzate per passo - con le relazioni logiche si usa l'induzione sui tipi, con l'indicizzazione per passo si fa l'induzione per le fasi di osservazione. Troverai indicazioni nella dichiarazione di ricerca di Amal Ahmed: ccs.neu.edu/home/amal/ahmed-research.pdf . (Un'altra panoramica sulla ricerca sulle relazioni logiche è questa conferenza di Derek Dreyer e nella sua dichiarazione di ricerca: mpi-sws.org/~dreyer/research.pdf ).
Blaisorblade,

Risposte:


20

Ho una risposta a questa domanda che è forse romanzo. In effetti, ci sto ancora riflettendo negli ultimi 6 mesi o giù di lì, e non è ancora stato scritto sui giornali.

La tesi generale è che principi di ragionamento relazionale come "relazioni logiche", "simulazioni" e persino "invarianti" sono manifestazioni di astrazione di dati o occultamento di informazioni. Ovunque vi siano informazioni nascoste, questi principi emergono.

Le prime persone a scoprirlo furono i teorici degli automi. Gli automi hanno uno stato nascosto. Quindi hai bisogno di un ragionamento relazionale per parlare della loro equivalenza. I teorici degli automi hanno lottato con gli omomorfismi per un po ', hanno rinunciato e hanno escogitato una nozione chiamata "copertura relazionale", che è una forma di relazioni di simulazione.

Milner raccolse l'idea in un articolo poco conosciuto ma fondamentale chiamato " Un'idea algebrica di simulazione tra programmi " nel 1971. Hoare lo conosceva e lo usò per inventare " Prova della correttezza delle rappresentazioni dei dati " nel 1972 (ma usato l'astrazione funziona invece delle relazioni perché pensava che fossero "più semplici"). In seguito ha ritirato la richiesta di semplicità e è tornato a utilizzare le relazioni in " Affinamento dei dati perfezionato ". Reynolds ha usato il ragionamento relazionale in " Craft of Programming", Capitolo 5 (1981). Pensava che le relazioni fossero più naturali e generali delle funzioni di astrazione. Se torni a leggere questo capitolo, troverai idee di parametricità relazionale in agguato, in attesa di essere scoperte. Certo, due anni dopo, Reynolds ha pubblicato "Tipi, astrazione e polimorfismo parametrico" (1983).

Sembra che tutte queste idee non abbiano nulla a che fare con i tipi, ma lo fanno davvero. I linguaggi e i modelli con stato hanno l'astrazione dei dati integrata . Non è necessario definire un "tipo di dati astratto" per nascondere le informazioni. Devi solo dichiarare una variabile locale e nasconderla. Possiamo insegnarlo agli studenti del primo anno nelle lezioni di Java nelle prime settimane. Niente sudore.

MMMMXXRF(X)F(X)F(R)

Quindi, simulazioni e parametricità relazionale sono essenzialmente la stessa idea . Non è semplicemente una somiglianza superficiale. Il primo è progettato per linguaggi con stato in cui è presente l'astrazione dei dati integrata. Quest'ultimo è realizzato per linguaggi senza stato in cui l'astrazione dei dati è ottenuta tramite variabili di tipo.

Che dire delle relazioni logiche allora? In apparenza, le relazioni logiche sembrano essere un'idea più generale. Mentre la parametricità parla di come mettere in relazione le variabili di tipo all'interno dello stesso modello, le relazioni logiche sembrano mettere in relazione i tipi tra modelli diversi. (Dave Clarke ha scritto una brillante esposizione di questo in precedenza.) Ma la mia sensazione è (e deve ancora essere dimostrata) che questo è un esempio di qualche forma di parametricità di tipo superiore che non è stata ancora formulata. Resta sintonizzato per ulteriori progressi su questo fronte.


[Nota aggiunta] La connessione tra relazioni logiche e simulazioni è discussa nel nostro recente articolo Relazioni logiche e parametria: un programma Reynolds per la teoria delle categorie e i linguaggi di programmazione .


F(R)Rfunctor F

FR:XXF(R):F(X)F(X)F(R)F(R)

14

Una delle differenze chiave è che le relazioni logiche vengono utilizzate come tecnica per mostrare che una classe di programmi (ad esempio, input per un compilatore) corrisponde a un'altra classe di programmi (ad esempio, l'output del compilatore), mentre vengono utilizzate le relazioni di simulazione per mostrare la corrispondenza tra due programmi.

La somiglianza tra le due nozioni è che entrambe definiscono una relazione utilizzata per mostrare la corrispondenza tra due entità diverse. In un certo senso, si può pensare a una relazione logica come una relazione di simulazione definita induttivamente sulla sintassi dei tipi. Ma esistono diversi tipi di relazioni di simulazione.

Le relazioni logiche possono essere utilizzate per mostrare la corrispondenza tra una lingua come ML e la sua traduzione in linguaggio assembly, come nel documento che leggi. Una relazione logica viene definita induttivamente sulla struttura del tipo. Una relazione logica fornisce un mezzo compositivo per mostrare, ad esempio, che una traduzione è corretta, mostrando che la traduzione è corretta per ciascun costruttore di tipi. Ai tipi di funzione la condizione della condizione di correttezza direbbe qualcosa del genere, la traduzione di questa funzione richiede input ben tradotti in output ben tradotti.

Le relazioni logiche sono una tecnica versatile per i linguaggi basata sul calcolo lambda. Altre applicazioni delle relazioni logiche includono (da qui ): caratterizzare la definibilità lambda, correlare definizioni semantiche denotazionali, caratterizzare il polimorfismo parametrico, modellare l'interpretazione astratta, verificare rappresentazioni di dati, definire semantica completamente astratta e modellare lo stato locale in linguaggi di ordine superiore.

Le relazioni di simulazione sono generalmente utilizzate per mostrare l'equivalenza di due programmi. In genere tali programmi producono un certo tipo di osservazione, come l'invio di messaggi sui canali. Un programma P simula un altro Q se P può fare tutto ciò che Q può fare, anche se forse di più.

La bisimulazione, approssimativamente, è due relazioni di simulazione messe insieme. Dimostri che il programma P e simula il programma Q e che il programma Q può simulare il programma P e hai una bisimulazione, sebbene generalmente siano presenti condizioni aggiuntive. La voce di Wikipedia sulla bisimulazione è un buon punto di partenza (più preciso). Esistono migliaia di varianti dell'idea, ma è un'idea fondamentale che è stata reinventata più o meno nella stessa forma di informatica, logica modale e teoria dei modelli. L' articolo di Sangiorgi offre una meravigliosa storia dell'idea.

Un documento che stabilisce una relazione tra le due nozioni è una nota sulle relazioni logiche tra semantica e sintassi di Andy Pitts che utilizza relazioni logiche, in definitiva una nozione semantica definita sintatticamente, per dimostrare una certa proprietà sulla bisimulazione applicativa , che è una nozione puramente sintattica.


Grazie mille per la tua spiegazione dettagliata! Leggerò i tuoi riferimenti e cercherò di capire connessioni profonde / differenze tra i due.
Hongjin Liang,

sei sicuro dell'affermazione "Mostri quel programma P e simuli il programma Q e quel programma Q può simulare il programma P e hai una bisimulazione."? Sia A = (a. (B + c)) + (a.b + ac) e B = a.b + ac quando per quanto posso dire A è simile a B, B è simile ad A, ma A e B non sono bisimilari.
András Salamon,

@ András: hai ragione. La mia affermazione non è abbastanza precisa. La differenza viene sottratta alla frase "Potrebbero essere presenti alcune condizioni aggiuntive".
Dave Clarke,

Hennessy e Milner hanno definito tre tipi di relazioni di equivalenza nel loro documento originale per la bisimulazione e hanno fornito alcuni esempi per illustrare le loro differenze. La tua affermazione originale è in realtà quella media nel loro documento, che è più debole della bisimulazione e più forte dell'equivalenza in tracce. Non sono sicuro di quale equivalenza sia migliore. Forse dipende dall'uso pratico.
Hongjin Liang,

La simulazione viene anche utilizzata come tecnica di prova per stabilire il perfezionamento dei dati tra due tipi di dati. Ognuna di queste prove di simulazione riguarda intere classi di programmi. Vedi ad esempio [1] per i dettagli. Ciò suggerisce che la distinzione tra i due concetti è ancora più sfocata. [1]: CAR Hoare, He J e JW Sanders. Prespecificazione nell'affinamento dei dati. Lettere per l'elaborazione delle informazioni , 25: 71-76, 1987.
Kai

8

I due tipi di relazioni sembrano essere utilizzati in contesti diversi. Simulazioni logiche per linguaggi tipizzati e relazioni di simulazione quando si tratta di calcoli di processo o logiche modali interpretate su sistemi di transizione. Dave Clarke ha fornito molte spiegazioni intuitive, quindi aggiungerò solo alcuni suggerimenti che potrebbero aiutare.

Si è lavorato per caratterizzare entrambe le nozioni usando l'interpretazione astratta. Potrebbe non essere quello che vuoi, ma almeno entrambe le nozioni sono trattate nello stesso quadro matematico.

Samson Abramsky ha usato le relazioni logiche per dimostrare la solidità e la conclusione dell'analisi di rigidezza per il pigro calcolo Lambda ( interpretazione astratta, relazioni logiche ed estensioni Kan ). Ha anche mostrato che le relazioni logiche definiscono le funzioni di astrazione nel senso di interpretazione astratta della connessione di Galois. Più recentemente, Backhouse e Backhouse hanno mostrato come costruire connessioni Galois per tipi di ordine superiore da connessioni Galois per tipi di base e che queste costruzioni possono essere descritte in modo equivalente usando relazioni logiche ( Relazioni logiche e Connessioni Galois ). Pertanto, nel contesto specifico dei linguaggi funzionali tipizzati, le due nozioni sono equivalenti.

Le relazioni di simulazione caratterizzano la conservazione delle proprietà tra le strutture di Kripke per varie logiche modali e temporali. Invece dei tipi, abbiamo modalità in una logica. Le relazioni di simulazione definiscono anche le connessioni di Galois e quindi le astrazioni. Si può chiedere se queste astrazioni hanno proprietà speciali. La risposta è che le astrazioni standard sono solide e le astrazioni basate sulla relazione di simulazione sono complete. La nozione di completezza riguarda le connessioni di Galois, che potrebbero non concordare con quelle interpretazioni intuitive. Questa linea di lavoro è stata sviluppata da David Schmidt ( Relazioni binarie di conservazione delle strutture per l'astrazione del programma ) e da Francesco Ranzato e Francesco Tapparo ( Preservazione forte generalizzata di interpretazione astratta ).


La tua risposta è molto utile che collega i concetti con l'interpretazione astratta. Grazie!
Hongjin Liang,

Una domanda sincera: non sono un esperto, ma Reynolds (1983, "Tipi, astrazione e polimorfismo parametrico") non definisce già relazioni logiche che sono connessioni di Galois (Sez. 6)? Le uniche differenze che noto: non dice il termine "connessione di Galois" ma solo l'equivalente "aggiunta di funzioni tra ordini parziali considerati categorie" e si limita ai domini. OTOH, Backhouse e Backhouse citano Reynolds ma non discutono di questa affermazione, in un modo o nell'altro.
Blaisorblade,

6

Direi che i due concetti sono piuttosto vaghi. Entrambi riguardano relazioni binarie di meccanismi computazionali che in qualche modo incarnano una nozione di uguaglianza. Le relazioni logiche sono definite dall'induzione della struttura del tipo, mentre le simulazioni possono essere definite come desiderato, ma il termine allude alla coinduzione.

π


Il tuo riferimento è davvero bello! Non ho mai sentito relazioni logiche per programmi concorrenti prima. Grazie! Immagino che la difficoltà di definire una relazione logica sia nel trovare la struttura del tipo. Con la stessa struttura di tipi, è possibile definire una relazione logica tra linguaggi di programmazione diversi. D'altra parte, una simulazione richiede programmi di modellizzazione da parte di un sistema di transizione di stato, il che potrebbe essere inquieto se i programmi sono scritti per modelli di stato diversi.
Hongjin Liang,

Ciao! Sì, trovare una struttura del tipo appropriata potrebbe non essere sempre facile. È possibile definire simulazioni utilizzando diversi sistemi di transizione per i due calcoli che si desidera confrontare. Si potrebbe sostenere che la definizione di simulazione debole fa proprio questo. Tutto ciò di cui hai veramente bisogno per definire le simulazioni è una relazione per confrontare le etichette di transizione.
Martin Berger,
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.