16.3. 同余闭包
同余闭包维护项在“相等”的自反、对称和传递闭包下的等价类,并且遵循“相等的参数产生相等的函数结果”这一规则。
形式化地说,如果 a = a' 且 b = b',就会加入 f a b = f a' b'。
该算法会不断合并等价类,直至达到不动点。
如果发现矛盾,就可以立即关闭目标。
沿用共享白板的比喻:
同余闭包
这个定理使用同余闭包证明:
example {α} (f g : α → α) (x y : α)
(h₁ : x = y) (h₂ : f y = g y) :
f x = g x := α:Sort u_1f:α → αg:α → αx:αy:αh₁:x = yh₂:f y = g y⊢ f x = g x
All goals completed! 🐙
最初,f y、g y、x 和 y 分属不同的等价类。
同余闭包引擎使用 h₁ 合并 x 和 y,此后等价类为 {x, y}、f y 和 g y。
接着使用 h₂ 合并 f y 和 g y,此后等价类为 {x, y} 和 {f y, g y}。
这足以证明 f x = g x,因为 y 和 x 位于同一个等价类中。
对构造器也使用类似的推理:
example (a b c : Nat) (h : a = b) : (a, c) = (b, c) := a:Natb:Natc:Nath:a = b⊢ (a, c) = (b, c)
All goals completed! 🐙
由于序对构造器 Prod.mk 满足同余性,一旦 a 和 b 被归入同一个类,这两个元组便相等。