Compositional and Automated Verification of Distributed Systems