Re: Undefinedness

From: JOG <jog_at_cs.nott.ac.uk>
Date: Thu, 22 Nov 2007 09:39:41 -0800 (PST)
Message-ID: <ea3deb47-3697-4eb5-8b4f-34cf2ef2ec25_at_t47g2000hsc.googlegroups.com>


On Nov 21, 2:22 pm, "David Cressey" <cresse..._at_verizon.net> wrote:
> "JOG" <j..._at_cs.nott.ac.uk> wrote in message
>

> news:84c11971-6500-48e4-ba0f-b8b659f390da_at_d61g2000hsa.googlegroups.com...
>
>
>
> > Word up CDT. How the devil are you all? Well, I return with a question
> > that as ever highlights my complete lack of formal mathematical
> > training, and in light of knowing no logicians in my daily life (funny
> > that), I was hoping that one of you kind folks might be able to
> > advise:
>
> > Say I had a set of 3 encoded propositions:
> > R := { {(Name, Tom), (Age, 42)}, {(Name, Dick), (Age, 16)}, {(Name,
> > Harry)} }
>
> > (note that Harry's Age is missing, so instead of adding a null, i've
> > intentionally just left the attribute out. Just ride with such oddness
> > for now if you would.)
>
> > What if I deigned to create a simple 'adults' subset of this set of
> > propositions, by creating a predicate that only returned the elements,
> > p, which contained an age attribute greater than 18. Could I state
> > this as (where E signifies set membership):
>
> > Adults := { p E R | EXISTSx ( x > 18 && (Age, x) E p ) }
>
> > My question obviously hinges around Harry's missing age attribute. In
> > this case would the EXISTSx (...) part of the set's intension simply
> > return a FALSE, or will I end up in the quagmire of 3VL with an
> > UNDEFINED? My instinct is that I am still in 2VL given there is no
> > null floating about, but since the recent, excellent discussions of
> > Jan's DEF operator, and having delved into beeson's logic of partial
> > terms, I am not at all confident.
>
> > Any comments are much appreciated, and regards to all, Jim.
>
> I'm no mathematician or logician, but I'll answer anyway.
>
> To me, it dpends on whether the relationship (Name, Age) follows the open
> world assumption or the closed world assumption.

While I was only really concerned about whether my logic statements are sticking to 2VL internally, you've sent me off at a tangent here because CWA is one of my bugbears. Imho its at best silly, and at worst contradictory. Take relations such as:

Weather_is = { condition: Hot }
Weather_is_not = { condition: Cold }
Domain = {Hot, Cold}

Perfectly fine with full information, and a constraint that a condition can't appear in both. And I can happily extrapolate from CWA from the first relation that: !is(condition:cold)), and from the second !is_not(condition:hot). Nice...

...until we're faced missing information. If both relations are empty (because we just don't have the data say), then CWA tells me that: !Weather_is(condition:Hot) and !Weather_is_not(condition:Hot). It is both hot and not hot. Genius. I don't see how CWA based directly on what propositions state can ever be justified for a system working in the real world (TM).

Equally CWA would suggest that Harry is neither a child nor an adult in the other example. Meh.

I am hence of the opinion that we should stick to OWA, or better still a CWA that is aware it is only commenting on the _existence of propositions_ themselves, and not the underlying truth of their contents (preventing us asking questions with contradictory answers in the first place).

> If it's the closed world
> assumption, then we would have to say that Harry is not included with the
> adults. However, if we defined another set, Children,
>
> Children := { p E R | EXISTSx ( x < 19 && (Age, x) E p ) }
>
> Please note that Harry is excluded from Children as well.
>
> If we had a rule that says that every person mentioned in R is either a
> child or an adult, that would be tantamount to requiring that the entry for
> Harry be rejected at time of insertion.
>
> BTW, I see nothing odd about your notation.

Huzzah ;)

> NULLS are not needed. Hwever,
> your proposition R actually contains two propositions: first that the named
> person exists, and second that the person named with an age has that age.

True, and full decomposition to 6NF would be a valid approach. But one that can add an unpleasant amount of joins. Theoretically no problem of course, but who realistically fancies writing queries with n joins just because you don't have complete information for a single entry say... And lets be honest, when in the real world is any attribute 100% guaranteed to not going to have some missing data at some point? Received on Thu Nov 22 2007 - 18:39:41 CET

Original text of this message