Programming languages are how human intentions are translated into machine instructions. One the one hand, we aim to make fundamental advances in how precisely we can formalize and express these intentions to machines (mainly the focus of Ahman & Earnshaw & Nester); on the other hand, it is important to verify that machines reliably perform as expected, verifying their behavior (mainly the focus of Apinis & Vojdani).
Our group is involved in the following national research projects.
Software failures are expensive. Advanced verification techniques, such as abstract interpretation, have been successful in ensuring software reliability in safety-critical domains, such as avionics and space. However, outside such industries, adoption of sound verification methods is hindered by complexity and usability challenges. This project aims to address these issues by increasing trust in automated verification tools while making them more accessible to developers.
The complexity of digital systems and the widespread use of artificial intelligence in all areas of life increase the need to ensure their correct functioning and security. Serious threats arise from software vulnerabilities, programming errors, unreliability of artificial intelligence, and malicious attacks, which can lead to privacy violations and the spread of misinformation.
The project has brought together research groups in data science (Kull & Vicente), cryptography (Lipmaa), and programming languages (Vojdani) to develop new methodologies for enhancing the reliability of digital solutions. The goal is to create a foundation for evidence-based approaches that ensure the correctness and security of digital systems. These methodologies include abstract semantics, automatic verification of software, verification of delegated computations, zero-knowledge proofs, and enhancing the reliability of artificial intelligence.
By achieving these goals, we hope to promote the mass adoption of sound static analysis. Thus, the most important deliverables of our work are the following publicly available open-source static analysis tools:
