Coq中其他基本情况的诱导

Coq中其他基本情况的诱导,coq,proof,coq-tactic,Coq,Proof,Coq Tactic,我试图证明Coq中的鸽子洞问题。因此,我想证明以下引理: Lemma pigeon_hole : forall m n, m < n -> forall f, (forall i, i < n -> f i < m) -> exists i, i < n /\ exists j, j < n /\ i <> j /\ f i = f j. 但我怀疑这是否与此相关 我认为这可以用归纳法来完成 如果我尝试对n进行归纳,我得到n=0的基本情

我试图证明Coq中的鸽子洞问题。因此,我想证明以下引理:

Lemma pigeon_hole :
forall m n, m < n ->
forall f, (forall i, i < n -> f i < m) ->
exists i, i < n /\
exists j, j < n /\ i <> j /\ f i = f j.
但我怀疑这是否与此相关

我认为这可以用归纳法来完成

如果我尝试对n进行归纳,我得到n=0的基本情况。这里我先做“介绍”,然后做“归纳法”


但我想要基本情况n=2。Coq中是否存在这样的可能性?或者我是否走错了方向?

您链接到的问题的答案包含以下即时评论:

n=1的情况是不可能的

这对人类数学家来说已经足够好了,但对Coq来说就不行了。你可以告诉Coq,你只想证明n>=2的情况,把它加到引理的前提中:

Lemma pigeon_hole :
  forall m n,
  n >= 2 ->    (* added this *)
  m < n ->
  forall f,
  (forall i, i < n -> f i < m) ->
  exists i, i < n /\
  exists j, j < n /\ i <> j /\ f i = f j.
我们对n=0和n>=0进行了区分(即,对于某些
n'
)。我们在以下方面处于验证状态:

H : 0 >= 2
这个错误的假设正是
omega
可以为你释放的东西:

  - omega.
在另一种情况下,我们知道n>=1。这接近于n>=2,但仍然不够,因此我们可以再次对n进行区分,以消除n=1的情况:

  - destruct n.
    + omega.
    +
证明状态现在是:

1 subgoal
m, n : nat
H : S (S n) >= 2
H0 : m < S (S n)
f : nat -> nat
H1 : forall i : nat, i < S (S n) -> f i < m
______________________________________(1/1)
exists i : nat,
  i < S (S n) /\ (exists j : nat, j < S (S n) /\ i <> j /\ f i = f j)
1子目标
m、 n:纳特
H:S(sn)>=2
H0:mnat
H1:对于所有i:nat,ifi
因此,
n
的所有原始用法都已被
S(sn)
所取代,即>=2的值


您应该能够使用
inclution n

从这里继续,基本值是
n=0
,但您可以摆脱它。然后你有一个归纳的例子,在这里,你用
sn
在每一个地方看公式。如果你做了
destruct n as[|n]
,那么有两个案例,第一个案例是针对
1
,并且可能会再次摆脱这个案例,然后如果再次做
destruct n as[|n]
,你将不得不处理案例
2
。因此,这将发挥你的基本情况的作用。现在,剩下的情况将是关于相同的公式,但是初始的
n
S(sn))
替换,归纳假设是关于
S(sn)
的公式已经成立。这将为您提供一个从基本情况开始的归纳证明
n=2

但是对于
n=0
n=1
来说,这种说法仍然是正确的,你需要从侧面证明这些情况

第二种可能性(适用于较高常数的基本情况) 或者,你可以通过证明n为0是不可能的来证明基本情况,然后当你观察归纳情况时,你可以通过

destruct (le_lt_dec 2 n).
这将为您提供两种情况:一种是
2
1 subgoal
m, n : nat
H : S (S n) >= 2
H0 : m < S (S n)
f : nat -> nat
H1 : forall i : nat, i < S (S n) -> f i < m
______________________________________(1/1)
exists i : nat,
  i < S (S n) /\ (exists j : nat, j < S (S n) /\ i <> j /\ f i = f j)
destruct (le_lt_dec 2 n).