Issue #12110 has been updated by Tsuyoshi Sawada.


Martin Drst wrote:
> Andrew Vit wrote:
> 
> > This is still surprising to me, it looks like a contradiction:
> > 
> > ```
> > [].any? #=> false
> > [].all? #=> true
> > ```
> > 
> > I would expect "all" to be a superset of "any": both should mean "at least one".
> > Is there a reason for the existing behavior, or is it just history now?
> 
> It's the way it works in Mathematics.

In natural language, universal quantification carries a presupposition that the domain is non empty; the meaning of "for all x in A, p(x)" is undefined when A is empty, just like "the king of the United States" is undefined. And whenever universal quantification is defined, the entailment holds: "for all x in A, p(x) вк for some x in A, p(x)". That is probably what Andrew Vit was mentioning. And that is where natural language and formal systems differ, which makes the latter a bit counter-intuitive.

----------------------------------------
Feature #12110: Create a method to avoid vacuous truth?
https://bugs.ruby-lang.org/issues/12110#change-57179

* Author: Waldyr de Souza
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
I often find myself running into unexpected results when using #all? for example

[].all? { |e| false } # => true

Even though it's logically correct could we have a method that express the following?

foo.any? && foo.all?(&:bar)



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>