A set is a theorem, so now we have, Theorum == Type == Set == Number. A function is simply the way of defining or proving the Theorum, e.g. if set A == B, and B == C, then A == C is a function, which itself is a Set, conjoining A and C.
The "type" of an object (integer, char, whatever) is really a Set, and the way to construct that set (also being itself a set) is a function, which is what one might call a "program".
These things are different ways of looking at the same thing. A "type" (set) is the Theorum, its proof is the function (program which constructs the Theorum or Set).
The only difference between function/program and Set/Theorum is the former "constructs" the later, the former being "temporal" the latter being "eternal" or put it another way, the former being the "building blocks" the latter being the "finished product".
So yes pointers are numbers, which though are Sets, constructed by functions and these sets construct the Theorums. The type is the Theorum, the function is the construction of that Theorum, done vis-a-vis Sets and that is what (IMHO) that thing which we call "computer science" is all about. :-)