1. A method comprising: defining, with a processor, a data type comprising: a first predicate associated with a first thread of a multi-threaded program, the first predicate being associated with a first condition; a second predicate associated with a second thread of the multi-threaded program, the second predicate being associated with a second condition; and an expression, the expression defining a relationship between the first predicate and the second predicate, the relationship, when satisfied, causing a concurrency bug to be detected.