Verification

The foremost concern in the design and implementation of any software system is correctness: does it actually do what you intend it to do? Verification addresses two problems:

  • How can we formally describe the properties we want the system to have?
  • How can we prove that our system has them?

And for practical use there is also a third:

  • How can this be seamlessly integrated into the code development process?

Our researchers study a range of formal methods of software development and their application to real-world systems. These include:

  • Session types: the specification and verification of communication protocols for concurrent and distributed computing based on type systems.
  • Separation logic: this was the first logic to be used regularly on the entire code-bases of major companies to locate and eliminate memory violations.
  • Game semantics: the use of game semantics as a verification framework for higher-order programming with effects.