From 8753a224e99ce646e27729aa078367d64788f447 Mon Sep 17 00:00:00 2001 From: Ralf Jung <jung@mpi-sws.org> Date: Sun, 16 Jan 2022 22:42:49 -0500 Subject: [PATCH] update dependencies, add missing Frame instances --- coq-lambda-rust.opam | 2 +- theories/lang/heap.v | 5 +++++ theories/lang/lib/arc.v | 17 ++++++++++------- theories/lifetime/lifetime_sig.v | 8 ++++++++ theories/lifetime/model/primitive.v | 9 +++++++++ theories/typing/lft_contexts.v | 5 +++++ 6 files changed, 38 insertions(+), 8 deletions(-) diff --git a/coq-lambda-rust.opam b/coq-lambda-rust.opam index 00f4674e..f3bec510 100644 --- a/coq-lambda-rust.opam +++ b/coq-lambda-rust.opam @@ -13,7 +13,7 @@ the type system, and safety proof for some Rust libraries. """ depends: [ - "coq-iris" { (= "dev.2022-01-14.0.f85824ee") | (= "dev") } + "coq-iris" { (= "dev.2022-01-17.2.ec624937") | (= "dev") } ] build: [make "-j%{jobs}%"] diff --git a/theories/lang/heap.v b/theories/lang/heap.v index db57e30a..0a9e4471 100644 --- a/theories/lang/heap.v +++ b/theories/lang/heap.v @@ -124,6 +124,11 @@ Section heap. AsFractional (l ↦{q} v) (λ q, l ↦{q} v)%I q. Proof. split; first done. apply _. Qed. + Global Instance frame_mapsto p l v q1 q2 RES : + FrameFractionalHyps p (l ↦{q1} v) (λ q, l ↦{q} v)%I RES q1 q2 → + Frame p (l ↦{q1} v) (l ↦{q2} v) RES | 5. + Proof. apply: frame_fractional. Qed. + Global Instance heap_mapsto_vec_timeless l q vl : Timeless (l ↦∗{q} vl). Proof. rewrite /heap_mapsto_vec. apply _. Qed. diff --git a/theories/lang/lib/arc.v b/theories/lang/lib/arc.v index 055bce80..8c897d67 100644 --- a/theories/lang/lib/arc.v +++ b/theories/lang/lib/arc.v @@ -284,7 +284,7 @@ Section arc. - wp_apply (wp_cas_int_fail with "Hl"); [congruence|]. iIntros "Hl". iMod ("Hclose2" with "Hown") as "HP". iModIntro. iMod ("Hclose1" with "[-HP HΦ]") as "_". - { iExists _. iFrame. iExists qq. auto with iFrame. } + { iExists _. iFrame. iExists qq. iCombine "HP1 HP1'" as "$". auto with iFrame. } iModIntro. wp_case. iApply ("IH" with "HP HΦ"). Qed. @@ -411,7 +411,7 @@ Section arc. rewrite /= [xH â‹… _]comm_L frac_op [(_ + q')%Qp]comm -[(_ + _)%Qp]assoc Qp_div_2 left_id_L. auto with iFrame. + iIntros "Hl". iFrame. iApply ("Hclose1" with "[-]"). iExists _. iFrame. - iExists q. auto with iFrame. + iExists q. iCombine "HP1 HP1'" as "$". auto with iFrame. - iDestruct "H" as "[>$ ?]". iIntros "!>"; iSplit; first by auto with congruence. iIntros "Hl". iMod ("Hclose2" with "Hown") as "$". iApply "Hclose1". iExists _. auto with iFrame. @@ -521,14 +521,16 @@ Section arc. by apply (op_local_update _ _ (Some (Cinr (Excl ())))). } iMod ("Hclose" with "[Hâ— Hs Hw]") as "_"; first by iExists _; do 2 iFrame. iModIntro. wp_case. iApply wp_fupd. wp_op. - iApply ("HΦ"). rewrite -{2}Hq''. iFrame. by iApply close_last_strong. + iApply ("HΦ"). rewrite -{2}Hq''. iCombine "HP1 HP1'" as "$". + by iApply close_last_strong. + destruct Hqq' as [? ->]. rewrite -[in (_, _)](Pos.succ_pred s) // -[wl in Cinl (_, wl)]left_id -Pos.add_1_l 2!pair_op Cinl_op Some_op. iMod (own_update_2 _ _ _ _ with "Hâ— Hown") as "Hâ—". { apply auth_update_dealloc, prod_local_update_1, @cancel_local_update_unit, _. } iMod ("Hclose" with "[- HΦ]") as "_". - { iExists _. iFrame. iExists (q + q'')%Qp. iFrame. iSplit; last by destruct s. + { iExists _. iFrame. iExists (q + q'')%Qp. iCombine "HP1 HP1'" as "$". + iSplit; last by destruct s. iIntros "!> !%". rewrite assoc -Hq''. f_equal. apply comm, _. } iModIntro. wp_case. wp_op; case_bool_decide; simplify_eq. by iApply "HΦ". - wp_apply (wp_cas_int_fail with "Hs"); [congruence|]. iIntros "Hs". @@ -553,7 +555,8 @@ Section arc. etrans; first apply: cancel_local_update_unit. by apply (op_local_update _ _ (Some (Cinr (Excl ())))). } iMod ("Hclose" with "[Hâ— Hs Hw]") as "_"; first by iExists _; do 2 iFrame. - iApply ("HΦ" $! true). rewrite -{1}Hq''. iFrame. by iApply close_last_strong. + iApply ("HΦ" $! true). rewrite -{1}Hq''. iCombine "HP1 HP1'" as "$". + by iApply close_last_strong. - wp_apply (wp_cas_int_fail with "Hs"); [congruence|]. iIntros "Hs". iMod ("Hclose" with "[-Hown HP1 HΦ]") as "_"; first by iExists _; auto with iFrame. iApply ("HΦ" $! false). by iFrame. @@ -610,13 +613,13 @@ Section arc. csum_local_update_l, prod_local_update_2, delete_option_local_update, _. } iMod ("Hclose" with "[-HΦ Hâ—¯ HP1]") as "_"; first by iExists _; auto with iFrame. iModIntro. wp_seq. iApply "HΦ". iFrame. - + setoid_subst. iDestruct "H" as (?) "(Hq & ? & ? & >? & >%)". subst. wp_read. + + setoid_subst. iDestruct "H" as (?) "(Hq & HP1' & ? & >? & >%)". subst. wp_read. iMod (own_update_2 with "Hâ— Hâ—¯") as "Hâ—". { apply auth_update_dealloc. rewrite -{1}[(_, 0%nat)]right_id. apply cancel_local_update_unit, _. } iMod ("Hclose" with "[Hâ—]") as "_"; first by iExists _; iFrame. iModIntro. wp_seq. wp_op. wp_let. wp_op. wp_write. iApply "HΦ". - iDestruct "Hq" as %<-. iFrame. + iDestruct "Hq" as %<-. iCombine "HP1 HP1'" as "$". iFrame. Qed. Lemma try_unwrap_full_spec (γ : gname) (q: Qp) (l : loc) : diff --git a/theories/lifetime/lifetime_sig.v b/theories/lifetime/lifetime_sig.v index 134e2ba1..1401bdcb 100644 --- a/theories/lifetime/lifetime_sig.v +++ b/theories/lifetime/lifetime_sig.v @@ -3,6 +3,7 @@ From stdpp Require Export gmultiset strings. From iris.base_logic.lib Require Export invariants. From iris.base_logic.lib Require Import boxes. From iris.bi Require Import fractional. +From iris.proofmode Require Import proofmode. From iris.prelude Require Import options. Definition lftN : namespace := nroot .@ "lft". @@ -88,9 +89,16 @@ Module Type lifetime_sig. Global Declare Instance lft_tok_fractional κ : Fractional (λ q, q.[κ])%I. Global Declare Instance lft_tok_as_fractional κ q : AsFractional q.[κ] (λ q, q.[κ])%I q. + Global Declare Instance frame_lft_tok p κ q1 q2 RES : + FrameFractionalHyps p q1.[κ] (λ q, q.[κ])%I RES q1 q2 → + Frame p q1.[κ] q2.[κ] RES | 5. + Global Declare Instance idx_bor_own_fractional i : Fractional (λ q, idx_bor_own q i)%I. Global Declare Instance idx_bor_own_as_fractional i q : AsFractional (idx_bor_own q i) (λ q, idx_bor_own q i)%I q. + Global Declare Instance frame_idx_bor_own p i q1 q2 RES : + FrameFractionalHyps p (idx_bor_own q1 i) (λ q, idx_bor_own q i)%I RES q1 q2 → + Frame p (idx_bor_own q1 i) (idx_bor_own q2 i) RES | 5. Global Declare Instance positive_to_lft_inj : Inj eq eq positive_to_lft. diff --git a/theories/lifetime/model/primitive.v b/theories/lifetime/model/primitive.v index 080794f6..0779ffb6 100644 --- a/theories/lifetime/model/primitive.v +++ b/theories/lifetime/model/primitive.v @@ -302,6 +302,11 @@ Qed. Global Instance lft_tok_as_fractional κ q : AsFractional q.[κ] (λ q, q.[κ])%I q. Proof. split; first done. apply _. Qed. +Global Instance frame_lft_tok p κ q1 q2 RES : + FrameFractionalHyps p q1.[κ] (λ q, q.[κ])%I RES q1 q2 → + Frame p q1.[κ] q2.[κ] RES | 5. +Proof. apply: frame_fractional. Qed. + Global Instance idx_bor_own_fractional i : Fractional (λ q, idx_bor_own q i)%I. Proof. intros p q. rewrite /idx_bor_own -own_bor_op /own_bor. f_equiv=>?. @@ -310,6 +315,10 @@ Qed. Global Instance idx_bor_own_as_fractional i q : AsFractional (idx_bor_own q i) (λ q, idx_bor_own q i)%I q. Proof. split; first done. apply _. Qed. +Global Instance frame_idx_bor_own p i q1 q2 RES : + FrameFractionalHyps p (idx_bor_own q1 i) (λ q, idx_bor_own q i)%I RES q1 q2 → + Frame p (idx_bor_own q1 i) (idx_bor_own q2 i) RES | 5. +Proof. apply: frame_fractional. Qed. (** Lifetime inclusion *) Lemma lft_incl_acc E κ κ' q : diff --git a/theories/typing/lft_contexts.v b/theories/typing/lft_contexts.v index 40f82bf1..3a1f6275 100644 --- a/theories/typing/lft_contexts.v +++ b/theories/typing/lft_contexts.v @@ -96,6 +96,11 @@ Section lft_contexts. Global Instance llctx_interp_as_fractional qmax L q : AsFractional (llctx_interp_noend qmax L q) (llctx_interp_noend qmax L) q. Proof. split; first done. apply _. Qed. + Global Instance frame_llctx_interp p qmax L q1 q2 RES : + FrameFractionalHyps p (llctx_interp_noend qmax L q1) (llctx_interp_noend qmax L) RES q1 q2 → + Frame p (llctx_interp_noend qmax L q1) (llctx_interp_noend qmax L q2) RES | 5. + Proof. apply: frame_fractional. Qed. + Global Instance llctx_interp_permut qmax : Proper ((≡ₚ) ==> (⊣⊢)) (llctx_interp qmax). Proof. intros ???. by apply big_opL_permutation. Qed. -- GitLab