我正在用 Java 编写一个 PredicateSet 类,以使用谓词接受或拒绝成员资格来对可数集合的数学定义进行建模。但我在想出 equals 方法时遇到了困难。如果成员资格测试为任何对象返回相同的值(不一定是两个集合中已有的对象),我希望两个谓词集相等。例如,如果我们有两组分别由 1=1 和 2=2 定义的对象,则这两个集合都相当于通用集合,因为任何对象都可以添加到任一集合中。
显然无穷大在实践中不起作用,但我想尽可能接近平等的真正定义。
有人有什么建议吗?
这通常无法远程完成;它直接进入停止问题以确定两个程序(任意谓词)是否等效。 您也许能够检测一些非常简单的谓词的相等性,例如“等于 0 的元素集”,但仅此而已。
对于任何更复杂的事情,您确实需要一个完全不同的框架和可能的语言来推理谓词相等性。 例如,这在 Agda 中是很正常的事情。