gpt4 book ai didi

infinite-loop - 在Coq中使用负归纳类型证明False

转载 作者:行者123 更新时间:2023-12-04 04:23:35 29 4
gpt4 key购买 nike

CPDT的第三章简要讨论了为什么Coq中禁止使用负感应类型。如果我们有

Inductive term : Set :=
| App : term -> term -> term
| Abs : (term -> term) -> term.

然后我们可以轻松定义一个函数
Definition uhoh (t : term) : term :=
match t with
| Abs f => f t
| _ => t
end.

因此 uhoh (Abs uhoh)一词将是不终止的,“我们将能够证明每个定理”。

我了解非终止部分,但我不知道我们如何证明这一点。如何使用上面定义的 False证明 term

最佳答案

阅读您的问题使我意识到,我也不太理解亚当的论点。但是在这种情况下,不一致很容易由Cantor惯用的diagonal argument(逻辑中永无休止的悖论和困惑之源)造成。请考虑以下假设:

Section Diag.

Variable T : Type.

Variable test : T -> bool.

Variables x y : T.

Hypothesis xT : test x = true.
Hypothesis yF : test y = false.

Variable g : (T -> T) -> T.
Variable g_inv : T -> (T -> T).

Hypothesis gK : forall f, g_inv (g f) = f.

Definition kaboom (t : T) : T :=
if test (g_inv t t) then y else x.

Lemma kaboom1 : forall t, kaboom t <> g_inv t t.
Proof.
intros t H.
unfold kaboom in H.
destruct (test (g_inv t t)) eqn:E; congruence.
Qed.

Lemma kaboom2 : False.
Proof.
assert (H := @kaboom1 (g kaboom)).
rewrite -> gK in H.
congruence.
Qed.

End Diag.

这是一个通用开发,可以使用CPDT中定义的 term类型实例化: T将是 termxy将是 term的两个元素,我们可以测试它们之间的区别(例如 App (Abs id) (Abs id)Abs id)。关键是最后一个假设:我们假设我们有一个可逆函数 g : (T -> T) -> T,在您的示例中为 Abs。使用该函数,我们将执行通常的对角化技巧:我们定义一个 kaboom函数,该函数的构造与每个函数 T -> T(包括其自身)都不同。由此产生矛盾。

关于infinite-loop - 在Coq中使用负归纳类型证明False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31226427/

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