Coq 与萨姆布尔的宇宙不一致性

Coq 与萨姆布尔的宇宙不一致性,coq,Coq,我定义并证明了以下引理: NM.In k m -> {NM.In k m0}+{NM.In k m1}. 我还可以证明一个对称引理: {NM.In k m0}+{NM.In k m1} -> NM.In k m 但是,当我尝试将它们合并为一个时: NM.In k m <-> {NM.In k m0}+{NM.In k m1}. 如何解决这个问题?正如Daniel指出的,问题在于,连接词只将命题作为参数,而sumbool生活在集合中。有几种方法

我定义并证明了以下引理:

    NM.In k m -> {NM.In k m0}+{NM.In k m1}.
我还可以证明一个对称引理:

    {NM.In k m0}+{NM.In k m1} -> NM.In k m
但是,当我尝试将它们合并为一个时:

    NM.In k m <-> {NM.In k m0}+{NM.In k m1}.

如何解决这个问题?

正如Daniel指出的,问题在于,
连接词只将命题作为参数,而
sumbool
生活在
集合中。有几种方法可以避免这种情况:您可以用
替换
sumbool
,或者用计算相关的连接词替换
iff

Variables A B C : Prop.

Check (({A} + {B} -> C) * (C -> {A} + {B}))%type.

这不是一个真正的宇宙不一致,而是一个类型不匹配:
又称为
iff
只接受
Prop
参数。
impl
也是
Prop->Prop->Prop
但是
->
不是
impl
-它是一个接受任何类型的内置函数(事实上,
A->B
forall的内置语法糖:A,B
Variables A B C : Prop.

Check (({A} + {B} -> C) * (C -> {A} + {B}))%type.