示例#1
0
    def prove_one_wrapper(
            self,
            task: proof_assistant_pb2.ProverTask) -> deephol_pb2.ProofLog:
        """Wrapper of prove_one methods for single goal use cases.

    This wrapper handles, timeout, error management and can set the prover
    into a mode that does not accept tasks anymore.

    Args:
      task: ProverTask to be performed.

    Returns:
      A proof log of the task performed.
    """
        # Note that this changes the prover options in place.
        _sample_bfs_options(self.prover_options)
        log = check_task(task, self.prover_options)
        if log is not None:
            tf.logging.info('Task did not fit the prover.')
            return log
        goal_thm = task.goals[0]
        tree = proof_search_tree.ProofSearchTree(self.hol_wrapper, goal_thm)
        error_message = None
        if self.accept_tasks:
            try:
                self.start_time = time.time()
                tf.logging.info('Attempting task %s.',
                                text_format.MessageToString(task))
                error_message = self.prove_one(tree, task)
            except error.StatusNotOk as exception:
                tf.logging.error('Prover stopped accepting tasks due to "%s"',
                                 exception.message)
                self.error = exception.message
                error_message = exception.message
                self.accept_tasks = False
        else:
            tf.logging.warning('Prover does not accept tasks anymore.')
            error_message = 'Prover stopped accepting tasks due to %s.' % self.error
        proof_log = tree.to_proto()
        if not self.accept_tasks:
            proof_log.rejected = True
        proof_log.time_spent = int(
            round((time.time() - self.start_time) * 1000.0))
        if tree.nodes[0].closed:
            proof_log.num_proofs = 1
        else:
            proof_log.num_proofs = 0
            proof_log.error_message = error_message or 'No proof.'
        proof_log.prover_options.CopyFrom(self.prover_options)
        proof_log.prover_task.CopyFrom(task)
        tf.logging.info('Pruning theorem nodes...')
        if self.pruner is not None:
            for node in proof_log.nodes:
                if node.status == deephol_pb2.ProofNode.PROVED:
                    self.pruner.prune_closed_tactic_applications(node)
        return proof_log
示例#2
0
 def setUp(self):
     tf.logging.info('Setting up tree...')
     self.tree = proof_search_tree.ProofSearchTree(MOCK_WRAPPER,
                                                   MOCK_THEOREM)
示例#3
0
 def setUp(self):
     self.tree = proof_search_tree.ProofSearchTree(MOCK_WRAPPER,
                                                   MOCK_THEOREM)
     self.node = proof_search_tree.ProofSearchNode(self.tree, 0,
                                                   self.test_goal)