回答
这引理是在标准库:
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
的后继者,并且你可以立即开始在n
上进行归纳。
induction n
之后,您需要证明基本情况:您有假设1 <= 0
,并且您需要证明这是不可能的(目标是False
)。通常,要将归纳假设分解为案例,可以使用induction
策略或其变体之一。这种策略对假设构建了一个相当复杂的依赖案例分析。看看发生了什么的一种方法是拨打simple inversion
,这留给你两个子目标:或者假设1 <= 0
的证明使用le_n
构造函数,这要求1 = 0
,或者证明使用le_S
构造函数,这需要S m = 0
。在这两种情况下,要求与S
的定义明显矛盾,所以策略discriminate
证明了子目标。您可以使用inversion H
,而不是simple inversion H
,在这种特殊情况下,它直接证明了目标(不可能的假设情况非常普遍,并且已经融入了全面的inversion
策略)。
现在,我们转到感应情况,我们很快来到我们想要从S (S n) <= S n
证明S n <= n
的点。我建议你把它作为一个单独的引理(首先要证明),这可以概括为:forall n m, S n <= S m -> n <= m
。
Require Import Arith.
auto with arith.
- 1. 如何在Coq中证明(n = n)=(m = m)?
- 2. 证明所以(0 < m) ->(N ** M = S n中)
- 3. 证明是n^5 <= 5^N对于n> = 5
- 4. 证明5^n = o(n!)
- 5. 证明lg(n!)= O(n!)
- 6. 证明log(n!)是Ω(n log(n))
- 7. 如何证明Quicksort是O(n * lg n)有特殊情况?
- 8. 如何证明[在Coq证明助手]中的所有x,(R x \ /〜R x)?
- 9. 证明O(max {f(n),g(n)} = O(f(n)+ g(n))
- 10. 证明最大(O(f(n)),O(g(n)))= O(max(f(n),g(n))
- 11. 证明2 ^(n a)= O(2^n)?
- 12. Coq:我如何用“S n”替换“n + 1”这样的词?
- 13. 如何证明coq中的反对称
- 14. 类型包含Coq中的N个元素的所有功能
- 15. 如何证明3^n不是O(n^2)?
- 16. 就在COQ证明
- 17. Rails - escape_javascript并不是所有的\ n \ n \ n \ n \ n
- 18. 证明任何a> b> 0,b^n在Big-O a^n
- 19. 如何证明西格马(I/2^I)<= 2(i = 1至N)
- 20. 证明coq中列表中的所有元素
- 21. 在Coq中证明终止
- 22. 如何定义Coq中N个元素的有限集合?
- 23. 如何证明Coq中的证明定义
- 24. 证明或反驳n^2 - n + 2∈O(n)
- 25. 证明ñ^ K =Ω(C^N)
- 26. 证明(先前N)<= M选自正开始<=米
- 27. 下面的清单N的所有素数使用素证明
- 28. 在渐近分析中,证明:O表示大O. O(f(n)+ g(n))= O(max {f(n),g(n)})
- 29. 在Coq中的证明参数
- 30. Coq证明策略
它的工作原理。但是我想知道如果没有Arith,你是否可以提供证明。对此,我真的非常感激。 –