Scala Step-by-Step: Soundness for DOT with Step-Indexed Logical Relations in Iris


Paolo G. Giarrusso, Léo Stefanesco, Amin Timany, Lars Birkedal, and Robbert Krebbers: Scala Step-by-Step: Soundness for DOT with Step-Indexed Logical Relations in Iris. In PACMPL 4(ICFP): 114:1-114:29 (2020), June 2020. https://doi.org/10.1145/3408996
Journal Paper
Abstract.

The metatheory of Scala''s core type system — the Dependent Object Types (DOT) calculus — is hard to extend, like the metatheory of other type systems combining subtyping and dependent types. Soundness of important Scala features therefore remains an open problem in theory and in practice. To address some of these problems, we use a semantics-first approach to develop a logical relations model for a new version of DOT, called guarded DOT (gDOT). Our logical relations model makes use of an abstract form of step-indexing, as supported by the Iris framework, to model various forms of recursion in gDOT. To demonstrate the expressiveness of gDOT, we show that it handles Scala examples that could not be handled by previous versions of DOT, and prove using our logical relations model that gDOT provides the desired data abstraction. The gDOT type system, its semantic model, its soundness proofs, and all examples in the paper have been mechanized in Coq.

The bibtex source for this publication:
@article{DBLP:journals/pacmpl/GiarrussoSTBK20,
  author    = {Paolo G. Giarrusso and
               L{\'{e}}o Stefanesco and
               Amin Timany and
               Lars Birkedal and
               Robbert Krebbers},
  title     = {Scala step-by-step: soundness for {DOT} with step-indexed logical
               relations in Iris},
  journal   = {Proc. {ACM} Program. Lang.},
  volume    = {4},
  number    = {{ICFP}},
  pages     = {114:1--114:29},
  year      = {2020},
  url       = {https://doi.org/10.1145/3408996},
  doi       = {10.1145/3408996},
  timestamp = {Wed, 05 Aug 2020 14:40:50 +0200},
  biburl    = {https://dblp.org/rec/journals/pacmpl/GiarrussoSTBK20.bib},
  bibsource = {dblp computer science bibliography, https://dblp.org}
}