[proofplan]
We vary only the terminal time and preserve the two fixed endpoint constraints by reparametrising the given minimising curve. Differentiating this one-parameter family at the original terminal time produces a first-order spatial variation $h$ satisfying $h(a)=0$ and $h(b)=-\dot q(b)$. We then differentiate the action, integrate the velocity term by parts, use the Euler-Lagrange equation to remove the interior contribution, and identify the remaining boundary coefficient as $-H(b)$. Since the terminal time is free on both sides of $b$, local minimality forces this coefficient to vanish.
[/proofplan]
[step:Build an admissible terminal-time variation by reparametrising the minimizer]
Since $b$ is an interior admissible terminal time, choose $\varepsilon>0$ such that $b+s$ is admissible for every $s \in (-\varepsilon,\varepsilon)$. For such $s$, define the affine reparametrisation
\begin{align*}
\theta_s:[a,b+s] &\to [a,b]
\end{align*}
\begin{align*}
t &\mapsto a+\frac{b-a}{b+s-a}(t-a).
\end{align*}
Define the varied curve
\begin{align*}
q_s:[a,b+s] &\to \mathbb{R}^n
\end{align*}
\begin{align*}
t &\mapsto q(\theta_s(t)).
\end{align*}
Then $q_s \in C^2([a,b+s];\mathbb{R}^n)$, and
\begin{align*}
q_s(a)=q(a)=q_a,
\end{align*}
while
\begin{align*}
q_s(b+s)=q(b)=q_b.
\end{align*}
Thus $(q_s,b+s)$ is an admissible comparison pair for every sufficiently small $s$.
Define the fixed-time first variation
\begin{align*}
h:[a,b] &\to \mathbb{R}^n
\end{align*}
\begin{align*}
t &\mapsto \left.\frac{\partial}{\partial s}\right|_{s=0}q_s(t).
\end{align*}
Since
\begin{align*}
\left.\frac{\partial}{\partial s}\right|_{s=0}\theta_s(t)=-\frac{t-a}{b-a},
\end{align*}
the chain rule gives
\begin{align*}
h(t)=-\frac{t-a}{b-a}\dot q(t).
\end{align*}
In particular,
\begin{align*}
h(a)=0
\end{align*}
and
\begin{align*}
h(b)=-\dot q(b).
\end{align*}
[guided]
The terminal point is fixed, but the terminal time moves. To keep the endpoint constraint exact, we reparametrise the original curve instead of adding an arbitrary perturbation. For each small $s$, the terminal time is $b+s$, and the affine map
\begin{align*}
\theta_s:[a,b+s] &\to [a,b]
\end{align*}
\begin{align*}
t &\mapsto a+\frac{b-a}{b+s-a}(t-a)
\end{align*}
sends the new interval back to the old one. It satisfies $\theta_s(a)=a$ and $\theta_s(b+s)=b$.
Now define
\begin{align*}
q_s:[a,b+s] &\to \mathbb{R}^n
\end{align*}
\begin{align*}
t &\mapsto q(\theta_s(t)).
\end{align*}
Because $q \in C^2([a,b];\mathbb{R}^n)$ and $\theta_s$ is affine, $q_s \in C^2([a,b+s];\mathbb{R}^n)$. The endpoint constraints are preserved exactly:
\begin{align*}
q_s(a)=q(\theta_s(a))=q(a)=q_a
\end{align*}
and
\begin{align*}
q_s(b+s)=q(\theta_s(b+s))=q(b)=q_b.
\end{align*}
We now compute the first-order spatial displacement at fixed $t \in [a,b]$. Define
\begin{align*}
h:[a,b] &\to \mathbb{R}^n
\end{align*}
\begin{align*}
t &\mapsto \left.\frac{\partial}{\partial s}\right|_{s=0}q_s(t).
\end{align*}
The derivative of the reparametrisation is
\begin{align*}
\left.\frac{\partial}{\partial s}\right|_{s=0}\theta_s(t)
=
\left.\frac{\partial}{\partial s}\right|_{s=0}
\left(a+\frac{b-a}{b+s-a}(t-a)\right)
=
-\frac{t-a}{b-a}.
\end{align*}
Applying the chain rule to $q(\theta_s(t))$ gives
\begin{align*}
h(t)=-\frac{t-a}{b-a}\dot q(t).
\end{align*}
Therefore
\begin{align*}
h(a)=0
\end{align*}
and
\begin{align*}
h(b)=-\dot q(b).
\end{align*}
This last identity is the infinitesimal form of the fixed terminal point condition: if the endpoint time moves forward by $s$, then the curve value at the old terminal time must move backward by approximately $\dot q(b)s$ so that the endpoint at time $b+s$ remains $q_b$.
[/guided]
[/step]
[step:Differentiate the action along the admissible family]
Define the scalar function
\begin{align*}
J:(-\varepsilon,\varepsilon) &\to \mathbb{R}
\end{align*}
\begin{align*}
s &\mapsto I[q_s,b+s]
=
\int_a^{b+s}F(q_s(t),\dot q_s(t))\,d\mathcal{L}^1(t).
\end{align*}
Since $F \in C^2(\mathbb{R}^n\times\mathbb{R}^n;\mathbb{R})$ and $q \in C^2([a,b];\mathbb{R}^n)$, differentiation under the integral sign with a moving upper endpoint is valid for this smooth finite-interval family. At $s=0$ it gives
\begin{align*}
J'(0)=
\int_a^b
\left[
\partial_xF(q(t),\dot q(t))\cdot h(t)
+
\partial_vF(q(t),\dot q(t))\cdot \dot h(t)
\right]\,d\mathcal{L}^1(t)
+
F(q(b),\dot q(b)).
\end{align*}
Using the definition $p(t)=\partial_vF(q(t),\dot q(t))$, this becomes
\begin{align*}
J'(0)=
\int_a^b
\left[
\partial_xF(q(t),\dot q(t))\cdot h(t)
+
p(t)\cdot \dot h(t)
\right]\,d\mathcal{L}^1(t)
+
F(q(b),\dot q(b)).
\end{align*}
[/step]
[step:Use the Euler-Lagrange equation to eliminate the interior term]
Because $p \in C^1([a,b];\mathbb{R}^n)$ and $h \in C^1([a,b];\mathbb{R}^n)$, [integration by parts](/theorems/210) gives
\begin{align*}
\int_a^b p(t)\cdot \dot h(t)\,d\mathcal{L}^1(t)
=
p(b)\cdot h(b)-p(a)\cdot h(a)
-
\int_a^b \dot p(t)\cdot h(t)\,d\mathcal{L}^1(t).
\end{align*}
Since $h(a)=0$, this yields
\begin{align*}
J'(0)=
p(b)\cdot h(b)
+
\int_a^b
\left[
\partial_xF(q(t),\dot q(t))-\dot p(t)
\right]\cdot h(t)\,d\mathcal{L}^1(t)
+
F(q(b),\dot q(b)).
\end{align*}
The Euler-Lagrange equation says precisely that
\begin{align*}
\dot p(t)=\partial_xF(q(t),\dot q(t))
\end{align*}
for every $t \in [a,b]$. Hence the integral term vanishes, and therefore
\begin{align*}
J'(0)=p(b)\cdot h(b)+F(q(b),\dot q(b)).
\end{align*}
Substituting $h(b)=-\dot q(b)$ gives
\begin{align*}
J'(0)=-p(b)\cdot \dot q(b)+F(q(b),\dot q(b)).
\end{align*}
By the definition of $H$, this is
\begin{align*}
J'(0)=-H(b).
\end{align*}
[/step]
[step:Apply local minimality for two-sided terminal-time variations]
The admissible terminal-time interval contains $b$ as an interior point, so the admissible family $(q_s,b+s)$ exists for both positive and negative sufficiently small $s$. Since $(q,b)$ is a local minimizer, the function $J$ has a local minimum at $s=0$. Because $J$ is differentiable at $0$, the one-variable necessary condition for a local minimum gives
\begin{align*}
J'(0)=0.
\end{align*}
From the previous step,
\begin{align*}
J'(0)=-H(b).
\end{align*}
Therefore
\begin{align*}
H(b)=0.
\end{align*}
This is the claimed free terminal time transversality condition.
[/step]