gpt4 book ai didi

logic - 如何在 Coq 中证明 forall n :nat, ~n
转载 作者:行者123 更新时间:2023-12-03 23:57:24 30 4
gpt4 key购买 nike

我已经困惑了几个小时,我不知道如何证明

forall n:nat, ~n<n

在 Coq 中。我真的需要你的帮助。有什么建议吗?

最佳答案

这个引理在标准库中:

Require Import Arith.
Lemma not_lt_refl : forall n:nat, ~n<n.
Print Hint.

结果中有lt_irrefl .实现这一点的更直接的方法是

info auto with arith.

这证明了目标并展示了如何:

intro n; simple apply lt_irrefl.

既然您知道在哪里可以找到证明,我将仅从基本原理(我想这是您作业的重点)给出如何做到这一点的提示。

首先,您需要证明一个否定。这几乎意味着你推 n<n作为一个假设并证明你可以推断出一个矛盾。然后,推理 n<n , 展开它的定义。

intros h H.
red in H. (* or `unfold lt in H` *)

现在你需要证明 S n <= n不可能发生。要从第一原则做到这一点,此时您有两个选择:您可以尝试在 n 上进行感应。 , 或者你可以尝试在 <= 上感应. <=谓词是由归纳定义的,在这些情况下,您通常需要对其进行归纳——也就是说,通过对假设的证明进行归纳来推理。但是,在这里,您最终需要对 n 进行推理。 , 以表明 n不能是 S n 的第 mth 个继任者,您可以在 n 上开始感应马上。

induction n 之后,你需要证明基本情况:你有假设 1 <= 0 ,并且您需要证明这是不可能的(目标是 False )。通常,要将归纳假设分解为案例,您可以使用 induction战术或其变体之一。这种策略在假设上构建了一个相当复杂的相关案例分析。查看正在发生的事情的一种方法是调用simple inversion。 ,这给您留下了两个子目标:假设的证明 1 <= 0使用 le_n构造函数,它要求 1 = 0 ,或者该证明使用 le_S构造函数,它要求 S m = 0 .在这两种情况下,该要求显然与 S 的定义相矛盾。 ,所以战术discriminate证明子目标。而不是 simple inversion H , 你可以使用 inversion H ,在这种特殊情况下直接证明了目标(不可能的假设情况非常常见,它已融入成熟的 inversion 策略)。

现在,我们转向归纳案例,我们很快就来到了要证明 S n <= n 的地方。来自 S (S n) <= S n .我建议您将其声明为一个单独的引理(首先要证明),可以概括为:forall n m, S n <= S m -> n <= m .

关于logic - 如何在 Coq 中证明 forall n :nat, ~n<n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8103226/

30 4 0

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