Verifying Correctness Of Persistent Memory Programs