Property-based checking [1] is pretty much the paragon of proving the mathematical correctness of a program short of a) using something like SPARK and Ada, or b) using Coq or Agda to formally verify, well, everything[2]. Formal verification is difficult but most of the rigorous proofs are done <i>exclusively outside of</i> the language in which they were written[3].<p>[1] <a href="https:&#x2F;&#x2F;wiki.haskell.org&#x2F;Introduction_to_QuickCheck2" rel="nofollow">https:&#x2F;&#x2F;wiki.haskell.org&#x2F;Introduction_to_QuickCheck2</a><p>[2] <a href="http:&#x2F;&#x2F;www.slideshare.net&#x2F;jasonreich&#x2F;formal-verification-of-programming-languages-2888453" rel="nofollow">http:&#x2F;&#x2F;www.slideshare.net&#x2F;jasonreich&#x2F;formal-verification-of-...</a><p>[3] <a href="http:&#x2F;&#x2F;adam.chlipala.net&#x2F;papers&#x2F;ImpurePOPL10&#x2F;" rel="nofollow">http:&#x2F;&#x2F;adam.chlipala.net&#x2F;papers&#x2F;ImpurePOPL10&#x2F;</a> -- The field is moving too fast for me to keep up, but last I checked the theoretical comp. sci. guys were still using a methodology similar to this. I haven&#x27;t read many POPL or ICFP papers in the last few years so someone who&#x27;s more in touch with cutting-edge research, please jump in.