let rec contains_var (s : t_subst) (m : int) (r : bool) (seen : int list) : term list -> bool = function
| (Var n)::fin -> if List.memq n seen then contains_var s m r seen fin else
( match (valeur n s) with
| Var nn -> if nn=m then raise No_Solution else contains_var s m r (n::nn::seen) fin
| t -> contains_var s m r (n::seen) (t::fin) )
| (Atm _)::fin -> contains_var s m r seen fin
| (Xor l)::fin -> contains_var s m (r || (recursif s m (liste_var [] l))) seen fin
| (Uplet l)::fin -> contains_var s m r seen (merge fin l)
| (PCrypt (a,b))::fin
| (SCrypt (a,b))::fin -> contains_var s m r seen (a::b::fin)
| (Exp(t,l))::fin -> contains_var s m r seen (merge_first (t::fin) l)
| (PInv t)::fin -> contains_var s m r seen (t::fin)
| [] -> r