Не отвечая на ваш вопрос как таковой (как говорит NWS, вы не можете этого сделать), если вместо A и B являются целыми числами, вы можете сделать следующее:
package Record_Subtypes is
type Int_Data is array (Integer range <>) of Integer;
type ABC (X_Min, X_Max, Y_Min, Y_Max : Integer) is record
A : Int_Data (X_Min .. X_Max);
B : Int_Data (Y_Min .. Y_Max);
end record;
subtype ABC_4_4 is ABC(X_Min => 1, X_Max => 4,
Y_Min => 1, Y_Max => 4);
subtype ABC_1_7_3_12 is ABC (X_Min => 1, X_Max => 7,
Y_Min => 3, Y_Max => 12);
end Record_Subtypes;
В полях записи A и B используется подтип индекса, предоставленный дискриминантами записи.
Это хороший прием, который я использовал время от времени, полезный при чтении строк переменной длины изинтерфейс (такой как сокет), где количество байтов для чтения предоставляется через заголовок фиксированного размера;или в случае записи варианта с дискриминантом перечисления я могу подтипить запись в конкретный вариант.