1. A method for fixing errors in concurrent programs stored on a memory device, comprising: inputting a concurrent program with at least two threads; and efficiently exploring the state space of the concurrent program by analyzing only those inter-leavings of threads comprising the concurrent program that form quasi-monotonic sequences of thread operations; generating witness traces for errors in the concurrent program detected through the state space search; modifying the source code of the concurrent program to fix the errors based on the witness traces.