http://www.perlmonks.org?node_id=282441


in reply to Re: Re: Bit operations for beginners
in thread Bit operations for beginners

Yep, thats the kind of thing I had in mind. Except that I find it useful to have a chart that has all of the posibile permutations of binary boolean operations. For one it makes it easier to see how you can construct operators from each other. But mostly because I personally find it interesting how the chart of possible operators can be interpreted in different ways, and how complete it is. For instance XOR is commonly used computing and engineering, but rarely in symbolic logic, whereas -> (the conditional) is the opposite.

Actually I've always found this chart to be fascinating and for lack of a better term, very "deep". The fact that the binary enumeration of 0-15 happens to encode all the binary operators (at least in a boolean sense), along with the unary NOT, identity and empty set, and that you can construct all from some, but not all from every is somewhat amazing to me. I guess its just psychobable but to me theres something special there. The first time I put one together I sort of felt like I had just discovered the boolean table of elements or something. Anyway, I digress. :-)

DecBinAB0!(A || B)!A && B!AA && !B!BA ^ B!(A && B)A && BA == BB!A || BAA || !BA || B1
000000101010101010101
101010011001100110011
210100000111100001111
311110000000011111111
DecBinABFalse
(1)
nor
neither
(2,8)
lt
(3,9)
¬A
not A
(4)
gt
(3,9)
¬B
not B
(4)
xor
ne
(5,8)
nand
(2,8)
and
both
conjunct.
A∧B
A•B
(8)
xnor
bicond.
eq
A≡B
(5,8)
B
(6)
A→B
A⊃B
le
cond.
(7,9)
A
(6)
B→A
B⊃A
ge
cond.
(7,9)
or
either
disjunct.
A∨B
A+B
(8)
True
(1)
  1. (*) These are included for completeness. They also have special properties, like A==A or 0, B==B and 1.
  2. These are interesting in that its fairly easy to construct any other operator from either alone.
  3. (**)Im not sure what to call these. Perhaps 'falsifies' as in 'B falsifies A' or 'A falsifies B'. They are the reverse of the conditional or implication (see 7).
  4. (*) Negation
  5. This is logical equality and logical inequality not the traditional perl value equivelence. However using negation you can ensure perl value equivelence as well, ie !$a == !$b or !$a != !$b (the later is better written $a ^ $b)
  6. (*) Identity.
  7. (**)Conditional or implication. A implies B. This is only false when A is True and B is not True. Symbolic logic makes heavy use of this operator, where it can be used to test the truth of assertions like "if A then B".
  8. Commutative and associative. A op B == B op A and ( A op B ) op C == A op ( B op C
  9. )
  10. Transitive and Non Associative. A op B != B op A. If A op B
  11. and B op C then A op C.

    (*) It may be a bit strange to think of these as binary operators, but its not that big of a stretch to do so. And in visualizing the relationships between the other more important operators I find its useful to include them.

    (**) 3 and 7 are interesting in that in effect they are the boolean equivelents of the relational operators.

Like you I order my chart as a mathematician, engineer or programmer would, and not as a philosopher (who usually use T and F and who "count" from True to False), nor as Cine did. In fact I find his ordering quite unusual, and might even venture to argue that it is plain "wrong" to do so. I certainly think that both of the latter approaches make visualizing the enumeration of the possible input/output states to be much less intuitive. (Actually the whole T/F and ordering thing really got my goat in certain classes in school.)


---
demerphq

<Elian> And I do take a kind of perverse pleasure in having an OO assembly language...