[OK?] Re: Bug: "A value disjunction that encounters a type error on only one branch will return the result of evaluating the other branch."

On Tue, Aug 02, 2005 at 11:27:24AM -0400, Tim Berners-Lee wrote:
> 
> The current last call draft states,
> 
> "A value disjunction that encounters a type error on only one branch  
> will return the result of evaluating the other branch."
> 
> This seems to be a bug: inconsistent with the logic one would expect.
>  It is inconsistent with the general rule that the disjunction of  
> false with x is x for all x. The disjunction of false with a type  
> error is therefore a type error.  If not, the type error is masked.
> 
> Example in english:  An alarm should fire if either ?smokeDetected or  
> the ?temperature is above 40.  Suppose the ?smokeDetected is false  
> and the temperature is (because of a bug) bound to something which  
> can't be compared to 40 without a type error.  The result should be  
> that the alarm is a type error.  Instead, with the wording above, the  
> alarm is suppressed.
> 
> Yosi Scharf found also that this rule for union means that de  
> Morgan's laws don't hold properly, making the  compilation and  
> optimization of queries more difficult or impossible.

Per the above text, and a hallway conversation with you, we've
re-arranged the truth table as follows:

  A  B | A && B   A || B
  ----------------------
  E  E |    E        E
  E  T |    E        T
  E  F |    F        E*
  T  E |    E        T
  T  T |    T        T
  T  F |    F        T
  F  E |    F        E*
  F  T |    F        T
  F  F |    F        F

  * changed to give priority to F || X => X

This is specified with the words:
[[
# Any expression other than logical or (||) or logical and (&&) that
encounters a type error will produce a type error.
# A logical or that encounters a type error on only one branch will
return will return TRUE if the other branch is TRUE and an error if
the other branch is FALSE.
# A logical and that encounters a type error on only one branch will
return will return an error if the other branch is TRUE and FALSE if
the other branch is FALSE.
# A logical or or logical and that encounters type errors on both
branches will produce a type error.
]]
and clarified with the above truth table.

If this text meets your requirements, please respond with [CLOSED] in
the subject to allow the issue tracking scripts to close this issue.
-- 
-eric

office: +81.466.49.1170 W3C, Keio Research Institute at SFC,
                        Shonan Fujisawa Campus, Keio University,
                        5322 Endo, Fujisawa, Kanagawa 252-8520
                        JAPAN
        +1.617.258.5741 NE43-344, MIT, Cambridge, MA 02144 USA
cell:   +81.90.6533.3882

(eric@w3.org)
Feel free to forward this message to any list for any purpose other than
email address distribution.

Received on Tuesday, 18 October 2005 12:59:13 UTC