  Recent approaches to verifying programs in separation logics for concurrency
have used state transition systems (STSs) to specify the atomic operations of
programs. A key challenge in the setting has been to compose such STSs into
larger ones, while enabling programs specified under one STS to be linked to a
larger one, without reverification. This paper develops a notion of morphism
between two STSs which permits such lifting. The morphisms are a constructive
form of simulation between the STSs, and lead to a general and concise proof
system. We illustrate the concept and its generality on several disparate
examples, including staged construction of a readers/writers lock and its
proof, and of proofs about quiescence when concurrent programs are executed
without external interference.
