Eckart-Young-Mirsky
The truncated SVD minimizes ‖A − B‖_F subject to rank(B) ≤ k, and Eckart–Young–Mirsky proves nothing else does better.
It also gives the squared error directly, without rebuilding the truncation for each k:
S = np.linalg.svd(A, compute_uv=False)
tail = np.concatenate([np.cumsum(S[::-1] ** 2)[::-1], [0.0]])
That is the theorem underneath both matrix and tensor compression — and the reason section 10’s Tucker decomposition works the way it does.