Proving Liveness Properties of Concurrent Programs | Synapse