This book presents five tutorial-style lectures on various approaches to the problem of verifying distributed systems: three chapters concentrate on linear-time or branching-time temporal logics; one addresses process equivalence with an emphasis on infinite-state systems; and the final one presents a novel category-theoretic approach to verification. The various formalisms for expressing properties of concurrent systems, based on automata-theoretic techniques or structural properties, are studied in detail. Much attention is paid to the style of writing and complementary coverage of the relevant issues. Thus these lecture notes are ideally suited for advanced courses on logics for concurrent systems. Equally, they are indispensable reading for anyone researching the area of distributed computing.