Assert, like many other seemingly "reserved words" are actually what are called "standard functions"
Exit, Break, Continue, and Assert are examples of symbols that are not reserved by the compiler, but rather exist as symbols within the "System" unit namespace. The reason is that Delphi (or more specifically Turbo Pascal) originally didn't have the notion of Exit, Break, Continue or Assert. Many existing users may have already used those identifiers for their own libraries. Had we made these identifiers reserved words, we'd have broken many existing applications. By creating them as "standard functions" and "scoping" them to the System unit, we could provide the added functionality without the risk of breaking existing code. In some library that has, say, its own Exit function, the program's use of that identifier would not be affected. However if the programmer explicitly wanted to use the Exit standard function, you can fully qualify the identifier like this "System.Exit" and the compiler will generate code to exit the current function rather than calling the Exit that is closer in scope.