From 4daa00cbd7eed606f657f3223dd74f6c8dec06c1 Mon Sep 17 00:00:00 2001 From: Robbert Krebbers <mail@robbertkrebbers.nl> Date: Sun, 27 Nov 2016 20:34:11 +0100 Subject: [PATCH] Big ops distribute over and. --- base_logic/big_op.v | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/base_logic/big_op.v b/base_logic/big_op.v index adb76785a..d09749fd9 100644 --- a/base_logic/big_op.v +++ b/base_logic/big_op.v @@ -246,6 +246,11 @@ Section list. ⊣⊢ ([∗ list] k↦x ∈ l, Φ k x) ∗ ([∗ list] k↦x ∈ l, Ψ k x). Proof. by rewrite big_opL_opL. Qed. + Lemma big_sepL_and Φ Ψ l : + ([∗ list] k↦x ∈ l, Φ k x ∧ Ψ k x) + ⊢ ([∗ list] k↦x ∈ l, Φ k x) ∧ ([∗ list] k↦x ∈ l, Ψ k x). + Proof. auto using big_sepL_mono with I. Qed. + Lemma big_sepL_later Φ l : ▷ ([∗ list] k↦x ∈ l, Φ k x) ⊣⊢ ([∗ list] k↦x ∈ l, ▷ Φ k x). Proof. apply (big_opL_commute _). Qed. @@ -378,10 +383,15 @@ Section gmap. Proof. apply: big_opM_fn_insert'. Qed. Lemma big_sepM_sepM Φ Ψ m : - ([∗ map] k↦x ∈ m, Φ k x ∗ Ψ k x) + ([∗ map] k↦x ∈ m, Φ k x ∗ Ψ k x) ⊣⊢ ([∗ map] k↦x ∈ m, Φ k x) ∗ ([∗ map] k↦x ∈ m, Ψ k x). Proof. apply: big_opM_opM. Qed. + Lemma big_sepM_and Φ Ψ m : + ([∗ map] k↦x ∈ m, Φ k x ∧ Ψ k x) + ⊢ ([∗ map] k↦x ∈ m, Φ k x) ∧ ([∗ map] k↦x ∈ m, Ψ k x). + Proof. auto using big_sepM_mono with I. Qed. + Lemma big_sepM_later Φ m : ▷ ([∗ map] k↦x ∈ m, Φ k x) ⊣⊢ ([∗ map] k↦x ∈ m, ▷ Φ k x). Proof. apply (big_opM_commute _). Qed. @@ -520,6 +530,10 @@ Section gset. ([∗ set] y ∈ X, Φ y ∗ Ψ y) ⊣⊢ ([∗ set] y ∈ X, Φ y) ∗ ([∗ set] y ∈ X, Ψ y). Proof. apply: big_opS_opS. Qed. + Lemma big_sepS_and Φ Ψ X : + ([∗ set] y ∈ X, Φ y ∧ Ψ y) ⊢ ([∗ set] y ∈ X, Φ y) ∧ ([∗ set] y ∈ X, Ψ y). + Proof. auto using big_sepS_mono with I. Qed. + Lemma big_sepS_later Φ X : ▷ ([∗ set] y ∈ X, Φ y) ⊣⊢ ([∗ set] y ∈ X, ▷ Φ y). Proof. apply (big_opS_commute _). Qed. @@ -622,6 +636,10 @@ Section gmultiset. ([∗ mset] y ∈ X, Φ y ∗ Ψ y) ⊣⊢ ([∗ mset] y ∈ X, Φ y) ∗ ([∗ mset] y ∈ X, Ψ y). Proof. apply: big_opMS_opMS. Qed. + Lemma big_sepMS_and Φ Ψ X : + ([∗ mset] y ∈ X, Φ y ∧ Ψ y) ⊢ ([∗ mset] y ∈ X, Φ y) ∧ ([∗ mset] y ∈ X, Ψ y). + Proof. auto using big_sepMS_mono with I. Qed. + Lemma big_sepMS_later Φ X : ▷ ([∗ mset] y ∈ X, Φ y) ⊣⊢ ([∗ mset] y ∈ X, ▷ Φ y). Proof. apply (big_opMS_commute _). Qed. -- GitLab