147 Attribute Cardinality Constraints and Denotation
The logic-frame denotation of an expression is independent of attribute cardinality constraints. An attribute declaration contributes a predicate to the denotation. Cardinality constraints say which predicate extensions are valid for stored values; they do not rewrite the expression's logical meaning.
Consider the following schema:
abstract entity A {}
entity B isa A {}
entity E
{
A a*;
→ Boolean c* = (a is B) ∧ false;
}
The denotation of c is:
c=false:Boolean
where
∃X:A (this.a(X))
If the extension of a is empty then the extension of c is empty as well, otherwise
the extension of c is {false}.
If instead a and c have exactly-one cardinality constraints:
entity E
{
A a;
→ Boolean c = (a is B) ∧ false;
}
Then the denotation of c is unchanged. Of course the extension of a cannot
be empty, so the extension of c is always {false}.