5.7 Generating unused names
6.1.3 Explicit representation with variable cardinality and Boolean markers
The simple Explicit representation only works for sets with known cardinality. This is a huge limitation in practice, because the cardinality is also a decision rather than a parameter
1 ; S e t ~ E x p l i c i t V a r S i z e ~BoolMarker
2 ; matrix indexed by [ i n t ( 1 . .&maxSize_) ] o f ( bool ,&tau) 3 ; f o r A l l i , j : i n t ( 1 . .&maxSize_)
4 , i < j /\ r e f n [ i ] [ 1 ] /\ j <= r e f n [ j ] [ 1 ] 5 . r e f n [ i ] [ 2 ] ! = r e f n [ j ] [ 2 ]
6
7 ∗∗∗ s e t o f &tau
8 l e t t i n g &maxSize_ be domSize (&tau) 9
10 ∗∗∗ s e t ( minSize &minSize_) o f &tau
11 ; ( sum i : i n t ( 1 . .&maxSize_) . t o I n t ( r e f n [ i ] [ 1 ] ) ) >= &minSize_ 12 l e t t i n g &maxSize_ be domSize (&tau)
13
14 ∗∗∗ s e t ( maxSize &maxSize_) o f &tau 15
16 ∗∗∗ s e t ( minSize &minSize_, maxSize &maxSize_) o f &tau
17 ; ( sum i : i n t ( 1 . .&maxSize_) . t o I n t ( r e f n [ i ] [ 1 ] ) ) >= &minSize_
Figure 6.6: Explicit representation with variable cardinality and Boolean markers
in many interesting problems which use a decision variable with a set domain. This representation works for sets of all types and does not require a fixed cardinality.
There are four cases in the representation selection rule given inFigure 6.6. The first two cases do not have amaxSizeattribute, and hence the maximum number of elements that the set domain can have needs to be calculated. This calculation is done using thedomSize
operator. The value is bound to a local meta variable&maxSize_to be used in the preamble. The last two cases do not need to use thedomSizeoperator as they already have access to the attribute value provided in the domain.
The domain generated by this representation uses a matrix which has enough slots for the maximum number of elements that can be in the set domain. Each item in the matrix is a 2-tuple; the first component is a boolean marker indicating whether the value of the second component should be treated as a member of the set. The structural constraint posted by this representation is similar to a decomposition of a conditionalallDiffconstraint.
In addition to the structural constraint posted in the preamble of the rule, cases 2 and 4 which have access to a&minSize_attribute post an additional structural constraint
1 [ 1 0 0 0 ] 2
3 &quan &i i n &s , &g . &k
4 ;
5 &quan j : &r , &g { &i −−>&m[ j ] [ 2 ] } /\ &m[ j ] [ 1 ] 6 . &k { &i −−>&m[ j ] [ 2 ] }
7
8 where &s hasRepr S e t ~ E x p l i c i t V a r S i z e ~BoolMarker 9 l e t t i n g &m be r e f n (&s)
10 l e t t i n g &r be i n d i c e s (&m, 0 )
Figure 6.7: Vertical rule for Quantified expressions and Explicit-BoolMarker representation of sets
6.1.3.1 Symmetry
This representation introduces modelling symmetry in two places. First, the boolean markers can be ordered so that the true ones are at the beginning (or at the end) of the matrix. Second, the second components of each matrix element can be ordered provided the corresponding boolean marker istrue.
6.1.3.2 Vertical rules
Figure 6.7gives the rule for refining quantified expressions over sets with this representation. It works similarly to other vertical rules, the input expression is quantified over the set variable but the output expression is quantified over the indices of the matrix represent- ation. Since the membership condition is captured using the boolean component in this representation, that component is used as a guard in the output quantified expression.
For example the expression «forAll i in a , i > 3 . i in b» will be refined to «forAll j : int(..) , a’[j,2] > 3 /\ a’[j,1] . a’[j,2] in b» using this rule,
1 ; S e t ~ E x p l i c i t V a r S i z e ~IntMarker 2 ; ( i n t ( 0 . .&maxSize_)
3 , matrix indexed by [ i n t ( 1 . .&maxSize_) ] o f &tau
4 ) 5 ; f o r A l l i , j : i n t ( 1 . .&maxSize_) 6 , i < j /\ i <= r e f n [ 1 ] /\ j <= r e f n [ 1 ] 7 . r e f n [ 2 ] [ i ] ! = r e f n [ 2 ] [ j ] 8 9 ∗∗∗ s e t o f &tau
10 l e t t i n g &maxSize_ be domSize (&tau) 11
12 ∗∗∗ s e t ( minSize &minSize_) o f &tau 13 ; r e f n [ 1 ] >= &minSize_
14 l e t t i n g &maxSize_ be domSize (&tau) 15
16 ∗∗∗ s e t ( maxSize &maxSize_) o f &tau 17
18 ∗∗∗ s e t ( minSize &minSize_ , maxSize &maxSize_) o f &tau 19 ; r e f n [ 1 ] >= &minSize_
Figure 6.8: Explicit representation with variable cardinality and an integer marker
6.1.4 Explicit representation with variable cardinality and an integer marker
This representation is very similar toFigure 6.6. Instead of using a boolean for each candidate member of the set, it uses a single integer decision variable. This integer represents the cardinality of the set and indices less than or equal to the value of it are considered to be members of the set. The output domain and the structural constraints are modified accordingly.
6.1.4.1 Symmetry
This representation avoids introducing one of the two modelling symmetries introduced when boolean markers are used. We no longer need to order boolean markers. However the second kind of symmetry is still introduced: values in the matrix up to the index marked by the integer can be ordered.
1 [ 1 0 0 0 ] 2
3 &quan &i i n &s , &g . &k
4 ;
5 &quan j : &r , &g { &i −−>&m[ 2 ] [ j ] } /\ j <= &m[ 1 ] 6 . &k { &i −−>&m[ 2 ] [ j ] }
7 where &s hasRepr S e t ~ E x p l i c i t V a r S i z e ~IntMarker 8 l e t t i n g &m be r e f n (&s)
9 l e t t i n g &r be i n d i c e s (&m[ 2 ] , 0 )
Figure 6.9: Vertical rule for Quantified expressions and Explicit-IntMarker representation of sets
1 [ 6 0 0 ] 2
3 |&s| ; &m[ 1 ]
4 where &s hasRepr S e t ~ E x p l i c i t V a r S i z e ~IntMarker 5 l e t t i n g &m be r e f n (&s)
Figure 6.10: Vertical rule for cardinality and Explicit-IntMarker representation of sets
6.1.4.2 Vertical rules
Figure 6.9gives the rule for refining quantified expressions over sets with this representation. The rule is very similar toFigure 6.7, the biggest difference is in the guarding mechanism. This rule uses the integer marker rather than the boolean marker, since the membership condition is captured using the integer component.
For example the expression «forAll i in a , i > 3 . i in b» will be refined to « forAll j : int(..) , a’[2,j] > 3 /\ j <= a’[1] . a’[2,j] in b » using this
rule, wherea’is the refinement ofa.
Figure 6.10gives another vertical rule for this representation. Since this representation represents the cardinality of the set in a decision variable already, the cardinality operator can be implemented in terms of that decision variable. This rule overridesFigure 6.33and
1 ; S e t ~ E x p l i c i t V a r S i z e ~Dummy
2 ; matrix indexed by [ i n t ( 1 . .&maxSize_) ] o f i n t (&lb. .&dummy) 3 ; f o r A l l i , j : i n t ( 1 . .&maxSize_)
4 , i < j /\ r e f n [ i ] ! = &dummy /\ r e f n [ j ] ! = &dummy 5 . r e f n [ i ] ! = r e f n [ j ]
6
7 where &tau hasType ‘ i n t ‘
8 where &tau hasDomain ‘ i n t (&lb. .&ub) ‘ 9 l e t t i n g &dummy be &ub + 1
10
11 ∗∗∗ s e t o f &tau
12 l e t t i n g &maxSize_ be domSize (&tau) 13
14 ∗∗∗ s e t ( minSize &minSize_) o f &tau
15 ; ( sum i : i n t ( 1 . .&maxSize_) . t o I n t ( r e f n [ i ] ! = &dummy) ) 16 >= &minSize_
17 l e t t i n g &maxSize_ be domSize (&tau) 18
19 ∗∗∗ s e t ( maxSize &maxSize_) o f &tau 20
21 ∗∗∗ s e t ( minSize &minSize_, maxSize &maxSize_) o f &tau
22 ; ( sum i : i n t ( 1 . .&maxSize_) . t o I n t ( r e f n [ i ] ! = &dummy) ) 23 >= &minSize_
Figure 6.11: Explicit representation with variable cardinality and a dummy value
6.1.5 Explicit representation with variable cardinality and a dummy value
This representation is specialised to domains of typeset of int. It works by introducing a dummy value to the domain and only considering values as a member of the set when their value is different from the dummy value. The dummy value is chosen by incrementing the largest integer in the original integer domain.
This rule is applicable for a smaller number of domains than those listed in the previous sections; however, it is likely to produce better models when it is applicable.
6.1.5.1 Symmetry
This representation introduces modelling symmetry. Values of the matrix that are different from the dummy value can be ordered. Moreover, those cells which hold the dummy value
1 [ 1 0 0 0 ] 2
3 &quan &i i n &s , &g . &k
4 ;
5 &quan j : &r , &g { &i −−>&m[ j ] } /\ &m[ j ] ! = &dummy 6 . &k { &i −−>&m[ j ] }
7 where &s hasDomain ‘ s e t ( . . ) o f i n t (&lb. .&ub) ‘
8 where &s hasRepr S e t ~ExplicitVarSizeWithdummyault 9 l e t t i n g &m be r e f n (&s)
10 l e t t i n g &r be i n d i c e s (&m, 0 ) 11 l e t t i n g &dummy be &ub + 1
Figure 6.12: Vertical rule for Quantified expressions and Explicit-Dummy representation of sets
can also be shifted to either the beginning or the end of the matrix.
6.1.5.2 Vertical rules
Figure 6.12 gives the rule for refining quantified expressions over sets with this repres- entation. In the input expression of this rule &i represents an element of the set, in the output expressionjrepresents an index in the representation matrix. For this reason the deep-replaceconstruct is used to replace all references to&iwith&m[j]in the guard and the body components of the quantified expression. Moreover, a new guard is added to post the condition of membership in the set: m[j] != &dummy.
For example the expression « forAll i in a , i > 3 . i in b » will be refined to «forAll j : int(..) , a’[j] >3 /\ a’[j] != d . a’[j] in b» using this rule, wherea’is the refinement ofaanddis the dummy value fora’s domain.