Module Type STRAT_MODEL.
Declare Module AV : ADR_VAL.
Inductive res (PRED : Type) : Type :=
| NO':  forall sh: Share.t, ~(readable_share sh) -> res PRED
| YES': forall sh: Share.t, readable_share sh -> kind -> fpreds PRED -> res PRED
| PURE': kind -> fpreds PRED -> res PRED.
Definition res_fmap (A B:Type) (f:A->B) (g:B->A)(x:res A) : res B :=
match x with
| NO' rsh nsh => NO' B rsh nsh
| YES' sh rsh k pds => YES' B sh rsh k (fmap fpreds f g pds)
| PURE' k pds => PURE' B k (fmap fpreds f g pds)
end.

(* Specifications: *)
Axiom ff_res : functorFacts res res_fmap.
Definition f_res : functor := Functor ff_res.