Monotonicity In Shared-Memory Program Verification