package Corr_Discr is type Base (T1 : Boolean := True; T2 : Boolean := False) is null record; for Base use record T1 at 0 range 0 .. 0; T2 at 0 range 1 .. 1; end record; type Deriv (D : Boolean := False) is new Base (T1 => True, T2 => D); end Corr_Discr;