code: def _canViewChange(self, proposedViewNo: int) -> (bool, str):
          
          msg = None
          quorum = self.quorums.view_change.value
          if not self.instance_changes.has_quorum(proposedViewNo, quorum):
              msg = '{} has no quorum for view {}'.format(self, proposedViewNo)
          elif not proposedViewNo > self.view_no:
              msg = '{} is in higher view more than {}'.format(
                  self, proposedViewNo)
  
          return not bool(msg), msg
docs: Return whether there's quorum for view change for the proposed view
          number and its view is less than or equal to the proposed view