diff --git a/theories/list.v b/theories/list.v index ab606e0012cd10923bd9e138224f51d0faa91929..c83aa15d388046acc6c26d4425cb9ddda9eb22ec 100644 --- a/theories/list.v +++ b/theories/list.v @@ -2245,6 +2245,9 @@ Proof. split; firstorder. Qed. Lemma list_subseteq_nil l : [] ⊆ l. Proof. intros x. by rewrite elem_of_nil. Qed. +Global Instance list_subseteq_Permutation: Proper ((≡ₚ) ==> (≡ₚ) ==> (↔)) (⊆@{list A}) . +Proof. intros l1 l2 Hl k1 k2 Hk. apply forall_proper; intros x. by rewrite Hl, Hk. Qed. + (** ** Properties of the [Forall] and [Exists] predicate *) Lemma Forall_Exists_dec (P Q : A → Prop) (dec : ∀ x, {P x} + {Q x}) : ∀ l, {Forall P l} + {Exists Q l}. @@ -2400,6 +2403,10 @@ Section Forall_Exists. intros ?? l. induction l using rev_ind; auto. rewrite Forall_app, Forall_singleton; intros [??]; auto. Qed. + + Global Instance Forall_Permutation: Proper ((≡ₚ) ==> (↔)) (Forall P). + Proof. intros l1 l2 Hl. rewrite !Forall_forall. by setoid_rewrite Hl. Qed. + Lemma Exists_exists l : Exists P l ↔ ∃ x, x ∈ l ∧ P x. Proof. split. @@ -2419,6 +2426,9 @@ Section Forall_Exists. Exists P l → (∀ x, P x → Q x) → Exists Q l. Proof. intros H ?. induction H; auto. Defined. + Global Instance Exists_Permutation: Proper ((≡ₚ) ==> (↔)) (Exists P). + Proof. intros l1 l2 Hl. rewrite !Exists_exists. by setoid_rewrite Hl. Qed. + Lemma Exists_not_Forall l : Exists (not ∘ P) l → ¬Forall P l. Proof. induction 1; inversion_clear 1; contradiction. Qed. Lemma Forall_not_Exists l : Forall (not ∘ P) l → ¬Exists P l.