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}.