Search code examples
coding-stylelogicboolean-logicxornor

Besides AND/OR/NOT, what's the point of the other logical operators in programming?


I've been programming nearly all of my life (around 20+ years), and I don't think I can remember a single time when I was looking at a if-statement and think "Hmmm, this would be a good time to use XOR." The entire logical programming universe seems to revolve around just these three.

Granted, with AND/OR/NOT gates, you can make any other logical statement. However, there might be a time where it might save you some code to combine two or three statements into a single logical statement. Let's look at the 16 possible combinations of logical connectives:

  1. FALSE = Contradiction = 0, null, NOT TRUE
  2. TRUE = Tautology = 1, NOT FALSE
  3. X = Proposition X = X
  4. NOT X = Negation of X = !X
  5. Y = Proposition Y = Y
  6. NOT Y = Negation of Y = !Y
  7. X AND Y = Conjunction = NOT (X NAND Y)
  8. X NAND Y = Alternative Denial = NOT (X AND Y), !X OR !Y
  9. X OR Y = Disjunction = NOT (!X AND !Y)
  10. X NOR Y = Joint Denial = NOT (X OR Y), !X AND !Y
  11. X ⊅ Y = Material Nonimplication = X AND !Y, NOT(!X OR Y), (X XOR Y) AND X, ???
  12. X ⊃ Y = Material Implication = !X OR Y, NOT(X AND !Y), (X XNOR Y) OR X, ???
  13. X ⊄ Y = Converse Nonimplication = !X AND Y, NOT(X OR !Y), (X XOR Y) AND Y, ???
  14. X ⊂ Y = Converse Implication = X OR !Y, NOT(!X AND Y), (X XNOR Y) OR Y, ???
  15. X XOR Y = Exclusive disjunction = NOT (X IFF Y), NOT (X XNOR Y), X != Y
  16. X XNOR Y = Biconditional = X IFF Y, NOT (X XOR Y), !X AND !Y

So, items 1-2 involve zero variables, items 3-6 involve one, and items 7-10 are terms we are familiar with. (Though, we don't usually have a NAND operator, but at least Perl has "unless" for universal NOT.)

Items 11-14 seem like interesting ones, but I've never seen these in programming. Items 15-16 are the XOR/XNOR.

Can any of these be used for AND/OR/NOT simplification? If so, have you used them?

UPDATE: "Not equal" or != is really XOR, which is used constantly. So, XOR is being used after all.


Solution

  • Going to close this question after the Not Equals/XOR thing. Out of the 16 possible operators, programmers use 9 of them:

    FALSE, TRUE, X, Y, !X, !Y, AND (or ==), OR, XOR (or !=)
    

    All of the other operators don't typically exist in programming languages:

    X NAND Y = Alternative Denial = NOT (X AND Y), !X OR !Y
    X NOR Y = Joint Denial = NOT (X OR Y), !X AND !Y
    X ⊅ Y = Material Nonimplication = X AND !Y, NOT(!X OR Y), (X XOR Y) AND X, ???
    X ⊃ Y = Material Implication = !X OR Y, NOT(X AND !Y), (X XNOR Y) OR X, ???
    X ⊄ Y = Converse Nonimplication = !X AND Y, NOT(X OR !Y), (X XOR Y) AND Y, ???
    X ⊂ Y = Converse Implication = X OR !Y, NOT(!X AND Y), (X XNOR Y) OR Y, ???
    X XNOR Y = Biconditional = X IFF Y, NOT (X XOR Y), !X AND !Y
    

    Perhaps there's room for them later on, because NAND/NOR seems pretty handy, and cleaner than typing NOT (X xxx Y).