如何将 Coq 中的 `forall i: nat i < S k -> H` 分解为 `i < k and i=k`?

How can I break `forall i: nat i < S k -> H` in Coq into `i < k and i=k`?

我要证明:

i < Datatypes.length (l0 ++ f :: nil) -> H

我对 i < Datatypes.length l0i = Datatypes.length l0 有一个单独的假设。

Require Import Arith.

SearchAbout lt le.

给我(除其他外):

le_lt_or_eq: forall n m : nat, n <= m -> n < m \/ n = m

现在。你有 i < S k 相当于 S i <= S k 而你想要 i <= k。所以你需要在每边剥离 S

SearchAbout le S.

给我(除其他外):

le_S_n: forall n m : nat, S n <= S m -> n <= m

通过结合两者,您应该能够证明您的目标:

Goal forall i k, i < S k -> i < k \/ i = k.
intros i k iltSk.
 apply le_lt_or_eq.
 apply le_S_n.
 assumption.
Qed.