diff --git a/Util/ListComplements.v b/Util/ListComplements.v index 236ef41264f9d23942a68eb97aae0f4d492bf36c..ead544c0868c2c1743761bde2911034b6e472af2 100644 --- a/Util/ListComplements.v +++ b/Util/ListComplements.v @@ -52,6 +52,22 @@ intros x l Hin. induction l. - destruct Hin. subst. now left. right. auto. Qed. *) +Lemma hd_proof : forall l : list A, 0 < length l -> A. +Proof using . + intros * H. destruct l as [|a t]. 2: exact a. exfalso. + rewrite (proj2 (length_zero_iff_nil _)) in H by reflexivity. + inversion H. +Qed. + +Lemma all_eq : forall (l : list A) (a1 : A), In a1 l ->length l = 1 + -> forall a2 : A, In a2 l -> a2 = a1. +Proof using . + intros * Hi1 H * Hi2. destruct l as [|h t]. + rewrite (proj2 (length_zero_iff_nil _)) in H by reflexivity. discriminate H. + destruct t as [|h1 t]. cbn in Hi1, Hi2. destruct Hi1, Hi2. subst. reflexivity. + 1-3: contradiction. exfalso. eapply Nat.neq_succ_0, eq_add_S, H. +Qed. + Lemma InA_Leibniz : forall (x : A) l, InA Logic.eq x l <-> In x l. Proof using . intros x l. split; intro Hl; induction l; inversion_clear Hl;