### Base Templates CardinalityMin, CardinalityMax, CardinalityMinMax

CardinalityMin, CardinalityMax, and CardinalityMinMax are templates for expressing the
values of cardinalities.

CardinalityMinMax(a, b, c) means that a is a cardinality and b and c are integers, and that
b is the minimal, c the maximal, constraint of a. CardinalityMin and CardinalityMax are
similar, and apply to just the minimal, resp. the maximal constraint.
CardinalityMin

Roles:
1 hasCardinality Cardinality
2 valMinimumCardinality INTEGER

CardinalityMax

Roles:
1 hasCardinality Cardinality
2 valMaximumCardinality INTEGER

CardinalityMinMax

Roles:
1 hasCardinality Cardinality
2 valMinimumCardinality INTEGER
3 valMaximumCardinality INTEGER

Axiom:

```CardinalityMin(x1, x2) <->
Cardinality(x1) &
INTEGER(x2) &
hasMinimumCardinality(x1, x2) .
```

Axiom:

```CardinalityMax(x1, x2) <->
Cardinality(x1) &
INTEGER(x2) &
hasMaximumCardinality(x1, x2) .
```

Axiom:

```CardinalityMinMax(x1, x2, x3) <->
Cardinality(x1) &
INTEGER(x2) &
INTEGER(x3) &
CardinalityMin(x1, x2) &
CardinalityMax(x1, x3) .
```

NOTE In ISO 15926, cardinalities are first-class objects. In ISO 15926-2, it is stated that an absence of specified minimum or maximum values for a cardinality should be interpreted as a absence of constraints (clause 5.2.13.1). The nature of the representation of ISO 15926-2 in first-order logic, with an open world assumption, mandates that both lower and upper bounds be given explicitly. Where no minimal constraint applies, the value 0 should be assigned. Where no maximum constraint applies, the reference item * Cardinality should be assigned (see 8.2.1).