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 expression to be used to determine whether the relationship between the first predicate and the second predicate is present, and to cause a concurrency bug to be detected when the relationship is present.