Как быть в случае, когда flags == 0? Что должен возвращать Includes?
— True? Но тогда у нас a.Includes(0) == a.Excludes(0).
— Бросать ArgumentException? Придётся писать проверки аля if(flags != Flags.None && value.Includes(flags))
— Оставить как есть? Тоже чем-то не нравится
Что предложите?
Re: [Ehum] HasFlags, HasNoFlags - что делать с default(T)?
S>Как быть в случае, когда flags == 0? Что должен возвращать Includes?
S>- True? Но тогда у нас a.Includes(0) == a.Excludes(0). S>- Бросать ArgumentException? Придётся писать проверки аля if(flags != Flags.None && value.Includes(flags)) S>- Оставить как есть? Тоже чем-то не нравится
S>Что предложите?
Если рассматривать отношение Includes как отношение подмножества флагов, то в соответствии с определением, пустое множество является подмножеством любого множества. То есть возвращать true.
Однако в примерах там же написано
The empty set, denoted by ∅, is also a subset of any given set X. (This statement is vacuously true.) The empty set is always a proper subset, except of itself.
т.е. если value == 0 и flags == 0, то false.
Однако, в русской вики такого уточнения нет. Откуда оно вообще следует — мне непонятно. Из определения вроде не вытекает.
Re[2]: [Ehum] HasFlags, HasNoFlags - что делать с default(T)
Здравствуйте, samius, Вы писали:
S>Однако в примерах там же написано S>
S>The empty set, denoted by ∅, is also a subset of any given set X. (This statement is vacuously true.) The empty set is always a proper subset, except of itself.
S>т.е. если value == 0 и flags == 0, то false. S>Однако, в русской вики такого уточнения нет. Откуда оно вообще следует — мне непонятно. Из определения вроде не вытекает.
Это глупость.
Пустое_множество
Пустое множество является подмножеством любого множества. Иначе говоря, и, в частности,
Здравствуйте, Sinix, Вы писали:
A>>Пустое множество является подмножеством любого множества. S>Ок. Чему тогда должно быть равно Excludes(value,0)?
0 exclude 0 == false.
Я думаю это должно быть так, ещё и потому что для любых a,b должно выполнятся Includes(a,b) == !Excludes(a,b). А вот Includes(a,b) == !Includes(b,a) не должно выполнятся, потому что множество (не только пустое) является собственным подмножеством.
Здравствуйте, samius, Вы писали:
S>Однако в примерах там же написано S>
S>The empty set, denoted by ∅, is also a subset of any given set X. (This statement is vacuously true.) The empty set is always a proper subset, except of itself.
S>т.е. если value == 0 и flags == 0, то false.
Нет, не глупость, это я английский не знаю. The empty set is always a proper subset, except of itself.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, samius, Вы писали:
S>>Однако в примерах там же написано S>>
S>>The empty set, denoted by ∅, is also a subset of any given set X. (This statement is vacuously true.) The empty set is always a proper subset, except of itself.
S>>т.е. если value == 0 и flags == 0, то false.
A>Нет, не глупость, это я английский не знаю. The empty set is always a proper subset, except of itself.
Проблема в том, что это утверждение — пример, а не часть определения. Откуда следует что оно не является подмножеством себя (пустого множества)?
Re[4]: [Ehum] HasFlags, HasNoFlags - что делать с default(T)
Здравствуйте, samius, Вы писали:
A>>Нет, не глупость, это я английский не знаю. The empty set is always a proper subset, except of itself. S>Откуда следует что оно не является подмножеством себя (пустого множества)?
Вообще-то, там написано что оно не является нетривиальным подмножеством самого себя.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, samius, Вы писали:
A>>>Нет, не глупость, это я английский не знаю. The empty set is always a proper subset, except of itself. S>>Откуда следует что оно не является подмножеством себя (пустого множества)?
A>Вообще-то, там написано что оно не является нетривиальным подмножеством самого себя.
Здравствуйте, Sinix, Вы писали:
S> Предположим, у нас есть методы аля
...
S> Как быть в случае, когда flags == 0? Что должен возвращать Includes?
S> — True? Но тогда у нас a.Includes(0) == a.Excludes(0). S> — Бросать ArgumentException? Придётся писать проверки аля if(flags != Flags.None && value.Includes(flags)) S> — Оставить как есть? Тоже чем-то не нравится
S> Что предложите?
А почему бы флаг None не считать таким же равноправным флагом как и остальные (если исключить комбинации типа FlagX | None)?
тогда Includes должен возвращать true когда флаг "установлен" (value = 0)
а Excludes должен возвращать true когда флаг "не установлен". (value != 0) Соответственно Excludes(0,None) будет false
Здравствуйте, Lloyd, Вы писали:
L>Не использовать 0 в кач-ве валидного значения флага.
Ок, т.е. ваш голос — за то, чтобы бросать исключение?
Методы на самом деле имеют сигнатуру Includes<T>, None присутствует в куче enum-ов BCL — на вход всегда может прийти 0 и с этим я не могу ничего поделать.
Re[3]: [Ehum] HasFlags, HasNoFlags - что делать с default(T)
Здравствуйте, Sinix, Вы писали:
L>>Не использовать 0 в кач-ве валидного значения флага.
S>Ок, т.е. ваш голос — за то, чтобы бросать исключение?
Мой голос за то, чтобы в объявлении enum-а не было нулевых значений.
S>Методы на самом деле имеют сигнатуру Includes<T>, None присутствует в куче enum-ов BCL — на вход всегда может прийти 0 и с этим я не могу ничего поделать.
Про Includes для пустого множества тут уже написали.
Re[2]: [Ehum] HasFlags, HasNoFlags - что делать с default(T)
От:
Аноним
Дата:
17.09.11 20:09
Оценка:
Здравствуйте, samius, Вы писали:
S>Если рассматривать отношение Includes как отношение подмножества флагов, то в соответствии с определением, пустое множество является подмножеством любого множества. То есть возвращать true. S>Однако в примерах там же написано S>
S>The empty set, denoted by ∅, is also a subset of any given set X. (This statement is vacuously true.) The empty set is always a proper subset, except of itself.
S>т.е. если value == 0 и flags == 0, то false.
S>Однако, в русской вики такого уточнения нет. Откуда оно вообще следует — мне непонятно. Из определения вроде не вытекает.
По-моему, пустое множество — это специальный случай, который вы можете определить как вам удобно, если при этом не возникает противоречий.
1) Пустое множество не является подмножеством любого множества и не является подмножеством себя.
2) Пустое множество является подмножеством любого множества и является подмножеством себя.
Re[3]: [Ehum] HasFlags, HasNoFlags - что делать с default(T)
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, samius, Вы писали:
А>По-моему, пустое множество — это специальный случай, который вы можете определить как вам удобно, если при этом не возникает противоречий.
А>1) Пустое множество не является подмножеством любого множества и не является подмножеством себя. А>2) Пустое множество является подмножеством любого множества и является подмножеством себя.
Если я буду определять множество как мне удобно, то оно не будет являться общепринятым множеством и не будет обладать свойствами общепринятого понятия множество. Определение включения перестанет работать, его придется определять тоже по-своему. Может оно будет и удобно, но называть получившийся объект термином "множество" будет уже не очень удобно, т.к. окружающие будут введены в заблуждение.
А чем может быть удобнее пустое множество, не являющееся подмножеством себя?
Re[4]: [Ehum] HasFlags, HasNoFlags - что делать с default(T)
От:
Аноним
Дата:
17.09.11 20:49
Оценка:
Здравствуйте, samius, Вы писали:
S>Если я буду определять множество как мне удобно, то оно не будет являться общепринятым множеством и не будет обладать свойствами общепринятого понятия множество. Определение включения перестанет работать, его придется определять тоже по-своему. Может оно будет и удобно, но называть получившийся объект термином "множество" будет уже не очень удобно, т.к. окружающие будут введены в заблуждение.
S>А чем может быть удобнее пустое множество, не являющееся подмножеством себя?
Мне казалось, что в математике "общепринятость" обеспечивается автоматически логической правильностью. Если что-то логически корректно, можно считать, что это общепринято. Интересно, что многие люди любят воспринимать математику как набор догм.
Строго говоря, для пустого множества отношение "включения" не определено. Для него, в принципе, нельзя сказать, включается оно в другие множества, или нет, потому как этот случай выходит за рамки определения подмножества для непустых множеств.
Но поскольку рассматривать этот специальный случай при каждом вычислении отдельно было бы неудобно, считают, что пустое множество включено во все множества (отсюда следует, что оно является подмножеством самого себя). Это не вызывает логических противоречий и математиков устраивает.
Таким образом, можно логически корректно определить отношение включения для подмножества для всех трех типов результатов: false, true и null (последний, вообще говоря, самый правильный и самый неудобный при этом).
Re[5]: [Ehum] HasFlags, HasNoFlags - что делать с default(T)
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, samius, Вы писали:
S>>Если я буду определять множество как мне удобно, то оно не будет являться общепринятым множеством и не будет обладать свойствами общепринятого понятия множество. Определение включения перестанет работать, его придется определять тоже по-своему. Может оно будет и удобно, но называть получившийся объект термином "множество" будет уже не очень удобно, т.к. окружающие будут введены в заблуждение.
S>>А чем может быть удобнее пустое множество, не являющееся подмножеством себя?
А>Мне казалось, что в математике "общепринятость" обеспечивается автоматически логической правильностью. Если что-то логически корректно, можно считать, что это общепринято.
Это не так. Общепринятость может опираться на допущения. Например на то, что параллельные прямые не пересекаются. Это логически корректно? А>Интересно, что многие люди любят воспринимать математику как набор догм.
А>Строго говоря, для пустого множества отношение "включения" не определено. Для него, в принципе, нельзя сказать, включается оно в другие множества, или нет, потому как этот случай выходит за рамки определения подмножества для непустых множеств.
Отношение включения для пустого множества напрямую вытекает из определения отношения включения.
А>Но поскольку рассматривать этот специальный случай при каждом вычислении отдельно было бы неудобно, считают, что пустое множество включено во все множества (отсюда следует, что оно является подмножеством самого себя). Это не вызывает логических противоречий и математиков устраивает.
А>Таким образом, можно логически корректно определить отношение включения для подмножества для всех трех типов результатов: false, true и null (последний, вообще говоря, самый правильный и самый неудобный при этом).
Только для такой логической корректности нужно будет изменить определение отношения включения. После чего оно просто перестанет быть общепринятым. Нарушатся общеизвестные свойства пустого множества: например, оно перестанет быть нейтральным относительно объединения.
Почему бы и нет? Просто это будет "другая" математика множеств. Но ее полезность мне сложно оценить. А раз польза сомнительна, то зачем отклоняться от общепринятых понятий?
Re[6]: [Ehum] HasFlags, HasNoFlags - что делать с default(T)
От:
Аноним
Дата:
17.09.11 22:06
Оценка:
Здравствуйте, samius, Вы писали:
S>Общепринятость может опираться на допущения. Например на то, что параллельные прямые не пересекаются. Это логически корректно?
Не вижу здесь отрицания моего утверждения. Геометрия Лобачевского такая же общепринятая математика, весь вопрос в ее полезности в применении к конкретной задаче.
S>Отношение включения для пустого множества напрямую вытекает из определения отношения включения.
Как именно? Отношение включения определяется (можно определить) как: "A содержит B, если все элементы B являются элементами A". Если B — пустое множество, в нем нет элементов, и это определение неприменимо.
А>>Таким образом, можно логически корректно определить отношение включения для подмножества для всех трех типов результатов: false, true и null (последний, вообще говоря, самый правильный и самый неудобный при этом). S>Только для такой логической корректности нужно будет изменить определение отношения включения. После чего оно просто перестанет быть общепринятым. Нарушатся общеизвестные свойства пустого множества: например, оно перестанет быть нейтральным относительно объединения.
Почему оно перестанет быть нейтральным?
Re[7]: [Ehum] HasFlags, HasNoFlags - что делать с default(T)
Здравствуйте, Аноним, Вы писали:
S>>Отношение включения для пустого множества напрямую вытекает из определения отношения включения.
А>Если B — пустое множество, в нем нет элементов, и это определение неприменимо.
Почему?
Re[7]: [Ehum] HasFlags, HasNoFlags - что делать с default(T)
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, samius, Вы писали:
S>>Общепринятость может опираться на допущения. Например на то, что параллельные прямые не пересекаются. Это логически корректно?
А>Не вижу здесь отрицания моего утверждения.
Я привел пример того, что общепринятая математика может быть построена на допущении, а не на логически корректном утверждении. А>Геометрия Лобачевского такая же общепринятая математика, весь вопрос в ее полезности в применении к конкретной задаче.
Общепринятой считается геометрия Евклида, и подразумевая другую геометрию, обычно оговаривают этот факт специально. Вы же пытаетесь манипулировать терминами, определениями и их следствиями, делая их удобными для вас. Но окружающие в то же время остаются убежденными что имеют дело с общепринятыми понятиями.
S>>Отношение включения для пустого множества напрямую вытекает из определения отношения включения.
А>Как именно? Отношение включения определяется (можно определить) как: "A содержит B, если все элементы B являются элементами A".
Именно так оно и определено. Если вы его определите по-другому, то это будет другое отношение.
А>Если B — пустое множество, в нем нет элементов, и это определение неприменимо.
Очень даже применимо, если знать что подразумевает "все" и не пытаться подставлять свои понятия.
А>>>Таким образом, можно логически корректно определить отношение включения для подмножества для всех трех типов результатов: false, true и null (последний, вообще говоря, самый правильный и самый неудобный при этом). S>>Только для такой логической корректности нужно будет изменить определение отношения включения. После чего оно просто перестанет быть общепринятым. Нарушатся общеизвестные свойства пустого множества: например, оно перестанет быть нейтральным относительно объединения.
А>Почему оно перестанет быть нейтральным?
∅ + ∅ = ∅ не будет выполняться. Если все-таки будет, то значит ∅ включает ∅, что противоречит вашему определению включения.