Pierce is specifically excluding dynamic typing from his definition. He goes on to address this point in the introduction to the book:
> The word "static" is sometimes added explicitly—we speak of a "statically typed programming language," for
example—to distinguish the sorts of compile-time analyses we are considering here from the dynamic or latent typing found in languages such as Scheme, where run-time type tags are used to distinguish different kinds of structures in the heap. Terms like "dynamically
typed" are arguably misnomers and should probably be replaced by "dynamically checked," but the usage is standard.
A static type system is syntactic insofar as the syntax itself is what is being analyzed, not the actual runtime behavior.
> The word "static" is sometimes added explicitly—we speak of a "statically typed programming language," for example—to distinguish the sorts of compile-time analyses we are considering here from the dynamic or latent typing found in languages such as Scheme, where run-time type tags are used to distinguish different kinds of structures in the heap. Terms like "dynamically typed" are arguably misnomers and should probably be replaced by "dynamically checked," but the usage is standard.
A static type system is syntactic insofar as the syntax itself is what is being analyzed, not the actual runtime behavior.