By implementing an interface it allows someone else (e.g. you or I) to create our OWN implementation of that interface and use it instead of the vendor supplied implmentation.
Interchangably and without the vendor having to provide additional extensions.
As far the the vendors internal code goes, the vendor may only provide one implementation, but the USAGE in the rest of the vendors code utilizes interface types instead of implementation types. That is what allows us to substitue our own impementation.
So if at all possible, use this format:
IPredicateExpression p = new PredicateExpression();
That will allow you to change the implementation of IPredicateExpression in one place and all code that knows how to utilize an object that implements the IPredicateExpression interface will continue to work without modification.
So if you created your own, you would change it to:
IPredicateExpression p = new MyPredicateExpression();