docs: def canmultiplyby(self, other):
  		'''
  			Multiplication is not well-defined for all pairs of multipliers because
  			the resulting possibilities do not necessarily form a continuous range.
  			For example:
  				{0,x} * {0,y} = {0,x*y}
  				{2} * {3} = {6}
  				{2} * {1,2} = ERROR
  
  			The proof isn't simple but suffice it to say that {p,p+q} * {r,r+s} is
  			equal to {pr, (p+q)(r+s)} only if s=0 or qr+1 >= p. If not, then at least
  			one gap appears in the range. The first inaccessible number is (p+q)r + 1.
  		'''
  		return other.optional == bound(0) or \
  		self.optional * other.mandatory + bound(1) >= self.mandatory