 //
 // see: https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#parameterized-extensions
 
-public protocol _QuotientSet {
+public protocol _QuotientSet: SetType {
     associatedtype Base: SetType
     init (_ x: Base)
     var representative: Base { get }

        return representative.description
    }
    
    public static var symbol: String {
        return "\(Base.symbol)/~"
    }
}

public extension SetType {
    public func asQuotient<Q: _QuotientSet>(in: Q) -> Q where Self == Q.Base {
        return Q(self)
    }
}

        self._2 = y
    }
    
    public static func == (a: ProductSet<X, Y>, b: ProductSet<X, Y>) -> Bool {
        return (a._1, a._2) == (b._1, b._2)
    }
    
    public var hashValue: Int {
        return (_1.hashValue &* 31) &+ _2.hashValue
    }
