# RE: Bug in the DTD? (Three Valued Logic and Elimination Necessary ?)

From: Babich, Alan <ABabich@filenet.com>
Date: Tue, 14 Jul 1998 11:43:14 -0700
Message-ID: <72B1992276A9D111A20E00805FEAC96D01324C5E@cm-expo1.filenet.com>
To: "'John Stracke'" <francis@netscape.com>, "'DASL'" <www-webdav-dasl@w3.org>
```AND and OR do not for a complete set of Boolean
operators, even for two valued logic. That is,
one cannot express all possible binary Boolean
operators with just AND and OR. In other words,
there are conditions that you can not express.
This is a bad thing for search conditions.

The following are complete sets of Boolean
operators: {AND, OR, NOT}, {NOT, AND}, and
{NOT, OR}. NOT appears in all three sets.

Alan Babich

-----Original Message-----
From: John Stracke [mailto:francis@netscape.com]
Sent: July 14, 1998 10:48 AM
To: 'DASL'
Subject: Bug in the DTD? (Three Valued Logic and Elimination Necessary?)

John Stracke wrote:

> Babich, Alan wrote:
>
> > (3) For the relational operators >, >=, <, <=, =, !=,
> > if either or both operands are undefined, the result is
> > the truth value UNKNOWN.
>
> Um.  Math geek time.  This says that the result of "1=2/0" is
> UNKNOWN.  I say it should be FALSE, because 1!=2/0, because
> 0*1!=2.
>

Alan & I have been going back and forth on this one (neither of us has
convinced the other); in the process, I started to wonder whether
3-valued logic actually makes a difference.  It works out that it does,
unless we don't have a NOT in our grammar.  (Explanation below.) I
figured we probably did, but I checked the Draft, and it turns out that
01 is unclear on this point.  The DTD for simplesearch doesn't define a
"not" element, but the definitions of "where", "and", & "or" refer to
one; further, the explanatory text does cover it (section 7.10).  An
omission in the DTD, I suppose?

(What follows from here is math geekery; if we have a NOT, it's
unimportant.) As for why 3-valued logic wouldn't be necessary without
NOT: suppose. the only logical operations are AND and OR.  Then, for any
truth value p, we have:

p AND UNKNOWN = UNKNOWN
p OR UNKNOWN = p
A row is not in the result set if the query evaluates to UNKNOWN

But this is exactly the same behavior as FALSE:

p AND FALSE = FALSE
p OR FALSE = p
A row is not in the result set if the query evaluates to FALSE

Therefore, if we didn't have NOT, then we could just use FALSE in place
of UNKNOWN, and get the same results.

--
/====================================================================\
|John (Francis) Stracke    |My opinions are my own.|S/MIME supported |
|Software Retrophrenologist|=========================================|
|Netscape Comm. Corp.      | E pui muove!                            |
|francis@netscape.com      |  -- Galileo                             |
\====================================================================/
New area code for work number: 650
```
Received on Tuesday, 14 July 1998 14:46:15 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 20:22:39 UTC