From Chapter 2 Section 14: > The boolean identifiers TRUE and FALSE are usually just aliases for the integer values 1 and 0, respectively. > However, if TRUE or FALSE occur on the right-hand side of an IS operator, then they form new unary postfix operators "IS TRUE" and "IS FALSE" which test the boolean value of the operand on the left. Therefore we have to add the operators `IS TRUE` and `IS FALSE` to the priority table and to the railroad diagram. And we get these lovely properties ``` select 2 is true; 1 select true is 2; 0 ``` Which are not wrong but are somehow disturbing :D However... ``` -- I think this is wrong: -- (true) cannot be reasonably considered a unary operator postfix select 2 is (true); -- I claim this should be equivalent to 2 is 1 1 -- this is as expected select 2 is +true; 0 ``` Furthermore, neither the diagrams nor the documents prepare one for these: ``` select 2 is not true; -- implies existence of stealth "is not true" operator 0 select 2 is not 1; 1 ``` The above only make sense if "is not true" also forms a unary postfix operator. Which is fine but it is not mentioned anywhere. So should we be adding the operators "is not true" and "is not false" to the list? Well it turns out that "is false" and "is not false" do not need to be special ``` select 1 is false; 0 select 0 is false; 1 select null is false; 0 -- regular "is" is the same as "is false" select 1 is +false; 0 select 0 is +false; 1 select null is +false; 0 ``` [edit notes The previous text claimed that `is false` was the same as regular `is`, but as was pointed out later, `is false` is different than regular `is` because it forces the left side to be treated as a boolean hence ``` select '' is false; 1 select '' is 0 0 ``` The summary was also edited to reflect this. ] Summary: * we're missing docs on `is true`, `is false`, `is not true`, and `is not false` * `x is (true)` seems broken (we may be stuck with this) * same for `x is (false)`