gpt4 book ai didi

Coq 无法区分依赖类型归纳命题的构造函数

转载 作者:行者123 更新时间:2023-12-02 19:48:18 25 4
gpt4 key购买 nike

我创建了这个示例类型来演示我遇到的问题:

Inductive foo : nat -> Prop :=
| foo_1 : forall n, foo n
| foo_2 : forall n, foo n.

现在清楚了foo_1 0 <> foo_2 0 ,但我无法证明这一点:

Lemma bar : foo_1 0 <> foo_2 0.
Proof. unfold not. intros H. discriminate H.

这会返回错误

Not a discriminable equality.

inversion H根本不会改变上下文。奇怪的是,如果我改变 foo来自PropType然后证明就通过了,但我不能在我的实际代码中这样做,因为它会在其他地方引起问题。

我怎样才能通过这个证明?为什么这首先会出现问题?

最佳答案

Coq 的底层逻辑与“证明无关性”公理兼容,该公理指出给定 Prop 的任何两个证明都是相等的。因此,无法证明您所提出的陈述。

如果您希望能够区分两个构造函数,则需要将 foo 设为归纳型 Type 而不是 Prop。然后 bar 被接受为有效证明。

Inductive foo : nat -> Type :=
| foo_1 : forall n, foo n
| foo_2 : forall n, foo n.

Lemma bar : foo_1 0 <> foo_2 0.
Proof. unfold not. intros H. discriminate H. Qed.

关于Coq 无法区分依赖类型归纳命题的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com