Why Don't Computer Scientists Learn Math?
This is Leslie Lamport&#x27;s writing, and he&#x27;s complaining that nobody uses his TLA+ formal specification language.  (Here&#x27;s the TLA book.[1] Read the introduction, and it&#x27;s much the same rant.)<p>I used to work on formal specifications and program proofs, around the time Lamport was developing temporal logic.  I took the position that, rather than trying to make programmers learn math, we should automate and divide up the problem so that they didn&#x27;t have to.[2][3]  This meant minimizing the formalism and making the verification information look like ordinary programming.  It also meant carving out the harder math problems into a separate system where someone using a theorem prover would prove the necessary theorems in a way which allowed their use and reuse by ordinary programmers.  The underlying math is still there, but not in your face so much.<p>There&#x27;s a mathematician mindset: Terseness is good. Cleverness is good. Elegance is good. Generality is good. Case analysis is ugly.  This is unhelpful for program verification.<p>Program verification generates huge numbers of formulas to be proven. Most of the formulas are very dumb, and can be dealt with automatically by a simple theorem prover. 
Where it&#x27;s necessary to prove something hard, our approach was to encourage users to write more assertions in the code to narrow the thing to be proven, until they were down to &quot;assert(expra); assert(exprb);&quot;  Getting to that point is much like ordinary debugging.<p>Now they just needed a theorem, independent of the program, that could prove &quot;exprb&quot; given &quot;expra&quot;.  That job could be handed off to a theorem-proving expert.  A library of proved and machine-checked theorems would be built up.  Some would be general, some project-specific.  This is the software engineer&#x27;s approach to the problem.<p>The mathematician&#x27;s approach is to capture much of the program semantics in mathematical form and work on them as big math formulas.  Most of the work is done in the formula space, where mathematicians are comfortable, not the code space, where programmers are comfortable.  This seems to hold back the use of formal methods in program verification.<p>Much effort has gone into trying into trying to find some clever way to make program verification elegant. &quot;A great variety of program logics are in use in computer science for the specification of (software and&#x2F;or hardware) systems; for example: modal and temporal logics, dynamic logic, Hoare logic, separation logic, spatial logic, nominal logic, lax logic, linear logic, intuitionistic type theory, LCF.&quot;[4] We used to call this the &quot;logic of the month club&quot;.<p>[1] <a href="http:&#x2F;&#x2F;research.microsoft.com&#x2F;en-us&#x2F;um&#x2F;people&#x2F;lamport&#x2F;tla&#x2F;book-02-08-08.pdf" rel="nofollow">http:&#x2F;&#x2F;research.microsoft.com&#x2F;en-us&#x2F;um&#x2F;people&#x2F;lamport&#x2F;tla&#x2F;bo...</a>
[2] <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>
[3] <a href="http:&#x2F;&#x2F;portal.acm.org&#x2F;citation.cfm?id=567074" rel="nofollow">http:&#x2F;&#x2F;portal.acm.org&#x2F;citation.cfm?id=567074</a>
[4] <a href="http:&#x2F;&#x2F;homepages.inf.ed.ac.uk&#x2F;als&#x2F;PSPL2010&#x2F;" rel="nofollow">http:&#x2F;&#x2F;homepages.inf.ed.ac.uk&#x2F;als&#x2F;PSPL2010&#x2F;</a>