We are looking for enthusiastic PhD students and postdocs to join CUPLV. Please send me an email if you are interested in research on program verification and program synthesis.
Streaming string transducers [POPL11] are as appealing a model for regular string transformations as deterministic finite automata are for regular languages. The transformations definable by streaming string transducers are exactly those that are definable by classical two-way transducers and monadic second-order logic [FSTTCS10].
Standard verification tools return a yes/no answer that indicates whether a system satisfies its specification. However, not all correct implementations are equally good, and not all incorrect implementations are equally bad. Simulation distances [CONCUR10,EMSOFT12,GandALF12] capture a finer and more quantitative view of the relationship between specifications and systems.
To enable efficient static analysis of programs for estimating the value of a quantitative property such as worst-case execution time, we need to abstract the program. We have proposed an abstract interpretation technique to reason about quantitative properties [POPL13], and applied it to worst-case execution time analysis [ESOP15].
Our program synthesis techniques for concurrency [CAV13,CAV14,CAV15b] allow programmers to program assuming a friendly, non-preemptive scheduler, and our synthesis procedure inserts synchronization to ensure that the final program works even with a standard, more aggressive, preemptive scheduler. The correctness specification is implicit, inferred from the non-preemptive behavior.