<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def create(self, prov_document, prov_format=None, refresh=False, **props):
 """ Create a document on ProvStore. :param prov_document: The document to be stored :param prov_format: The format of the document provided :param bool refresh: Whether or not to load back the document after saving :param dict props: Properties for this document [**name** (required), **public** = False] :return: This document itself but with a reference to the newly stored document :type prov_document: :py:class:`prov.model.ProvDocument` or :py:class:`str` :type prov_format: :py:class:`str` or None :rtype: :py:class:`provstore.document.Document` :raises ImmutableDocumentException: If this instance already refers to another document """

        if not self.abstract:
            raise ImmutableDocumentException()

        if isinstance(prov_document, ProvDocument):
            self._prov = prov_document

            prov_format = "json"
            prov_document = prov_document.serialize()

        self._id = self._api.post_document(prov_document, prov_format, **props)['id']

        if refresh:
            self.refresh()
        else:
            self._bundles = BundleManager(self._api, self)

        return self