code: def _check_arguments(self):
          
          if self.argument_checked:
              return
  
          assert(self.symbol is not None)
          self.argument_checked = True
  
          # check if symbol contain duplicated names.
          _check_arguments(self.symbol)
          # rematch parameters to delete useless ones
          if self.allow_extra_params:
              if self.arg_params:
                  arg_names = set(self.symbol.list_arguments())
                  self.arg_params = {k : v for k, v in self.arg_params.items()
                                     if k in arg_names}
              if self.aux_params:
                  aux_names = set(self.symbol.list_auxiliary_states())
                  self.aux_params = {k : v for k, v in self.aux_params.items()
                                     if k in aux_names}
docs: verify the argument of the default symbol and user provided parameters