Начну с того факта, который легче понять.
Пустой набор является подмножеством каждого набора.
Почему? определение из подмножества гласит, что A
является подмножеством B
, если каждый элемент A
является элементом B
. И наоборот, A
не является подмножеством B
, если есть элемент A
, который не является элементом B
.
Теперь исправьте набор B
. Я установлю, что пустой набор является подмножеством B
. Я сделаю это, показав, что это не тот случай, когда пустой набор не является подмножеством B
. Если бы пустой набор не был подмножеством B
, я мог бы найти элемент пустого набора, которого нет в B
. Но пустой набор не имеет никаких элементов, и поэтому я не могу найти элемент, которого нет в B
. Следовательно, это не тот случай, когда пустой набор не является подмножеством B
. Таким образом, пустой набор должен быть подмножеством B
.
Любая строка начинается с пустой строки.
Во-первых, мы должны согласиться с нашим определением , начинающимся с . Пусть s
и t
будут string
s. Мы говорим, что s
начинается с t
, если s.Length >= t.Length
и первые t.Length
символов t
совпадают с s
. То есть s.Length >= t.Length
и для каждого Int32 index
, такого, что 0 <= index < t.Length
, s[index] == t[index]
является истинным. И наоборот, мы бы сказали, что s
не начинается с t
, если утверждение
s.Length < t.Length
или s.Length >= t.Length
и существует Int32 index
такое, что 0 <= index < t.Length
и s[index] != t[index]
верно. На простом английском языке s
короче t
, или, если нет, в t
есть символ, не совпадающий с символом той же позиции в s
.
Теперь исправьте строку s
. Я установлю, что s
начинается с пустой строки. Я сделаю это, показав, что дело не в том, что s
не начинается с пустой строки. Если s
не начинается с пустой строки, то s.Length < String.Empty.Length
или s.Length >= String.Empty.Length
и существует Int32 index
, такое что 0 <= index < String.Empty.Length
. Но s.Length >= 0
и String.Empty.Length
равны нулю, поэтому невозможно s.Length < String.Empty.Length
быть правдой. Аналогично, поскольку `` String.Empty.Length is equal to zero, there is no
Int32 index satisfying
0 <= index <String.Empty.Length`. Поэтому </p>
s.Length < String.Empty.Length
или s.Length >= String.Empty.Length
и существует Int32 index
такое, что 0 <= index < String.Empty.Length
ложно. Следовательно, это не тот случай, когда s
не начинается с пустой строки. Таким образом, s
должен начинаться с пустой строки.
Ниже приведена реализация , начинающаяся с , закодированного как расширение string
.
public static bool DoStartsWith(this string s, string t) {
if (s.Length >= t.Length) {
for (int index = 0; index < t.Length; index++) {
if (s[index] != t[index]) {
return false;
}
}
return true;
}
return false;
}
Вышеупомянутые два полужирных факта являются примерами пусто верных утверждений . Они верны в силу того факта, что определяющие их операторы ( подмножество и начинается с ) являются универсальными количественными определениями над пустыми вселенными. В пустом наборе нет элементов, поэтому в пустом наборе не может быть никаких элементов, кроме как в другом фиксированном наборе. В пустой строке нет символов, поэтому не может быть символа, так как некоторая позиция в пустой строке не соответствует символу в той же позиции в другой фиксированной строке.