docs: def remove(self, *rules, _validate=True):
          # type: (Iterable[Type[Rule]], bool) -> None
          """
          Remove rules from the set.
          :param rules: Rules to remove.
          :param _validate: True if the rule should be validated before deleting.
          This parameter is only for internal use.
          :raise NotRuleException: If the parameter doesn't inherit from Rule.
          :raise RuleException: If the syntax of the rule is invalid.
          :raise KeyError: If the rule is not in the grammar.
          """
          all_rules = set()
          for rule in rules:
              if _validate:
                  self._validate_rule(rule)
              for r in self._split_rules(rule):
                  if not self.__contains__(rule, _validate=False):
                      raise KeyError('Rule ' + rule.__name__ + ' is not inside')
                  all_rules.add(r)
          for rule in all_rules:
              for side in rule.rule:
                  for s in side:
                      self._assign_map[s].discard(rule)
              super().remove(rule)