Bug 195 - Add scalar sets
 Gerd Behrmann 2005-09-03 20:43:31 CEST ```In order to implement symmetry reduction, we need to add scalarsets to the language. A scalarset is a type similar to integers, but with a severely restricted set of operations. Scalarsets are constructed using the type expression scalar[n] where n is the size of the scalar set (this is not unlike the syntax for defining bounded integers). This is not to be confused with array declarations. The only valid operations on scalars (the elements of scalarsets) are equallity ==, inequallity != and assignment =. Scalars use name equivalence, i.e., both arguments must belong to the *same* scalarset. E.g. scalar a; scalar b; a = b; fails as a and b belong to two different scalars sets. The correct thing would be scalar a, b; a = b; or typename scalar myset_t; myset_t a; myset_t b; a = b; It must be possible to declare arrays or templatesets over scalars, e.g. typedef scalar myset_t; int a[myset_t]; process P[i:myset_t]() { ... } Constant scalars are hard to support with symmetry reduction (it is possible, but the constant scalar would need to be stored in the state vector thus reducing the usefulness of declaring it as a constant). For the same reason it is not allowed to compare scalars to integer literals. Initialisers for scalars, however, should be supported, e.g. myset a = 1; but not for function local variables, as this would again complicate symmetry reduction.``` Gerd Behrmann 2005-09-03 21:01:57 CEST ```I forgot to mention that - iterators - the forall quantifier - the select feature on edges must work with scalarsets.``` Gerd Behrmann 2005-11-06 17:45:38 CET `Part of this has been implemented. Increasing priority, as we should have this in for 3.6 alpha 2.` Gerd Behrmann 2005-11-09 12:44:21 CET `Implemented in CVS.`