Re: Tetrits and "stickiness"
Dan Z, Ian McI, P1788
Sorry to be so behind on this.
On 15 Apr 2010, at 16:53, Dan Zuras Intervals wrote:
>> RBK> if an argument is not totally in the domain of part of the
>> expression, we need to say the argument is not wholly within the
>> domain of the entire expression.
>>
>> I think that's generally true, but there are some exceptions; for
>> example, if you implement
>> d = c ? a : b;
>> by evaluating both a and b then using c to "select" one of them,
>> only the selected one matters, just as if you evaluated it with a
>> test and conditional branch choosing whether to evaluate a or b..
>
> Ian brings up an excellent point here which has nagging
> at me for some time. That is: Should selection functions
> be an exception to the propagate the decorations of ALL
> the operands to the result or just the selected operand?
> After all, something like:
>
> r = (abs(x) >= 1) ? sqrt(x^2 - 1) : sqrt(x^2 + 1);
>
> has likely been constructed is such a way as to AVOID
> going outside the domain of sqrt(). That is, the
> unselected operand plays no part in the result in that
> it was never meant to be evaluated in the first place.
>
> For this reason I would support propagating only the
> selected operand to the result, decorations & all.
>
>>
>> Another one to think about is
>> x = y * z;
>> where y is the singleton [0,0] and z has had a domain (or other)
>> error. Should that be propagated to x? Should it depend on the
>> kind of error or the value of z?
>
> This one is slightly more subtle.
> If z (or zz) ends up being [empty] I would propagate it,
> warts & all.
> But assuming yy is not a constant it will have its own
> decorations that might explain why it got to be [0,0].
> I see no need for an exception to the propagate both
> operands' decorations in this case.
> But I could see an argument that says propagate only
> yy's decorations in this case.
> Nah, then you'd have to make provision for [0,0]*[0,0].
> I think propagating both is still best.
I agree on both counts. The point I want to make is:
(1) IMO the relevant functions should be defined at Level 1,
hence these issues should be decided at Level 1.
The context we are discussing is (I believe)
(2) the definition of point-functions, from which interval
functions are produced as interval extensions, so that
the FTIA can be used.
Take Ian's second point first. An illustration is the function
f(x) = (x>=0) * sqrt(x)
where (following the convention of C-style languages) I treat >= as a mathematical function on R x R that returns 0 or 1.
Q: f(-1) evaluates as (0)*(undefined). Mathematically, is this 0, or undefined? I strongly go for undefined. What do others think?
Ian's first point requires that we agree (which we haven't considered till now, nor does the Vienna proposal, I think) a definition of the
c ? a : b
function, which I shall call "branch" when using standard function notation.
For this purpose, in its simplest form, branch() has the signature
branch : B x R x R, where B is the booleans {0,1},
R is the reals,
and x is cartesian product. (More generally, replace R by an arbitrary type.)
It is a total function on B x R x R, with the definition
branch(c,a,b) = a if c==1, b if c==0.
Applied to Dan's example
r = (abs(x) >= 1) ? sqrt(x^2 - 1) : sqrt(x^2 + 1)
this does what he advocates, e.g., if x is 0 this gives r=1, even though sqrt(x^2 - 1) is undefined.
By extension, the decorations of the selected branch should be used. I agree with Ian and Dan here.
John