[英]Proof about less than
我正在尝试证明有关Coq中less_than
一些定理。 我正在使用以下归纳定义:
Inductive less_than : nat->nat->Prop :=
| lt1 : forall a, less_than O (S a)
| lt2 : forall a b, less_than a b -> less_than a (S b)
| lt3 : forall a b, less_than a b -> less_than (S a) (S b).
而且我总是需要显示lt3的倒数,
Lemma inv_lt3, forall a b, less_than (S a) (S b) -> less_than a b.
Proof.
???
我被困住了,如果有人对如何进行操作有任何提示,将不胜感激。
(我的less_than
归纳定义有less_than
吗?)
谢谢!
首先,在第二个构造函数是多余的意义上,您对less_than
的定义有点不幸。 您应该考虑切换到更简单的方法:
Inductive less_than : nat -> nat -> Prop :=
| ltO : forall a, less_than O (S a)
| ltS : forall a b, less_than a b -> less_than (S a) (S b)
.
然后,该反转将与coq的反转匹配,从而使证明变得微不足道:
Lemma inv_ltS: forall a b, less_than (S a) (S b) -> less_than a b.
Proof. now inversion 1. Qed.
第二个子句是多余的,因为对于每对(a, b)
st。 你想要的证据less_than ab
,您可以随时申请lt3
a
时间,然后应用lt1
。 实际上,您的lt2
是其他两个构造函数的结果:
Ltac inv H := inversion H; subst; clear H; try tauto.
(* there is probably an easier way to do that? *)
Lemma lt2 : forall a b, less_than a b -> less_than a (S b).
Proof.
intros a b. revert a. induction b; intros.
inv H.
inv H.
apply ltO.
apply ltS. now apply IHb.
Qed.
现在,如果您真的希望保留自己的特定定义,则可以尝试以下方法:
Lemma inv_lt: forall a b, less_than (S a) (S b) -> less_than a b.
Proof.
induction b; intros.
inv H. inv H2.
inv H. apply lt2. now apply IHb.
Qed.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.