add eval_predicate function