能否在Coq中证明这一引理?
Lemma liftExists : forall (P : nat -> nat -> Prop),
(forall n:nat, exists p:nat, P n p)
-> exists (f : nat -> nat), forall n:nat, P n (f n).
简单的destruct
无法编译,因为我们无法消除类型exists p:nat, P n p
的对象Prop
来产生类型f
的函数Set
。
如果Coq无法证明这一引理,那么forall n:nat, exists p:nat, P n p
是什么意思?在构造数学中,这将意味着函数f
的存在,但我的印象是,我们永远不会在Coq中看到此函数f
,甚至不会出现上述的Prop
排序。
答案 0 :(得分:2)
由于限制删除Prop到Set中的限制,在Coq中无法证明。至于哲学上的“含义”,我不确定是否有人对此有一个很好的故事。 forall n:nat, exists p:nat, P n p
的居民是返回一对p
和证明的函数,但除此之外,它们是编译程序时可以忽略的函数,因为您知道什么也看不到返回的值。
因此,该“ Prop vs Set”系统在某种程度上是一种更高效地编译程序的方法,但实际上,它也用于逻辑属性。在Coq中,Prop类型是强制性的,而Set类型不是强制性的,即使如此,也可以假定Props的排除中间定律是一个公理,并证明这是一致的,您可以诉诸“ proof-irrelevant model”。 ”,您可以通过忽略所有信息(无论是否有人居住)将“道具”中的类型解释为集合。从古典逻辑的角度(您所关心的只是真值)来看,这是有道理的,但是,如果您对构造数学感兴趣,那就有点奇怪了!