### More set_Forall and set_Exists stuff for finite sets.

parent f072ab70
 ... @@ -249,18 +249,38 @@ Section filter. ... @@ -249,18 +249,38 @@ Section filter. End filter. End filter. (** * Decision procedures *) (** * Decision procedures *) Global Instance set_Forall_dec `(P : A → Prop) Lemma set_Forall_elements P X : set_Forall P X ↔ Forall P (elements X). `{∀ x, Decision (P x)} X : Decision (set_Forall P X) | 100. Proof. rewrite Forall_forall. by setoid_rewrite elem_of_elements. Qed. Lemma set_Exists_elements P X : set_Exists P X ↔ Exists P (elements X). Proof. rewrite Exists_exists. by setoid_rewrite elem_of_elements. Qed. Lemma set_Forall_Exists_dec {P Q : A → Prop} (dec : ∀ x, {P x} + {Q x}) X : {set_Forall P X} + {set_Exists Q X}. Proof. refine (cast_if (Forall_Exists_dec dec (elements X))); [by apply set_Forall_elements|by apply set_Exists_elements]. Defined. Lemma not_set_Forall_Exists P `{dec : ∀ x, Decision (P x)} X : ¬set_Forall P X → set_Exists (not ∘ P) X. Proof. intro. by destruct (set_Forall_Exists_dec dec X). Qed. Lemma not_set_Exists_Forall P `{dec : ∀ x, Decision (P x)} X : ¬set_Exists P X → set_Forall (not ∘ P) X. Proof. by destruct (@set_Forall_Exists_dec (not ∘ P) _ (λ x, swap_if (decide (P x))) X). Qed. Global Instance set_Forall_dec (P : A → Prop) `{∀ x, Decision (P x)} X : Decision (set_Forall P X) | 100. Proof. Proof. refine (cast_if (decide (Forall P (elements X)))); refine (cast_if (decide (Forall P (elements X)))); abstract (unfold set_Forall; setoid_rewrite <-elem_of_elements; by rewrite set_Forall_elements. by rewrite <-Forall_forall). Defined. Defined. Global Instance set_Exists_dec `(P : A → Prop) `{∀ x, Decision (P x)} X : Global Instance set_Exists_dec `(P : A → Prop) `{∀ x, Decision (P x)} X : Decision (set_Exists P X) | 100. Decision (set_Exists P X) | 100. Proof. Proof. refine (cast_if (decide (Exists P (elements X)))); refine (cast_if (decide (Exists P (elements X)))); abstract (unfold set_Exists; setoid_rewrite <-elem_of_elements; by rewrite set_Exists_elements. by rewrite <-Exists_exists). Defined. Defined. End fin_collection. End fin_collection.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!