Is Wikipedia's formal definition of NP correct?
I am currently reading &quot;Introduction to the Theory of Computation&quot; by Sipser and think that it is a great introduction to complexity (as well as automata and computability). Here are his definitions of Verifier and NP:

Definition 7.18: A verifier for a language $A$ is an algorithm $V$, where $A = \{ w \mid V \text{ accepts } \langle w, c \rangle \text{ for some string } c \}.$ We measure the time of a verifier only in terms of the length
of $w$, so a polynomial time verifier runs in polynomial time in the
length of $w$. A language $A$ is polynomially verifiable if it has a
polynomial time verifier. (Sipser, 293)
Definition 7.19: NP is the class of languages that have polynomial time verifiers. (Sipser, 294)

Translating the wiki definition into the above, $A = L$, $V = M$, $w = x$, and $c = y$. It seems that the first condition of the wiki definition is correct, and this may make more sense given the alternative definition of NP. A language $L$ is in NP if there exists a non-deterministic TM $N$ that decides $L$ in non-deterministic polynomial time $NTIME(n^k)$. Here, the running time of $N$ is measured in terms of its input size $n = |w| = |x|$.
However, I have not seen nor am I familiar with the second condition, but that seems to set some upper bound on the length of $y$ so that $|y|$ is a polynomial in $|x|$, which should answer your question about if $|y| &gt; p(|x|)$. I figure the second condition is to protect against padding arguments. At any rate, if $p(|x|) &lt; q(|x|)$, then $p(|x|) &lt; |y| &lt; q(|x|)$, so $|y|$ is still a polynomial in $|x|$.