Proof with simpl; auto; try solve[congruence].
revert s s'; induction n... intros s s' H1 H2.
case_eq (add_list_to_set (M.fold (do_unfold' c) s []) s); intros.
apply add_list_to_set_spec1 in H.
rewrite add_list_union in H.
apply (IHn t s'); auto.
eapply setd_cong. apply H.
apply setd_un...
apply clause_setd_listd...
rewrite M.fold_spec.
apply listd_fold_left... intros c' cls H3 H4.
unfold Basics.flip.
apply do_unfold'_sound...
subst s'; auto.
Qed.

(* Specifications: *)
Lemma spatial_resolution_sound':
forall nc pc s,
clause_denote nc s -> clause_denote pc s ->
setd clause_denote inter TT (spatial_resolution nc pc) s.
Lemma unfolding_sound c1 c2 s :
clause_denote c1 s -> clause_denote c2 s ->
setd clause_denote inter TT (unfolding c1 c2) s.