Existing Instance f_res.
Inductive res_join (PRED : Type) : res PRED -> res PRED -> res PRED -> Prop :=
| res_join_NO1 : res_join PRED (NO' PRED) (NO' PRED) (NO' PRED)
| res_join_NO2 : forall sh k p, res_join PRED (NO' PRED) (YES' PRED sh k p) (YES' PRED sh k p)
| res_join_NO3 : forall sh k p, res_join PRED (YES' PRED sh k p) (NO' PRED) (YES' PRED sh k p)
| res_join_YES : forall (sh1 sh2 sh3:pshare) k p,
join sh1 sh2 sh3 ->
res_join PRED (YES' PRED sh1 k p) (YES' PRED sh2 k p) (YES' PRED sh3 k p)
| res_join_PURE : forall k p, res_join PRED (PURE' PRED k p) (PURE' PRED k p) (PURE' PRED k p).
Instance Join_res (PRED: Type) : Join (res PRED) := res_join PRED.
Instance pa_rj : forall PRED, @Perm_alg _ (res_join PRED).
Instance sa_rj : forall PRED, @Sep_alg _ (res_join PRED).
Instance da_rj : forall PRED, @Disj_alg _ (res_join PRED).
Instance paf_res : @pafunctor res f_res res_join.
Definition res_option (PRED : Type) (r: res PRED) :=
match r with
| NO' => None
| YES' sh k _ => Some (sh,k)
| PURE' _ _ => None
end.
Definition valid' A (w: address -> res A) : Prop :=
AV.valid (fun l => res_option A (w l)).

(* Specifications: *)
Lemma same_valid : forall f1 f2, (forall x, f1 x = f2 x) -> AV.valid f1 -> AV.valid f2.
Lemma valid'_res_map : forall A B f m,
valid' A m -> valid' B (fmap f oo m).
Lemma valid'_res_map2 : forall A B f m,
valid' B (res_fmap A B f oo m) -> valid' A m.