Thread-Modular Verification and Cartesian Abstraction