# Re: Undefinedness

From: David Cressey <cressey73_at_verizon.net>
Date: Fri, 23 Nov 2007 11:31:06 GMT
Message-ID: <_Ry1j.12713\$Mg1.9884_at_trndny03>

"JOG" <jog_at_cs.nott.ac.uk> wrote in message news: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
> >
> >
> >
> >
> >
> > > 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
> >
> > > 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).

In theory, you never have to be concerned about missing information. In practice, you do.

In actual applications, missing information and the CWA are constantly applied to make real world decisions.

"You don't have a reservation on this flight. You're not coming up on my computer." People make decisions all the time based on what is not in the database.
>
> 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
> 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.
> >
>
> 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?

In the real world, people use NULLS for a purpose. Sometimes that purpose is theoretically valid. Sometimes, it's not. In the real world, people make mistakes. Even when they are dealing with databases.

The best we can hope for is that database will not amplify the mistakes people make, at least not very often. Received on Fri Nov 23 2007 - 12:31:06 CET

Original text of this message