comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: and then... (a curiosity)
Date: Thu, 4 Sep 2008 22:28:00 +0200
Date: 2008-09-04T22:28:04+02:00	[thread overview]
Message-ID: <1vmbk6d18az86$.hfgj8yjrvho8$.dlg@40tude.net> (raw)
In-Reply-To: Pine.LNX.4.64.0809042054420.25707@medsec1.medien.uni-weimar.de

On Thu, 4 Sep 2008 21:05:02 +0200, stefan-lucks@see-the.signature wrote:

>>>> Nevertheless Boolean logic /= Belnap logic, though the former is contained
>>>> in the latter. 
>>> 
>>> I never said "Boolean logic", I said "logic", which was ment to include 
>>> multi-valued logic. ;-)
>> 
>> There are many multi-valued logics. 
> 
> You are trying to build an overly complex theory,

I though you wanted to expose these values. But see below.

> which I am not interested in.

(You should be interested in making a consistent proposal...)

> The issue is very simple:
>
> 1. If the A- or the B-part in "if A and B" raises an exception, but the 
>    other part is false, the "right thing" (TM) to do would be to transfer 
>    control to the else clause (or below "end if", when there is no else). 
>    The intermediate result can be viewed as a three-valued logic 
>    expression, but the final outcome of the Boolean expression must be 
>    Boolean, of course. 

   0 /\ T = 0  (as you see the theory is very simple)

> 2. If both raise A and B an exception, of if one raises an exception and 
>    the other one is true, an exception is propagated. (*)

   T /\ T = T (ditto)
 
> 3. I would be willing to pragmatically sacrifice mathematical purity for a 
>    shortcut rule:

There is absolutely no reason to sacrifice purity for impurity.

>    If A is false, the expression is false, whatever B does. 
>    If A raises an exception, of if A is true and B raises an exception, 
>    the exception is propagated.

   1 /\ T = T (it works!)

As you see the theory works fine, even if you don't like it.

Anyway now I see what you want. That is (more or less formally):

Boolean'Base is Belnap logical values. All Boolean expressions are
evaluated in Boolean'Base, as it is already done for numeric types. Nothing
drastically new. (Compare also how Float overflow is converted to IEEE
Infinity.) Like universal numbers, Boolean'Base may have no variables
declared.

> (*) Funny problem: *Which* exception should be propagated? 

This is not funny. This one kills the idea, unless you forcefully convert
all exceptions into Constraint_Error, when a non-Boolean value is converted
to Boolean.

