In High School Computing I was taught the Structured Program Theorem - that you could implement any mathematical operation using:
- Sequence
- Selection
- Iteration
After completing a Computer Science degree - we can express what is required for any computable function more formally with M-recursive functions:
- The constant $0$ function
- The successor function
- Selecting parameters
- Function composition
- Primitive Recursion
- The $\mu$-operator (look for the smallest $x$ such that...)
This being the minimal set of axioms. Translating this to code we get:
- The constant
0 - Incrementation
_ + 1 - Variable access
x - Program/statement concatenation
_; _ - Countdown loops
for ( x to 0 ) do _ end - While loops
while ( x != 0 ) do _ end
But I've come away looking for proof. How do we know all this covers all computable functions? Is there an obvious branch of Mathematics for which this is not covered? Is there a shortcoming in Lambda Calculus where it is yet to cover off obscure Mathematical operations?
(Noting of course that
- Lambda Calculus is a subset of Term rewriting,
- that Mathematica chose Term-writing over Lambda Calculus as its foundation,
- and recent work in Univalent Foundations. )
My question is: Can all mathematical operations be encoded with a Turing Complete language?