Right. This is a bogus complaint about proof of correctness.<p>The way you prove halting is to find some integer measure for each loop (like &quot;iterations remaining&quot; or &quot;error being reduced&quot;) which decreases on each iteration but does not go negative.  If you can&#x27;t find such a measure, your program is probably broken. (See page 12 of [1], the MEASURE statement, for a system I built 30 years ago which did this.)<p>The measure has to be an integer, not a real number, to avoid Zeno&#x27;s paradox type problems. (1, 1&#x2F;2, 1&#x2F;4, 1&#x2F;8, 1&#x2F;16 ...)<p>On some floating point problems, with algorithms that are supposed to converge, proving termination can be tough.  You can always add an iteration counter and limit the number of iterations.  Now you can show termination.<p>Microsoft&#x27;s Static Driver Verifier is able to prove correctness, in the sense of &quot;not doing anything that will crash the kernel&quot;, about 96% of the time.  About 4% of the time, it gives up after running for a while.  If your kernel driver is anywhere near close to undecidability, there&#x27;s something seriously wrong with it.<p>In practice, this is not one of the more difficult areas in program verification.<p>[1] <a href="http:&#x2F;&#x2F;www.animats.com&#x2F;papers&#x2F;verifier&#x2F;verifiermanual.pdf" rel="nofollow">http:&#x2F;&#x2F;www.animats.com&#x2F;papers&#x2F;verifier&#x2F;verifiermanual.pdf</a>