有人可以向我解释以下 - 显然是错误的 - COQ推导?
Theorem test: forall n:nat, ( n <= 0) -> n=0.
intros n H.
elim H.
auto.
COQ回答:
1 subgoal
n : nat
H : n <= 0
=================
forall m : nat, n <= m -> n = m -> n = S m
答案 0 :(得分:2)
le
(<=
)有两个构造函数。在n <= 0
中,两者(某种程度上)可以适用:
Inductive le (n : nat) : nat -> Prop :=
le_n : n <= n
| le_S : forall m : nat, n <= m -> n <= S m
您的证明中的 auto
解决了第一个目标/案例。第二个是无法证实的。你应该在n
上进行归纳以证明这个定理:
Theorem test: forall n, n <= 0 -> n = 0.
intros n H.
induction n.
reflexivity.
inversion H. Qed.
或者你可以使用inversion H
策略(不是elim
):
Theorem test: forall n, n <= 0 -> n = 0.
intros n H.
inversion H.
auto. Qed.
答案 1 :(得分:1)
在谓词上使用归纳时,通常需要确保谓词的参数是变量而不是术语。你可以通过添加一些方程式来实现。您通常还需要确保这些变量是不同的,并且在谓词之前没有任何不必要的假设或量词。
Goal forall n1, n1 <= 0 -> n1 = 0.
assert (H1 : forall n1 n2, n1 <= n2 -> n2 = 0 -> n1 = 0).
induction 1 as [| n2 H1 H2].
intros H1.
eapply H1.
intros H3.
discriminate.
intros n1 H2.
eapply H1.
eapply H2.
eapply eq_refl.
Qed.
答案 2 :(得分:0)
目标
A : B
_____
C
等同于后续
A : B |- C.
当在Coq中以交互方式证明某些内容时,您正在从下到上构建一个后续树。这是一个例子。
-------------------- apply H
P : Prop, H : P |- P
-------------------- intro H
P : Prop |- P -> P
-------------------------- intro P
|- forall P : Prop, P -> P
当然,当向后移动到证据时,你可能会做出错误的举动。
?
------------- ?
P : Prop |- P
-------------------- clear H
P : Prop, H : P |- P
-------------------- intro H
P : Prop |- P -> P
-------------------------- intro P
|- forall P : Prop, P -> P
您可以从互联网上了解更多有关后续计算的信息。