Skip to main navigation Skip to search Skip to main content

Symbolic types for lenient symbolic execution

  • Northeastern University
  • University of Washington

Research output: Contribution to journal › Article › peer-review

Abstract

We present λ, a typed λ-calculus for lenient symbolic execution, where some language constructs do not recognize symbolic values. Its type system, however, ensures safe behavior of all symbolic values in a program. Our calculus extends a base occurrence typing system with symbolic types and mutable state, making it a suitable model for both functional and imperative symbolically executed languages. Naively allowing mutation in this mixed setting introduces soundness issues, however, so we further add concreteness polymorphism, which restores soundness without rejecting too many valid programs. To show that our calculus is a useful model for a real language, we implemented Typed Rosette, a typed extension of the solver-aided Rosette language. We evaluate Typed Rosette by porting a large code base, demonstrating that our type system accommodates a wide variety of symbolically executed programs.

Original languageEnglish
Article number40
JournalProceedings of the ACM on Programming Languages
Volume2
Issue numberPOPL
DOIs
StatePublished - Jan 2018

ASJC Scopus Subject Areas

  • Software
  • Safety, Risk, Reliability and Quality

Keywords

  • Macros
  • Solver-Aided Languages
  • Symbolic Execution
  • Type Systems

Fingerprint

Dive into the research topics of 'Symbolic types for lenient symbolic execution'. Together they form a unique fingerprint.

Cite this