a和x2B;b=0->;Coq中的a=0和b=0

a和x2B;b=0->;Coq中的a=0和b=0,coq,Coq,我想证明以下几点: 1 subgoals a : nat b : nat H0 : a + b = 0 ______________________________________(1/1) a = 0 /\ b = 0 这看起来很简单,甚至很琐碎,但我不知道怎么做。我尝试了归纳法,案例,但没有成功。有什么想法吗 感谢您的帮助。您可以通过对n1的案例分析来证明所有n1 n2、n1+n2=0->n1=0的 如果n1是0,则结论是0=0,您可以证明这一点,因为=是自反的 如果存在一个n3,使得n1

我想证明以下几点:

1 subgoals
a : nat
b : nat
H0 : a + b = 0
______________________________________(1/1)
a = 0 /\ b = 0
这看起来很简单,甚至很琐碎,但我不知道怎么做。我尝试了
归纳法
案例
,但没有成功。有什么想法吗


感谢您的帮助。

您可以通过对
n1
的案例分析来证明所有n1 n2、n1+n2=0->n1=0的

如果
n1
0
,则结论是
0=0
,您可以证明这一点,因为
=
是自反的

如果存在一个
n3
,使得
n1=sn3
,那么假设
sn3+n2=0
减少到
s(n3+n2)=0
,并暗示
False
,因为
0
s
是不同的构造器。
False
意味着任何事情,所以您已经完成了


通过使用前面的事实和加法的交换性,可以证明所有n1-n2,n1+n2=0->n2=0的
。然后你就可以证明所有的n1-n2,n1+n2=0->n1=0/\n2=0

Check eq_refl.
Check O_S.
Check False_rect.
Conjecture plus_comm : forall n1 n2, n1 + n2 = n2 + n1.
Check conj.
不过,最好尽可能地自动化证明

Require Import Coq.Setoids.Setoid.

Set Firstorder Depth 0.

Create HintDb Hints.

Ltac simplify := firstorder || autorewrite with Hints in *.

Conjecture C1 : forall t1 (x1 : t1), x1 = x1 <-> True.
Conjecture C2 : forall n1, S n1 = 0 <-> False.
Conjecture C3 : forall n1, 0 = S n1 <-> False.
Conjecture C4 : forall n1 n2, S n1 = S n2 <-> n1 = n2.
Conjecture C5 : forall n1, 0 + n1 = n1.
Conjecture C6 : forall n1 n2, S n1 + n2 = S (n1 + n2).

Hint Rewrite C1 C2 C3 C4 C5 C6 : Hints.

Theorem T1 : forall n1 n2, n1 + n2 = 0 <-> n1 = 0 /\ n2 = 0.
Proof. destruct n1; repeat simplify. Qed.

Hint Rewrite T1 : Hints.
Require Import Coq.Arith.Arith.

Check plus_is_O.