Definition spec : Type :=  forall (sh: Share.t) (l: AV.address), pred rmap.Program Definition yesat (pp: preds) (k: kind) : spec :=
 fun (sh: share) (l: AV.address) (m: rmap) =>
  exists rsh, yesat_raw pp k sh rsh l m.Ltac do_map_arg :=
match goal with |- ?a = ?b =>
  match a with context [map ?x _] =>
    match b with context [map ?y _] => replace y with x; auto end end end.

Lemma map_compose_approx_succ_e: forall A n pp pp', map (compose (A:=A) (approx (S n))) pp = map (compose (A:=A) (approx (S n))) pp' -> map (compose (A:=A) (approx n)) pp = map (compose (A:=A) (approx n)) pp'.