I'm modelling cardinality based feature models in Alloy, that allow to create multiple instances of Features.
So my Alloy-Model has signatures for the Feature-Model itself, the Features and the Instances. The Feature-Model has a set of Features and a set of Instances (the configuration, containing all Instances of all Features). A Feature has a set of Instances and an interval which contains the allowed multiplicities of the Feature (using a lower and an upper bound). Now i'm trying to find Integers in the intervals of the features, that are never satisfied by any configuration.
I've tried many different solutions, but none of them worked for now. For example this assertion:
assert featureInstanceCardinality{
all f: Feature, d: Int - 0 | some c: FM.config | IsPossibleCardinality[f, d] => (#(f.instances & c) = d)
}
should in my opinion lead to the right solution (For every Feature f and every Integer d, if d is a possible multiplicity of f, there is at least one configuration c, where f has d instances). Unfortunately this returns counterexamples for every possible amount of Instances for every feature.
Can anybody explain why this is happening, or if it is even possible what I'm trying to do? I would really appreciate some help in this case.