Lvc.Spilling.InVD

Require Import List Map Env AllInRel Exp AppExpFree RenamedApart.
Require Import IL Annotation AutoIndTac.
Require Import Liveness.Liveness LabelsDefined SetUtil.

Set Implicit Arguments.

InVD


Lemma x_VD
      (x : var)
      (VD D Ds D' : var)
      (H9 : D' [=] {x; Ds})
      (ra_VD : D D' VD)
  :
    x VD
.
Proof.
  rewrite H9 in ra_VD.
  rewrite <- incl_right in ra_VD.
  apply add_incl in ra_VD as [x_VD _].
  eauto.
Qed.

Lemma Rx_VD
      (x : var)
      (R M VD : var)
      (R_VD : R VD)
      (M_VD : M VD)
      (Sp L K Kx : var)
      (H13 : Sp R)
      (H16 : L Sp M)
      (x_VD : x VD)
  :
    {x; (R \ K L) \ Kx} VD
.
Proof.
  apply incl_add_eq.
  split; eauto.
  rewrite H16.
  rewrite H13.
  cset_tac.
Qed.

Lemma R'_VD
      (R M VD : var)
      (R_VD : R VD)
      (M_VD : M VD)
      (Sp L K : var)
      (H16 : Sp R)
      (H19 : L Sp M)
  :
    R \ K L VD
.
Proof.
  rewrite H19.
  rewrite H16.
  cset_tac.
Qed.

Lemma M'_VD
      (R M VD : var)
      (R_VD : R VD)
      (M_VD : M VD)
      (Sp : var)
      (H13 : Sp R)
  :
    Sp M VD
.
Proof.
  cset_tac.
Qed.

Lemma Rf_VD
      (R M VD : var)
      (R_VD : R VD)
      (M_VD : M VD)
      (Sp L K R_f : var)
      (Z0 : params)
      (H11 : Sp R)
      (H12 : L Sp M)
      (H18 : R_f \ of_list Z0 R \ K L)
      (Z_VD : of_list Z0 VD)
  :
    R_f VD
.
Proof.
  assert (R_f R \ K L of_list Z0) as H18'.
  {
    rewrite <- H18.
    clear; cset_tac.
  }
  rewrite H18'.
  rewrite H12.
  rewrite H11.
  cset_tac.
Qed.

Lemma Mf_VD
      (R M VD : var)
      (R_VD : R VD)
      (M_VD : M VD)
      (Sp M_f : var)
      (Z0 : params)
      (H11 : Sp R)
      (H19 : M_f \ of_list Z0 Sp M)
      (Z_VD : of_list Z0 VD)
  :
    M_f VD
.
Proof.
  assert (M_f Sp M of_list Z0) as H19'.
  {
    rewrite <- H19.
    clear; cset_tac.
  }
  rewrite H19'.
  rewrite H11.
  clear - R_VD M_VD Z_VD; cset_tac.
Qed.

Lemma disj_empty_cut
      (s t : var)
      (slot : var var)
  :
    t s
     disj s (map slot s)
     s map slot t [=]
.
Proof.
  intros sub disj.
  apply disj_intersection.
  eapply disj_2_incl; eauto with cset.
Qed.