&gt; &gt;I would like to challenge the assumption here: that programming (in whatever mode) can&#x27;t be adequately described by mathematics.<p>&gt; Well, the entire lesson of the Halting Problem and Rice&#x27;s Theorem is that it can&#x27;t.<p>And in mathematics, division by zero is undefined as well as not all differential equations have analytical solutions.  Does that engender a lesson to abandon the rest of what the field provides?<p>&gt; What we can say for FP is that Fast and Loose Reasoning is Morally Correct, and that if we use nicely categorical constructions, then when our programs happen to terminate at all, those nice constructions describe their behavior.<p>Not sure what you are trying to convey with the first &quot;premise&quot; you state, but I can say with certainty that everything after &quot;and that if we use...&quot; can be applied to just about <i>any approach</i> in making a program.<p>Structured Programming:<p><pre><code>  If we use nicely decomposed procedures, then when our
  programs happen to terminate at all, those nice
  procedures describe their behaviour.
</code></pre>
Object Oriented Programming:<p><pre><code>  If we use nicely encapsulated classes, then when our
  programs happen to terminate at all, those nice objects
  describe their behaviour.
</code></pre>
Declarative Programming:<p><pre><code>  If we use nicely declared rules and capabilities, then
  when our programs happen to terminate at all, those
  nice declarations describe their behaviour.
</code></pre>
And (your example quoted here):<p><pre><code>  If we use nicely categorical constructions, then
  when our programs happen to terminate at all,
  those nice constructions describe their behavior.</code></pre>