Proof with try solve[exfalso; auto|congruence]; auto.
induction l... destruct 1. left; exists a; split; simpl...
spec IHl H. destruct IHl as [[a0 [C D]]|E].
left; exists a0; split; simpl... right...
Qed.
(* todo: add map/fold_right lems for prop, etc. *)

(* Specifications: *)
Lemma listd_map_pred {C : Type} h (g : C -> pred B) l s
(H : forall a, f a s -> g (h a) s) :
listd f inter TT l s -> listd g inter TT (map h l) s.