let rec liste_var (tas : int list) : term list -> int list = function
| Atm(_)::fin -> liste_var tas fin
| Var(n)::fin ->
if List.mem n tas then
liste_var tas fin
else
liste_var (n::tas) fin
| Uplet(l)::fin
| Xor(l)::fin -> liste_var (liste_var tas l) fin
| PCrypt(m,k)::fin
| SCrypt(m,k)::fin -> liste_var tas (m::k::fin)
| PInv(t)::fin -> liste_var tas (t::fin)
| Exp(t,l)::fin -> liste_var tas (merge_first (t::fin) l)
| [] -> tas