From 6d89cb87f6824bb4d71f5a3349e7abfd842b9786 Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Mon, 12 Jun 2017 14:24:19 +0200
Subject: [PATCH] Lemmas for big_ops and unit.

---
 theories/algebra/big_op.v | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/theories/algebra/big_op.v b/theories/algebra/big_op.v
index 26e043615..fcad39f76 100644
--- a/theories/algebra/big_op.v
+++ b/theories/algebra/big_op.v
@@ -90,6 +90,9 @@ Section list.
     by rewrite IH assoc.
   Qed.
 
+  Lemma big_opL_unit l : ([^o list] k↦y ∈ l, monoid_unit) ≡ (monoid_unit : M).
+  Proof. induction l; rewrite /= ?left_id //. Qed.
+
   Lemma big_opL_forall R f g l :
     Reflexive R →
     Proper (R ==> R ==> R) o →
@@ -204,6 +207,9 @@ Section gmap.
     by rewrite big_opM_empty right_id.
   Qed.
 
+  Lemma big_opM_unit m : ([^o map] k↦y ∈ m, monoid_unit) ≡ (monoid_unit : M).
+  Proof. induction m using map_ind; rewrite /= ?big_opM_insert ?left_id //. Qed.
+
   Lemma big_opM_fmap {B} (h : A → B) (f : K → B → M) m :
     ([^o map] k↦y ∈ h <$> m, f k y) ≡ ([^o map] k↦y ∈ m, f k (h y)).
   Proof.
@@ -310,6 +316,11 @@ Section gset.
   Lemma big_opS_singleton f x : ([^o set] y ∈ {[ x ]}, f y) ≡ f x.
   Proof. intros. by rewrite /big_opS elements_singleton /= right_id. Qed.
 
+  Lemma big_opS_unit X : ([^o set] y ∈ X, monoid_unit) ≡ (monoid_unit : M).
+  Proof.
+    induction X using collection_ind_L; rewrite /= ?big_opS_insert ?left_id //.
+  Qed.
+
   Lemma big_opS_opS f g X :
     ([^o set] y ∈ X, f y `o` g y) ≡ ([^o set] y ∈ X, f y) `o` ([^o set] y ∈ X, g y).
   Proof. by rewrite /big_opS -big_opL_opL. Qed.
@@ -372,6 +383,12 @@ Section gmultiset.
     by rewrite -gmultiset_union_difference'.
   Qed.
 
+  Lemma big_opMS_unit X : ([^o mset] y ∈ X, monoid_unit) ≡ (monoid_unit : M).
+  Proof.
+    induction X using gmultiset_ind;
+      rewrite /= ?big_opMS_union ?big_opMS_singleton ?left_id //.
+  Qed.
+
   Lemma big_opMS_opMS f g X :
     ([^o mset] y ∈ X, f y `o` g y) ≡ ([^o mset] y ∈ X, f y) `o` ([^o mset] y ∈ X, g y).
   Proof. by rewrite /big_opMS -big_opL_opL. Qed.
-- 
GitLab