  Reactive programs combine traditional sequential programming constructs with
primitives to allow communication with other concurrent agents. They are
ubiquitous in modern applications, ranging from components systems and web
services, to cyber-physical systems and autonomous robots. In this paper, we
present an algebraic verification strategy for concurrent reactive programs,
with a large or infinite state space. We define novel operators to characterise
interactions and state updates, and an associated equational theory. With this
we can calculate a reactive program's denotational semantics, and thereby
facilitate automated proof. Of note is our reasoning support for iterative
programs with reactive invariants, based on Kleene algebra, and for parallel
composition. We illustrate our strategy by verifying a reactive buffer. Our
laws and strategy are mechanised in Isabelle/UTP, our implementation of Hoare
and He's Unifying Theories of Programming (UTP) framework, to provide soundness
guarantees and practical verification support.
