I have been fascinated by Godel's incompleteness theory for a long time. Of course, being fascinated by it does not mean I know very much about it. This is the same as my fascination on playing music. I knew how to play tons of musical instruments. I just don't play any of them worth a dime. The seed of the fascination for the incompleteness theory started when I was in third year in university, when my professor introduced us to the secrets of parsing. Now, how would that have anything to do incompleteness? Well, that was when I started reading journal papers: I was so impressed by the ability for the computer to do parsing that I had to know to know everything about it. Again, that does not mean I knew about the topic in a a deep way, just that I found tons of papers on parsing written by Knuth and other people that I did not understand very well: I knew what the different issues were, I just did not know why and how they could be solved. I remember trying to impress the professor by implementing Early's algorithm for a tiny simple parsing assignment (in Simula 67!). I did not get a high mark, as he obviously did not like the prank.
That summer, I stayed in the libraries, roaming the different stacks of books. I stayed mostly on the computer science side of things. What I found was nothing short of astonishing: what I had studied until then was like a grain of sand on the beach. It was beyond insignificant, compared to all the sand on the beach of knowledge.
Then, for whatever reason, the book "Godel, Esther, Bach" partly to blame, I started drifting over to the philosophy of mathematics. Again, like whatever I was fascinated with, I never spent very much time on anything on that topic, just surfing from one book to another. I started wondering why, even after I had attempted to read the GEB book for a few times by then, that these books were all written in the 1920's, 1930's. I did not understand at all.
Then, quite naturally, I guess, I moved over to reading Bertrand Russell's books, most of them his popular books. Obviously, I did not know what was philosophy and what was not. I just read everything he wrote that I could understand. But that was good: I was connected back to foundation of mathematics: Russell's "Principia Mathematica". That was when I put all these things together: Godel's theory killed all of them. Suddenly, the whole field withered. I bet there are still people doing research in that field; I just don't think they are as excited as the mathematicians and logicians in the 1920's and 1930's studying in the same field.
Fast forward to ten years later, when someone forwarded Bill Joy's "Why the future does not need us" to me. The bibliography was wonderful, and it rekindled the biggest question I had after those years of thinking about the reason for the incompleteness theory. Then it hit me, when I found a book called "The Limit of Mathematics". I tried to read it, but I wasn't too fascinated by the topic of the book. But I did think of the reason, well, I think that is the reason for the limits of mathematics: whereas the nature has no collection, no grouping, and has only individuals, mathematics (and our thinking) must deal with not individuals, only on groups, only on collections, only on (perceived) shared characteristics. Without that, we would have no theories. No science.
But why would that make any difference?
Because we lose information by grouping. If we have a theory that has only one or some simple groups, then that theory can be complete and consistent. Any time we allow the grouping to be complex enough, we start losing information. Once you are in a state where information has been lost, you can't come back to the state before the information was lost. Or indeed you could, only with the price of getting outside the universe you have constructed.
Again, so what? That has nothing to do with programming or software, the implicitly theme of this blog. Well, I was a functional programming fanatic once. For a short time. When I was studying for my doctorate. Don't get me wrong, functional programming is a wonderful thing. My intellectual awakening can be traced back to functioning programming: my reading of John McCarthy's 1960 paper. But. Functional programming is too neat. Too tidy.
My holy grail has been shifted from a functional programming world to something equally unrealistic quite a few years ago: the representation of the real world, with all its glorious mess. In 1999, I realized that the tools we have would not do it. I was ecstatic when I heard about the semantic web, before I found out how mathematical rigorous it was going to be. No. Rigor does not interest me. I want the messiness of reality.
Now, messiness does not mean being inaccurate. What we have now usually is very neat and tidy and rigorous. But it is not accurate. I can prove whatever I want with the wonderful schema I have designed just yesterday. But this rigor does not show whether it is accurate with respect to the reality it is supposed to represent.
I was hopeful for a little while when I was thinking about what ontologies can help me in getting that messiness.
In a way, it is funny how deep mathematics is inside me, that I know I must get out of this mathematics of generalization and move on to something that I can use to represent the real world, a world of individuals, a something where we can handle truth in different layers, just like in the real world. I just can't. It is so much a part of me that I don't know what it is like not having this mathematics, the learned instinct to group things.
Perhaps I am trying to get back the primordial way of looking at nature: everything and every phenomenon is considered in itself. But I don't want to lose the ability to accumulate knowledge either. So, I don't want that purely individualistic view, but I want it just organized enough to be able to allow me to differentiate individuals. but not so much that I end up with individuals, with no connections with each other. So, it is not simply having a unique identification for each object. After all, these objects are all the same, just the values of their attributes.
That, I think, is also the reason why programming is so hard to get right. As humans, we think in layers, moving up and down at will, but we know, by intuition, the different layers of understanding we have. Programming, right now, has no such thing: you must program on the lowest layer. All the abstractions, all the frameworks, they all mask the details, but not allowing us to move up and down the different layers as we wish. In other words, we avert our eyes when we work on something specific, and get the tools, the framework, the abstractions to mask the details of the lowest layer that, unfortunately, is never very far. We have to know all possible paths the program we are writing to handle the cases we want it to handle, on the lowest layer. That is why Visual Basic is so terrible whenever you use it for anything remotely complex: that by design you can't get to the lowest layer sometimes, and because the ability not to consider the lowest layer is only an illusion, when the time comes to handle some lowest layer detail that Visual Basic hides from you, you are stuck. On the other hand, C gets you to program on the lowest layer, even when you can hide some of the complexities away makes for very reliable, very robust systems. And you must think of all the possible ways things can go wrong.
Both are simply lousy if you need to handle the moving of time, the changing of the relationships over time of the things modeled in the programs. That is why all live systems are a mess, and all living database schema is impossible to understand unless you were present at the creation of the world.
I think that is again the influence of mathematics: we are trained to think in an instant in time. On the other hand, the real world does not stop. It keeps changing. Our programming languages, our tools, our systems, they are always constructed for a snapshot. Evolving anything to get it moving in time is so difficult, time-consuming, and particular for each case, that we pretend we don't need to handle the movement of time.
We need a different paradigm. A paradigm that allows us to amalgamate independent agents to get the amalgam to do something we want it done. Instead of thinking about raw speed, we should aim for efficient of action. Instead of thinking 10 million possible chess moves per second, we get a program to reason like a human. After all, the chess game is an artificial game, not like it has anything to do with the reality itself. Change of relationship is actually change of relationship among the members of the amalgam.
Where am I? I must be losing my mind now.
Wednesday, September 05, 2007
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment