作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究以下定理的证明 Sn_le_Sm__n_le_m
在 IndProp.v
的 Software Foundations (Vol 1: Logical Foundations) .
Theorem Sn_le_Sm__n_le_m : ∀n m,
S n ≤ S m → n ≤ m.
Proof.
intros n m HS.
induction HS as [ | m' Hm' IHm'].
- (* le_n *) (* Failed Here *)
- (* le_S *) apply IHSm'.
Admitted.
le (i.e., ≤)
的定义是:
Inductive le : nat → nat → Prop :=
| le_n n : le n n
| le_S n m (H : le n m) : le n (S m).
Notation "m ≤ n" := (le m n).
induction HS
,上下文和目标如下:
n, m : nat
HS : S n <= S m
______________________________________(1/1)
n <= m
-
,上下文以及目标是:
n, m : nat
______________________________________(1/1)
n <= m
n <= m
没有任何上下文,这显然是不可能的。
S n = S m
(然后
n = m
)用于
le_n
案例在
induction HS
?
最佳答案
这里的主要问题 - 我认为 - 不可能在 HS
上使用归纳证明定理因为没有办法说 n
只有关于 S n
的假设因为不是 le
的构造函数不要改变 n
的值.但无论如何,在第一个子弹之后的原因-
没有假设是因为调用 induction
具有用对应于每个构造函数的值替换所有出现的属性参数的效果,在这种情况下它没有帮助,因为被替换的术语 S n
任何地方都没有提到。有一些技巧可以避免这种情况。例如,您可以将 n 替换为 pred(S n)
如下。
Theorem Sn_le_Sm__n_le_m : forall n m,
S n <= S m -> n <= m.
Proof.
intros n m HS.
assert(Hn: n=pred (S n)). reflexivity. rewrite Hn.
assert(Hm: m=pred (S m)). reflexivity. rewrite Hm.
induction HS.
- (* le_n *) apply le_n.
- (* le_S *) (* Stucks! *) Abort.
inversion
这更聪明,但在某些情况下它可能无济于事,因为归纳假设是必要的。但值得了解一下。
Theorem Sn_le_Sm__n_le_m : forall n m,
S n <= S m -> n <= m.
Proof.
intros n m HS.
inversion HS.
- (* le_n *) apply le_n.
- (* le_S *) (* Stucks! *) Abort.
remember
战术如下。
Theorem Sn_le_Sm__n_le_m : forall n m,
S n <= S m -> n <= m.
Proof.
intros n m HS.
remember (S n) as Sn.
remember (S m) as Sm.
induction HS as [ n' | n' m' H IH].
- (* le_n *)
rewrite HeqSn in HeqSm. injection HeqSm as Heq.
rewrite <- Heq. apply le_n.
- (* le_S *) (* Stucks! *) Abort.
The tactic
remember e as x
causes Coq to (1) replace all occurrences of the expression e by the variable x, and (2) add an equation x = e to the context.
HS
上用归纳法证明这一事实。 -imo-,对
m
进行归纳将解决此案。 (注意
inversion
的使用。)
Theorem Sn_le_Sm__n_le_m : forall n m,
S n <= S m -> n <= m.
Proof.
intros n.
induction m as [|m' IHm'].
- intros H. inversion H as [Hn | n' contra Hn'].
+ apply le_n.
+ inversion contra.
- intros H. inversion H as [HnSm' | n' HSnSm' Heq].
+ apply le_n.
+ apply le_S. apply IHm'. apply HSnSm'.
Qed.
关于coq - coq 中 "less than"关系的证据归纳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56292483/
我一直在阅读Practical Foundations for Programming Languages并发现迭代和同时归纳定义很有趣。我能够很容易地对偶函数和奇函数的相互递归版本进行编码 onli
我是一名优秀的程序员,十分优秀!