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
(*    | Lst(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:              | Event(_,t::_) ->
            get_primed_vars_rec lt t *)

              | Event(_,lt2) ->
            List.fold_left get_primed_vars_rec lt lt2
              | New(x) ->
            x::lt
              | _ -> lt))
    []