As far as I understand, I cannot define the values of built-in functions: Sin[Cat] := Dog will result in error. This is because all built-in symbols have attribute Protected.
However for the function N[], which is also protected, I can define a custom value:
N[Cat] := Dog
By the way, doing so will not change DownValues[N].
So the question is: why function N[] behaves like that? Is it just some hard-coded rule, which is not described in terms of attributes, downvalues etc.?
NValues. $\endgroup$