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