<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def prove(self, file, challenge, tag):
 """Returns a proof of ownership of the given file based on the challenge. The proof consists of a hash of the specified file chunk and the complete merkle branch. :param file: a file that supports `read()`, `seek()` and `tell()` :param challenge: the challenge to use for generating this proof :param tag: the file tag as provided from the client :param filesz: optional filesz parameter. if not specified, the filesz will be detected by seeking to the end of the stream """

        leaf = MerkleLeaf(challenge.index,
                          MerkleHelper.get_chunk_hash(file,
                                                      challenge.seed,
                                                      filesz=tag.filesz,
                                                      chunksz=tag.chunksz))
        return Proof(leaf, tag.tree.get_branch(challenge.index))