Index: pypy/annotation/model.py
===================================================================
--- pypy/annotation/model.py	(revision 60718)
+++ pypy/annotation/model.py	(working copy)
@@ -150,6 +150,12 @@
     def nonnoneify(self):
         return self
 
+    def can_be_notImplemented(self):
+        if self.__class__ is SomeObject:
+            return True
+        else:
+            return False
+
 class SomeFloat(SomeObject):
     "Stands for a float or an integer."
     knowntype = float   # if we don't know if it's a float or an int,
Index: pypy/annotation/binaryop.py
===================================================================
--- pypy/annotation/binaryop.py	(revision 60718)
+++ pypy/annotation/binaryop.py	(working copy)
@@ -173,9 +173,13 @@
                 r.const = obj1.const is obj2.const
             if obj2.const is None and not obj1.can_be_none():
                 r.const = False
+            if obj2.const is NotImplemented and not obj1.can_be_notImplemented():
+                r.const = False
         elif obj1.is_constant():
             if obj1.const is None and not obj2.can_be_none():
                 r.const = False
+            if obj2.const is NotImplemented and not obj1.can_be_notImplemented():
+                r.const = False
         # XXX HACK HACK HACK
         # XXX HACK HACK HACK
         # XXX HACK HACK HACK
