Several modern computational systems consist of multiple processes computing concurrently, possibly interacting among each other. This covers a vast variety of systems which nowadays, due to technological advances such as the Internet and mobile computing, most people can easily relate to. Traditional mathematical models of (sequential) computation based on functions from inputs to outputs no longer apply. The crux is that concurrent computation, e.g., in a reactive system, is seldom expected to terminate and it involves constant interaction with the environment.

Concurrency Theory, and in particular process calculi, pioneered by Hoare and Milner, among others, is a branch of the theory of computation dealing with concurrent computation. Process calculi treat processes much like the lambda-calculus treats computable functions. They provide a language in which the structure of term represents the structure of processes together with an operational semantics to represent computational steps.

In this talk I will give a brief introduction to concurrency theory. I will start from the classical theory of automata and argue that it is not suitable for reasoning about concurrent behavior. I will then introduce bisimilarity, perhaps the most fundamental equivalence from concurrency theory. I will also describe one of the most representative process calculi for concurrent behaviour CCS.