Any  ECLiPSe
  built-in predicate can be redefined (i.e. hidden by
a local predicate of the same name, cf. 
) by the user.
To remind the user of what is happening, a warning is given if the
redefinition is done by just defining a new predicate of the same name.
To avoid the warning and to clarify the meaning, an explicit
local/1 declaration should be provided for the builtin that is to be
redefined.
Some builtins are classified as  protected (see Appendix 
).
Anyway, this does not mean that they can not be redefined.
They just require the explicit  local/1 declaration to appear in the
source  before any occurrence as a subgoal.
The same is true for redefining existing predicates with predicates that
 
use a different calling convention (this is signaled by the "inconsistent
redefinition" error).
Different calling convention are used for normal Prolog
predicates, for C externals and for Prolog tool predicates.