[proofplan]
We prove both directions. ($\Rightarrow$) If $s_1, \ldots, s_n$ are integral over $R$, we reduce by induction to the case $n = 1$, where a monic relation of degree $d$ shows that $R[s]$ is spanned by $1, s, \ldots, s^{d-1}$. ($\Leftarrow$) If $R[s_1, \ldots, s_n]$ is a finitely generated $R$-module, then for any element $b$ in this ring, the multiplication-by-$b$ map is an $R$-module endomorphism. Expressing this in coordinates gives a matrix equation $(bI - A)t = 0$; multiplying by the adjugate and using $1 \in R[s_1, \ldots, s_n]$ produces a monic polynomial over $R$ satisfied by $b$.
[/proofplan]
[step:Reduce the ($\Rightarrow$) direction to the case $n = 1$ by induction]
It suffices to prove: if $s$ is integral over $R$, then $R[s]$ is a finitely generated $R$-module. Indeed, once this is established, the general case follows by induction: $R[s_1]$ is finitely generated over $R$; then $s_2$ is integral over $R$ hence over $R[s_1]$, so $R[s_1][s_2] = R[s_1, s_2]$ is finitely generated over $R[s_1]$; a finitely generated module over a finitely generated $R$-algebra is itself finitely generated over $R$ (by composing generating sets). Continuing, $R[s_1, \ldots, s_n]$ is finitely generated over $R$.
[/step]
[step:Prove ($\Rightarrow$) for $n = 1$: a monic relation of degree $d$ makes $R[s]$ free of rank $\leq d$]
Suppose $s$ is integral over $R$, so there exists a monic polynomial
\begin{align*}
f(x) = x^d + c_{d-1}x^{d-1} + \cdots + c_1 x + c_0 \in R[x]
\end{align*}
with $f(s) = 0$. This gives $s^d = -(c_{d-1}s^{d-1} + \cdots + c_0) \in R + Rs + \cdots + Rs^{d-1}$.
For any polynomial $g \in R[x]$, apply the division algorithm in $R[x]$ (which is valid since $f$ is monic): write $g = fq + r$ with $q, r \in R[x]$ and $\deg r < d$. Evaluating at $s$:
\begin{align*}
g(s) = f(s) \cdot q(s) + r(s) = 0 + r(s) = r(s).
\end{align*}
Since $\deg r < d$, we have $r(s) \in R + Rs + \cdots + Rs^{d-1}$. Every element of $R[s]$ is of the form $g(s)$ for some $g \in R[x]$, so
\begin{align*}
R[s] = R + Rs + \cdots + Rs^{d-1}.
\end{align*}
Thus $R[s]$ is generated as an $R$-module by the finite set $\{1, s, s^2, \ldots, s^{d-1}\}$.
[guided]
The key idea is that the monic relation $f(s) = 0$ lets us reduce any power $s^k$ (with $k \geq d$) to a polynomial in $s$ of degree less than $d$, using the division algorithm. Let us see this explicitly.
The relation $s^d = -(c_{d-1}s^{d-1} + \cdots + c_0)$ shows that $s^d$ is an $R$-linear combination of $1, s, \ldots, s^{d-1}$. By induction, $s^{d+1} = s \cdot s^d$ can be expanded using this relation, and so on — every power $s^k$ with $k \geq d$ reduces to an $R$-linear combination of $1, s, \ldots, s^{d-1}$.
More cleanly: for any $g \in R[x]$, the division algorithm for polynomials (which requires the leading coefficient of $f$ to be a unit in $R$ — and it is, since $f$ is monic) gives $g = fq + r$ with $\deg r < d$. Evaluating at $s$: $g(s) = f(s)q(s) + r(s) = r(s)$, since $f(s) = 0$. So every element of $R[s]$ lies in $\operatorname{span}_R\{1, s, \ldots, s^{d-1}\}$.
Why does the division algorithm work in $R[x]$ (where $R$ may not be a field)? Because $f$ is monic: the leading coefficient is $1$, which is a unit. At each step of the algorithm, we subtract a multiple of $f$ to eliminate the leading term, and dividing by the leading coefficient of $f$ is just dividing by $1$.
[/guided]
[/step]
[step:Prove ($\Leftarrow$): finite generation of $R[s_1, \ldots, s_n]$ implies integrality of every element]
Suppose $M := R[s_1, \ldots, s_n]$ is finitely generated as an $R$-module, with generators $t_1, \ldots, t_d \in M$. Let $b \in M$ be any element. Since $M$ is a ring and $b \in M$, multiplication by $b$ maps $M$ into itself:
\begin{align*}
\mu_b: M &\to M \\
m &\mapsto bm.
\end{align*}
Since $bt_i \in M$ and $t_1, \ldots, t_d$ generate $M$ as an $R$-module, there exist $a_{ij} \in R$ such that
\begin{align*}
b \, t_i = \sum_{j=1}^{d} a_{ij} \, t_j \qquad \text{for } i = 1, \ldots, d.
\end{align*}
In matrix form, with $A = (a_{ij}) \in R^{d \times d}$ and $t = (t_1, \ldots, t_d)^\top$:
\begin{align*}
(bI - A)\,t = 0.
\end{align*}
[guided]
We want to show that every element $b$ of the finitely generated $R$-module $M = R[s_1, \ldots, s_n]$ satisfies a monic polynomial equation over $R$.
The idea is to use the Cayley-Hamilton-style trick: express the multiplication-by-$b$ map in coordinates, then use the adjugate matrix to extract a polynomial relation.
Since $t_1, \ldots, t_d$ generate $M$ as an $R$-module and $bt_i \in M$ for each $i$, we can write each $bt_i$ as an $R$-linear combination of the generators:
\begin{align*}
bt_i = \sum_{j=1}^{d} a_{ij} t_j, \qquad a_{ij} \in R.
\end{align*}
Rearranging: $\sum_{j=1}^{d} (b\delta_{ij} - a_{ij}) t_j = 0$ for each $i$, where $\delta_{ij}$ is the Kronecker delta. In matrix notation, $(bI - A)t = 0$, where $A = (a_{ij})$ and $t = (t_1, \ldots, t_d)^\top$.
[/guided]
[/step]
[step:Apply the adjugate matrix to extract a monic polynomial satisfied by $b$]
Let $B := bI - A \in M_d(R[b])$. The classical adjugate (or cofactor) matrix $B^* \in M_d(R[b])$ satisfies the identity
\begin{align*}
B^* B = (\det B)\, I.
\end{align*}
Multiplying the relation $B\,t = 0$ on the left by $B^*$:
\begin{align*}
0 = B^* (B\,t) = (B^* B)\,t = (\det B)\, I\, t = (\det B) \,t.
\end{align*}
This gives $(\det B)\, t_j = 0$ for each $j = 1, \ldots, d$.
Since $1 \in M = R[s_1, \ldots, s_n]$ and $t_1, \ldots, t_d$ generate $M$ over $R$, there exist $c_1, \ldots, c_d \in R$ with $1 = \sum_{j=1}^{d} c_j t_j$. Therefore
\begin{align*}
\det B = (\det B) \cdot 1 = \sum_{j=1}^{d} c_j \cdot (\det B)\, t_j = \sum_{j=1}^{d} c_j \cdot 0 = 0.
\end{align*}
Now $\det(bI - A)$ is a monic polynomial of degree $d$ in $b$ with coefficients in $R$ (the leading term is $b^d$ from the diagonal product, and all other terms involve entries of $A$, which lie in $R$). The equation $\det(bI - A) = 0$ is therefore a monic polynomial relation over $R$ satisfied by $b$.
Since $b \in M$ was arbitrary, every element of $R[s_1, \ldots, s_n]$ is integral over $R$. In particular, $s_1, \ldots, s_n$ are all integral over $R$.
[guided]
The adjugate matrix $B^*$ is defined so that $B^* B = (\det B) I$. This is a standard identity in linear algebra that holds over any commutative ring — it does not require invertibility or a field.
Multiplying $(bI - A)t = 0$ on the left by $B^* = (bI - A)^*$:
\begin{align*}
(bI - A)^* (bI - A) t = \det(bI - A) \cdot t = 0.
\end{align*}
So $\det(bI - A) \cdot t_j = 0$ for all $j$. Now we need to go from "$\det(bI - A)$ annihilates all generators" to "$\det(bI - A) = 0$." This requires the fact that $1$ can be expressed as an $R$-linear combination of the generators $t_j$. Since $1 \in M = R[s_1, \ldots, s_n]$ (as $R \subseteq M$), and $t_1, \ldots, t_d$ generate $M$ as an $R$-module, we can write $1 = \sum c_j t_j$ with $c_j \in R$. Then:
\begin{align*}
\det(bI - A) = \det(bI - A) \cdot 1 = \sum_j c_j \cdot \det(bI - A) \cdot t_j = 0.
\end{align*}
Finally, $\det(bI - A)$ is a monic polynomial of degree $d$ in $b$. The leading coefficient is $1$ because the only degree-$d$ contribution to $\det(bI - A)$ comes from the product of diagonal entries $\prod_{i=1}^{d}(b - a_{ii})$, whose leading term is $b^d$. All lower-order terms are polynomials in the $a_{ij} \in R$, hence lie in $R$.
So $b$ satisfies the monic equation $\det(bI - A) = 0$ over $R$, proving $b$ is integral over $R$.
[/guided]
[/step]