A programming language is referred to as doing static strong type checking when it detects, before runtime, all possible errors due to the inconsistent use of types.
Because typed object oriented languages (OOLs) support type hierarchies, an inconsistent use of a type might not be detected directly from entity declarations and from he direct text of message passing constructions (the expression texts where we apply operations to object operands). Now type problems might depend on the thread of a program execution.
Can be detected such potential type problems before execution? Being less conservative than the class-level static type restriction of C++ and more secure than the dynamic type checking of Smalltalk, Eiffel introduces a new concept named system-level validity. Type errors producing flaws in the system-level validity are named system-level type errors.
The literature on Eiffel reports two trials of problems in the system-level validity ([9] p.358):the problem of selective inheritance, and the problem of covariant redefinition of routine parameters. This paper introduces two new kind of problems not previously reported, and intends to formalize, as simply and clearly as possible, the different kinds of problems. Moreover, it explains how a detection algorithm can be implemented in an Eiffel compiler.