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.
unfold rewrite_clause_in_space.
unfold rewrite_in_space. destruct a0; simpl in *.
rewrite <-rewrite_expr_eqv. rewrite <-rewrite_expr_eqv. auto.
spec H1; auto. inversion H1. rewrite <-var_eq_join_sub; eauto. inversion H.
spec H1; auto. inversion H1. rewrite <-var_eq_join_sub; eauto. inversion H.
rewrite <-rewrite_expr_eqv. rewrite <-rewrite_expr_eqv. auto.
spec H1; auto. inversion H1. rewrite <-var_eq_join_sub; eauto. inversion H.
spec H1; auto. inversion H1. rewrite <-var_eq_join_sub; eauto. inversion H.
apply IHsigma0...
spec H1; auto. inversion H1. left; rewrite <-var_eq_join_sub; eauto.
inversion H.
Qed.

(* Specifications: *)
Lemma rewrite_in_space_eqv e1 e2 a st :
(e1 === e2) st ->
(space_atom_denote (rewrite_in_space e1 e2 a) st <-> space_atom_denote a st).