質問: [l + 1, u] /* 不変な表明:x[l+1..m] < x[l] && x[m+1..i-1] >= x[l] */ if(x[i] < x[l]) swap(++m, i) swap(l, m) qsort1(l, m-1) qsort1(m+1, u) ``` ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/74cf24489856c6855642f34c4b9e4cbc.png)
回答: おっしゃる通り、ループ開始時点ではx[l+1..m]やx[m+1..i-1]というものに該当するものが存在しません。つまりこれらは**空集合**という事になります。 集合論では、**空集合はあらゆる集合の部分集合**という取り決めがあります。このため、論理学における「PならばQ」という命題において、**Pを満たすものが存在しない場合**(Pを満たす要素の集合が空集合である場合、あるいはPが常に偽である場合)、**この命題は無条件で真**となるのです。ミステリーにおいて、Aという人物に完全なアリバイがあって犯行が不可能だとしても(「Aが犯人」が偽だとしても)、Aが犯人と仮定するとそれっぽく辻褄が合ってしまうようなものです。