Sunday, August 07, 2005

 

The power of incompleteness

Although it is not widely recognized, object oriented programming brought several concepts from artificial intelligence, in particular from [definitional] semantic networks.
I'm old enough to have taken an Artificial Intelligence course :-) back at the university, where we studied semantic networks among other things (truth maintenance systems, non-monotonic reasoning, frames, logic programming, etc). Overall, quite interesting stuff, but it didn't deliver. One of the reasons, in my opinion, was the huge waste of energy spent in the pursue of completeness, not to say perfection. Semantic networks, for instance, had a concept of inheritance, and lot of time was spent to accommodate misclassification, like the birds that can't fly. Robert Pirsig (author of "Zen and the Art of Motorcycle Maintenance" and "Lila") calls those hard classification problems the platypuses of a theory, and AI spent too much time tinkering with platypuses.
When OOP came along with the notion of inheritance, the whole misclassification problem was largely ignored (leaving aside a few academic papers). The OOP community basically took the useful stuff, said "who cares" about the rest, went on and delivered. They moved the problem of misclassification from the concerns of the system to the concerns of the developer. We can violate the LSP at our own risk. We do our best to avoid that, and meanwhile we build useful systems. OOP does not pretend to be a complete, perfect system; that's why it can do useful work.
Today, Aspect Oriented Programming is an interesting paradigm that seems to be spending a little too much time with its own platypuses. It's just a matter of time before someone will come along, grab the low fruits, and deliver. .NET context attributes (plus transparent and real proxies) and java refection proxies, are not powerful enough, but they're a first step away from all the aspect weaving blurb and toward a simpler interception model, and in a few cases they can actually deliver. We just need something easier and more powerful :-), and that would be well within our reach, if only simplicity was a little more valued.
To my completeness-and-perfection-oriented readers: remember that Goedel, in 1931, proved that in any consistent formal system, which is adequate for arithmetic, there are propositions that cannot be proved or disproved within the axioms of the system (that's the famous Goedel Incompleteness Theorem, informally). So all our beautiful math, all our revered logic, is not complete either. That's why it can do useful work.

Comments:
Non sono del tutto convinto del fatto che un sistema completo non possa fare qualcosa di utile. Casomai non รจ condizione necessaria che un sistema sia completo per essere utile.
Non credo che se il teorema di Goedel fosse falso la nostra matematica sarebbe meno utile: renderebbe invece meno frustrante la vita di quei matematici che cercano la dimostrazione dell'ipotesi di Riemann senza essere nemmeno sicuri della sua esistenza!
 
Dipende, ovviamente, dalla definizione di utile. A mio avviso:
- un sistema logico/matematico che non sa nemmeno gestire l'aritmetica sui naturali non e' molto utile.
Ora:
- il teorema di Goedel dice che qualunque sistema che sa gestire l'aritmetica sui naturali e' "incompleto"
- ergo per essere utile deve essere incompleto.
QED? : -)))
Ovviamente, l'utilita' evidente della "nostra" matematica dimostra di per se' anche l'altro verso dell'implicazione, quello che tu riportavi...
 
Un approccio matematico ineccepibile: non fa una piega ;-)
 
Post a Comment

<< Home

This page is powered by Blogger. Isn't yours?