   return !(lhs < rhs)
 }
 
-/// Types implementing the `Comparable` protocol can be compared using
-/// relational operators `<`, `<=`, `>=`, `>`.
-///
-/// When adopting `Comparable`, only the `<` operator is required to be
-/// implemented.  The standard library provides implementations for `<=`,
-/// `>=`, `>`.
-///
-/// The `<` operator must define a total order.
+/// Instances of conforming types can be compared using relational
+/// operators, which define a `strict total order
+/// <http://en.wikipedia.org/wiki/Total_order#Strict_total_order>`_.
+///
+/// A type conforming to `Comparable` need only supply the `<` and
+/// `==` operators; default implementations of `<=`, `>`, `>=`, and
+/// `!=` are supplied by the standard library::
+///
+///   struct Singular : Comparable {}
+///   func ==(x: Singular, y: Singular) -> Bool { return true }
+///   func <(x: Singular, y: Singular) -> Bool { return false }
+///
+/// **Axioms**, in addition to those of `Equatable`:
+///
+/// - `x == y` implies `x <= y`, `x >= y`, `!(x < y)`, and `!(x > y)`
+/// - `x < y` implies `x <= y` and `y > x`
+/// - `x > y` implies `x >= y` and `y < x`
+/// - `x <= y` implies `y >= x`
+/// - `x >= y` implies `y <= x`
 public protocol Comparable : _Comparable, Equatable {
   func <=(lhs: Self, rhs: Self) -> Bool
   func >=(lhs: Self, rhs: Self) -> Bool
   func >(lhs: Self, rhs: Self) -> Bool
 }
 
+///
 public protocol BitwiseOperationsType {
   func & (_: Self, _: Self) -> Self
   func |(_: Self, _: Self) -> Self

// Standard protocols
//===----------------------------------------------------------------------===//

public typealias Any = protocol<>
@objc public protocol AnyObject {}

public typealias AnyClass = AnyObject.Type

public func === (lhs: AnyObject?, rhs: AnyObject?) -> Bool {

// Equatable
//

/// Instances of conforming types can be compared for value equality
/// using operators `==` and `!=`.
///
/// When adopting `Equatable`, only the `==` operator is required to be
/// implemented.  The standard library provides an implementation for `!=`.
public protocol Equatable {
  /// Return true if `lhs` is equal to `rhs`.
  ///
  /// **Equality implies substitutability**.  When `x == y`, `x` and
  /// `y` are interchangeable in any code that only depends on their
  /// values.
  ///
  /// Class instance identity as distinguished by triple-equals `===`
  /// is notably not part of an instance's value.  Exposing other
  /// non-value aspects of `Equatable` types is discouraged, and any
  /// that *are* exposed should be explicitly pointed out in
  /// documentation.
  /// 
  /// **Equality is an equivalence relation**
  ///
  /// - `x == x` is `true`
  /// - `x == y` implies `y == x`
  /// - `x == y` and `y == z` implies `x == z`
  ///
  /// **Inequality is the inverse of equality**, i.e. `!(x == y)` iff
  /// `x != y`
  func == (lhs: Self, rhs: Self) -> Bool
}

