Per una prova di correttezza, sto cercando una nozione utilizzabile di equivalenza di programma per i sistemi di tipo puro (PTS) di Barendregt; manca quello, per sistemi di tipo abbastanza specifici. Il mio obiettivo è semplicemente usare la nozione, non investigarla per se stessa.
Questa nozione dovrebbe essere " estesa " - in particolare, per dimostrare che , dovrebbe essere sufficiente provare che per tutti i valori del tipo appropriato.t 1v
Equivalenza denotazionale
L'equivalenza denotazionale soddisfa facilmente tutti i lemmi giusti, ma una semantica denotazionale per PTS arbitrari sembra piuttosto impegnativa - sembrerebbe difficile già per System F.
Equivalenza contestuale / osservativa
Le ovvie alternative sono quindi varie forme di equivalenza contestuale (due termini sono equivalenti se nessun contesto fondamentale li può distinguere), ma la sua definizione non è immediatamente utilizzabile; i vari lemmi non sono banali da dimostrare. Sono stati dimostrati per PTS? In alternativa, la teoria sarebbe una "ovvia estensione", o c'è motivo di credere che la teoria sarebbe significativamente diversa?
EDIT: non ho detto cosa è difficile sopra.
Parte facile: la definizione
Definire l'equivalenza non è troppo difficile, e la definizione appare in molti articoli (a partire almeno dallo studio Plotkin del 1975 sulla PCF, se non prima - la fonte potrebbe essere la tesi di dottorato di Morris del 1968). Abbiamo se per tutti i terrestri contesti , - che è, e danno lo stesso risultato . Hai alcune scelte qui con molte alternative: Ad esempio, in un linguaggio fortemente normalizzante, se hai un tipo di terreno di naturali, puoi dire che i contesti di terreno sono quelli che restituiscono i naturali, quindi significa che e C C [ t 1 ] ≃ C [ t 2 ] C [ t 1 ] C [ t 2 ] a ≃ b a bvalutare con lo stesso numero. Con il non termine, per linguaggi ragionevoli è sufficiente usare "X terminate" come osservazione, perché se due programmi sono equivalenti quando si osserva la terminazione, sono anche equivalenti quando si osserva il risultato.
Parte difficile: le prove
Tuttavia, questi articoli spesso non spiegano quanto sia difficile usare effettivamente questa definizione. Tutti i riferimenti sotto mostrano come affrontare questo problema, ma la teoria necessaria è più difficile di quanto si pensi. Come dimostriamo che ? Facciamo effettivamente analisi di casi e induzione su contesti? Non vuoi farlo.
Come sottolinea Martin Berger, si desidera invece utilizzare la bisimulazione (come quella di Pitts) o una relazione di equivalenza logica (che Harper chiama semplicemente "equivalenza logica").
Infine, come si dimostra l'estensione come definito sopra?
Harper risolve queste domande in 10 pagine per System T, attraverso una notevole intelligenza e relazioni logiche. Pitts prende di più. Alcune lingue sono ancora più complesse.
Come gestirlo
In realtà sono tentato di rendere le mie prove condizionatamente a una teoria congetturata dell'equivalenza per PTS, ma le teorie attuali richiedono argomenti non banali, quindi non sono sicuro di quanto probabilmente una simile congettura sarebbe valida.
Sono a conoscenza (anche se non in dettaglio) dei seguenti lavori:
- Andrew Pitts (ad esempio in ATTAPL per un sistema F esteso, e in alcuni articoli, come "Teorie operative sull'equivalenza del programma" di 58 pagine).
- Fondamenti pratici dei linguaggi di programmazione (capitoli 47-48), che si ispira a Pitts (ma afferma di avere prove più semplici).
- Uno studio logico dell'equivalenza del programma . Non riesco a trovare un abstract in inglese, ma sembra che stia spendendo molto sforzo per gli effetti collaterali (riferimenti), che sembra una complicazione ortogonale.