Binary Relation
在一个集合中,集合内元素之间的关系,要么是可以进行比较的,要么是不能进行比较的,我们将这种二元的关系成为 binary relation,其中,如果两个元素 a, b 可比较,我们记为 ,否则记为 ,符合这样关系的元素所构成的集合,用符号表示为S,而由这个集合以及集合内元素之间关系所描述的顺序,则是 Order,用符号表示为<S, >。
total order
符合如下定义的 order 称为 total order:
常见的total order有整数集
partial order
偏序不需要集合中每对元素都能进行比较:
在 crdt 中应用广泛的,使用 Lamport clock 定义的逻辑时间戳所构成的向量就是一种常见的 partial order,如下图所示:
对上图中向量所构成的集合来说:(1,0,0)≤(1,0,1) 但是 (1,0,0) ∥ (0,0,1)。
Join
Join 是对集合中的两个元素进行合并的操作,其符号表示为 a V b,具体的行为是找到这两个元素的最小上确界(least upper bound)。
For a set S, an order <𝑆,≤>, and two elements 𝑎,𝑏∈S, the join of 𝑎a and 𝑏b (written 𝑎∨𝑏) is a least upper bound of S according to our order <𝑆,≤>.
上图中标识出了合并操作的行为,对于无法进行比较的向量,会找到两者的最小上确界。
Join 符合以下三种特性:
- Commutativity: 𝑎∨𝑏=𝑏∨𝑎
- Associativity: (𝑎∨𝑏)∨𝑐=𝑎∨(𝑏∨𝑐)
- Idempotence: 𝑎∨𝑎=𝑎
Join semi-lattice
如果一个集合中任意两个元素都能在同一集合内找到他们的最小上确界,则这样的集合成为 Join semi-lattice
A join semi-lattice is an order <𝑆,≤> for which there exists a join 𝑥∨𝑦 for any 𝑥,𝑦∈𝑆.
并非所有的 partial order 都是 join semi-lattice,因为 partial order 只要求了存在,但是 join semi-lattice 要求了任意性。
比如下图,虽然符合 partial order,但却不是 join semi-lattice:
monotonic join semi-lattice
顾名思义,在这种集合中,如果不断地对任意挑选的元素与当前得到的 join 结果进行 join 操作,每次join操作的结果都会向着同一个元素的方向靠近。这在 crdt 中就表示,所有同步完成的节点最终达到的状态是一致的。