input: Write a python function to trace the execution of another function using a decorator.
  assert trace_function(lambda x: x + 1)(5) == 6
  assert trace_function(lambda x, y: x * y)(2, 3) == 6
  assert trace_function(lambda x: x.upper())("hello") == "HELLO"
output: def trace_function(func):
      def wrapper(*args, **kwargs):
          result = func(*args, **kwargs)
          print(f"Function {func.__name__} called with arguments {args} {kwargs} and returned {result}")
          return result
      return wrapper