为什么 coq 不对逻辑或使用子类型?

Why coq doesn't use subtyping for logical or?

这里所说的子类型化是指类型之间的隐式强制转换,而不是sig

在编程语言中,总和类型具有关联数据,并且使用哪种变体很重要,例如A 不能是 haskell 中 Either<A,B> 的子类型。可决定的 coq 也是如此。也就是说,A 一般不能是 A + B 的子类型,因为 A + AA.

多一位数据

但是,Props 在运行时没有数据,所以为什么 coq 不认为 AA \/ B 的子类型,并允许使用它的每个成员作为 A \/ B 的成员A \/ B 没有明确的 or_introl?我认为它使证明更短、更通用。是否存在基本限制或不健全问题使其无法实现,或者它只是一个不需要的功能?

我认为主要问题确实是实用性之一:

如果您正在考虑证明 A\/B,您可能不是在手动构建 AB 的证明,而是应用一系列强大的技术不考虑效率和简洁性,正是因为你说的原因。

这意味着您可以使用强大的策略,例如 autointuition,如果您运气好,甚至可以使用 firstorder

这些策略证明比 A -> A \/ B 多得多,并且经常执行许多步骤,包括那个,这使得强制有些无用(甚至可能令人困惑!)。