Proof with simpl; auto.
revert cls0 s; induction l... intros s0 s H1.
assert (H2: forall s, f a s). intros s'. destruct H1 as [H1 H2]. spec H1 s'...
intros D; apply IHl... destruct H1...
Qed.
End FoldLemWeak.

(* Specifications: *)
Lemma listd_inter_map: forall {A B C} (l:list A) (f:B -> C -> Prop) h s,
(forall x, In x l -> f (h x) s) ->
inter
(listd f inter TT (map h l)) TT s.
Lemma listd_inter_rev: forall {A B} (f: A -> B -> Prop) l,
listd f inter TT (rev  l) = listd f inter TT l.
Lemma orp_FF {A} (p : pred A) : orp p FF = p.
Lemma listd_un_rev:
forall {A B} (f: A -> B -> Prop) l, listd f un FF (rev  l) = listd f un FF l.
Lemma setd_filter_pred:
forall {B: Type} (f: M.elt -> pred B) (h: M.elt -> bool) (s: M.t),
setd f inter TT s |-- setd f inter TT (M.filter h s).