Sono interessato a compilatori verificati formalizzati nella teoria dei tipi di Martin-Löf, ovvero Coq / Agda. Al momento ho scritto un piccolo esempio di giocattolo. In tal modo posso dimostrare che le mie ottimizzazioni sono corrette. Ad esempio, è possibile eliminare le aggiunte con zero, ovvero espressioni come "x + 0".
Ci sono ottimizzazioni difficili da eseguire con un normale compilatore, che potrebbero servire da buon esempio? È possibile dimostrare alcune proprietà di un programma che consentono ottimizzazioni che non è possibile eseguire con un compilatore regolare? (cioè senza l'inferenza che è possibile con un teorema prover)
Sarei interessato a idee o esempi e anche a riferimenti sull'argomento.
Una domanda correlata: prove di correttezza del compilatore
modifica: Come Tsuyoshi ha ben inserito nei commenti: sto cercando tecniche di ottimizzazione che sono difficili da implementare se un compilatore è scritto in (diciamo) C ma più facile da implementare se un compilatore è scritto in (diciamo) Coq. Mentre Agda si compila in C (tramite haskell) è possibile fare tutto il possibile in Agda anche in C. Probabilmente l'unico vantaggio dei dimostratori di teoremi come Coq / Agda è che il compilatore e le ottimizzazioni possono essere verificati.
edit2: Come suggerito da Vijay DI, scrivi quello che ho letto finora. Mi sono concentrato principalmente su Xavier Leroy e sul progetto CompCert di INRIA (c'è un documento di 80 pagine che è una buona lettura, credo). Un secondo interesse è stato per il lavoro di Anton Setzer sui programmi interattivi. Pensavo che forse il suo lavoro potesse essere usato per dimostrare le proprietà dei programmi IO e la bisimulazione dei programmi IO. Grazie per aver menzionato Sewell. Ho sentito il suo discorso "Racconti dalla giungla" all'ICFP e ho letto forse 2-3 dei suoi articoli. Ma non ho esaminato in modo specifico il suo lavoro e quello dei suoi coautori.
Non ho ancora scoperto da dove iniziare o cercare documenti sull'ottimizzazione dei compilatori; ad esempio, quali ottimizzazioni sarebbero interessanti da guardare nell'impostazione di un compilatore verificato.