let rec vars_consts_from_term = function
    Pair(t1,t2)
  | Scrypt(t1,t2)
  | Crypt(t1,t2)
  | Cons(t1,t2) -> (vars_consts_from_term t1) @ (vars_consts_from_term t2)
  | Inv(t) -> vars_consts_from_term t
  | Function(t,lt) ->
      (vars_consts_from_term t)
      @ (List.flatten (List.map vars_consts_from_term lt))
  | Set(lt) -> List.flatten (List.map vars_consts_from_term lt)
  | Prime(t)
  | Base(t) -> [Base(t)]
  | _ -> []