Verifying distributed programs via canonical sequentialization | doi.page