Skip to main content

Types for Communicating Software Systems

Final Activity Report Summary - CO-TYPES (Types for Communicating Software Systems)

Types are used in programming languages to make sure that the programmer doesn't accidently confuse apples and oranges, or more likely booleans and integers, since programs which do may crash or provide backdoors to criminals. In the research on dependently typed programming, of which COTYPES is a part, we try to shift the scope of what you can do with types further, indeed we use very expressive type system which can express any property of the program in its type. Here program verification and programming meet, in a beneficial way: the compiler can check that we aren't lying and we can "pay as we go", we can gradually increase the guarantees given by the program's types.

In COTYPES we focussed on a practically very important aspect: providing the means to use this technology to deal with infinite, i.e. never-ending computations, as they occur in network protocols and distributed computations. We encountered some serious technical issues with the approaches currently used in system like the French COQ proof assistant and the Swedish Agda programming language and development environment and proposed a very small core language (PiSIgma) which overcomes this problem. We also published a paper where we show how dependent types can be used to encode data format and make sure that they are used properly.