How to compare VitalDelayType01 to each other?
From the VITAL_Timing package source:

PACKAGE VITAL_Timing IS
    TYPE VitalTransitionType IS ( tr01, tr10, tr0z, trz1, tr1z, trz0,
                                  tr0X, trx1, tr1x, trx0, trxz, trzx);

    SUBTYPE VitalDelayType     IS TIME;
    TYPE VitalDelayType01   IS ARRAY (VitalTransitionType   RANGE tr01 to tr10)
         OF TIME;

The index type of VitalDelayType01 is the enumerated type VitalTransitionType.
IEEE Std 1076-2008
5.2.3 Integer types
5.2.3.1 General

Integer literals are the literals of an anonymous predefined type that is called universal_integer in this standard. Other integer types have no literals. However, for each integer type there exists an implicit conversion that converts a value of type universal_integer into the corresponding value (if any) of the integer type (see 9.3.6).

The literal 0s in ex2 cannot be converted to type VitalTransitionType without using the predefined attribute VitalTransitionType'VAL(0) to convert to a position number (An enumerated type has a position from 0 to N, left to right). Here the resulting value would be tr01.
The element value of the array type VitalDelayType01 is of type TIME. You can rely on the overload and predefined operators of type TIME for operations on elements.
For ex1 relational operators for arrays of values of type TIME don't appear to make arithmetic sense. This precludes using an overload for relational operators which would explain function names MinDelay and MaxDelay.
For an array subtype with only two delay elements (tr01and tr10) you could imagine identifying either delay element exceeding it's corresponding element time value in the second parameter being sufficient to define Min or Max.
For 'opposite' answers between the corresponding element pairs you'd have to look at the magnitude of the differences between the corresponding elements.