Re: Undefinedness
- From: "David Cressey" <cressey73@xxxxxxxxxxx>
- Date: Fri, 23 Nov 2007 11:31:06 GMT
"JOG" <jog@xxxxxxxxxxxxx> wrote in message
news:ea3deb47-3697-4eb5-8b4f-34cf2ef2ec25@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
On Nov 21, 2:22 pm, "David Cressey" <cresse...@xxxxxxxxxxx> wrote:news:84c11971-6500-48e4-ba0f-b8b659f390da@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
"JOG" <j...@xxxxxxxxxxxxx> wrote in message
open
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, ***), (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
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.
the
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
foradults. 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
namedHarry 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
age.person exists, and second that the person named with an age has that
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.
.
- Follow-Ups:
- Re: Undefinedness
- From: Jan Hidders
- Re: Undefinedness
- References:
- Undefinedness
- From: JOG
- Re: Undefinedness
- From: David Cressey
- Re: Undefinedness
- From: JOG
- Undefinedness
- Prev by Date: Re: Undefinedness
- Next by Date: Re: Undefinedness
- Previous by thread: Re: Undefinedness
- Next by thread: Re: Undefinedness
- Index(es):