Document rich comparisons.
diff --git a/Doc/ref/ref3.tex b/Doc/ref/ref3.tex
index a012188..dd10e6b 100644
--- a/Doc/ref/ref3.tex
+++ b/Doc/ref/ref3.tex
@@ -133,9 +133,10 @@
 \item[NotImplemented]
 This type has a single value.  There is a single object with this value.
 This object is accessed through the built-in name \code{NotImplemented}.
-Binary number methods may return this value if they do not implement the
-operation for the types of operands provided.  The interpreter will then
-try the reverse operation. Its truth value is true.
+Numeric methods and rich comparison methods may return this value if
+they do not implement the operation for the operands provided.  (The
+interpreter will then try the reflected operation, or some other
+fallback, depending on the operator.)  Its truth value is true.
 \ttindex{NotImplemented}
 \obindex{NotImplemented@{\texttt{NotImplemented}}}
 
@@ -943,8 +944,44 @@
 instead.  The return value must be a string object.
 \end{methoddesc}
 
+\begin{methoddesc}[object]{__lt__}{self, other}
+\methodline[object]{__le__}{self, other}
+\methodline[object]{__eq__}{self, other}
+\methodline[object]{__ne__}{self, other}
+\methodline[object]{__gt__}{self, other}
+\methodline[object]{__ge__}{self, other}
+\versionadded{2.1}
+These are the so-called ``rich comparison'' methods, and are called
+for comparison operators in preference to \method{__cmp__()} below.
+The correspondence between operator symbols and method names is as
+follows:
+\code{\var{x}<\var{y}} calls \code{\var{x}.__lt__(\var{y})},
+\code{\var{x}<=\var{y}} calls \code{\var{x}.__le__(\var{y})},
+\code{\var{x}==\var{y}} calls \code{\var{x}.__eq__(\var{y})},
+\code{\var{x}!=\var{y}} and \code{\var{x}<>\var{y}} call
+\code{\var{x}.__ne__(\var{y})},
+\code{\var{x}>\var{y}} calls \code{\var{x}.__gt__(\var{y})}, and
+\code{\var{x}>=\var{y}} calls \code{\var{x}.__ge__(\var{y})}.
+These methods can return any value, but if the comparison operator is
+used in a Boolean context, the return value should be interpretable as
+a Boolean value, else a \exception{TypeError} will be raised.
+By convention, \code{0} is used for false and \code{1} for true.
+
+There are no reflected (swapped-argument) versions of these methods
+(to be used when the left argument does not support the operation but
+the right argument does); rather, \method{__lt__()} and
+\method{__gt__()} are each other's reflection, \method{__le__()} and
+\method{__ge__()} are each other's reflection, and \method{__eq__()}
+and \method{__ne__()} are their own reflection.
+
+Arguments to rich comparison methods are never coerced.  A rich
+comparison method may return \code{NotImplemented} if it does not
+implement the operation for a given pair of arguments.
+\end{methoddesc}
+
 \begin{methoddesc}[object]{__cmp__}{self, other}
-Called by all comparison operations.  Should return a negative integer if
+Called by comparison operations if rich comparison (see above) is not
+defined.  Should return a negative integer if
 \code{self < other},  zero if \code{self == other}, a positive integer if
 \code{self > other}.  If no \method{__cmp__()} operation is defined, class
 instances are compared by object identity (``address'').
@@ -1288,7 +1325,7 @@
 \code{-}, \code{*}, \code{/}, \code{\%},
 \function{divmod()}\bifuncindex{divmod},
 \function{pow()}\bifuncindex{pow}, \code{**}, \code{<<}, \code{>>},
-\code{\&}, \code{\^}, \code{|}) with reversed operands.  These
+\code{\&}, \code{\^}, \code{|}) with reflected (swapped) operands.  These
 functions are only called if the left operand does not support the
 corresponding operation.  For instance, to evaluate the expression
 \var{x}\code{-}\var{y}, where \var{y} is an instance of a class that