I have a protocol, Address, which inherits from another protocol, Validator, and Address fulfills the Validator requirement in the extension. 
There is another protocol, FromRepresentable, which has an associatedType (ValueWrapper) requirement which should be Validator. 
Now if I try to use Address as associatedType, then it does not compile. It says,    
Inferred type 'Address' (by matching requirement 'valueForDetail') is invalid: does not conform to 'Validator'.
Is this usage illegal? Shouldn't we be able to use Address in place of Validator, as all Addresses are Validator. 
Below is the piece of code I am trying.
enum ValidationResult {
    case Success
    case Failure(String)
}
protocol Validator {
    func validate() -> ValidationResult
}
//Address inherits Validator
protocol Address: Validator {
    var addressLine1: String {get set}
    var city: String {get set}
    var country: String {get set}
}
////Fulfill Validator protocol requirements in extension
extension Address {
    func validate() -> ValidationResult {
        if addressLine1.isEmpty {
            return .Failure("Address can not be empty")
        }
        return .Success
    }
}
protocol FormRepresentable {
    associatedtype ValueWrapper: Validator
    func valueForDetail(valueWrapper: ValueWrapper) -> String
}
// Shipping Address conforming to Address protocol. 
// It should also implicitly conform to Validator since
// Address inherits from Validator?
struct ShippingAddress: Address {
    var addressLine1 = "CA"
    var city = "HYD"
    var country = "India"
}
// While compiling, it says:
// Inferred type 'Address' (by matching requirement 'valueForDetail') is invalid: does not conform
// to 'Validator'.
// But Address confroms to Validator.
enum AddressFrom: Int, FormRepresentable {
    case Address1
    case City
    case Country
    func valueForDetail(valueWrapper: Address) -> String {
        switch self {
        case .Address1:
            return valueWrapper.addressLine1
        case .City:
            return valueWrapper.city
        case .Country:
            return valueWrapper.country
        }
    }
}
Update: Filed a bug.
 
     
    