Our research is at the intersection of two fundamental computer science methods. First, we design and implement new programming models and frameworks with the goal of maximising the automation of technical (non-functional) concerns, so that developers creativity and engineering efforts are focussed on solutions for application domain concerns. Second, we design new methods and techniques for reasoning about software properties. There are obvious synergies between these two areas. One can design programming models dedicated to writing program analyses, so as to facilitate their design and implementation. On the other way around, program intelligence methods can be instrumental for ensuring the efficiency and safety of language concepts.

We apply these two fundamental methods in several specialised application areas:

(1) in the development of reliable and resilient networked software systems for decentralized communication as opposed to the commonly used centralized architectures, (2) in the generation of both analytic and constructive methods towards enabling secure and privacy-preserving software systems as well as (3) in the research and development of new methods and tools for AI software systems with their characteristic challenges and requirements like the handling of training data.