Certain predicates are predefined by the Prolog system. Most of these cannot be changed or retracted. Such predicates are called built-in predicates.
Certain ones, however, can be modified or totally redefined. These are the hook predicates and the extendible predicates used in message and query handling.