Как мне реализовать класс бесконечного набора?

Я разрабатываю библиотеку классов для дискретной математики и не могу придумать, как реализовать бесконечное множество .

На данный момент у меня есть :абстрактный базовый класс Set, который реализует интерфейс ISet. Для конечных наборов я создаю класс FiniteSet, который реализует каждый метод набора. Затем я могу использовать его вот так:

FiniteSet set1 = new FiniteSet(1, 2, 3);
FiniteSet set2 = new FiniteSet(3, 4, 5);
Console.WriteLine(set1); //{1, 2, 3}
Console.WriteLine(set2); //{3, 4, 5}

set1.UnionWith(set2);
Console.WriteLine(set1); //{1, 2, 3, 4, 5}

Теперь я хочу представить бесконечное множество. У меня была идея создать еще один абстрактный класс из множества, InfiniteSet, а затем разработчикам, использующим библиотеку, пришлось бы наследовать от InfiniteSet для реализации своих собственных классов. Я бы поставил часто используемые наборы, такие как N, Z, Q и R.

Но я понятия не имею, как реализовать такие методы, как Subset и GetEnumerator -. Я даже начинаю думать, что это невозможно. Как на практике перечислить бесконечное множество, чтобы его можно было пересечь/объединить с другим бесконечным множеством? Как вы можете проверить в коде, что N является подмножеством R? А что касается кардинальности.. Ну это, наверное, отдельный вопрос.

Все это приводит меня к выводу, что моя идея реализации бесконечного множества, вероятно, ошибочна. Буду очень признателен за ваш вклад :).

Изменить :Просто для ясности, я также хотел бы представить несчетно бесконечные множества.

Edit2 :Я думаю, важно помнить, что конечной целью является реализация ISet, а это означает, что любое решение должно предоставлять (как следует )способы реализации всех методов ISet , наиболее проблематичными из них являются методы перечисления и метод IsSubsetOf.

11
задан Daniel 7 December 2013 в 16:35
поделиться