But the main problem is that this is not what people want. They do lazy
evaluation in order to control side effects (and exception is considered
rather as a side effect). Your proposal does not deal with eagerness. Yes
the compiler might optimize away evaluation of one of the arguments of
"and" if another is False. But to do so it still needs a proof that there
is no side effects other than an exception. Unlikely to exceptions, you
cannot pack all side effects into T or _|_.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2008-09-04 20:28 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-29 21:06 and then... (a curiosity) mockturtle
2008-08-29 21:47 ` Samuel Tardieu
2008-08-30 21:28   ` Maciej Sobczak
2008-08-31  8:28     ` Georg Bauhaus
2008-08-31 23:21       ` Ray Blaak
2008-09-01  8:05     ` Martin Krischik
2008-09-01 17:56       ` Ray Blaak
2008-09-02  6:53         ` Martin Krischik
2008-09-02 14:56           ` Adam Beneschan
2008-09-02 16:28             ` Ray Blaak
2008-09-02 16:26           ` Ray Blaak
2008-09-02 20:50             ` Robert A Duff
2008-09-03 12:35               ` Brian Drummond
2008-09-03 15:56                 ` Robert A Duff
2008-09-04 22:09                   ` Brian Drummond
2008-09-03 21:01               ` Vinzent Hoefler
2008-09-02 14:50     ` Adam Beneschan
2008-08-29 22:28 ` Adam Beneschan
2008-08-30  1:06   ` Jeffrey R. Carter
2008-08-30 11:21   ` Dmitry A. Kazakov
2008-08-30 15:35     ` Peter C. Chapin
2008-09-02 15:06       ` Adam Beneschan
2008-09-02  3:41 ` Steve
2008-09-02  7:48   ` stefan-lucks
2008-09-02  8:57     ` Martin Krischik
2008-09-02 10:50       ` stefan-lucks
2008-09-02 10:33         ` Ludovic Brenta
2008-09-02 13:32           ` stefan-lucks
2008-09-02 12:53             ` Ludovic Brenta
2008-09-02 17:32               ` Georg Bauhaus
2008-09-03 13:14               ` stefan-lucks
2008-09-03 12:44                 ` Dmitry A. Kazakov
2008-09-02 13:39             ` stefan-lucks
2008-09-02 13:40             ` stefan-lucks
2008-09-02 16:48             ` Dmitry A. Kazakov
2008-09-02 17:00             ` Keith Thompson
2008-09-02 19:15               ` Simon Wright
2008-09-02 20:37               ` Robert A Duff
2008-09-02 20:58                 ` Jeffrey R. Carter
2008-09-02 21:08                   ` Robert A Duff
2008-09-03 12:24                     ` Pascal Obry
2008-09-02 22:34                   ` Santiago Urueña
2008-09-03  5:56                     ` Robert A Duff
2008-09-03  6:55                       ` Santiago Urueña
2008-09-03 14:14                       ` Adam Beneschan
2008-09-03  0:11                 ` Randy Brukardt
2008-09-02 17:20             ` Georg Bauhaus
2008-09-04  1:05         ` Stephen Leake
2008-09-04  6:45           ` stefan-lucks
2008-09-04  7:35             ` Dmitry A. Kazakov
2008-09-04 12:04               ` stefan-lucks
2008-09-04 13:00                 ` Dmitry A. Kazakov
2008-09-04 19:05                   ` stefan-lucks
2008-09-04 20:28                     ` Dmitry A. Kazakov [this message]
2008-09-05  6:57                       ` stefan-lucks
2008-09-05  6:34                         ` Ray Blaak
2008-09-05 14:14                     ` Robert A Duff
2008-09-05 15:04                       ` Dmitry A. Kazakov
2008-09-07 16:45                         ` stefan-lucks
2008-09-05 15:14                       ` Hyman Rosen
2008-09-05 15:59                         ` Adam Beneschan
2008-09-05 16:10                           ` Hyman Rosen
2008-09-07 16:36                       ` stefan-lucks
2008-09-07 16:08                         ` Gautier
2008-09-04  7:39             ` Karel Th�nissen
2008-09-04 12:12               ` stefan-lucks
2008-09-04 15:13                 ` Georg Bauhaus
2008-09-04 15:16                 ` Karel Th�nissen
2008-09-04 15:42                   ` Dmitry A. Kazakov
2008-09-04 19:27                   ` stefan-lucks
2008-09-04 19:43                     ` stefan-lucks
2008-09-04 19:40                       ` Georg Bauhaus
2008-09-05  7:00                         ` stefan-lucks
2008-09-05  6:35                           ` Ray Blaak
2008-09-04 20:06                       ` Karel Th�nissen
2008-09-05  7:44                         ` stefan-lucks
2008-09-05  6:41                           ` Vinzent Hoefler
2008-09-04 20:09                     ` Karel Th�nissen
2008-09-05  7:25                       ` stefan-lucks
2008-09-05  6:37                         ` Ray Blaak
2008-09-05  8:20                           ` stefan-lucks
2008-09-05 13:57                         ` Robert A Duff
2008-09-04 16:33                 ` Dmitry A. Kazakov
2008-09-04 19:31                   ` stefan-lucks
2008-09-04 19:59                     ` Karel Th�nissen
2008-09-05  7:27                       ` stefan-lucks
2008-09-05  8:38                         ` Ludovic Brenta
2008-09-04 20:17                     ` Dmitry A. Kazakov
2008-09-05 13:26                 ` Robert A Duff
2008-09-05 13:49                   ` Robert A Duff
2008-09-03  1:24     ` Stephen Leake
2008-09-03  3:31       ` tmoran
2008-09-03 13:22       ` stefan-lucks
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox