let get_primed_vars =
let rec get_primed_vars_rec lt = function
Pair(t1,t2)
| Scrypt(t1,t2)
| Crypt(t1,t2)
| Cons(t1,t2)
| Delete(t1,t2) ->
get_primed_vars_rec (get_primed_vars_rec lt t1) t2
| Inv(t) ->
get_primed_vars_rec lt t
| Function(t1,l) ->
List.fold_left get_primed_vars_rec (get_primed_vars_rec lt t1) l
| Set(l) ->
List.fold_left get_primed_vars_rec [] l
| Prime(Var(i)) ->
if List.mem i lt then lt
else i::lt
| _ -> lt
in
List.fold_left
(fun lt ->
(function
Equal(t1,t2)
| Not(Equal(t1,t2))
| Leq(t1,t2)
| Not(Leq(t1,t2))
| In(t1,t2)
| Not(In(t1,t2)) ->
get_primed_vars_rec (get_primed_vars_rec lt t1) t2
| Event(_,lt2) ->
List.fold_left get_primed_vars_rec lt lt2
| New(x) ->
x::lt
| _ -> lt))
[]