From 7f6ad26a3d47de3bd4ad6f814b087b73f2ec2b18 Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Tue, 31 May 2016 01:50:14 +0200
Subject: [PATCH] Pvs and big_op commute.

---
 program_logic/pviewshifts.v | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/program_logic/pviewshifts.v b/program_logic/pviewshifts.v
index 769509e23..516e18356 100644
--- a/program_logic/pviewshifts.v
+++ b/program_logic/pviewshifts.v
@@ -1,4 +1,5 @@
 From iris.prelude Require Export co_pset.
+From iris.algebra Require Export upred_big_op.
 From iris.program_logic Require Export model.
 From iris.program_logic Require Import ownership wsat.
 Local Hint Extern 10 (_ ≤ _) => omega.
@@ -163,6 +164,20 @@ Lemma pvs_wand_r E1 E2 P Q : ((|={E1,E2}=> P) ★ (P -★ Q)) ⊢ (|={E1,E2}=> Q
 Proof. by rewrite pvs_frame_r wand_elim_r. Qed.
 Lemma pvs_sep E P Q : ((|={E}=> P) ★ (|={E}=> Q)) ⊢ (|={E}=> P ★ Q).
 Proof. rewrite pvs_frame_r pvs_frame_l pvs_trans //. set_solver. Qed.
+Lemma pvs_big_sepM `{Countable K} {A} E (Φ : K → A → iProp Λ Σ) (m : gmap K A) :
+  ([★ map] k↦x ∈ m, |={E}=> Φ k x) ⊢ (|={E}=> [★ map] k↦x ∈ m, Φ k x).
+Proof.
+  rewrite /uPred_big_sepM.
+  induction (map_to_list m) as [|[i x] l IH]; csimpl; auto using pvs_intro.
+  by rewrite IH pvs_sep.
+Qed.
+Lemma pvs_big_sepS `{Countable A} E (Φ : A → iProp Λ Σ) X :
+  ([★ set] x ∈ X, |={E}=> Φ x) ⊢ (|={E}=> [★ set] x ∈ X, Φ x).
+Proof.
+  rewrite /uPred_big_sepS.
+  induction (elements X) as [|x l IH]; csimpl; csimpl; auto using pvs_intro.
+  by rewrite IH pvs_sep.
+Qed.
 
 Lemma pvs_mask_frame' E1 E1' E2 E2' P :
   E1' ⊆ E1 → E2' ⊆ E2 → E1 ∖ E1' = E2 ∖ E2' →
-- 
GitLab