Subject: Re: [boost] Ternary logic programming (was: Re: [variant] Maintainer)
From: charleyb123 . (charleyb123_at_[hidden])
Date: 2015-07-02 14:09:16
But that's for something like expected<T,E>. For optional<T>, empty
> currently maps to false, at least in boost::optional and
> std::experimental::optional. In a functional language with "Maybe T",
> empty really does map better to unknown - I do not yet know the value
> of T. We force it into boolean because that's what we are comfortable
> Hmmm, optional<bool> would have less problems if empty mapped to
> unknown instead of false.
bool forces us into false dilemmas. It's even worse when the
"forced-conversion" could legitimately be either "true" or "false" for
different reasons, and for different scenarios. It's even worse when this
is done silently.
The result is un-handled (and hidden) corner-cases, bad logic, bad
reasoning, and ultimately bad APIs.
You need "one-more-dimension" to talk about the dimension-below, so by this
reasoning, only ternary (and above) can be self-reflective. (Consistent
Simply stated: The most atomic level of real-world reasoning is a
true/false bit with an attached "property" of "unknown". No smaller atom
(Coercing this atom to "true/false" from "true/false/unknown" is asserted
to be "error-injection" into the system, which has no legitimate place in
Boole's book, "The Laws of Thought" is based on assumptions that are
constantly violated in real-world systems. When you place those
very-clearly-stated assumptions underlying bivalent logic on the wall, the
impossibility of reasoning in boolean becomes obvious.