“确切地说”是什么意思;10“;在Coq?

“确切地说”是什么意思;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:您可能可以使用反射证明技术来消除这些琐碎的大型证明。本章解释了您希望如何以及为什么这

关于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:您可能可以使用反射证明技术来消除这些琐碎的大型证明。本章解释了您希望如何以及为什么这样做:


下面是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.