Proof with simpl; auto; try solve[congruence].
intros H1 H2. unfold space_denote. revert st H1 H2; induction sigma0...
intros st H1 H2. simpl in H2. destruct H2 as [x [y [H2 [H3 H4]]]].
exists x; exists y. split; auto. split; auto.
rewrite rewrite_in_space_eqv... rewrite <-var_eq_join_sub; eauto.
apply IHsigma0... rewrite <-var_eq_join_sub; eauto.
Qed.

(* Specifications: *)
Lemma demodulate_sound c d s :
clause_denote c s -> clause_denote d s -> clause_denote (demodulate c d) s.