Re: A question for Mr. Celko

From: --CELKO-- <jcelko212_at_earthlink.net>
Date: 18 Jul 2004 11:42:44 -0700
Message-ID: <18c7b3c2.0407181042.321c8893_at_posting.google.com>


>> The only definition I can find for characteristic function is a
fancy word for the in operator. Is this the meaning you are intending? <<

Nope; in set theory, it is a function that returns one if a predicate is true and zero if it is false. Among other things, you use them to define a set. You will see them represented by a lower-case delta (Rozenthzein), an uppercase Chi or square brackets (Knuth and Iverson) in computer science literature. Some characteristic functions can be applied to each element of a set in parallel and get an immediate result like [MOD(i,2) = 0]. Some require finite computations -- finding out if node a is the uperior of node b in a adjacency model of a tree. Some require an unknown number of computations -- the (3n+1) problem. That unknown number of steps might be infinite, so you can never determine if some value is in the set or its complement at all, even tho you know it must be in one or the other.

>> As for no recursion, self-references, and indeterminable sets, it
sounds to me like this is just unnecessarily restricting the power of the language, a technique extremely common in today's systems, and one of the reasons relational languages get such a bad rap. <<

No, the bad rap comes from weak programmers who are having enough problems learning even simple relational/set concepts. They write crappy code and blame the tool. I don't mean to avoid language design issues, but the average commercial programmer cannot handle simple procedural recursion.

The fancy end of set theory quickly gets infinite and messy to display or manipulate in the real world -- how would print out an indeterminable set? Why would the average business application need to use one? Okay, I'll give you accounting at Enron :)

>> Can you give a specific case where allowing relation-valued
attributes would result in a wrong answer? Are you suggesting that allowing list, tuple, and relation-valued attributes somehow makes the language inconsistent (inconsistent in the formal sense meaning it would be possible to derive contradictory theorems)? <<

The classic example for relation-valued columns is to put the table inside itself. Lazurus Long is his own great grandfather, if you are a Heinlein fan, and you fall into infinite recursion. A parts explosion suddenly has more assemblies than there are atoms in the Universe. I nest a table using the Ackermann function as my model (non-primitive recursion), Etc.

The list stuff also has its problems -- look up Post Production strings. This was designed by the logician Emily Post to demonstrate unprovablity of what look like simple theorems. You are given a set of prodution rules and string; the rules involve cutting letters from the head and adding letters to the tail until the string either repeats a prior configuration (loopin) or comes to a halt state. Unfortunately, there is no way to know what the situation is in general.; It's basically the Turing Machine Halting problem in new clothes.

In fact, any data structure more complex than a scalar can run into Mr. Godel and his friends. I am not bothered by having just simple scalar columns and unimaginative tables -- Number theory gets along fine with nothing but integers. Received on Sun Jul 18 2004 - 20:42:44 CEST

Original text of this message