关于合并两个商集(quotient sets)的函数的定义与良定性(well-definedness)技术问询
嗨,Jin,很高兴能帮你梳理这个关于商集合并的问题——这其实是集合论和离散数学里一个挺实用的话题,咱们一步步来拆解你的疑问:
Q1:有没有通用的数学定义?
当然有!这个合并函数的本质是基于等价关系的闭包来定义的,比你写的算法式伪代码更偏向代数化的数学描述:
首先要明确:商集(划分)和等价关系是一一对应的——每个划分都对应一个等价关系(两个元素等价当且仅当它们在同一个划分块里),反过来每个等价关系也对应唯一的划分(等价类的集合)。
假设我们有两个划分(商集)$P_1$ 和 $P_2$,它们都是某个全集 $U$ 的划分(比如你例子里的全集是 ${1,2,3,4,5,6,7,8}$):
- 先写出 $P_1$ 对应的等价关系 $R_1$:$x R_1 y$ 当且仅当 $x$ 和 $y$ 属于 $P_1$ 中的同一个块;
- 再写出 $P_2$ 对应的等价关系 $R_2$:同理,$x R_2 y$ 当且仅当 $x$ 和 $y$ 属于 $P_2$ 中的同一个块;
- 把这两个关系合并成 $R = R_1 \cup R_2$,然后取它的传递闭包(同时也是自反、对称闭包,因为等价关系的并的传递闭包会自动满足自反性和对称性),记为 $(R_1 \cup R_2)^*$;
- 这个传递闭包对应的等价类集合,就是合并后的商集,也就是我们要的函数输出。
用你的例子验证一下:
- $R_1$ 包含的等价对有:$1\sim2, 2\sim1, 3\sim4, 4\sim3, 3\sim5, 5\sim3, 4\sim5, 5\sim4, 6\sim7, 7\sim6$(加上每个元素自反的对);
- $R_2$ 包含的等价对有:$2\sim6, 6\sim2, 8\sim8$;
- 合并后的传递闭包会把 $1,2,6,7$ 全部连起来(因为 $1\sim2$,$2\sim6$,$6\sim7$,传递性让它们彼此等价),$3,4,5$ 保持原等价,$8$ 单独成类,正好对应你给出的结果。
你写的伪代码其实是这个数学定义的算法实现:反复合并相交的块,本质就是在计算传递闭包对应的等价类——当没有相交块时,每个块就是一个等价类。
Q2:这个函数是良定义的吗?
是的,完全满足良定义的两个要求:
1. 总是有输出
两个划分的并集是全集的一个覆盖(每个元素至少属于一个块),虽然它可能不是划分(存在相交块)。但通过不断合并相交的块,最终一定会得到一个划分:
- 所有块的并仍然是全集(合并过程不会丢失元素);
- 最终的任意两个块都不相交(否则还会继续合并);
- 每个元素恰好属于一个块(因为初始覆盖包含所有元素,且相交块都被合并了)。
所以不管输入是什么合法的商集,这个函数都能得到一个合法的商集输出。
2. 输出唯一
这是由传递闭包的唯一性保证的:对于任意给定的关系 $R_1 \cup R_2$,它的传递闭包是唯一的——是包含这个关系的最小传递关系。而每个等价关系对应唯一的划分,因此合并后的商集也是唯一的。
哪怕你换一种合并相交块的顺序(比如伪代码里先合并不同的相交对),最终得到的划分结果都是一样的。比如你有三个块 $A,B,C$,$A\cap B\neq\emptyset$,$B\cap C\neq\emptyset$,不管先合并 $A\cup B$ 还是 $B\cup C$,最终都会得到 $A\cup B\cup C$,结果不会变。
补充:关于你的伪代码
你的伪代码是完全正确的,它是一种“自底向上”构建等价类的贪心算法,和我们的数学定义完全等价。如果你想把它和数学定义关联起来,可以这样理解:每次合并相交块,就是在把传递闭包里的等价关系逐步具体化,直到所有等价类都被确定。
备注:内容来源于stack exchange,提问作者Jin SANO

