generalized eigenspace as block group
An ordinary eigenspace ker(A - lambda*I) is often too small — it sees only one eigenvector per Jordan block. The generalized eigenspace fixes this: G_lambda = ker(A - lambda*I)^m for m large enough (the index of lambda). It collects ALL the chains for lambda, so its dimension equals the algebraic multiplicity of lambda.
The key structural fact: the whole space is the direct sum of the generalized eigenspaces, one per distinct eigenvalue. Each G_lambda is A-invariant, and the restriction of A to G_lambda has lambda as its only eigenvalue; equivalently A - lambda*I is nilpotent there. So G_lambda is exactly the home of all Jordan blocks belonging to lambda — the 'block group' for that eigenvalue.
This is the bridge from the nilpotent case to the general theorem. Decompose into generalized eigenspaces; on each one A - lambda*I is nilpotent, so the nilpotent Jordan theorem gives the blocks for lambda; reassemble across eigenvalues to get the full Jordan form. The decomposition is the same one realized concretely by the partial-fraction / spectral projections.
Contrast with the diagonalizable case: A is diagonalizable exactly when every generalized eigenspace coincides with the ordinary eigenspace (every block has size 1). The gap dim G_lambda minus dim ker(A - lambda*I) measures, eigenvalue by eigenvalue, how far A is from diagonalizable.
The whole space splits as a direct sum of generalized eigenspaces, one block group per distinct eigenvalue.
dim G_lambda = algebraic multiplicity; dim ker(A - lambda*I) = geometric multiplicity = number of blocks for lambda.