Cuando una clase implementa una interfaz descendiente, ¿por qué no cuenta automáticamente como la implementación de la interfaz base?

¿Cuál es la razón por la que esto no se compilará?

type
  IInterfaceA = interface ['{44F93616-0161-4912-9D63-3E8AA140CA0D}']
    procedure DoA;
  end;

  IInterfaceB = interface(IInterfaceA) ['{80CB6D35-E12F-462A-AAA9-E7C0F6FE0982}']
    procedure DoB;
  end;

  TImplementsAB = class(TSingletonImplementation, IInterfaceB)
    procedure DoA;
    procedure DoB;
  end;

var
  ImplementsAB: TImplementsAB;
  InterfaceA: IInterfaceA;
  InterfaceB: IInterfaceB;
begin
  ImplementsAB := TImplementsAB.Create;
  InterfaceA := ImplementsAB; >> incompatible types
  ...
end

En contraste, así es como lo hago funcionar:

InterfaceA := ImplementsAB as InterfaceB;

InterfaceA := InterfaceB;

Quiero decir, si IInterfaceB hereda de IInterfaceA y TImplementsAB implementa IInterfaceB, ¿no sería lógico también implementar IInterfaceA y ser compatible con el tipo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta