“确切地说”是什么意思;10“;在Coq?
关于Coq的一个非常基本的问题(使用Init库):术语“确切地说”是什么意思;10“;在Coq?,coq,Coq,关于Coq的一个非常基本的问题(使用Init库):术语10属于nat类型, 类型nat是归纳式定义的: Inductive nat : Set := | O : nat | S : nat -> nat. Q1.但是“10”是S(…S(0)…)的“捷径”吗? Q2.是否有以下引理的最短(正式)证明?(不使用欧米茄) 引理gg:3A1。对 A2。从le(Prop:= le_n:nQ1:是的 问题2:您可能可以使用反射证明技术来消除这些琐碎的大型证明。本章解释了您希望如何以及为什么这
10
属于nat
类型,
类型nat
是归纳式定义的:
Inductive nat : Set :=
| O : nat
| S : nat -> nat.
Q1.但是“10”是S(…S(0)…)的“捷径”吗?
Q2.是否有以下引理的最短(正式)证明?(不使用欧米茄)
引理gg:3A1。对
A2。从le
(Prop:=
le_n:nQ1:是的
问题2:您可能可以使用反射证明技术来消除这些琐碎的大型证明。本章解释了您希望如何以及为什么这样做:
下面是Ptival回答的一个例子
Require Import Coq.Arith.Arith.
Check @eq_refl.
Check leb_complete.
Goal 3 <= 10. Proof. apply leb_complete. apply eq_refl. Qed.
Goal 30 <= 100. Proof. apply leb_complete. apply eq_refl. Qed.
Goal 300 <= 1000. Proof. apply leb_complete. apply eq_refl. Qed.
需要导入Coq.Arith.Arith。
检查@eq\u refl。
检查leb_是否完成。
目标3:常数的证明可以很长,但通常证明都是关于变量的,所以它们比较短。谢谢你的例子。我不知道为什么我的答案上建议的编辑没有通过,这是非常有帮助的。
Inductive le (n : nat) : nat -> Prop :=
le_n : n <= n | le_S : forall m : nat, n <= m -> n <= S m
Lemma gg : 3 <= 10.
Proof.
do 7 (apply le_S).
apply le_n.
Qed.
Lemma gg' : 3 <= 10.
Proof. repeat constructor. Qed.
Lemma le_s : forall n m, n <= m -> S n <= S m.
Proof.
intros. induction H. constructor.
constructor. apply IHle.
Qed.
Lemma gg'' : 3 <= 10.
Proof.
pose proof (le_n 0).
do 3 (apply le_s in H).
do 7 (apply le_S in H).
apply H.
Qed.
Require Import Coq.Arith.Arith.
Check @eq_refl.
Check leb_complete.
Goal 3 <= 10. Proof. apply leb_complete. apply eq_refl. Qed.
Goal 30 <= 100. Proof. apply leb_complete. apply eq_refl. Qed.
Goal 300 <= 1000. Proof. apply leb_complete. apply eq_refl. Qed.