Search code examples
constraintsasn.1extensibility

Confusing regarding the extensibility and visibility of constraints in PER


I got confused by the example of X.691-0207 page 49.

As per clause B.2.2.10 (Page 48): Because UNION and INTERSECTION are both commutative, the rule for the result is given only for the V first case. Where all components are V, then the normal rules of ITU-T Rec. X.680 | ISO/IEC 8824-1 apply, and these are not discussed further here. The cases where all components are I always give I, and are again not listed. The rules are:

V UNION I => I
V INTERSECTION I => V
-- The resulting V is just the V part of the intersection V EXCEPT I => V
-- The resulting V is just the V without the set difference I EXCEPT V => I
V, ..., I => I
I, ..., V => I

Following the arithmetic operation on the following example's constrains:

A13 ::= IA5String (SIZE(1..10, ...) ^ FROM("A".."D"))

yields:

  SIZE(1..10, ...) ^ FROM("A".."D")
= { SIZE(1..10, ...), ALL } ^ { SIZE(MIN..MAX), FROM("A".."D") }
= { SIZE(1..10, ...) ^ SIZE(MIN..MAX), ALL ^ FROM("A".."D") }
= { SIZE(1..10), FROM("A".."D") }

But the example said that "A13 has an extensible effective size constraint of SIZE(1..10,...)", where did the extensible come about?

Any help is much appreciated.


Solution

  • The example you use is the equivalent of "V INTERSECTION V => V" since each of the constraints which are part of the intersection are PER visible constraints. It should be no surprise that the result of the intersection is also PER visible. Note that applying an INTERSECTION does not eliminate extensibility. Rather than just looking at the informative examples in Annex B, you should look at the normative rules in section 10.3 of X.691 which explicitly defines the rules for PER visible constraints. In particular, 10.3.9 indicates all size constraints are PER visible, and 10.3.21 indicates that when PER visible constraints that are part of an INTERSECTION, the resulting constraint is PER visible.