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
def canmultiplyby ( self , other ) : return other . optional == bound ( 0 ) or self . optional * other . mandatory + bound ( 1 ) >= self . mandatory
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.