Array#any?とArray#all?の論理演算的関係

先に結論

文字列strと配列arrayがあるとします。

array.any? { |kw| str[kw] } (または array.any? { |kw| str.slice(kw) })

arrayに含まれる要素のどれかがstrに含まれている場合にtrueを返します。逆に言えば、全く含まれていない場合にのみfalseを返します。
この否定(!array.any? { |kw| str[kw] })、つまりarrayの要素が全く含まれていない場合にのみtrueを返す文は

array.all? { |kw| !str[kw] }

です。
また、

array.all? { |kw| str[kw] }

arrayに含まれる要素の全てがstrに含まれている場合にtrueを返します。逆に言えば、一つでも含まれていないとfalseを返します。
この否定(!array.all? { |kw| str[kw] })、つまりarrayの要素のどれかがstrに含まれているが全てではない場合trueを返し、全てが含まれている場合にfalseを返す文は

array.any? { |kw| !str[kw] }

となります。

具体例

('14 3/9追記)
後で読んでみたときに、イメージが湧きませんでしたw
ので、arrayが3要素で、しかもtruefalseだけだとして中の要素を書き下します。

array.any? == false
array = \
[false, false, false]
array.any? == true
array = \
[false, false,  true] || \
[false,  true, false] || \
[false,  true,  true] || \
[false,  true,  true] || \
[ true, false, false] || \
[ true, false,  true] || \
[ true,  true, false] || \
[ true,  true,  true] || \ # array.all? == true
!array.any? == true
array = \
[false, false, false]

つまり array.all? { |a| !a } == true です。
さらに詳しく言えば、どのiに対しても a[i] == false となる状況なので、[true, true, true].all? == true となるわけです。

!array.any? == false
array = \
[false, false,  true] || \
[false,  true, false] || \
[false,  true,  true] || \
[false,  true,  true] || \
[ true, false, false] || \
[ true, false,  true] || \
[ true,  true, false] || \
[ true,  true,  true] || \# !array.all? == false

何に使う?

ifunlessの入れ替えに使います。
unless 〜if !(〜)
なので、unlessで書いたけどifで書き直してみたい(またはその逆)という際に使えます。
ただし、検証はちゃんとしてくださいね。

解説

まずwikipedia:ド・モルガンの法則から
!(A ∩ B) = !A ∪ !B
!(A ∪ B) = !A ∩ !B
です。

Array#any?Array#all?

例えば、文字列strに対して配列arrayの要素のいずれかが含まれるならばtrueを返すメソッドは

array.any? { |kw| str[kw] }

になります。ブロック内はOR||、∪)で繋がれることになります。
また、strに対してarrayの要素全てが含まれるならばtrueを返すメソッドは

array.all? { |kw| str[kw] }

になります。ブロック内はAND&&、∩)で繋がれることになります。

逆を検討

では、arrayの要素が全てstrに含まれないときにtrueを返すメソッドは、array.any? { |kw| str[kw] }の否定になるので

!array.any? { |kw| str[kw] }

ですね。当然ですね。
で、これを書き替えると

array.all? { |kw| !str[kw] }

になります。
なぜならば、array = [a1, a2, .. an] としたときに、

!array.any? { |kw| str[kw] }


!(str[a1] OR str[a2] OR .. OR str[an])
となりますが、ド・モルガンの法則を前から一つずつ当てはめていくと最終的に
!str[a1] AND !str[a2] AND .. AND !str[an]
と変形されます。これはArray#all?と同じです。
ということで

array.all? { |kw| !str[kw] }

になります。
Array#all?の否定も同様です。