[proofplan]
Part 1 is exactly the [Row Orthogonality](/theorems/2430) of irreducible characters; we cite it. For Part 2, suppose $f \in \mathcal{C}(G)$ is orthogonal to every irreducible character; we show $f = 0$. The class-function hypothesis on $f$ ensures the operator $T_{j} := \sum_{g \in G} \overline{f(g)}\, \rho_j(g)$ commutes with $\rho_j(h)$ for every $h$ and every irreducible $\rho_j$, so by [Schur's Lemma](/theorems/2414) it is a scalar; the orthogonality $\langle f, \chi_j \rangle = 0$ forces this scalar to be zero. The regular representation $\mathbb{C}G$ contains every irreducible as a summand, so $T_{\mathrm{reg}} := \sum_g \overline{f(g)} \rho_{\mathrm{reg}}(g)$ acts as zero on every irreducible, hence as zero on $\mathbb{C}G$. Evaluating $T_{\mathrm{reg}}$ on the basis vector $e_1$ pins down $\overline{f(g)} = 0$ for every $g$, hence $f = 0$. The orthogonal complement of the span of irreducible characters in $\mathcal{C}(G)$ is therefore zero, which is the spanning claim.
[/proofplan]
[step:Identify Part 1 with Row Orthogonality]
Part 1 asserts that for irreducible representations $\rho: G \to \operatorname{GL}(V)$ and $\rho': G \to \operatorname{GL}(V')$ over $\mathbb{C}$, the inner product
\begin{align*}
\langle \chi, \chi' \rangle = \frac{1}{|G|} \sum_{g \in G} \overline{\chi(g)}\, \chi'(g)
\end{align*}
equals $1$ if $\rho \cong \rho'$ and $0$ otherwise. This is the statement of [Row Orthogonality](/theorems/2430). We verify the hypotheses of Row Orthogonality: $G$ is a finite group (global hypothesis), the field $\mathbb{C}$ is algebraically closed of characteristic $0$ (so $\operatorname{char} \mathbb{C} \nmid |G|$), and $\rho, \rho'$ are irreducible by assumption. Hence Row Orthogonality applies and gives Part 1 directly.
[/step]
[step:Set up the regular representation and the key averaging operator]
For Part 2, fix an enumeration $\rho_1, \ldots, \rho_k$ of the (isomorphism classes of) irreducible complex representations of $G$, with $\rho_j: G \to \operatorname{GL}(V_j)$ and characters $\chi_j$.
Let $\mathbb{C}G$ denote the **group algebra**, the $\mathbb{C}$-vector space with basis $\{e_g\}_{g \in G}$ and product $e_g \cdot e_h = e_{gh}$. The **regular representation** is
\begin{align*}
\rho_{\mathrm{reg}}: G &\to \operatorname{GL}(\mathbb{C}G) \\
g &\mapsto (\text{left multiplication by } e_g)
\end{align*}
so $\rho_{\mathrm{reg}}(g)(e_h) = e_{gh}$. By [Maschke's Theorem](/theorems/2409), $\mathbb{C}G$ decomposes into irreducible $G$-subrepresentations, and we will use the standard fact (a corollary of the [Multiplicity Formula](/theorems/2420) applied to $\rho_{\mathrm{reg}}$) that **every irreducible $\rho_j$ appears as a subrepresentation of $\rho_{\mathrm{reg}}$**, with multiplicity $\dim V_j \geq 1$.
Suppose now $f \in \mathcal{C}(G)$ satisfies $\langle f, \chi_j \rangle = 0$ for every $j = 1, \ldots, k$. Our goal is $f = 0$.
For each irreducible $\rho_j$, define the operator
\begin{align*}
T_j: V_j &\to V_j \\
v &\mapsto \sum_{g \in G} \overline{f(g)}\, \rho_j(g)(v).
\end{align*}
This is a $\mathbb{C}$-linear endomorphism of $V_j$.
[guided]
The proof of spanning is by **contrapositive on the orthogonal complement**: if $\mathcal{C}(G)$ were strictly larger than the span of irreducible characters, there would be a nonzero $f \in \mathcal{C}(G)$ orthogonal to every $\chi_j$. We will show this is impossible — any such $f$ must vanish.
The construction we need is an "averaged operator" built from $f$. For any representation $\sigma: G \to \operatorname{GL}(W)$, set $T(\sigma) := \sum_{g \in G} \overline{f(g)}\, \sigma(g) \in \operatorname{End}(W)$. The conjugate is conventional — it ensures the trace $\operatorname{tr}(T(\sigma)) = \sum_g \overline{f(g)} \chi_\sigma(g) = |G|\langle f, \chi_\sigma \rangle$ matches the inner product without further conjugation.
We will use $T$ in two ways: (i) for each irreducible $\rho_j$, Schur's lemma will force $T(\rho_j) = 0$; (ii) for the regular representation, $T(\rho_{\mathrm{reg}})$ acts as zero on every irreducible component of $\mathbb{C}G$ (which is all of $\mathbb{C}G$, by Maschke). So $T(\rho_{\mathrm{reg}}) = 0$ on $\mathbb{C}G$; evaluating at the basis vector $e_1$ recovers $\overline{f}$ and thus $f$.
[/guided]
[/step]
[step:Show $T_j$ commutes with the action of $G$ via the class-function property of $f$]
We claim: for every $h \in G$ and every $j$,
\begin{align*}
\rho_j(h) \circ T_j = T_j \circ \rho_j(h) \quad\text{in } \operatorname{End}_\mathbb{C}(V_j).
\end{align*}
Compute, for $v \in V_j$,
\begin{align*}
\rho_j(h) \circ T_j(v) &= \rho_j(h) \sum_{g \in G} \overline{f(g)}\, \rho_j(g)(v) = \sum_{g \in G} \overline{f(g)}\, \rho_j(hg)(v),
\end{align*}
using linearity of $\rho_j(h)$ and the homomorphism property $\rho_j(h)\rho_j(g) = \rho_j(hg)$. Substitute $g' := hgh^{-1}$, equivalently $g = h^{-1} g' h$. As $g$ ranges over $G$, so does $g'$; the substitution is a bijection of $G$. Then $hg = g'h$, so $\rho_j(hg) = \rho_j(g'h) = \rho_j(g') \rho_j(h)$, and
\begin{align*}
\sum_{g \in G} \overline{f(g)}\, \rho_j(hg)(v) = \sum_{g' \in G} \overline{f(h^{-1}g'h)}\, \rho_j(g') \rho_j(h)(v).
\end{align*}
The class-function property of $f$ gives $f(h^{-1}g'h) = f(g')$ (by Property 2 of [Elementary Properties of Characters](/theorems/2421) applied here: $f$ being a class function means $f$ is constant on conjugacy classes). Hence $\overline{f(h^{-1}g'h)} = \overline{f(g')}$, and
\begin{align*}
\sum_{g' \in G} \overline{f(g')}\, \rho_j(g') \rho_j(h)(v) = T_j(\rho_j(h)(v)) = T_j \circ \rho_j(h)(v).
\end{align*}
This holds for every $v \in V_j$, proving $\rho_j(h) \circ T_j = T_j \circ \rho_j(h)$.
[guided]
The class-function property of $f$ is the substantive hypothesis here. Without it the operator $T_j$ would not commute with $\rho_j$.
The computation is a relabelling: we rewrite the sum $\sum_g \overline{f(g)} \rho_j(hg)$ by substituting $g \to h^{-1} g h$. The term $\rho_j(hg)$ becomes $\rho_j(g) \rho_j(h)$ — pulling $\rho_j(h)$ to the right. The cost is that the coefficient $\overline{f(g)}$ becomes $\overline{f(h^{-1}gh)}$. The class-function property says $f(h^{-1}gh) = f(g)$, so the coefficient is unchanged. The sum after relabelling is exactly $T_j$ applied to $\rho_j(h)v$.
So $\rho_j(h) T_j = T_j \rho_j(h)$ — the operator $T_j$ is $G$-equivariant. This is the input we need for Schur.
[/guided]
[/step]
[step:Apply Schur's lemma to force $T_j = 0$]
Step 4 shows $T_j \in \operatorname{Hom}_G(V_j, V_j) = \operatorname{End}_G(V_j)$. Since $\rho_j$ is irreducible and the base field $\mathbb{C}$ is algebraically closed, [Schur's Lemma](/theorems/2414) (specifically, the algebraically-closed-field version) gives $\operatorname{End}_G(V_j) = \mathbb{C} \cdot \mathrm{id}_{V_j}$. Therefore $T_j = \lambda_j \, \mathrm{id}_{V_j}$ for some $\lambda_j \in \mathbb{C}$.
To compute $\lambda_j$, take the trace on both sides:
\begin{align*}
\operatorname{tr}(T_j) = \lambda_j \operatorname{tr}(\mathrm{id}_{V_j}) = \lambda_j \cdot \dim V_j.
\end{align*}
On the other hand,
\begin{align*}
\operatorname{tr}(T_j) = \operatorname{tr}\!\left(\sum_{g \in G} \overline{f(g)}\, \rho_j(g)\right) = \sum_{g \in G} \overline{f(g)}\, \operatorname{tr}(\rho_j(g)) = \sum_{g \in G} \overline{f(g)}\, \chi_j(g).
\end{align*}
Recognise this last sum as $|G|\, \langle f, \chi_j \rangle$:
\begin{align*}
\sum_{g \in G} \overline{f(g)}\, \chi_j(g) = |G| \cdot \frac{1}{|G|} \sum_{g \in G} \overline{f(g)}\, \chi_j(g) = |G| \langle f, \chi_j \rangle.
\end{align*}
Combining,
\begin{align*}
\lambda_j \dim V_j = |G| \langle f, \chi_j \rangle = 0,
\end{align*}
where the last equality uses the hypothesis $\langle f, \chi_j \rangle = 0$. Since $\dim V_j \geq 1$ ($V_j$ is irreducible, hence nonzero), $\lambda_j = 0$, hence $T_j = 0$ on $V_j$.
[guided]
Schur's lemma over an algebraically closed field has the strong form: a $G$-equivariant endomorphism of an irreducible representation is a scalar. We just showed $T_j$ is $G$-equivariant (Step 4) and $\rho_j$ is irreducible (assumption). Hence $T_j = \lambda_j \mathrm{id}_{V_j}$.
The trace pins down $\lambda_j$. On one side, $\operatorname{tr}(\lambda_j \mathrm{id}_{V_j}) = \lambda_j \dim V_j$. On the other,
\begin{align*}
\operatorname{tr}(T_j) = \sum_g \overline{f(g)} \operatorname{tr}(\rho_j(g)) = \sum_g \overline{f(g)} \chi_j(g) = |G| \langle f, \chi_j \rangle.
\end{align*}
The orthogonality hypothesis $\langle f, \chi_j \rangle = 0$ gives $\operatorname{tr}(T_j) = 0$, hence $\lambda_j \dim V_j = 0$. Since $\dim V_j \geq 1$, $\lambda_j = 0$, so $T_j = 0$.
This holds for **every** irreducible $\rho_j$.
[/guided]
[/step]
[step:Lift $T_j = 0$ to vanishing on the regular representation]
Define the analogous operator on the regular representation:
\begin{align*}
T_{\mathrm{reg}} := \sum_{g \in G} \overline{f(g)}\, \rho_{\mathrm{reg}}(g) \in \operatorname{End}_\mathbb{C}(\mathbb{C}G).
\end{align*}
By [Maschke's Theorem](/theorems/2409) (which applies since $\operatorname{char}\mathbb{C} = 0$ does not divide $|G|$), $\mathbb{C}G$ is completely reducible. As noted in Step 2, every irreducible $\rho_j$ occurs as a $G$-subrepresentation of $\mathbb{C}G$, and conversely $\mathbb{C}G$ decomposes as a direct sum
\begin{align*}
\mathbb{C}G \cong \bigoplus_{j=1}^k V_j^{\oplus m_j}
\end{align*}
where $m_j \geq 1$ for each $j$ (this is the standard form of the regular representation; for the spanning argument we only need $\mathbb{C}G$ to be a direct sum of irreducibles).
The operator $T_{\mathrm{reg}}$ respects the direct-sum decomposition: for each $V_j^{\oplus m_j}$ summand, the action of $\rho_{\mathrm{reg}}(g)$ restricted to one copy of $V_j$ is exactly $\rho_j(g)$, so the corresponding restriction of $T_{\mathrm{reg}}$ is $T_j = 0$ by Step 5. Hence $T_{\mathrm{reg}}$ vanishes on each irreducible summand of $\mathbb{C}G$, hence on all of $\mathbb{C}G$.
[guided]
The bridge from "vanishes on every irreducible" to "vanishes on the regular representation" is Maschke. Maschke gives that $\mathbb{C}G$ is a direct sum of irreducibles. The averaging construction $\sigma \mapsto T(\sigma)$ is functorial in the representation $\sigma$ — restricting $T(\sigma)$ to a sub-representation $\sigma|_W$ gives $T(\sigma|_W)$. So if $T(\rho_j) = 0$ for every $j$, then $T(\rho_{\mathrm{reg}}) = 0$ on every $V_j$-summand of $\mathbb{C}G$, hence $T(\rho_{\mathrm{reg}}) = 0$ on the whole direct sum.
Why does the construction split across summands? Because $\rho_{\mathrm{reg}}(g)$ preserves each summand and acts as $\rho_j(g)$ on a $V_j$-summand. Summing $\overline{f(g)} \rho_{\mathrm{reg}}(g)$ over $g$ thus restricts to summing $\overline{f(g)} \rho_j(g) = T_j$ on a $V_j$-summand. Since $T_j = 0$, the restriction is zero.
[/guided]
[/step]
[step:Evaluate $T_{\mathrm{reg}}$ on the identity basis vector to conclude $f = 0$]
We have $T_{\mathrm{reg}} = 0$ on $\mathbb{C}G$. Apply $T_{\mathrm{reg}}$ to the basis vector $e_1 \in \mathbb{C}G$:
\begin{align*}
T_{\mathrm{reg}}(e_1) = \sum_{g \in G} \overline{f(g)}\, \rho_{\mathrm{reg}}(g)(e_1) = \sum_{g \in G} \overline{f(g)}\, e_{g \cdot 1} = \sum_{g \in G} \overline{f(g)}\, e_g.
\end{align*}
Since $T_{\mathrm{reg}}(e_1) = 0$ and the family $\{e_g\}_{g \in G}$ is a $\mathbb{C}$-basis of $\mathbb{C}G$, every coefficient must vanish:
\begin{align*}
\overline{f(g)} = 0 \quad \text{for every } g \in G,
\end{align*}
hence $f(g) = 0$ for every $g \in G$, i.e. $f = 0$.
[guided]
We extract $f$ from $T_{\mathrm{reg}}$ by evaluating at $e_1$. The reason $e_1$ is the right vector to test against: it is the "free generator" of $\mathbb{C}G$ as a left module over itself, so $\rho_{\mathrm{reg}}(g)(e_1) = e_g$ — distinct group elements give distinct basis vectors with no overlap. The sum
\begin{align*}
T_{\mathrm{reg}}(e_1) = \sum_g \overline{f(g)} e_g
\end{align*}
is a single linear combination of basis vectors $e_g$, with coefficient $\overline{f(g)}$ at $e_g$. Linear independence of the basis forces every coefficient to vanish, recovering $\overline{f(g)} = 0$ for all $g$, hence $f \equiv 0$.
A different test vector — say $T_{\mathrm{reg}}(e_h)$ — would give $\sum_g \overline{f(g)} e_{gh}$, which by re-indexing is also $\sum_{g'} \overline{f(g'h^{-1})} e_{g'}$, again pinning down $\overline{f(g'h^{-1})} = 0$ for all $g'$, hence $f \equiv 0$. Any choice of basis element works; $e_1$ is just the cleanest.
[/guided]
[/step]
[step:Conclude that the irreducible characters span $\mathcal{C}(G)$]
We have proved: if $f \in \mathcal{C}(G)$ satisfies $\langle f, \chi_j \rangle = 0$ for all irreducible characters $\chi_j$, then $f = 0$. Equivalently, the orthogonal complement of $\operatorname{span}_\mathbb{C}\{\chi_1, \ldots, \chi_k\}$ inside $\mathcal{C}(G)$ is $\{0\}$. Since $\mathcal{C}(G)$ is a finite-dimensional inner-product space, every subspace $U$ satisfies $\mathcal{C}(G) = U \oplus U^\perp$; with $U = \operatorname{span}\{\chi_1, \ldots, \chi_k\}$ we get $U^\perp = 0$, hence $U = \mathcal{C}(G)$.
Combined with Part 1 (which gives $\langle \chi_i, \chi_j \rangle = \delta_{ij}$, so the $\chi_j$ are orthonormal and in particular linearly independent), the irreducible characters $\chi_1, \ldots, \chi_k$ form an orthonormal basis of $\mathcal{C}(G)$. This proves both parts of the theorem.
[/step]