Program Definition weak_exclusive_mpred (P: mpred): mpred :=
  fun w => exclusive_mpred (approx (S (level w)) P).

(* Specifications: *)
Lemma corable_weak_exclusive R : seplog.corable (weak_exclusive_mpred R).
Lemma exclusive_mpred_nonexpansive: nonexpansive weak_exclusive_mpred.
Lemma nonexpansive_lock_inv : forall sh p, nonexpansive (lock_inv sh p).
Lemma rec_inv1_nonexpansive: forall sh v Q, nonexpansive (weak_rec_inv sh v Q).
Lemma rec_inv2_nonexpansive: forall sh v R, nonexpansive (fun Q => weak_rec_inv sh v Q R).
Lemma corable_weak_exclusive R : seplog.corable (weak_exclusive_mpred R).
Lemma exclusive_mpred_nonexpansive: nonexpansive weak_exclusive_mpred.
Lemma nonexpansive_lock_inv : forall sh p, nonexpansive (lock_inv sh p).
Lemma rec_inv1_nonexpansive: forall sh v Q, nonexpansive (weak_rec_inv sh v Q).
Lemma rec_inv2_nonexpansive: forall sh v R, nonexpansive (fun Q => weak_rec_inv sh v Q R).