makes use of predicate