Question: It is my understanding that the memory layout of a Common Lisp object (bitwise tagging is defined by CLOS (classes).

I understand that every class has a corresponding type, but not every type has a corresponding class, because types can be compound (lists). I think that types are like logical constraints, as opposed to classes that are concrete "types" with a tagging scheme.

If this is correct, does the type system serve any other purpose other than being a logical constraint (such as specifying that an integer must be within a certain range, or that an array contains a particular type)?

If this is not correct, what purpose does the type system actually serve in light of CLOS? Thanks.

Answer: 
1. CLOS was added to CL fairly late in the game (and it was not the only object system designed for CL)
2. Even with CLOS, the type system can be used by the compiler for optimizations and by user to reason about their code.
A type *is* a set of values.

A type specifier is some way to succinctly represent a type.

Implementations may do all kinds of markings and registering in order to help them sort out the types of things, but that is not inherent to the concept of types.

A class is an object describing a set of other objects. Since having a succinct name for such a set (type) is quite useful, Common Lisp registers the class name as a type specifier for the corresponding set of objects. That is the whole relation of types to classes.