Theories organize knowledge so that we have a consistent and well-understood vocabulary to explain and predict phenomena. When accompanied by formalisms, the language of a theory becomes precise and (hopefully) unambiguous.
Because concurrent systems are so complex, and the cost of achieving correctness and security so high, good theories and formalisms are essential to better understand and design such systems.
Let’s divide theoretical and formal approaches to concurrent system design and verification into four parts:
A temporal logic is a kind of modal logic that helps us talk about time. It gives rigorous syntax and semantics for terms such as now, before, after, always, never, until, henceforth.
Temporal logics are covered on this page, though you may want to start with an overview of logic itself first.
Temporal logic lets us talk about time from a philosophical or mathematical perspective. When we begin to focus on computation, we have the need to talk not just about events, but of processes. We need something more than a logic to describe computations in time. We need an algebra or calculus of processes.
NomenclatureIn case you are wondering: there is no difference between a process algebra and a process calculus. Those terms denote the same idea. Wikipedia’s article is entitled Process calculus. If you go to the Process algebra page, it will redirect you to the Process calculus page. Same thing.
Process algebras provide mathematical notations and methods to model and precisely analyze and verify the behavior of concurrent and distributed systems. The processes themselves, and the interactions between them, are entities which are manipulated and reasoned about. Some allow us to say that two processes are equivalent, while others allow us to refine one process into another, more complex one, aiding proofs of correctness and security.
Here are some of the big ones:
| Name | Full Name | Creator | First Appeared | Links |
|---|---|---|---|---|
| CCS | Calculus of Communicating Systems | Robin Milner | 1980 | Wikipedia |
| CSP | Communicating Sequential Processes | Tony Hoare | 1978 | Wikipedia, Hoare's original paper, Paper for the 1984 revision, 1985 Book |
| ACP | Algebra of Communicating Processes | J.A. Bergstra and J.W. Klop | 1982 | Wikipedia, Bergstra's paper |
| LOTOS | Language of Temporal Ordering Specification | ISO | 1988-ish | Wikipedia |
| π‑calculus | Pi Calculus | Robin Milner | 1991 | Wikipedia, nLab, n‑Category Cafe |
| PEPA | Performance Evaluation Process Algebra | Jane Hillston | 1996 | Wikipedia |
| Join-calculus | INRIA | 1995-ish | Wikipedia | |
| Fusion Calculus | J. Parrow and B. Victor | 1998 | Conference paper | |
| Blue Calculus | Gérard Boudol | 2001 | Home page | |
| Ambient Calculus | L. Cardelli and A. Gordon | 1998 | Wikipedia | |
A few are covered in these notes.
Now we move from the philosophical-mathematical-theoretical domain to something that engineers will enjoy. Real practical notations, with circles, boxes, arrows, and other shapes! Graphical formalisms that describe the intended structure and behavior of real-world systems.
Two classic models are:
Statecharts were a big influence on UML’s state diagrams. As UML is a bit more modern (not to mention standardized), it’s best to familiarize yourself with the various UML diagrams for modeling concurrent systems—especially state, communication, activity, and sequence diagrams—and read about statecharts for their historical influence.
See these notes for more.
Let’s not forget about the QA and security people, and the really cool developers and architects that actually care about correctness and security, and bring in the tools for system verification. A model checker is a tool for verifying that a (state-based) system satisfies certain requirements (such as correctness, safety, and liveness).
Wikipedia references:
Here are some questions useful for your spaced repetition learning. Many of the answers are not found on this page. Some will have popped up in lecture. Others will require you to do your own research.
We’ve covered: