Here's one way to maybe make it less counter-intuitive:
We have a set of items X1, X2, X3, ... etc.
Each of X1, X2, X3 differently matches conditions A, B, C, D, etc.
Think of "All" as: A AND B AND C AND D AND...
Each term we add we further restricts the result-set.
Thus if we start with lots of conditions, as we remove conditions, we increase the matching results, until we remove all conditions, and "All([])" matches everything, i.e. is vacuously true.
Likewise, think of "Any" as: A OR B OR C OR D.
Here, as we increase the number of conditions, we increase how many things match, thus "Any" on an empty set returns nothing, i.e. is vacously false.
We have a set of items X1, X2, X3, ... etc.
Each of X1, X2, X3 differently matches conditions A, B, C, D, etc.
Think of "All" as: A AND B AND C AND D AND...
Each term we add we further restricts the result-set.
Thus if we start with lots of conditions, as we remove conditions, we increase the matching results, until we remove all conditions, and "All([])" matches everything, i.e. is vacuously true.
Likewise, think of "Any" as: A OR B OR C OR D.
Here, as we increase the number of conditions, we increase how many things match, thus "Any" on an empty set returns nothing, i.e. is vacously false.