Ok Guys, you've convinced me thrice within ten minutes of posing my question. The quality of the mailing list is just ridiculous! ;)
And Miguel, thanks for the follow-up regarding "for all" and "exists" – it's an excellent analogy and easy to remember! On Mon, Apr 26, 2010 at 20:23, Jochem Berndsen <[email protected]> wrote: > Bjorn Buckwalter wrote: >> Dear all, >> >> Does it make good sense that 'and []' returns 'True' and 'or []' >> returns 'False'? The Haskell Road to Logic, Maths and Programming says >> so: >> >> "The function or takes a list of truth values and returns True if at >> least one member of the list equals True, while and takes a list of >> truth values and returns True if all members of the list equal True." >> >> "Should the conjunction of all elements of [] count as true or false? >> As true, for it is indeed (trivially) the case that all elements of [] >> are true. So the identity element for conjunction is True. Should the >> disjunction of all elements of [] count as true or false? As false, >> for it is false that [] contains an element which is true. Therefore, >> the identity element for disjunction is False." >> >> While the above reasoning is fine, and allows straight-forward >> implementations, it isn't extremely convincing. In particular, it >> isn't clear that, while simple, the definitions of the first paragraph >> are the most sensible. Perhaps one of the more mathematically versed >> readers on the Cafe could enlighten me? > > The empty sum is regarded to be zero. The empty product is equal to one. > The empty conjunction is True. The empty disjunction is False. > > The reason for this is that these are the neutral elements, i.e. > 0 + x = x > 1 * x = x > True AND x = x > False OR x = x > > This allows some laws to hold also in degenerate cases, and it is quite > useful in general to accept these conventions. An example of such a law is > (∀ x : x ∈ A : P(x)) ∧ (∀ x : x ∈ B : P(x)) > == > (∀ x : x ∈ A ∪ B : P(x)). > > This also works if A or B is empty, provided that we say that the empty > conjunction is true. > > In Haskell, we now have that > > (and xs) && (and ys) > == > and (xs ++ ys), > > even if xs or ys is the empty list. > > Cheers, Jochem > -- > Jochem Berndsen | [email protected] > _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
