A verified compiler for an impure functional language

Adam Chlipala
2010 Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages - POPL '10  
Source language e ::= c | e = e | x | e e | fix f(x). e | let x = e in e | () | (e, e) | fst(e) | snd(e) | inl(e) | inr(e) | case e of inl(x) => e | inr(x) => e | ref(e) | !e | e := e | raise(e) | e handle x => e Target language Lvalues L ::= r | [r + n] | [n] Rvalues R ::= n | r | [r + n] | [n] Instructions I ::= L := R | L := R == R | r += n | jnz R, n Jumps J ::= halt | fail | jmp R Basic blocks B ::= (I*, J) Programs P ::= (B*, B)
doi:10.1145/1706299.1706312 dblp:conf/popl/Chlipala10 fatcat:vifgpglihfg3pc5wtuskbpbioe