<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def has_tokens(self, phrase):
 """ Checks if phrase or sub-phrase exists in the tree. If set of phrases contains phrases such as: "state", "of the" and "state of the art", look up on: "state" returns true, "of" returns null, "of the art" returns false. :param phrase: Phrase or sub-phrase to look up. :type: phrase: list of str :return: Returns true if phrase in its entirety is in the tree, null if part of the phrase matches a larger tokenSequence, false if phrases matches no other phrase entirely and not part any longer phrase. """


        if len(phrase) == 1 and classifier_options.is_special_class_word(phrase[0]):
            return True

        tree = self.root
        for token in phrase:
            if not tree.has_child(token):
                return False
            tree = tree.get_child(token)

        return True if tree.is_end_of_phrase() else None