From 7a5e6ea4247b98db56f961fca1a9eff032030f81 Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Wed, 23 Nov 2016 10:08:16 +0100
Subject: [PATCH] Make some arguments explicit that could not be infered.

---
 theories/fin_collections.v | 10 +++++-----
 theories/list.v            | 12 +++++-------
 2 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/theories/fin_collections.v b/theories/fin_collections.v
index 9205563..ed094d3 100644
--- a/theories/fin_collections.v
+++ b/theories/fin_collections.v
@@ -254,21 +254,21 @@ 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 :
+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)));
+ refine (cast_if (Forall_Exists_dec P Q 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.
+Proof. intro. by destruct (set_Forall_Exists_dec P (not ∘ P) 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).
+  by destruct (set_Forall_Exists_dec
+    (not ∘ P) P (λ x, swap_if (decide (P x))) X).
 Qed.
 
 Global Instance set_Forall_dec (P : A → Prop) `{∀ x, Decision (P x)} X :
diff --git a/theories/list.v b/theories/list.v
index 7500abe..100ab30 100644
--- a/theories/list.v
+++ b/theories/list.v
@@ -2051,7 +2051,7 @@ Lemma list_subseteq_nil l : [] ⊆ l.
 Proof. intros x. by rewrite elem_of_nil. Qed.
 
 (** ** Properties of the [Forall] and [Exists] predicate *)
-Lemma Forall_Exists_dec {P Q : A → Prop} (dec : ∀ x, {P x} + {Q x}) :
+Lemma Forall_Exists_dec (P Q : A → Prop) (dec : ∀ x, {P x} + {Q x}) :
   ∀ l, {Forall P l} + {Exists Q l}.
 Proof.
  refine (
@@ -2232,21 +2232,19 @@ Section Forall_Exists.
 
   Context {dec : ∀ x, Decision (P x)}.
   Lemma not_Forall_Exists l : ¬Forall P l → Exists (not ∘ P) l.
-  Proof. intro. destruct (Forall_Exists_dec dec l); intuition. Qed.
+  Proof. intro. by destruct (Forall_Exists_dec P (not ∘ P) dec l). Qed.
   Lemma not_Exists_Forall l : ¬Exists P l → Forall (not ∘ P) l.
   Proof.
-    (* TODO: Coq 8.6 needs type annotation here, Coq 8.5 did not.
-       Should we report this? *)
-    by destruct (@Forall_Exists_dec (not ∘ P) _
+    by destruct (Forall_Exists_dec (not ∘ P) P
         (λ x : A, swap_if (decide (P x))) l).
   Qed.
   Global Instance Forall_dec l : Decision (Forall P l) :=
-    match Forall_Exists_dec dec l with
+    match Forall_Exists_dec P (not ∘ P) dec l with
     | left H => left H
     | right H => right (Exists_not_Forall _ H)
     end.
   Global Instance Exists_dec l : Decision (Exists P l) :=
-    match Forall_Exists_dec (λ x, swap_if (decide (P x))) l with
+    match Forall_Exists_dec (not ∘ P) P (λ x, swap_if (decide (P x))) l with
     | left H => right (Forall_not_Exists _ H)
     | right H => left H
     end.
-- 
GitLab