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 check_clauseset_Valid_sound init g u :
check_clauseset init = (Valid, g, u) ->
setd clause_denote inter TT init |-- clause_denote empty_clause.