Coq 自然数对称性的证明
我是coq的初学者。我想证明自然数上布尔等式的对称性。我已经应用了归纳和析构函数命令,但它不起作用。请指导我证明这个定理Coq 自然数对称性的证明,coq,Coq,我是coq的初学者。我想证明自然数上布尔等式的对称性。我已经应用了归纳和析构函数命令,但它不起作用。请指导我证明这个定理 Fixpoint beqnat(n m : nat): bool:= match n with |0=> match m with |0=> true |S m' => false end |S n'=> match m with |0=>false |S
Fixpoint beqnat(n m : nat): bool:=
match n with
|0=> match m with
|0=> true
|S m' => false
end
|S n'=> match m with
|0=>false
|S m'=> beqnat n' m'
end
end.
Theorem beq sys:
forall(n m:nat),
beqnat n m = beqnat m n.
证明之后是对
n
的归纳,然后是对m
的销毁:
Theorem beq_sym: forall n m : nat, beqnat n m = beqnat m n.
Proof.
induction n as [|n' IH]; destruct m; auto.
apply IH.
Qed.
要了解正在发生的事情:
归纳法n
,它给出了n=0
和n=sn'
的子目标siml
,以查看第一个匹配/与如何减少
m
执行一些操作,以减少第二个匹配/with
。归纳是不必要的,因为您的beqnat
在n
上是结构递归的(键入Print beqnat
并查找{struct n}
以确认),而不是m
。所以,destructm
就足够了。再次使用siml
查看原因beqnat
的递归调用需要归纳假设证明之后是对
n
的归纳,然后是对m
的销毁:
Theorem beq_sym: forall n m : nat, beqnat n m = beqnat m n.
Proof.
induction n as [|n' IH]; destruct m; auto.
apply IH.
Qed.
要了解正在发生的事情:
归纳法n
,它给出了n=0
和n=sn'
的子目标siml
,以查看第一个匹配/与如何减少
m
执行一些操作,以减少第二个匹配/with
。归纳是不必要的,因为您的beqnat
在n
上是结构递归的(键入Print beqnat
并查找{struct n}
以确认),而不是m
。所以,destructm
就足够了。再次使用siml
查看原因beqnat
的递归调用需要归纳假设如果你能在上链接到一个可执行的例子,这会有帮助。使用标准库可行吗?或者你想证明这个事实作为练习吗?我想证明它作为练习,因为我已经学习了关于归纳和析构函数命令的一章,这是那一章的练习题。因此,我认为应该用同样的策略来证明。然后,请你添加到目前为止你所掌握的证据并解释你在哪里挣扎,来更新这个问题,好吗?这样我们可以更容易地帮助你。定理beqnatrefl:forall n:,beq_n=true。证明。介绍。诱导n[n IH]。简单。自反性。简单。自反性。Qed。定理等式beq-nat:对于所有n1-n2,n1n=n2->beq-nat n1-n2=true。证明。介绍n1 n2 H.重写H.重写beqnatrefl。自反性。Qed。如果你能链接到一个可执行的示例,这会很有帮助。使用标准库可行吗?或者你想证明这个事实作为练习吗?我想证明它作为练习,因为我已经学习了关于归纳和析构函数命令的一章,这是那一章的练习题。因此,我认为应该用同样的策略来证明。然后,请你添加到目前为止你所掌握的证据并解释你在哪里挣扎,来更新这个问题,好吗?这样我们可以更容易地帮助你。定理beqnatrefl:forall n:,beq_n=true。证明。介绍。诱导n[n IH]。简单。自反性。简单。自反性。Qed。定理等式beq-nat:对于所有n1-n2,n1n=n2->beq-nat n1-n2=true。证明。介绍n1 n2 H.重写H.重写beqnatrefl。自反性。Qed。