How does predicate works? can you please explain how it works internally by overriding default behavior