I am an Assistant Professor in the Computer Science Department at Purdue University. I am also a member of PurPL
, Purdue's cross-departmental programming languages group.
My research mission is to make it easier for programmers to write provably reliable and efficient programs. I am particularly interested in developing algorithms and tools for automated program repair and automated synthesis of correct programs. An overarching theme of my research approach is the use of formal methods and programming languages techniques, and more recently, machine learning for these goals. Click here
to learn more.
I am looking for motivated, talented graduate students. If these topics pique your interest, email me!
||Qlose: Program Repair with Quantitative Objectives.
L. D'Antoni, R. Samanta and R. Singh.
CAV 2016. [paper, slides]
||From Non-preemptive to Preemptive Scheduling using
P. Cerny, E. M. Clarke, T. A. Henzinger, A. Radhakrishna, L. Ryzhyk, R. Samanta, T. Tarrach.
CAV 2015. [paper, slides]
||Succinct Representation of Concurrent Trace Sets.
A. Gupta, T. A. Henzinger, A. Radhakrishna, R. Samanta and T. Tarrach.
POPL 2015. [paper, slides]
||Lipschitz Robustness of Finite-state Transducers.
T. A. Henzinger, J. Otop and R. Samanta.
FSTTCS 2014. [paper, slides]
Concurrent data structures present certain design challenges: they must maintain consistency in the presence of concurrent updates without becoming a performance bottleneck. Can we design synthesis techniques for clients of concurrent data structures that target efficiency without sacrificing precision? In this project, we are exploring new application domains and paradigms for performance-aware synthesis.
How do we formalize and analyze robustness of systems (which may or may not be stochastic) in the presence of stochastic disturbances? For instance, how do we check if the behavior of a probabilistic program is "acceptable" when the input distribution is perturbed? The goal of this project is to develop foundational results and practical techniques for the design of robust systems in the presence of stochasticity in the system or its environment.
Quantitative Program Repair for Education
Can we build effective tools for personalized feedback and evaluation of assignments based on inferring "optimal" repairs for student solutions? Can we learn appropriate objective functions, program distances and error models to use for repair from existing databases of assignments? In this project, we are investigating the use of quantitative program repair, along with machine learning, for automated feedback and grading.
Typical concurrency bugs such as data races and deadlocks are often caused by subtle synchronization errors.
In this project, we have developed advanced trace-based techniques for synchronization synthesis and applied them to device driver programming. Our work resulted in new contributions in language theoretic-verification, trace generalization and synchronization inference.
Robustness Analysis of Transducers
In this project, we formalize robustness of finite-state I/O systems as Lipschitz continuity: a transducer is K-(Lipschitz) robust if the perturbation in its output is at most K times the perturbation in its input. We have studied the K-robustness problem for discrete transducers, networks of discrete transducers, timed transducers, and asynchronous sequential circuits. While checking K-robustness is undecidable even for discrete transducers, we have developed decision procedures for a variety of useful settings.