提升Coq中的存在性

时间:2019-03-01 12:21:15

标签: coq

能否在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排序。

1 个答案:

答案 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”。 ”,您可以通过忽略所有信息(无论是否有人居住)将“道具”中的类型解释为集合。从古典逻辑的角度(您所关心的只是真值)来看,这是有道理的,但是,如果您对构造数学感兴趣,那就有点奇怪了!