# [Numpy-discussion] Should bool_ subclass int?

Charles R Harris charlesr.harris at gmail.com
Tue Jul 10 10:04:08 EDT 2007

```On 7/10/07, Gael Varoquaux <gael.varoquaux at normalesup.org> wrote:
>
> On Tue, Jul 10, 2007 at 02:39:28PM +0200, Sebastian Haase wrote:
> > When you talk about algebra - one might have to restrict one self to '|'
> and '&'
> > -- not use '+'  and '-'
> > E.g.:
> > True - True = False   # right !?
> > # but if:
> > True+True         = True.
> > # then
> > True+True   -False      = True -False   # ????
> > # here I'm already lost ... I don't think this can be done in a
> consistent way.
>
> It can, its called the Bool algebra, and it is a consistent algebra, in a
> mathematical sense of algebra
> (http://en.wikipedia.org/wiki/Boolean_algebra), actually what we are
> talking about is the two element bool algebra
> (http://en.wikipedia.org/wiki/Two-element_Boolean_algebra), and the
> mathematical structure we are taling about is a ring, the wikipedia
> article is quite comprehensible
> (http://en.wikipedia.org/wiki/Ring_(mathematics))
>
> > In other words:  a "+" operator  would also need a corresponding "-"
>
> Yes. In other words (the ensemble theory words) each element needs to
> have an opposite concerning the '+' law. To understand this you need a
> bit of algebra theory.
>
> * An algebra has 2 laws, lets call them "+" and "*".
>
> * Each law has a neutral element for this law, ie an element a for which
>   "a + b = b" for all b in the algebra, lets write these "n+", and "n*".
>
> * Each element a is required to have an inverse for the "+", ie an element
>   b for wich b + a = n+, lets write the opposite of b "-b".
>
> For integer, n+ = 0, n* = 1.
>
> For Booleans, n+ = False, and n+ = True, therefore, as Matthieu points
> out,
> -True = True, as True + True = n+ = True,
> and -False = True, as True + False = n+ = True.
>
> So you have a consistent algebra.
>
> Now there is a law for which every element does not have an inverse, it
> the "*" law. You can check the out for integers. It is also true for
> booleans. In fact, you can proove that in an ring, n+ cannot have an
> inverse for the * law (it the famous divide by zero error !).
>
> In conclusion, I would like to stress that, yes, +, - and * are well
> defined on booleans, the definition is universal, and please don't try to
> change it.

The proper additive operation to make boolean algebra a ring is 'xor', so
that 1 becomes its own inverse. Same thing in sigma rings, where folks used
to use exclusive union just to make the algebra to work. But plain 'or' and
'union' work fine and are more intuitive even if they don't give the ring
structure.

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20070710/fb7282c7/attachment.html>
```