We present a model of recursive and impredicatively quantified types with mutable references. We interpret in this model all of the type constructors needed for typed intermediate languages and typed assembly languages used for object-oriented and functional languages. We establish in this purely semantic fashion a soundness proof of the typing systems underlying these TILs and TALs--ensuring that every well-typed program is safe. The technique is generic, and applies to any small-step semantics including -calculus, labeled transition systems, and von Neumann machines. It is also simple, and reduces mainly to defining a Kripke semantics of the G?odel-L?ob logic of provability. We have mechanically verified in Coq the soundness of our type system as applied to a von Neumann machine. Categories and Subject Descriptors F.3.3 [Logics and Meanings of Programs]: Studies of Program Constructs-Type structure; F.3.2 [Logics and Meanings of Programs]: Semantics of Programming Languages; F.3.1 [...
Andrew W. Appel, Christopher D. Richards, Jé