tl;博士提议的候选人不是一个均衡器,但它不相关的对应物是
Agda 的均衡器候选人看起来不错。所以让我们试试吧。我们需要一些基本的工具包。这是我的拒绝 ASCII 依赖对类型和同质内涵平等。
record Sg (S : Set)(T : S -> Set) : Set where
constructor _,_
field
fst : S
snd : T fst
open Sg
data _==_ {X : Set}(x : X) : X -> Set where
refl : x == x
这是您的两个功能均衡器的候选人
Q : {S T : Set}(f g : S -> T) -> Set
Q {S}{T} f g = Sg S \ s -> f s == g s
随着fst
投影发送Q f g
到S
。
它说什么:元素 ofQ f g
是s
源类型的元素,以及f s == g s
. 但这是均衡器吗?让我们试着做到这一点。
要说均衡器是什么,我应该定义函数组合。
_o_ : {R S T : Set} -> (S -> T) -> (R -> S) -> R -> T
(f o g) x = f (g x)
所以现在我需要证明任何h : R -> S
可以识别f o h
并且g o h
必须通过候选人的因素fst : Q f g -> S
。我需要提供其他组件u : R -> Q f g
以及确实h
因素为fst o u
. 图片如下:(Q f g , fst)
是一个均衡器,如果每当图表通勤时没有u
,有一种独特的方式可以添加u
图表仍然通勤。
这就是中介的存在u
。
mediator : {R S T : Set}(f g : S -> T)(h : R -> S) ->
(q : (f o h) == (g o h)) ->
Sg (R -> Q f g) \ u -> h == (fst o u)
S
显然,我应该选择相同的元素h
。
mediator f g h q = (\ r -> (h r , ?0)) , ?1
留给我两项证明义务
?0 : f (h r) == g (h r)
?1 : h == (\ r -> h r)
现在,?1
可以就像refl
Agda 的定义等式具有函数的 eta 定律一样。因为?0
,我们是被祝福的q
。同等功能尊重应用
funq : {S T : Set}{f g : S -> T} -> f == g -> (s : S) -> f s == g s
funq refl s = refl
所以我们可以采取?0 = funq q r
。
但是让我们不要过早地庆祝,因为中介态射的存在是不够的。我们还需要它的独特性。而这里的轮子很可能会变得不稳定,因为==
它是内涵的,所以唯一性意味着只有一种方法可以实现中介映射。但是,我们的假设也是内涵的……
这是我们的证明义务。我们必须证明任何其他中介态射等于 选择的那个mediator
。
mediatorUnique :
{R S T : Set}(f g : S -> T)(h : R -> S) ->
(qh : (f o h) == (g o h)) ->
(m : R -> Q f g) ->
(qm : h == (fst o m)) ->
m == fst (mediator f g h qh)
我们可以立即替换 viaqm
并得到
mediatorUnique f g .(fst o m) qh m refl = ?
? : m == (\ r -> (fst (m r) , funq qh r))
看起来不错,因为 Agda 有记录的 eta 定律,所以我们知道
m == (\ r -> (fst (m r) , snd (m r)))
但是当我们尝试制作时? = refl
,我们得到了投诉
snd (m _) != funq qh _ of type f (fst (m _)) == g (fst (m _))
这很烦人,因为身份证明是唯一的(在标准配置中)。现在,您可以通过假设外延性并使用其他一些关于平等的事实来摆脱这种情况
postulate ext : {S T : Set}{f g : S -> T} -> ((s : S) -> f s == g s) -> f == g
sndq : {S : Set}{T : S -> Set}{s : S}{t t' : T s} ->
t == t' -> _==_ {Sg S T} (s , t) (s , t')
sndq refl = refl
uip : {X : Set}{x y : X}{q q' : x == y} -> q == q'
uip {q = refl}{q' = refl} = refl
? = ext (\ s -> sndq uip)
但这太过分了,因为唯一的问题是烦人的等式证明不匹配:实现的可计算部分在鼻子上匹配。所以解决方法是使用无关紧要的工作。我用 istential 量词代替Sg
,Ex
它的第二个分量用点标记为不相关。现在,我们使用哪种证据证明证人是好的并不重要。
record Ex (S : Set)(T : S -> Set) : Set where
constructor _,_
field
fst : S
.snd : T fst
open Ex
并且新的候选均衡器是
Q : {S T : Set}(f g : S -> T) -> Set
Q {S}{T} f g = Ex S \ s -> f s == g s
整个施工过程和以前一样,除了最后一个义务
? = refl
被接受!
所以是的,即使在内涵设置中,eta 定律和将字段标记为不相关的能力也给了我们均衡器。
在这个构造中没有涉及不可判定的类型检查。