From 1076b6c9b44dcf54b6ce6881a5dba6e372aafca2 Mon Sep 17 00:00:00 2001
From: Jacques-Henri Jourdan <jacques-henri.jourdan@normalesup.org>
Date: Mon, 13 Mar 2017 14:35:48 +0100
Subject: [PATCH] Prove weakening lemmas for elctx_sat.

---
 theories/typing/lft_contexts.v | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/theories/typing/lft_contexts.v b/theories/typing/lft_contexts.v
index dce104cb..1f273699 100644
--- a/theories/typing/lft_contexts.v
+++ b/theories/typing/lft_contexts.v
@@ -356,6 +356,26 @@ Arguments lctx_lft_eq {_ _ _} _%EL _%LL _ _.
 Arguments lctx_lft_alive {_ _ _} _%EL _%LL _.
 Arguments elctx_sat {_ _ _} _%EL _%LL _%EL.
 
+Lemma elctx_sat_cons_weaken `{invG Σ, lftG Σ} e0 E E' L :
+  elctx_sat E L E' → elctx_sat (e0 :: E) L E'.
+Proof.
+  iIntros (HE' ????). rewrite /elctx_interp. setoid_rewrite big_sepL_cons.
+  iIntros "[? HE] HL". iMod (HE' with "HE HL") as (?) "[H Hclose]". done.
+  auto 10 with iFrame.
+Qed.
+
+Lemma elctx_sat_app_weaken_l `{invG Σ, lftG Σ} E0 E E' L :
+  elctx_sat E L E' → elctx_sat (E0 ++ E) L E'.
+Proof. induction E0=>//= ?. auto using elctx_sat_cons_weaken. Qed.
+
+Lemma elctx_sat_app_weaken_r `{invG Σ, lftG Σ} E0 E E' L :
+  elctx_sat E L E' → elctx_sat (E ++ E0) L E'.
+Proof.
+  intros ?????. rewrite /elctx_sat /elctx_interp.
+  setoid_rewrite (big_opL_permutation _ (E++E0)); try apply Permutation_app_comm.
+  by apply elctx_sat_app_weaken_l.
+Qed.
+
 Section elctx_incl.
   (* External lifetime context inclusion, in a persistent context.
      (Used for function types subtyping).
@@ -463,7 +483,8 @@ Hint Resolve
      elctx_sat_nil elctx_sat_alive elctx_sat_lft_incl elctx_sat_app elctx_sat_refl
      elctx_incl_refl elctx_incl_nil elctx_incl_lft_alive elctx_incl_lft_incl
   : lrust_typing.
-Hint Resolve lctx_lft_alive_external' | 100 : lrust_typing.
+Hint Resolve elctx_sat_cons_weaken elctx_sat_app_weaken_l elctx_sat_app_weaken_r
+             lctx_lft_alive_external' | 100 : lrust_typing.
 
 Hint Opaque elctx_incl elctx_sat lctx_lft_alive lctx_lft_incl : lrust_typing.
 
-- 
GitLab