如何将 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 l0
和 i = 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.
我要证明:
i < Datatypes.length (l0 ++ f :: nil) -> H
我对 i < Datatypes.length l0
和 i = 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.