[proofplan]
The pullback is defined pointwise by precomposing a multilinear form on $\mathbb{R}^n$ with the [linear map](/page/Linear%20Map) $Df_x: \mathbb{R}^m \to \mathbb{R}^n$. Linearity in the form is immediate from the pointwise definition because the value $\omega_{f(x)}$ is evaluated *linearly* in $\omega$. For multiplicativity, we unwind the alternating-shuffle definition of the wedge product on $V$, apply $Df_x$ to every input vector, and recognise the resulting alternating sum as the wedge product of the pulled-back forms on $U$. The key point is that $Df_x$ is the *same* [linear map](/page/Linear%20Map) applied to every argument, so it can be threaded through both factors of the wedge sum simultaneously.
[/proofplan]
[step:Fix notation and recall the pointwise definition of pullback]
Throughout the proof, fix $x \in U$ and write $L := Df_x \in \mathcal{L}(\mathbb{R}^m, \mathbb{R}^n)$ for the total derivative of $f$ at $x$, which is a [linear map](/page/Linear%20Map) between finite-dimensional Euclidean spaces. For any $k \in \{0, 1, \ldots, n\}$ and any $k$-form $\omega \in \Omega^k(V)$, the value $\omega_{f(x)}$ is an alternating $k$-linear form on $\mathbb{R}^n$:
\begin{align*}
\omega_{f(x)}: \underbrace{\mathbb{R}^n \times \cdots \times \mathbb{R}^n}_{k \text{ factors}} &\to \mathbb{R}.
\end{align*}
The pullback at $x$ is the pointwise composition
\begin{align*}
(f^*\omega)_x: \underbrace{\mathbb{R}^m \times \cdots \times \mathbb{R}^m}_{k \text{ factors}} &\to \mathbb{R}, \\
(v_1, \ldots, v_k) &\mapsto \omega_{f(x)}\bigl(L v_1, \ldots, L v_k\bigr).
\end{align*}
We will work entirely at the fixed point $x$; since $x \in U$ was arbitrary, the resulting identities of forms at $x$ promote to identities of forms on all of $U$.
[/step]
[step:Establish linearity in the form]
Let $p \in \{0, 1, \ldots, n\}$, let $\alpha, \beta \in \Omega^p(V)$, and let $a, b \in \mathbb{R}$. We must show
\begin{align*}
f^*(a\alpha + b\beta) = a\, f^*\alpha + b\, f^*\beta.
\end{align*}
Fix $x \in U$ and tangent vectors $v_1, \ldots, v_p \in \mathbb{R}^m$. By the pointwise definition of $a\alpha + b\beta$ as a section of $\Lambda^p T^*V$, we have
\begin{align*}
(a\alpha + b\beta)_{f(x)}(w_1, \ldots, w_p) = a\, \alpha_{f(x)}(w_1, \ldots, w_p) + b\, \beta_{f(x)}(w_1, \ldots, w_p)
\end{align*}
for all $w_1, \ldots, w_p \in \mathbb{R}^n$. Setting $w_i = Lv_i$ for $i = 1, \ldots, p$ and applying the definition of pullback from Step 1,
\begin{align*}
\bigl(f^*(a\alpha + b\beta)\bigr)_x(v_1, \ldots, v_p) &= (a\alpha + b\beta)_{f(x)}(Lv_1, \ldots, Lv_p) \\
&= a\, \alpha_{f(x)}(Lv_1, \ldots, Lv_p) + b\, \beta_{f(x)}(Lv_1, \ldots, Lv_p) \\
&= a\, (f^*\alpha)_x(v_1, \ldots, v_p) + b\, (f^*\beta)_x(v_1, \ldots, v_p) \\
&= \bigl(a\, f^*\alpha + b\, f^*\beta\bigr)_x(v_1, \ldots, v_p).
\end{align*}
Since $x \in U$ and $v_1, \ldots, v_p \in \mathbb{R}^m$ were arbitrary, the two $p$-forms agree everywhere, establishing (i).
[guided]
The pullback is defined by *precomposing* the multilinear form $\omega_{f(x)}$ with the [linear map](/page/Linear%20Map) $L = Df_x$ on each input slot. Two operations are involved: scaling/adding multilinear forms, and substituting vectors into them. Linearity in the form $\omega$ is a property of the first operation alone — it has nothing to do with $L$.
Concretely, fix $x \in U$ and $v_1, \ldots, v_p \in \mathbb{R}^m$. The values $w_i := Lv_i \in \mathbb{R}^n$ are fixed once $x$ and the $v_i$ are. So we are asking: how does the *number*
\begin{align*}
\omega_{f(x)}(w_1, \ldots, w_p)
\end{align*}
depend on $\omega$? By the very definition of the linear combination $a\alpha + b\beta$ in $\Omega^p(V)$ — which is just the pointwise linear combination of alternating multilinear forms at each point of $V$ — we have
\begin{align*}
(a\alpha + b\beta)_{f(x)}(w_1, \ldots, w_p) = a\, \alpha_{f(x)}(w_1, \ldots, w_p) + b\, \beta_{f(x)}(w_1, \ldots, w_p).
\end{align*}
Substituting $w_i = Lv_i$ and reading off the definition of pullback gives
\begin{align*}
\bigl(f^*(a\alpha + b\beta)\bigr)_x(v_1, \ldots, v_p) &= a\, (f^*\alpha)_x(v_1, \ldots, v_p) + b\, (f^*\beta)_x(v_1, \ldots, v_p).
\end{align*}
This holds for every $x \in U$ and every choice of input vectors, so the underlying $p$-forms on $U$ coincide.
The morally important point: $f^*$ is built out of two ingredients — the *base-point map* $x \mapsto f(x)$ and the *fibrewise pullback* by $L = Df_x$. Neither operation interferes with the additive/scalar structure of the forms themselves, because both happen "on the side" of the form, in the arguments rather than in the form.
[/guided]
[/step]
[step:Recall the shuffle formula for the wedge product]
Let $p, q \in \{0, 1, \ldots, n\}$ with $p + q \le n$. For $\alpha \in \Omega^p(V)$ and $\beta \in \Omega^q(V)$, the wedge product $\alpha \wedge \beta \in \Omega^{p+q}(V)$ is the unique alternating $(p+q)$-form on $V$ whose value at $y \in V$ on vectors $w_1, \ldots, w_{p+q} \in \mathbb{R}^n$ is given by the *$(p,q)$-shuffle formula*
\begin{align*}
(\alpha \wedge \beta)_y(w_1, \ldots, w_{p+q}) = \sum_{\sigma \in \mathrm{Sh}(p,q)} \operatorname{sgn}(\sigma)\, \alpha_y\bigl(w_{\sigma(1)}, \ldots, w_{\sigma(p)}\bigr)\, \beta_y\bigl(w_{\sigma(p+1)}, \ldots, w_{\sigma(p+q)}\bigr),
\end{align*}
where $\mathrm{Sh}(p,q) \subseteq S_{p+q}$ is the set of $(p,q)$-shuffles, i.e.\ permutations $\sigma$ of $\{1, \ldots, p+q\}$ satisfying $\sigma(1) < \cdots < \sigma(p)$ and $\sigma(p+1) < \cdots < \sigma(p+q)$. The key structural feature for what follows is that this formula is built *only* by evaluating $\alpha_y$ and $\beta_y$ on subtuples drawn from $(w_1, \ldots, w_{p+q})$ and then forming a signed sum; no other operations on the input vectors are used.
[/step]
[step:Apply the shuffle formula at $f(x)$ with inputs $Lv_i$]
Fix $x \in U$ and $v_1, \ldots, v_{p+q} \in \mathbb{R}^m$, and set $w_i := Lv_i = Df_x(v_i) \in \mathbb{R}^n$ for $i = 1, \ldots, p+q$. By the pointwise definition of pullback applied to the $(p+q)$-form $\alpha \wedge \beta$,
\begin{align*}
\bigl(f^*(\alpha \wedge \beta)\bigr)_x(v_1, \ldots, v_{p+q}) = (\alpha \wedge \beta)_{f(x)}(w_1, \ldots, w_{p+q}).
\end{align*}
Substituting the shuffle formula from Step 3 with $y = f(x)$,
\begin{align*}
(\alpha \wedge \beta)_{f(x)}(w_1, \ldots, w_{p+q}) = \sum_{\sigma \in \mathrm{Sh}(p,q)} \operatorname{sgn}(\sigma)\, \alpha_{f(x)}\bigl(w_{\sigma(1)}, \ldots, w_{\sigma(p)}\bigr)\, \beta_{f(x)}\bigl(w_{\sigma(p+1)}, \ldots, w_{\sigma(p+q)}\bigr).
\end{align*}
For each shuffle $\sigma$, the arguments to $\alpha_{f(x)}$ and $\beta_{f(x)}$ are subtuples of $(w_1, \ldots, w_{p+q}) = (Lv_1, \ldots, Lv_{p+q})$, and $L$ is the same [linear map](/page/Linear%20Map) applied to every $v_i$. Hence
\begin{align*}
w_{\sigma(j)} = L v_{\sigma(j)} \qquad \text{for each } j \in \{1, \ldots, p+q\},
\end{align*}
and so by the definition of pullback applied to $\alpha$ and $\beta$ individually,
\begin{align*}
\alpha_{f(x)}\bigl(w_{\sigma(1)}, \ldots, w_{\sigma(p)}\bigr) &= \alpha_{f(x)}\bigl(L v_{\sigma(1)}, \ldots, L v_{\sigma(p)}\bigr) = (f^*\alpha)_x\bigl(v_{\sigma(1)}, \ldots, v_{\sigma(p)}\bigr), \\
\beta_{f(x)}\bigl(w_{\sigma(p+1)}, \ldots, w_{\sigma(p+q)}\bigr) &= \beta_{f(x)}\bigl(L v_{\sigma(p+1)}, \ldots, L v_{\sigma(p+q)}\bigr) = (f^*\beta)_x\bigl(v_{\sigma(p+1)}, \ldots, v_{\sigma(p+q)}\bigr).
\end{align*}
[guided]
The whole proof of multiplicativity is contained in the observation that the [linear map](/page/Linear%20Map) $L = Df_x$ is applied to *every* input slot. The shuffle formula evaluates $\alpha$ on the first $p$ shuffled arguments and $\beta$ on the last $q$ shuffled arguments. If the original arguments are $w_i = Lv_i$, then a shuffled argument $w_{\sigma(j)}$ is also $Lv_{\sigma(j)}$ — the indexing is on $i$, but $L$ has already been applied uniformly.
Concretely, write out one shuffle term. For $\sigma \in \mathrm{Sh}(p,q)$,
\begin{align*}
\alpha_{f(x)}\bigl(w_{\sigma(1)}, \ldots, w_{\sigma(p)}\bigr) = \alpha_{f(x)}\bigl(L v_{\sigma(1)}, \ldots, L v_{\sigma(p)}\bigr).
\end{align*}
The right-hand side is precisely the value of $\alpha$ at $f(x)$ on the images of $p$ vectors under $Df_x$; that is the definition of $(f^*\alpha)_x$ evaluated on those $p$ vectors:
\begin{align*}
\alpha_{f(x)}\bigl(L v_{\sigma(1)}, \ldots, L v_{\sigma(p)}\bigr) = (f^*\alpha)_x\bigl(v_{\sigma(1)}, \ldots, v_{\sigma(p)}\bigr).
\end{align*}
The same argument with $\beta$ in place of $\alpha$ converts the second factor. Crucially, the *shuffle* $\sigma$ and its *sign* are unchanged: $\sigma$ permutes index labels, and the labels $1, \ldots, p+q$ are the same on both sides; what they label has been transported from $(w_1, \ldots, w_{p+q})$ to $(v_1, \ldots, v_{p+q})$.
This is the only conceptual content of the proof. Everything else is bookkeeping.
[/guided]
[/step]
[step:Reassemble the shuffle sum on $U$ to recognise $f^*\alpha \wedge f^*\beta$]
Substituting the two pullback identities from Step 4 into the shuffle expansion,
\begin{align*}
\bigl(f^*(\alpha \wedge \beta)\bigr)_x(v_1, \ldots, v_{p+q}) = \sum_{\sigma \in \mathrm{Sh}(p,q)} \operatorname{sgn}(\sigma)\, (f^*\alpha)_x\bigl(v_{\sigma(1)}, \ldots, v_{\sigma(p)}\bigr)\, (f^*\beta)_x\bigl(v_{\sigma(p+1)}, \ldots, v_{\sigma(p+q)}\bigr).
\end{align*}
The right-hand side is exactly the shuffle formula from Step 3, applied this time on $U$ with point $x$, to the $p$-form $f^*\alpha \in \Omega^p(U)$ and the $q$-form $f^*\beta \in \Omega^q(U)$, evaluated on the vectors $v_1, \ldots, v_{p+q} \in \mathbb{R}^m$. Therefore
\begin{align*}
\sum_{\sigma \in \mathrm{Sh}(p,q)} \operatorname{sgn}(\sigma)\, (f^*\alpha)_x\bigl(v_{\sigma(1)}, \ldots, v_{\sigma(p)}\bigr)\, (f^*\beta)_x\bigl(v_{\sigma(p+1)}, \ldots, v_{\sigma(p+q)}\bigr) = \bigl(f^*\alpha \wedge f^*\beta\bigr)_x(v_1, \ldots, v_{p+q}).
\end{align*}
Chaining the equalities of Steps 4 and 5,
\begin{align*}
\bigl(f^*(\alpha \wedge \beta)\bigr)_x(v_1, \ldots, v_{p+q}) = \bigl(f^*\alpha \wedge f^*\beta\bigr)_x(v_1, \ldots, v_{p+q}).
\end{align*}
Since $x \in U$ and $v_1, \ldots, v_{p+q} \in \mathbb{R}^m$ were arbitrary, the $(p+q)$-forms $f^*(\alpha \wedge \beta)$ and $f^*\alpha \wedge f^*\beta$ agree at every point on every tuple of tangent vectors, and hence are equal as elements of $\Omega^{p+q}(U)$. This proves (ii).
[/step]
[step:Conclude that $f^*$ is a homomorphism of graded $\mathbb{R}$-algebras]
Part (i) of Step 2 shows that for each fixed degree $p$, the map $f^*: \Omega^p(V) \to \Omega^p(U)$ is $\mathbb{R}$-linear, so $f^*$ is a graded $\mathbb{R}$-[linear map](/page/Linear%20Map) $\Omega^\bullet(V) \to \Omega^\bullet(U)$. Part (ii), established in Steps 3–5, shows that $f^*$ respects the wedge product. For $0$-forms (smooth functions) $g \in \Omega^0(V) = C^\infty(V)$, the definition reads $(f^*g)(x) = g(f(x))$, so $f^*(1_V) = 1_U$ where $1_V, 1_U$ denote the constant function $1$ on $V$ and $U$ respectively — the unit of each wedge algebra. Therefore
\begin{align*}
f^*: \bigl(\Omega^\bullet(V), \wedge, 1_V\bigr) \to \bigl(\Omega^\bullet(U), \wedge, 1_U\bigr)
\end{align*}
is a unital homomorphism of graded $\mathbb{R}$-algebras, as claimed.
[/step]