Post History
As apparently seems par for this book, the theorem statement you're paraphrasing involves vaguely defined or completely undefined terms. For example, it talks about "admissible (smooth) paths" but ...
Answer
#1: Initial revision
As apparently seems par for this book, the theorem statement you're paraphrasing involves vaguely defined or completely undefined terms. For example, it talks about "*admissible* (smooth) paths" but this is the first use of the term "admissible" in the text.^[The notation $f'_q$ is bizarre. The authors like to use $'$ to indicate differentiation with respect to whatever they feel like at the moment, but this is clearly a problem for multiparameter functions. So instead of explicitly writing $\frac{\partial f}{\partial q}$ or following other authors and writing $f\_q$, they use $f'\_q$ presumably to (help) distinguish subscripts that are indexes from subscripts that mean differentiation. Unfortunately, they don't seem to articulate this convention anywhere, they also use $'$ for just distinct but related variables, and they (presumably) typo the definition of "Lagrangian derivative" as $(L'\_{{\dot q}\_i})^\cdot - L\_{q\_i}$ where $(L'\_{{\dot q}\_i})^\cdot - L'\_{q\_i}$ was presumably intended.] Anyway, the situation you describe violates the assumptions that the covectors are linearly independent. Even in the case where you only have one, the set $\\{0\\}$ is a linearly dependent set. More practically, constraints of the sort you describe, i.e. that are functions of the (generalized) positions (and possibly time) alone, are called [holonomic](https://en.wikipedia.org/wiki/Holonomic_constraints). If you think about, what it means to say that $f(\mathbf q, t) = 0$, an acceptable constraint of the form the authors describe arises. The constraint $f(\mathbf q, t) = 0$ states that at each point $\mathbf q$, $f$ is a conserved quantity. This then gives rise to a [continuity equation](https://en.wikipedia.org/wiki/Continuity_equation) expressing this conservation, namely $\dot{\mathbf q} \cdot \nabla_\mathbf q f + \frac{\partial f}{\partial t} = 0$. That is, the amount of $f$ flowing into a point $\mathbf q$ has to exactly match the amount that $f$ decreases with time. We can then define $g(\mathbf q, \dot{\mathbf q}, t) = \dot{\mathbf q} \cdot \nabla_\mathbf q f + \frac{\partial f}{\partial t}$ and use this as a constraint. It will typically give rise to a non-zero gradient with respect to $\dot{\mathbf q}$. For the case where $f$ is not time-varying. The continuity equation states that the only allowed tangent vectors are those normal to the gradient, i.e. those in the directions of constant $f$. In this case, the $\mathbf v$ such that $g(\mathbf q, \mathbf v) = 0$ pick out a (hyper-)plane through the origin which, if translated to $\mathbf q$, would be tangent to the (hyper-)surface $f(\mathbf q) = 0$ at $\mathbf q$. This is exactly the tangent space we'd want in this situation. The gradient of $g(\mathbf q, \mathbf v)$ with respect to $\mathbf v$ is just $\nabla_\mathbf q f$ again. The virtual velocity vectors are again just the vectors of this tangent (hyper-)plane. If $f$ is time-varying, then at a fixed point and time, $\mathbf q$ and $t$, the $\mathbf v$ such that $g(\mathbf q, \mathbf v, t) = 0$ will again pick out a (hyper-)plane, but this time it will not be a (hyper-)plane through the origin (unless $\frac{\partial f}{\partial t} = 0$). However, $\nabla_\mathbf v g(\mathbf q, \mathbf v, t)$ will still be $\nabla_\mathbf q f$ and thus the virtual velocities will be the same as if $f$ wasn't time-varying but instead was frozen at its current shape.