Okay, I really don't understand this part:
while (q) {G;}
If p is true before the loop, then it must be true after the loop unless your loop has a break.
What if the condition p is that var_p == 1. And in the loop you decrement var_p. If the condition was true before the loop, it certainly is not if the loop ever runs.
What if the condition p is that var_p == 1. And in the loop you decrement var_p. If the condition was true before the loop, it certainly is not if the loop ever runs.