System`
is a context, not a library. In other languages, this is called a namespace. Therefore, technically speaking, the fact that a symbol is part of the System`
context does not mean that it is built-in. You can easily create symbols in the System`
context. In practice, however, this is often a good-enough approximation to find built-in symbols.
To determine the context of a symbol, use Context
. To find all symbols in the System`
context, use Names["System`*"]
.
Ultimately, it's hard to answer your question because it's unclear what you actually want to do. Determining whether a symbol is "built-in" is not a particularly useful thing. Whether checking a symbol's context is truly sufficient for your actual application (which you did not describe) we cannot say.
Context
would give a better clue on where a symbol stems from, but the concept of package and context are somewhat fluid in Mathematica. $\endgroup$CenterDot[]
are not protected, but have a defined relationship to input syntax through\[CenterDot]
. There are otherSystem`
symbols like that. There are unprotected parameters like$UserName
that are set by the system but can be reset by the user. OutsideSystem`
, there some things that are documented and might be considered part of the language (FEM and other system packages). Then there are undocumented commands, some of which might be argued belong, some not. $\endgroup$Names["System`*"]
? $\endgroup$