联盟的特征功能

问题描述 投票:2回答:2

在像Coq这样的建设性环境中,我期望qzxswpoi脱离的证明要么是A \/ B的证明,要么是A的证明。如果我在B类型的子集上重新制定它,它说如果我有证据表明Xx,那么我要么证明A union Bx,或证明Ax。所以我想通过案例分析来定义联合的特征函数,

B

Definition characteristicUnion (X : Type) (A B : X -> Prop) (x : X) (un : A x \/ B x) : nat. x时它将等于1,当Ax时它将等于0。然而,Coq不让我B,因为“排序集的案例分析不允许进行归纳定义或”。

在Coq中有另一种方法来模拟destruct un类型的子集,这将允许我在联合上构造那些特征函数吗?我不需要提取程序,所以我想简单地禁用案例分析中的先前错误对我有用。

请注意,我不想将子集建模为X。这将是非常强大的:我不需要排除中间的法律,例如“A : X -> boolxA不在x”。

coq
2个回答
1
投票

正如@AndrásKovács所指出的,Coq阻止您从Prop中的类型中“提取”与计算相关的信息,以便允许使用某些更高级的功能。关于这个主题已经有很多研究,包括最近的Univalent Foundations / HoTT,但这超出了这个问题的范围。

在你的情况下,你确实想要使用类型A,它将允许你做你想要的。


0
投票

我认为子集的联合也应该是一个子集。我们可以通过将union定义为逐点析取来实现:

{ A } + { B }
© www.soinside.com 2019 - 2024. All rights reserved.