Library zoo.iris.bi.big_op.big_sepL_seq
From zoo Require Import
prelude.
From zoo.common Require Import
list.
From zoo.iris.bi Require Export
big_op.big_sepL2.
From zoo.iris Require Import
diaframe.
From zoo Require Import
options.
Section bi.
Context {PROP : bi}.
Section big_sepL_seq.
Context {A : Type}.
Implicit Types l : list A.
Implicit Types Φ : nat → PROP.
Lemma big_sepL_seq_intro Φ i n :
□ (
∀ k,
⌜i ≤ k < i + n⌝ -∗
Φ k
) ⊢
[∗ list] k ∈ seq i n, Φ k.
Lemma big_sepL_seq_impl Φ1 Φ2 i n :
([∗ list] k ∈ seq i n, Φ1 k) -∗
□ (
∀ k,
⌜i ≤ k < i + n⌝ -∗
Φ1 k -∗
Φ2 k
) -∗
[∗ list] k ∈ seq i n, Φ2 k.
Lemma big_sepL_seq_cons Φ i n :
([∗ list] k ∈ seq i (S n), Φ k) ⊣⊢
Φ i ∗
([∗ list] k ∈ seq (S i) n, Φ k).
Lemma big_sepL_seq_cons_1 Φ i n :
([∗ list] k ∈ seq i (S n), Φ k) ⊢
Φ i ∗
([∗ list] k ∈ seq (S i) n, Φ k).
Lemma big_sepL_seq_cons_2 Φ i n :
([∗ list] k ∈ seq (S i) n, Φ k) -∗
Φ i -∗
[∗ list] k ∈ seq i (S n), Φ k.
Lemma big_sepL_seq_snoc Φ i n :
([∗ list] k ∈ seq i (S n), Φ k) ⊣⊢
([∗ list] k ∈ seq i n, Φ k) ∗
Φ (i + n).
Lemma big_sepL_seq_snoc_1 Φ i n :
([∗ list] k ∈ seq i (S n), Φ k) ⊢
([∗ list] k ∈ seq i n, Φ k) ∗
Φ (i + n).
Lemma big_sepL_seq_snoc_2 Φ i n :
([∗ list] k ∈ seq i n, Φ k) -∗
Φ (i + n) -∗
[∗ list] k ∈ seq i (S n), Φ k.
Lemma big_sepL_seq_app Φ i n1 n2 :
([∗ list] k ∈ seq i (n1 + n2), Φ k) ⊣⊢
([∗ list] k ∈ seq i n1, Φ k) ∗
([∗ list] k ∈ seq (i + n1) n2, Φ k).
Lemma big_sepL_seq_app_1 {Φ i n} n1 n2 :
n = n1 + n2 →
([∗ list] k ∈ seq i n, Φ k) ⊢
([∗ list] k ∈ seq i n1, Φ k) ∗
([∗ list] k ∈ seq (i + n1) n2, Φ k).
Lemma big_sepL_seq_app_2 Φ i1 n1 i2 n2 :
i2 = i1 + n1 →
([∗ list] k ∈ seq i1 n1, Φ k) -∗
([∗ list] k ∈ seq i2 n2, Φ k) -∗
[∗ list] k ∈ seq i1 (n1 + n2), Φ k.
Lemma big_sepL_seq_lookup_acc {Φ i n} j :
j < n →
([∗ list] k ∈ seq i n, Φ k) ⊢
Φ (i + j) ∗
( Φ (i + j) -∗
[∗ list] k ∈ seq i n, Φ k
).
Lemma big_sepL_seq_lookup_acc' {Φ i n} j :
i ≤ j < i + n →
([∗ list] k ∈ seq i n, Φ k) ⊢
Φ j ∗
( Φ j -∗
[∗ list] k ∈ seq i n, Φ k
).
Lemma big_sepL_seq_lookup `{!BiAffine PROP} {Φ i n} j :
j < n →
([∗ list] k ∈ seq i n, Φ k) ⊢
Φ (i + j).
Lemma big_sepL_seq_lookup' `{!BiAffine PROP} {Φ i n} j :
i ≤ j < i + n →
([∗ list] k ∈ seq i n, Φ k) ⊢
Φ j.
Lemma big_sepL_seq_index `{!BiAffine PROP} {Φ} l i n :
length l = n →
([∗ list] k ∈ seq i n, Φ k) ⊣⊢
[∗ list] k ↦ _ ∈ l, Φ (i + k).
Lemma big_sepL_seq_index_1 `{!BiAffine PROP} {Φ} l i n :
length l = n →
([∗ list] k ∈ seq i n, Φ k) ⊢
[∗ list] k ↦ _ ∈ l, Φ (i + k).
Lemma big_sepL_seq_index_2 `{!BiAffine PROP} {Φ l} n :
length l = n →
([∗ list] k ↦ _ ∈ l, Φ k) ⊢
[∗ list] k ∈ seq 0 n, Φ k.
Lemma big_sepL_seq_shift `{!BiAffine PROP} {Φ} j i n :
([∗ list] k ∈ seq (i + j) n, Φ k) ⊣⊢
[∗ list] k ∈ seq i n, Φ (k + j).
Lemma big_sepL_seq_shift' `{!BiAffine PROP} {Φ} j i n :
([∗ list] k ∈ seq (i + j) n, Φ (k - j)) ⊣⊢
[∗ list] k ∈ seq i n, Φ k.
Lemma big_sepL_seq_shift_1 `{!BiAffine PROP} {Φ} j i n :
([∗ list] k ∈ seq (i + j) n, Φ k) ⊢
[∗ list] k ∈ seq i n, Φ (k + j).
Lemma big_sepL_seq_shift_2 `{!BiAffine PROP} {Φ} j i n :
([∗ list] k ∈ seq i n, Φ (k + j)) ⊢
[∗ list] k ∈ seq (i + j) n, Φ k.
Lemma big_sepL_seq_shift_2' `{!BiAffine PROP} {Φ} j i n :
([∗ list] k ∈ seq i n, Φ k) ⊢
[∗ list] k ∈ seq (i + j) n, Φ (k - j).
Lemma big_sepL_seq_shift1 `{!BiAffine PROP} Φ i n :
([∗ list] k ∈ seq (S i) n, Φ k) ⊣⊢
[∗ list] k ∈ seq i n, Φ (S k).
Lemma big_sepL_seq_shift1_1 `{!BiAffine PROP} Φ i n :
([∗ list] k ∈ seq (S i) n, Φ k) ⊢
[∗ list] k ∈ seq i n, Φ (S k).
Lemma big_sepL_seq_shift1_2 `{!BiAffine PROP} Φ i n :
([∗ list] k ∈ seq i n, Φ (S k)) ⊢
[∗ list] k ∈ seq (S i) n, Φ k.
Lemma big_sepL_seq_exists `{!BiAffine PROP} `(Φ : nat → A → PROP) i n :
([∗ list] k ∈ seq i n, ∃ x, Φ k x) ⊢
∃ xs,
⌜length xs = n⌝ ∗
[∗ list] k ↦ x ∈ xs, Φ (i + k) x.
Lemma big_sepL_seq_to_seqZ `{!BiAffine PROP} Φ i n :
([∗ list] k ∈ seq i n, Φ k) ⊢
[∗ list] k ∈ seqZ ⁺i ⁺n, Φ ₊k.
Lemma big_sepL_seq_to_seqZ' `{!BiAffine PROP} Φ i n :
(0 ≤ i)%Z →
(0 ≤ n)%Z →
([∗ list] k ∈ seq ₊i ₊n, Φ k) ⊢
[∗ list] k ∈ seqZ i n, Φ ₊k.
End big_sepL_seq.
End bi.
prelude.
From zoo.common Require Import
list.
From zoo.iris.bi Require Export
big_op.big_sepL2.
From zoo.iris Require Import
diaframe.
From zoo Require Import
options.
Section bi.
Context {PROP : bi}.
Section big_sepL_seq.
Context {A : Type}.
Implicit Types l : list A.
Implicit Types Φ : nat → PROP.
Lemma big_sepL_seq_intro Φ i n :
□ (
∀ k,
⌜i ≤ k < i + n⌝ -∗
Φ k
) ⊢
[∗ list] k ∈ seq i n, Φ k.
Lemma big_sepL_seq_impl Φ1 Φ2 i n :
([∗ list] k ∈ seq i n, Φ1 k) -∗
□ (
∀ k,
⌜i ≤ k < i + n⌝ -∗
Φ1 k -∗
Φ2 k
) -∗
[∗ list] k ∈ seq i n, Φ2 k.
Lemma big_sepL_seq_cons Φ i n :
([∗ list] k ∈ seq i (S n), Φ k) ⊣⊢
Φ i ∗
([∗ list] k ∈ seq (S i) n, Φ k).
Lemma big_sepL_seq_cons_1 Φ i n :
([∗ list] k ∈ seq i (S n), Φ k) ⊢
Φ i ∗
([∗ list] k ∈ seq (S i) n, Φ k).
Lemma big_sepL_seq_cons_2 Φ i n :
([∗ list] k ∈ seq (S i) n, Φ k) -∗
Φ i -∗
[∗ list] k ∈ seq i (S n), Φ k.
Lemma big_sepL_seq_snoc Φ i n :
([∗ list] k ∈ seq i (S n), Φ k) ⊣⊢
([∗ list] k ∈ seq i n, Φ k) ∗
Φ (i + n).
Lemma big_sepL_seq_snoc_1 Φ i n :
([∗ list] k ∈ seq i (S n), Φ k) ⊢
([∗ list] k ∈ seq i n, Φ k) ∗
Φ (i + n).
Lemma big_sepL_seq_snoc_2 Φ i n :
([∗ list] k ∈ seq i n, Φ k) -∗
Φ (i + n) -∗
[∗ list] k ∈ seq i (S n), Φ k.
Lemma big_sepL_seq_app Φ i n1 n2 :
([∗ list] k ∈ seq i (n1 + n2), Φ k) ⊣⊢
([∗ list] k ∈ seq i n1, Φ k) ∗
([∗ list] k ∈ seq (i + n1) n2, Φ k).
Lemma big_sepL_seq_app_1 {Φ i n} n1 n2 :
n = n1 + n2 →
([∗ list] k ∈ seq i n, Φ k) ⊢
([∗ list] k ∈ seq i n1, Φ k) ∗
([∗ list] k ∈ seq (i + n1) n2, Φ k).
Lemma big_sepL_seq_app_2 Φ i1 n1 i2 n2 :
i2 = i1 + n1 →
([∗ list] k ∈ seq i1 n1, Φ k) -∗
([∗ list] k ∈ seq i2 n2, Φ k) -∗
[∗ list] k ∈ seq i1 (n1 + n2), Φ k.
Lemma big_sepL_seq_lookup_acc {Φ i n} j :
j < n →
([∗ list] k ∈ seq i n, Φ k) ⊢
Φ (i + j) ∗
( Φ (i + j) -∗
[∗ list] k ∈ seq i n, Φ k
).
Lemma big_sepL_seq_lookup_acc' {Φ i n} j :
i ≤ j < i + n →
([∗ list] k ∈ seq i n, Φ k) ⊢
Φ j ∗
( Φ j -∗
[∗ list] k ∈ seq i n, Φ k
).
Lemma big_sepL_seq_lookup `{!BiAffine PROP} {Φ i n} j :
j < n →
([∗ list] k ∈ seq i n, Φ k) ⊢
Φ (i + j).
Lemma big_sepL_seq_lookup' `{!BiAffine PROP} {Φ i n} j :
i ≤ j < i + n →
([∗ list] k ∈ seq i n, Φ k) ⊢
Φ j.
Lemma big_sepL_seq_index `{!BiAffine PROP} {Φ} l i n :
length l = n →
([∗ list] k ∈ seq i n, Φ k) ⊣⊢
[∗ list] k ↦ _ ∈ l, Φ (i + k).
Lemma big_sepL_seq_index_1 `{!BiAffine PROP} {Φ} l i n :
length l = n →
([∗ list] k ∈ seq i n, Φ k) ⊢
[∗ list] k ↦ _ ∈ l, Φ (i + k).
Lemma big_sepL_seq_index_2 `{!BiAffine PROP} {Φ l} n :
length l = n →
([∗ list] k ↦ _ ∈ l, Φ k) ⊢
[∗ list] k ∈ seq 0 n, Φ k.
Lemma big_sepL_seq_shift `{!BiAffine PROP} {Φ} j i n :
([∗ list] k ∈ seq (i + j) n, Φ k) ⊣⊢
[∗ list] k ∈ seq i n, Φ (k + j).
Lemma big_sepL_seq_shift' `{!BiAffine PROP} {Φ} j i n :
([∗ list] k ∈ seq (i + j) n, Φ (k - j)) ⊣⊢
[∗ list] k ∈ seq i n, Φ k.
Lemma big_sepL_seq_shift_1 `{!BiAffine PROP} {Φ} j i n :
([∗ list] k ∈ seq (i + j) n, Φ k) ⊢
[∗ list] k ∈ seq i n, Φ (k + j).
Lemma big_sepL_seq_shift_2 `{!BiAffine PROP} {Φ} j i n :
([∗ list] k ∈ seq i n, Φ (k + j)) ⊢
[∗ list] k ∈ seq (i + j) n, Φ k.
Lemma big_sepL_seq_shift_2' `{!BiAffine PROP} {Φ} j i n :
([∗ list] k ∈ seq i n, Φ k) ⊢
[∗ list] k ∈ seq (i + j) n, Φ (k - j).
Lemma big_sepL_seq_shift1 `{!BiAffine PROP} Φ i n :
([∗ list] k ∈ seq (S i) n, Φ k) ⊣⊢
[∗ list] k ∈ seq i n, Φ (S k).
Lemma big_sepL_seq_shift1_1 `{!BiAffine PROP} Φ i n :
([∗ list] k ∈ seq (S i) n, Φ k) ⊢
[∗ list] k ∈ seq i n, Φ (S k).
Lemma big_sepL_seq_shift1_2 `{!BiAffine PROP} Φ i n :
([∗ list] k ∈ seq i n, Φ (S k)) ⊢
[∗ list] k ∈ seq (S i) n, Φ k.
Lemma big_sepL_seq_exists `{!BiAffine PROP} `(Φ : nat → A → PROP) i n :
([∗ list] k ∈ seq i n, ∃ x, Φ k x) ⊢
∃ xs,
⌜length xs = n⌝ ∗
[∗ list] k ↦ x ∈ xs, Φ (i + k) x.
Lemma big_sepL_seq_to_seqZ `{!BiAffine PROP} Φ i n :
([∗ list] k ∈ seq i n, Φ k) ⊢
[∗ list] k ∈ seqZ ⁺i ⁺n, Φ ₊k.
Lemma big_sepL_seq_to_seqZ' `{!BiAffine PROP} Φ i n :
(0 ≤ i)%Z →
(0 ≤ n)%Z →
([∗ list] k ∈ seq ₊i ₊n, Φ k) ⊢
[∗ list] k ∈ seqZ i n, Φ ₊k.
End big_sepL_seq.
End bi.