The algebra and calculus of algebraic data types
That&#x27;s fun and a bit surprising, but maybe it shouldn&#x27;t be. I&#x27;m reminded that Dana Scott with Christopher Strachey showed that by using lattices or complete partial orders with a bit of topology to model graphs of possible computations of a program you could, just as in analysis, define least upper and lower bounds and a notion of continuity to derive a construction of limit for a computation which is analogous to a limit in analysis. They called this model a domain. That bit of of math is the basis of denotational semantics of programming languages and is necessary because sets  are largely sufficient as the basis for algebra and analysis but not for programs which have evils like partial functions, side effects and variable assignment. I believe that Christopher Strachey with Scott also introduced the formal notions of sum, product and recusive types. They also showed how definitions or models of recursive types and functions could be well founded through their construction of limits on domains. An early tech report on it can be found here:<p><a href="https:&#x2F;&#x2F;www.cs.ox.ac.uk&#x2F;files&#x2F;3228&#x2F;PRG06.pdf" rel="nofollow">https:&#x2F;&#x2F;www.cs.ox.ac.uk&#x2F;files&#x2F;3228&#x2F;PRG06.pdf</a><p>and here&#x27;s a more recent free book from David Schmidt on the topic:<p><a href="http:&#x2F;&#x2F;people.cs.ksu.edu&#x2F;~schmidt&#x2F;text&#x2F;DenSem-full-book.pdf" rel="nofollow">http:&#x2F;&#x2F;people.cs.ksu.edu&#x2F;~schmidt&#x2F;text&#x2F;DenSem-full-book.pdf</a>