![]() | |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
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. |
#3
| |||
| |||
|
|
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. |
#4
| |||
| |||
|
|
Word up CDT. |
|
How the devil are you all? |
|
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. |
#5
| |||
| |||
|
|
"JOG" <j... (AT) cs (DOT) nott.ac.uk> wrote in message news:84c11971-6500-48e4-ba0f-b8b659f390da (AT) d61g2000hsa (DOT) 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. |
|
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. |

|
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. |
#6
| |||||
| |||||
|
|
On Nov 21, 5:34 am, JOG <j... (AT) cs (DOT) nott.ac.uk> wrote: Word up CDT. Hey homes. 'Sup? |

|
How the devil are you all? Damn well, thanks. You? |
| 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. insert my usual disclaimer about any such question depending on the semantics of the system under discussion. I'd say it's the first one. Some offhand thoughts: I believe this example is isomorphic to Jan's DEF constructor. |
|
You can think of any function as data instead of code. So you could remap EXISTS in your example into data. Here, I use _ as a "don't care" value. R := { {(Name, Tom), (Age, true, 42)}, {(Name, Dick), (Age, true, 16)}, {(Name, Harry), (Age, false, _} } You can decompose this in to two relations, and make Age an optional attribute using the usual technique of having the Age table use a foreign key to the Name table as a primary key. (6NF?) In which case, you can see that the Age table is then a table of ages of people for whom we know their age. This brings us right back to David's response, and the importance of the CWA. So the best query we can do is ask what people do we know to be adults; we cannot ask who the adults are among the people we know. It's not just that we can't get the answer; we can't even ask the question, because there's no way to write that query.) |
|
Marshall |
#7
| |||
| |||
|
|
On Nov 21, 9:50 pm, Marshall <marshall.spi... (AT) gmail (DOT) com> wrote: On Nov 21, 5:34 am, JOG <j... (AT) cs (DOT) nott.ac.uk> wrote: Word up CDT. Hey homes. 'Sup? Er...yo, shizzle? Nope, I'm afraid that's it, i've run out of street lingo already ![]() How the devil are you all? Damn well, thanks. You? Tip top. Getting married, and thats turning out to be a ridiculous amount of work, but there you go. (let me preempt any cries of "don't do it you eejut" in advance). |
#8
| |||
| |||
|
|
paul c wrote: paul c wrote: ... Wait a minute. Regarding "weather_is", its complement is (!Weather_is(condition:hot)) AND ((!Weather_is(condition:cold)). This is not the same as just !Weather_is(condition:hot). ... Oops, bloody parentheses. Should have said !((Weather_is(condition:hot)) AND (Weather_is(condition:cold))). ... Sorry again, I think the first was right all along, in English (I hope) that would be "neither" (is true) which is what I should have said in the first place. Maybe I should try to sit on my messages for a few days until I get them right. |
#9
| |||
| |||
|
|
On Nov 23, 1:10 am, paul c <toledobythe... (AT) ooyah (DOT) ac> wrote: paul c wrote: paul c wrote: ... Wait a minute. Regarding "weather_is", its complement is (!Weather_is(condition:hot)) AND ((!Weather_is(condition:cold)). This is not the same as just !Weather_is(condition:hot). ... Oops, bloody parentheses. Should have said !((Weather_is(condition:hot)) AND (Weather_is(condition:cold))). ... Sorry again, I think the first was right all along, in English (I hope) that would be "neither" (is true) which is what I should have said in the first place. Maybe I should try to sit on my messages for a few days until I get them right. I understand your point Paul, although I deliberately omitted the whole complement given that (!Weather_is(condition:hot)) AND ((!Weather_is(condition:cold)) = true => !Weather_is(condition:hot) |
#10
| |||
| |||
|
|
On Nov 21, 2:22 pm, "David Cressey" <cresse... (AT) verizon (DOT) net> wrote: "JOG" <j... (AT) cs (DOT) nott.ac.uk> wrote in message news:84c11971-6500-48e4-ba0f-b8b659f390da (AT) d61g2000hsa (DOT) 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? |
![]() |
| Thread Tools | |
| Display Modes | |
| |