OK, on that definition, of what possible use is a type inferencer? Aren't they useful only as a component of a compile-time type checker?
Basically CCL's compiled code is often as fast as code from SBCL, LispWorks, Allegro CL. But one has to declare much more types of variables and functions explicitly with CCL. The code needs to be littered with type declarations.
A compiler with a (better) type inferencer can propagate the type information it already has and this is often enough for fast code. A good compiler can then also tell the developer where it lacks type information and then you can decide to declare types explicitly. SBCL/CMUCL does that in a very noisy way with lots of information generated by the compiler. ;-)
See for example: http://home.pipeline.com/~hbaker1/TInference.html
EDIT: lispm is right, too, of course. You can look at it either way. If your program required top performance and you were going to tag every type until it ran super fast, then inference buys you the convenience of not needing to do as much. If you weren't going to bother with that, then inference buys you extra performance without all the effort.
EDIT: as a non-native speaker I distinctly remember first reading the word and happily using it ever since, when appropriate.
For example if you know that + is defined for numbers, then you can inference that a and b must be numbers: (+ a b)
If you know that a and b are numbers then you can inference that subexpressions need to deal with numbers only:
The type inferencer then will tell what types the various expressions have. It will try to propagate known types as widely as possible in the code.Allegro CL and LispWorks for example are doing this type inference. But their compiler will not tell you that type declarations are violated.
SBCL OTOH treats type declarations as type assertions which can be checked at compile time. ADDITIONALLY it also does type inference - and additionally uses this information for compile time type checks.