IMO, you are incorrect in stating "nil is neither true nor false". nil is false. You seem to be determining that it is not false due to "nil or not nil" returning false. "not nil" evaluates to "nil", so you are really saying that "nil or nil", both of which being false, evaluate to false.
IMO, you are incorrect in stating "nil is neither true nor false". nil is false. You seem to be determining that it is not false due to "nil or not nil" returning false. "not nil" evaluates to "nil", so you are really saying that "nil or nil", both of which being false, evaluate to false.