| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> comp.databases.theory -> Re: Proposal: 6NF
vc wrote:
> Jan Hidders wrote:
>> vc wrote: >>> Jan Hidders wrote: >>>> vc wrote: >>> [...] >>>>> The most familiar to the OOP person expectation of what the type is is >>>>> based on the LSP where one can substitute objects of type S for objects >>>>> of type T, S being a subtype of T, without change in behavior. >>>>> Clearly, treating Z as subtype of R does not conform the LSP, because >>>>> Z is not a subfield of R. >>>> Depends on what you think of as the thing that is being defined. Is it >>>> the algebraic structure or is it the set over which the operations are >>>> defined? In the first case you cannot treat the Z algebraic structure >>>> as a subtype of the R algebraic structure, but in the second case you >>>> clearly can. >>> Hold on. >> Ok. I'm holding on. >> >>> o The set plus some operations over the the set *is* an algebraic >>> structure so there is no substantial difference between case one and >>> case two. Once again, this is an example of imprecise language which >>> one would want to avoid (saying 'set' and meaning 'structure'). >> When I say "the set of integers" I mean "the set of integers" and not >> "the set of integers plus some operations" which is a tuple and not a >> set.
>> I get the impression that every time I write "the set of X" you >> actually read "the algebraic structure that descibes X", which might >> explain why you think I'm being imprecise. If I understand you >> correctly you don't accept that "the set of X" is actually a meaningful >> concept? Correct?
>> If that is the case then let us concentrate on that question. Agreed? >>
>>>> Note that Liskov and Wong themselves defined the principle >>>> as: >>>> >>>> Let q(x) be a property provable about objects x of type T. Then q(y) >>>> should be true for objects y of type S where S is a subtype of T. >>>> >>>> Clearly this is the case if T is the set of reals and S the set of >>>> integers. >>> Clearly, it is not because objects of the integer type do not have the >>> division 'method' which its parent real type has, as simple as that, >>> unless you deform the type of reals by excising division. >> I don't think that is clear, at all, and in fact I think your argument >> is actually circular. If we consider the two algebraic structures >> (R,+,x,/, ..) and (Z,+,x, ..) and if we assume that Z is a subset of R >> then there *is* a division operation for the elements in Z, namely the >> one you find in the algebraic structure of R.
>> Now your argument seems >> to be based on the assumption that the sets R and Z are distinct,
At the risk of being accused of misunderstanding some of what's been said in this thread (likely) and not having read all of it (true), I think you have just touched on something profound. From what I've seen, Darwen and Date and perhaps others have shown that it's possible to add operators and concepts to a strict version of the RM and achieve a kind of dynamic typing without the plumbing, eg., static linking, that many of today's programmers regard as arcane, cumbersome and somehow inefficient. The OOP people have shown that it's possible to create a great deal of confusion with a few simple concepts implemented in a myriad of ways.
In both cases, I think that just because something can be shown to be possible, eg., handle a few test cases apparently correctly, doesn't mean it should be done. Now, D&D are certainly smarter than I am, much more diligent and even if nobody implements what they have shown, they have still done yeoman work. Still, the bulk of the apps I've seen don't need that extended type support and the bulk of the commercial programmers I've seen couldn't master the concepts behind it. The same is more patent when it comes to oop. I'll grant that a few apps need more, but those deserve to be handled by people who are a little above-average. So as for most apps, what are we playing at?
My attitude is that once a critical mass in an engine is reached, it is silly to try to stretch it to encompass additional concepts. The reason it is silly is that no amount of manpower can validate it. My guess is that the critical mass I'm thinking of amounts to no more than several thousand lines of conventional low-level code. I wish more of the talent that worries about nulls and oop would spend more time trying to think of better low-level techniques for implementing and validating engines. There is a huge gap between the instruction sets and compilers of today's processors (which are basically unchanged from forty years ago and which so-called modern engines such as the jvm copy rather slavishly and which techniques haven't changed much either) and the theory (non-existent) to implement them on scales of tens of thousands, hundreds of thousands, or, as the big software vendors prove every day, millions of lines of engine code.
Just my two cents.
p
ps: my comment about jvm has nothing to do with the value of having an engine wherever there is a processor, IMHO that is the one thing Sun got right. Received on Mon Oct 16 2006 - 18:23:06 CDT
![]() |
![]() |