Proof with try congruence.
set (P' := fun (g_u : M.t * M.t) (res: superposition_result * M.t*M.t) =>
res = (C_example R sel, given', unselected') ->
(R, sel) = clauses_generate nil
(rsort_uniq (rev_cmp compare_clause) (M.elements given'))).
generalize (loop_ind P'). intros H1 H2. unfold P' in H1.
apply H1 with (given_unselected := (given, unselected)); auto; intros [? ?] ? ?;
inversion 1; subst...
Qed.

Lemma loop_Cexample_sel g u g' u' s R sel :
setd clause_denote inter TT g s ->
setd clause_denote inter TT u s ->
loop (g, u) = (C_example R sel, g', u') ->
setd clause_denote inter TT sel s.