到目前为止,我有一个抽象的基类Set,它实现了接口ISet.对于有限集,我派生一个类FiniteSet,它实现每个集合的方法.我可以这样使用它:
FiniteSet<int> set1 = new FiniteSet<int>(1,2,3); FiniteSet<int> set2 = new FiniteSet<int>(3,4,5); Console.WriteLine(set1); //{1,3} Console.WriteLine(set2); //{3,5} set1.UnionWith(set2); Console.WriteLine(set1); //{1,3,5}
现在我想表示一个无限集.我有一个想法,从集合,InfiniteSet导出另一个抽象类,然后使用该库的开发人员将不得不从InfiniteSet派生来实现自己的类.我会提供常用的集合,如N,Z,Q和R.
但是我不知道如何实现Subset和GetEnumerator等方法 – 我甚至开始认为这是不可能的.您如何以实用的方式枚举无限集,以便您可以与另一个无限集相交/联合?如何在代码中检查N是R的一个子集?至于基数的问题..那可能是一个单独的问题.
所有这一切导致我的结论,我的想法实现无限集可能是错误的方式去.我非常感谢您的输入:).
编辑:要清楚,我也想表达无数的无限集.
Edit2:我认为重要的是要记住,最终的目标是实现ISet,这意味着任何解决方案都必须提供(应该的)方法来实现所有ISet’s methods,其中最有问题的是枚举方法和IsSubsetOf方法.
解决方法
这是一个证明(由伯特兰·罗素提供):
假设你已经创建了一个类MySet< T>这可以代表无数无限集.现在让我们考虑一些MySet< object>对象.
我们标记一个特定的MySet< object>,调用它的实例,“异常”如果:
instance.Contains(instance)返回true.
类似地,我们将实例标记为“normal”,如果:
instance.Contains(instance)返回false.
请注意,对于所有实例,这种区别是明确的.
现在考虑MySet< MySet< object>>>的实例称为悖论.
我们将矛盾定义为MySet< MySet< object>>其中包含MySet< object>的所有可能的正常实例.
悖论应该悖论(悖论)返回?
如果它返回true,那么悖论就是异常的,当它本身被调用时应该返回false.
如果它返回false,那么悖论是正常的,并且在调用本身时应该返回true.
没有办法实现Contains来解决这个悖论,所以没有办法完全实现ISet&T;对于所有可能的不可数的集合.
现在,如果您限制MySet< T>的基数,等于或小于连续体的基数(| R |),那么你将能够绕过这个悖论.
即使这样,您将无法实现包含或类似的方法,因为这样做将等同于解决停止问题. (请记住,所有C#程序的集合的基数等于| Z | <| R |.) 编辑 更彻底的是,这是对我断言“这样做相当于解决停顿问题”的解释. 考虑MySet< string>它由所有C#程序(作为字符串)组成,它们在有限的时间内停止(假设他们停止任何输入,是精确的).称它为悖论2.该集合是*递归枚举的“,这意味着你可以实现GetEnumerator(不容易,但可以),这也意味着它是很好的定义,但是这个集合不是”可判定的“,因为它的补码不是递归的枚举.
定义一个C#程序如下:
using ... //Everything; public static class Decider { private MySet<string> _haltingSet = CreateHaltingSet(); static void Main(string [] args) { Console.WriteLine(_haltingSet.Contains(args[0])); } }
编译上述程序,并将其作为输入传递给自身.怎么了?
如果您的Contains方法已正确实施,那么您已经解决了停止问题.然而,我们知道这是不可能的,所以我们只能得出结论,即使是无限集,也不可能正确地实现包含.
您可能可以限制MySet< T>所有的工作类都是decidable sets.然而,然后,你仍然会遇到各种各样的问题,你的功能永远不会在有限的时间内停止.
例如,假设我们有一个称为Real的任意精确的真实类型,让我们让非哈尔丁成为MySet< Real>的一个实例.这包括Riemann Zeta功能的所有非平凡零(这是一个可判定的集合).如果您可以正确地实施IsProperSubsetOf on nonHalting返回有限的时间,通过所有复数的集合与实际的1/2(也是一个可判定的集合),那么你将赢得一个Millennium Prize.