diff --git a/docs/conjure-help.html b/docs/conjure-help.html
index 4063fbd402..c5b17a7b79 100644
--- a/docs/conjure-help.html
+++ b/docs/conjure-help.html
@@ -40,11 +40,8 @@
| --representations-cuts=STRATEGY | Strategy for choosing a representation for cuts in 'branching on'. Default value: same as --representations |
| --channelling | Whether to produce channelled models (true by default).
|
| --representation-levels | Whether to use built-in precedence levels when choosing representations. Used to cut down the number of generated models. Default: true |
-<<<<<<< HEAD
| --unnamed-symmetry-breaking=ITEM | Level to use for breaking symmetries arising from unnamed types. Options: none / fast-consecutive / fast-allpairs / complete-independently / complete. Default: none |
-=======
| --follow-model=ITEM | Provide a Conjure-generated Essence Prime model to be used as a guide during model generation. Conjure will try to imitate the modelling decisions from this file. |
->>>>>>> main
| --seed=INT | Random number generator seed. |
| --limit-models=INT | Maximum number of models to generate. |
| --choices=FILE | Choices to use for -al, either an eprime file (created by --log-choices), or a json file. |
@@ -134,11 +131,8 @@
| --representations-cuts=STRATEGY | Strategy for choosing a representation for cuts in 'branching on'. Default value: same as --representations |
| --channelling | Whether to produce channelled models (true by default).
|
| --representation-levels | Whether to use built-in precedence levels when choosing representations. Used to cut down the number of generated models. Default: true |
-<<<<<<< HEAD
| --unnamed-symmetry-breaking=ITEM | Level to use for breaking symmetries arising from unnamed types. Options: none / fast-consecutive / fast-allpairs / complete-independently / complete. Default: none |
-=======
| --follow-model=ITEM | Provide a Conjure-generated Essence Prime model to be used as a guide during model generation. Conjure will try to imitate the modelling decisions from this file. |
->>>>>>> main
| --seed=INT | Random number generator seed. |
| --limit-models=INT | Maximum number of models to generate. |
| --use-existing-models=FILE | File names of Essence' models generated beforehand. If given, Conjure skips the modelling phase and uses the existing models for solving. The models should be inside the output directory (See -o). |
diff --git a/docs/conjure-help.txt b/docs/conjure-help.txt
index 60018ac460..bf34cb8af9 100644
--- a/docs/conjure-help.txt
+++ b/docs/conjure-help.txt
@@ -80,16 +80,13 @@
--representation-levels Whether to use built-in precedence levels when choosing representations.
Used to cut down the number of generated models.
Default: true
-<<<<<<< HEAD
--unnamed-symmetry-breaking=ITEM Level to use for breaking symmetries arising from unnamed types.
Options: none / fast-consecutive / fast-allpairs / complete-independently
/ complete.
Default: none
-=======
--follow-model=ITEM Provide a Conjure-generated Essence Prime model to be used as a guide
during model generation. Conjure will try to imitate the modelling
decisions from this file.
->>>>>>> main
--seed=INT Random number generator seed.
--limit-models=INT Maximum number of models to generate.
--choices=FILE Choices to use for -al, either an eprime file (created by
@@ -259,16 +256,13 @@
--representation-levels Whether to use built-in precedence levels when choosing representations.
Used to cut down the number of generated models.
Default: true
-<<<<<<< HEAD
--unnamed-symmetry-breaking=ITEM Level to use for breaking symmetries arising from unnamed types.
Options: none / fast-consecutive / fast-allpairs / complete-independently
/ complete.
Default: none
-=======
--follow-model=ITEM Provide a Conjure-generated Essence Prime model to be used as a guide
during model generation. Conjure will try to imitate the modelling
decisions from this file.
->>>>>>> main
--seed=INT Random number generator seed.
--limit-models=INT Maximum number of models to generate.
--use-existing-models=FILE File names of Essence' models generated beforehand.
diff --git a/src/Conjure/Compute/DomainOf.hs.orig b/src/Conjure/Compute/DomainOf.hs.orig
deleted file mode 100644
index f8f435e242..0000000000
--- a/src/Conjure/Compute/DomainOf.hs.orig
+++ /dev/null
@@ -1,668 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-{-# LANGUAGE UndecidableInstances #-}
-
-module Conjure.Compute.DomainOf ( DomainOf(..), domainOfR ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Bug
-
-import Conjure.Language
-import Conjure.Language.Domain ( HasRepresentation(..) )
-import Conjure.Language.RepresentationOf ( RepresentationOf(..) )
-import Conjure.Compute.DomainUnion
-
-
-type Dom = Domain () Expression
-
-class DomainOf a where
-
- -- | calculate the domain of `a`
- domainOf ::
- MonadFail m =>
- NameGen m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- a -> m Dom
-
- -- | calculate the index domains of `a`
- -- the index is the index of a matrix.
- -- returns [] for non-matrix inputs.
- -- has a default implementation in terms of domainOf, so doesn't need to be implemented specifically.
- -- but sometimes it is better to implement this directly.
- indexDomainsOf ::
- MonadFail m =>
- NameGen m =>
- Pretty a =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- a -> m [Dom]
- indexDomainsOf = defIndexDomainsOf
-
-
-domainOfR ::
- DomainOf a =>
- RepresentationOf a =>
- MonadFail m =>
- NameGen m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- a -> m (Domain HasRepresentation Expression)
-domainOfR inp = do
- dom <- domainOf inp
- rTree <- representationTreeOf inp
- applyReprTree dom rTree
-
-
-defIndexDomainsOf ::
- MonadFail m =>
- NameGen m =>
- DomainOf a =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- a -> m [Dom]
-defIndexDomainsOf x = do
- dom <- domainOf x
- let
- collect (DomainMatrix index inner) = index : collect inner
- collect _ = []
- return (collect dom)
-
-instance DomainOf ReferenceTo where
- domainOf (Alias x) = domainOf x
- domainOf (InComprehension (GenDomainNoRepr Single{} dom)) = return dom
- domainOf (InComprehension (GenDomainHasRepr _ dom)) = return (forgetRepr dom)
- domainOf (InComprehension (GenInExpr Single{} x)) = domainOf x >>= innerDomainOf
- domainOf x@InComprehension{} = fail $ vcat [ "domainOf-ReferenceTo-InComprehension", pretty x, pretty (show x) ]
- domainOf (DeclNoRepr _ _ dom _) = return dom
- domainOf (DeclHasRepr _ _ dom ) = return (forgetRepr dom)
- domainOf RecordField{} = fail "domainOf-ReferenceTo-RecordField"
- domainOf VariantField{} = fail "domainOf-ReferenceTo-VariantField"
-
-
-instance DomainOf Expression where
- domainOf (Reference _ (Just refTo)) = domainOf refTo
- domainOf (Constant x) = domainOf x
- domainOf (AbstractLiteral x) = domainOf x
- domainOf (Op x) = domainOf x
- domainOf (WithLocals h _) = domainOf h
- domainOf x = fail ("domainOf{Expression}:" <+> pretty (show x))
-
- -- if an empty matrix literal has a type annotation
- indexDomainsOf (Typed lit ty) | emptyCollectionX lit =
- let
- tyToDom (TypeMatrix (TypeInt nm) t) = DomainInt nm [RangeBounded 1 0] : tyToDom t
- tyToDom _ = []
- in
- return (tyToDom ty)
-
- indexDomainsOf (Reference _ (Just refTo)) = indexDomainsOf refTo
- indexDomainsOf (Constant x) = indexDomainsOf x
- indexDomainsOf (AbstractLiteral x) = indexDomainsOf x
- indexDomainsOf (Op x) = indexDomainsOf x
- indexDomainsOf (WithLocals h _) = indexDomainsOf h
- indexDomainsOf x = fail ("indexDomainsOf{Expression}:" <+> pretty (show x))
-
--- this should be better implemented by some ghc-generics magic
-instance (DomainOf x, TypeOf x, Pretty x, ExpressionLike x, Domain () x :< x, Dom :< x) => DomainOf (Op x) where
- domainOf (MkOpActive x) = domainOf x
- domainOf (MkOpAllDiff x) = domainOf x
- domainOf (MkOpAllDiffExcept x) = domainOf x
- domainOf (MkOpAnd x) = domainOf x
- domainOf (MkOpApart x) = domainOf x
- domainOf (MkOpCompose x) = domainOf x
- domainOf (MkOpAttributeAsConstraint x) = domainOf x
- domainOf (MkOpCatchUndef x) = domainOf x
- domainOf (MkOpDefined x) = domainOf x
- domainOf (MkOpDiv x) = domainOf x
- domainOf (MkOpDontCare x) = domainOf x
- domainOf (MkOpDotLeq x) = domainOf x
- domainOf (MkOpDotLt x) = domainOf x
- domainOf (MkOpEq x) = domainOf x
- domainOf (MkOpFactorial x) = domainOf x
- domainOf (MkOpFlatten x) = domainOf x
- domainOf (MkOpFreq x) = domainOf x
- domainOf (MkOpGeq x) = domainOf x
- domainOf (MkOpGt x) = domainOf x
- domainOf (MkOpHist x) = domainOf x
- domainOf (MkOpIff x) = domainOf x
- domainOf (MkOpImage x) = domainOf x
- domainOf (MkOpImageSet x) = domainOf x
- domainOf (MkOpImply x) = domainOf x
- domainOf (MkOpIn x) = domainOf x
- domainOf (MkOpIndexing x) = domainOf x
- domainOf (MkOpIntersect x) = domainOf x
- domainOf (MkOpInverse x) = domainOf x
- domainOf (MkOpLeq x) = domainOf x
- domainOf (MkOpLexLeq x) = domainOf x
- domainOf (MkOpLexLt x) = domainOf x
- domainOf (MkOpLt x) = domainOf x
- domainOf (MkOpMax x) = domainOf x
- domainOf (MkOpMin x) = domainOf x
- domainOf (MkOpMinus x) = domainOf x
- domainOf (MkOpMod x) = domainOf x
- domainOf (MkOpNegate x) = domainOf x
- domainOf (MkOpNeq x) = domainOf x
- domainOf (MkOpNot x) = domainOf x
- domainOf (MkOpOr x) = domainOf x
- domainOf (MkOpParticipants x) = domainOf x
- domainOf (MkOpParts x) = domainOf x
- domainOf (MkOpParty x) = domainOf x
- domainOf (MkOpPow x) = domainOf x
- domainOf (MkOpPowerSet x) = domainOf x
- domainOf (MkOpPred x) = domainOf x
- domainOf (MkOpPreImage x) = domainOf x
- domainOf (MkOpProduct x) = domainOf x
- domainOf (MkOpRange x) = domainOf x
- domainOf (MkOpRelationProj x) = domainOf x
- domainOf (MkOpRestrict x) = domainOf x
- domainOf (MkOpSlicing x) = domainOf x
- domainOf (MkOpSubsequence x) = domainOf x
- domainOf (MkOpSubset x) = domainOf x
- domainOf (MkOpSubsetEq x) = domainOf x
- domainOf (MkOpSubstring x) = domainOf x
- domainOf (MkOpSucc x) = domainOf x
- domainOf (MkOpSum x) = domainOf x
- domainOf (MkOpSupset x) = domainOf x
- domainOf (MkOpSupsetEq x) = domainOf x
- domainOf (MkOpTildeLeq x) = domainOf x
- domainOf (MkOpTildeLt x) = domainOf x
- domainOf (MkOpTogether x) = domainOf x
- domainOf (MkOpToInt x) = domainOf x
- domainOf (MkOpToMSet x) = domainOf x
- domainOf (MkOpToRelation x) = domainOf x
- domainOf (MkOpToSet x) = domainOf x
- domainOf (MkOpTransform x) = domainOf x
- domainOf (MkOpTrue x) = domainOf x
- domainOf (MkOpTwoBars x) = domainOf x
- domainOf (MkOpUnion x) = domainOf x
- domainOf (MkOpXor x) = domainOf x
-
- indexDomainsOf (MkOpActive x) = indexDomainsOf x
- indexDomainsOf (MkOpAllDiff x) = indexDomainsOf x
- indexDomainsOf (MkOpAllDiffExcept x) = indexDomainsOf x
- indexDomainsOf (MkOpAnd x) = indexDomainsOf x
- indexDomainsOf (MkOpApart x) = indexDomainsOf x
- indexDomainsOf (MkOpCompose x) = indexDomainsOf x
- indexDomainsOf (MkOpAttributeAsConstraint x) = indexDomainsOf x
- indexDomainsOf (MkOpCatchUndef x) = indexDomainsOf x
- indexDomainsOf (MkOpDefined x) = indexDomainsOf x
- indexDomainsOf (MkOpDiv x) = indexDomainsOf x
- indexDomainsOf (MkOpDontCare x) = indexDomainsOf x
- indexDomainsOf (MkOpDotLeq x) = indexDomainsOf x
- indexDomainsOf (MkOpDotLt x) = indexDomainsOf x
- indexDomainsOf (MkOpEq x) = indexDomainsOf x
- indexDomainsOf (MkOpFactorial x) = indexDomainsOf x
- indexDomainsOf (MkOpFlatten x) = indexDomainsOf x
- indexDomainsOf (MkOpFreq x) = indexDomainsOf x
- indexDomainsOf (MkOpGeq x) = indexDomainsOf x
- indexDomainsOf (MkOpGt x) = indexDomainsOf x
- indexDomainsOf (MkOpHist x) = indexDomainsOf x
- indexDomainsOf (MkOpIff x) = indexDomainsOf x
- indexDomainsOf (MkOpImage x) = indexDomainsOf x
- indexDomainsOf (MkOpImageSet x) = indexDomainsOf x
- indexDomainsOf (MkOpImply x) = indexDomainsOf x
- indexDomainsOf (MkOpIn x) = indexDomainsOf x
- indexDomainsOf (MkOpIndexing x) = indexDomainsOf x
- indexDomainsOf (MkOpIntersect x) = indexDomainsOf x
- indexDomainsOf (MkOpInverse x) = indexDomainsOf x
- indexDomainsOf (MkOpLeq x) = indexDomainsOf x
- indexDomainsOf (MkOpLexLeq x) = indexDomainsOf x
- indexDomainsOf (MkOpLexLt x) = indexDomainsOf x
- indexDomainsOf (MkOpLt x) = indexDomainsOf x
- indexDomainsOf (MkOpMax x) = indexDomainsOf x
- indexDomainsOf (MkOpMin x) = indexDomainsOf x
- indexDomainsOf (MkOpMinus x) = indexDomainsOf x
- indexDomainsOf (MkOpMod x) = indexDomainsOf x
- indexDomainsOf (MkOpNegate x) = indexDomainsOf x
- indexDomainsOf (MkOpNeq x) = indexDomainsOf x
- indexDomainsOf (MkOpNot x) = indexDomainsOf x
- indexDomainsOf (MkOpOr x) = indexDomainsOf x
- indexDomainsOf (MkOpParticipants x) = indexDomainsOf x
- indexDomainsOf (MkOpParts x) = indexDomainsOf x
- indexDomainsOf (MkOpParty x) = indexDomainsOf x
- indexDomainsOf (MkOpPow x) = indexDomainsOf x
- indexDomainsOf (MkOpPowerSet x) = indexDomainsOf x
- indexDomainsOf (MkOpPred x) = indexDomainsOf x
- indexDomainsOf (MkOpPreImage x) = indexDomainsOf x
- indexDomainsOf (MkOpProduct x) = indexDomainsOf x
- indexDomainsOf (MkOpRange x) = indexDomainsOf x
- indexDomainsOf (MkOpRelationProj x) = indexDomainsOf x
- indexDomainsOf (MkOpRestrict x) = indexDomainsOf x
- indexDomainsOf (MkOpSlicing x) = indexDomainsOf x
- indexDomainsOf (MkOpSubsequence x) = indexDomainsOf x
- indexDomainsOf (MkOpSubset x) = indexDomainsOf x
- indexDomainsOf (MkOpSubsetEq x) = indexDomainsOf x
- indexDomainsOf (MkOpSubstring x) = indexDomainsOf x
- indexDomainsOf (MkOpSucc x) = indexDomainsOf x
- indexDomainsOf (MkOpSum x) = indexDomainsOf x
- indexDomainsOf (MkOpSupset x) = indexDomainsOf x
- indexDomainsOf (MkOpSupsetEq x) = indexDomainsOf x
- indexDomainsOf (MkOpTildeLeq x) = indexDomainsOf x
- indexDomainsOf (MkOpTildeLt x) = indexDomainsOf x
- indexDomainsOf (MkOpTogether x) = indexDomainsOf x
- indexDomainsOf (MkOpToInt x) = indexDomainsOf x
- indexDomainsOf (MkOpToMSet x) = indexDomainsOf x
- indexDomainsOf (MkOpToRelation x) = indexDomainsOf x
- indexDomainsOf (MkOpToSet x) = indexDomainsOf x
- indexDomainsOf (MkOpTransform (OpTransform _ x)) = indexDomainsOf x
- indexDomainsOf (MkOpTrue x) = indexDomainsOf x
- indexDomainsOf (MkOpTwoBars x) = indexDomainsOf x
- indexDomainsOf (MkOpUnion x) = indexDomainsOf x
- indexDomainsOf (MkOpXor x) = indexDomainsOf x
-
-instance DomainOf Constant where
- domainOf ConstantBool{} = return DomainBool
- domainOf i@(ConstantInt t _) = return $ DomainInt t [RangeSingle (Constant i)]
- domainOf (ConstantEnum defn _ _ ) = return (DomainEnum defn Nothing Nothing)
- domainOf ConstantField{} = fail "DomainOf-Constant-ConstantField"
- domainOf (ConstantAbstract x) = domainOf (fmap Constant x)
- domainOf (DomainInConstant dom) = return (fmap Constant dom)
- domainOf (TypedConstant x ty) = domainOf (Typed (Constant x) ty)
- domainOf ConstantUndefined{} = fail "DomainOf-Constant-ConstantUndefined"
-
- indexDomainsOf ConstantBool{} = return []
- indexDomainsOf ConstantInt{} = return []
- indexDomainsOf ConstantEnum{} = return []
- indexDomainsOf ConstantField{} = return []
- indexDomainsOf (ConstantAbstract x) = indexDomainsOf (fmap Constant x)
- indexDomainsOf DomainInConstant{} = return []
- indexDomainsOf (TypedConstant x ty) = indexDomainsOf (Typed (Constant x) ty)
- indexDomainsOf ConstantUndefined{} = return []
-
-instance DomainOf (AbstractLiteral Expression) where
-
- domainOf (AbsLitTuple xs) = DomainTuple <$> mapM domainOf xs
-
- domainOf (AbsLitRecord xs) = DomainRecord <$> sequence [ do t <- domainOf x ; return (n,t)
- | (n,x) <- xs ]
-
- domainOf (AbsLitVariant Nothing _ _) = fail "Cannot calculate the domain of variant literal."
- domainOf (AbsLitVariant (Just t) _ _) = return (DomainVariant t)
-
- domainOf (AbsLitMatrix ind inn ) = DomainMatrix ind <$> (domainUnions =<< mapM domainOf inn)
-
- domainOf (AbsLitSet [] ) = return $ DomainSet def attr (DomainAny "domainOf-AbsLitSet-[]" TypeAny)
- where attr = SetAttr (SizeAttr_Size 0)
- domainOf (AbsLitSet xs ) = DomainSet def attr <$> (domainUnions =<< mapM domainOf xs)
- where attr = SetAttr (SizeAttr_MaxSize $ fromInt $ genericLength xs)
-
- domainOf (AbsLitMSet [] ) = return $ DomainMSet def attr (DomainAny "domainOf-AbsLitMSet-[]" TypeAny)
- where attr = MSetAttr (SizeAttr_Size 0) OccurAttr_None
- domainOf (AbsLitMSet xs ) = DomainMSet def attr <$> (domainUnions =<< mapM domainOf xs)
- where attr = MSetAttr (SizeAttr_MaxSize $ fromInt $ genericLength xs) OccurAttr_None
-
- domainOf (AbsLitFunction [] ) = return $ DomainFunction def attr
- (DomainAny "domainOf-AbsLitFunction-[]-1" TypeAny)
- (DomainAny "domainOf-AbsLitFunction-[]-2" TypeAny)
- where attr = FunctionAttr (SizeAttr_Size 0) def def
- domainOf (AbsLitFunction xs ) = DomainFunction def attr
- <$> (domainUnions =<< mapM (domainOf . fst) xs)
- <*> (domainUnions =<< mapM (domainOf . snd) xs)
- where attr = FunctionAttr (SizeAttr_MaxSize $ fromInt $ genericLength xs) def def
-
- domainOf (AbsLitSequence [] ) = return $ DomainSequence def attr
- (DomainAny "domainOf-AbsLitSequence-[]" TypeAny)
- where attr = SequenceAttr (SizeAttr_Size 0) def
- domainOf (AbsLitSequence xs ) = DomainSequence def attr
- <$> (domainUnions =<< mapM domainOf xs)
- where attr = SequenceAttr (SizeAttr_MaxSize (fromInt $ genericLength xs)) def
-
- domainOf (AbsLitRelation [] ) = return $ DomainRelation def attr []
- where attr = RelationAttr (SizeAttr_Size 0) def
- domainOf (AbsLitRelation xss) = do
- ty <- domainUnions =<< mapM (domainOf . AbsLitTuple) xss
- case ty of
- DomainTuple ts -> return (DomainRelation def attr ts)
- _ -> bug "expecting DomainTuple in domainOf"
- where attr = RelationAttr (SizeAttr_MaxSize (fromInt $ genericLength xss)) def
-
- domainOf (AbsLitPartition [] ) = return $ DomainPartition def attr
- (DomainAny "domainOf-AbsLitPartition-[]" TypeAny)
- where attr = PartitionAttr (SizeAttr_Size 0) (SizeAttr_Size 0) False
- domainOf (AbsLitPartition xss) = DomainPartition def attr <$> (domainUnions =<< mapM domainOf (concat xss))
- where attr = PartitionAttr (SizeAttr_MaxSize (fromInt $ genericLength xss))
- (SizeAttr_MaxSize (fromInt $ maximum [genericLength xs | xs <- xss]))
- False
- domainOf (AbsLitPermutation [] ) = return $ DomainPermutation def attr (DomainAny "domainOf-AbsLitPermutation-[]" TypeAny)
- where attr = PermutationAttr (SizeAttr_Size 0)
- domainOf (AbsLitPermutation xss) = DomainPermutation def def <$> (domainUnions =<< mapM domainOf (concat xss))
- indexDomainsOf (AbsLitMatrix ind inn) = (ind :) <$> (mapM domainUnions =<< mapM indexDomainsOf inn)
- indexDomainsOf _ = return []
-
-
-
-
--- all the `Op`s
-
-instance DomainOf (OpActive x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpAllDiff x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpAllDiffExcept x) where
- domainOf _ = return DomainBool
-
-instance DomainOf x => DomainOf (OpCatchUndef x) where
- domainOf (OpCatchUndef x _) = domainOf x
-
-instance DomainOf (OpAnd x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpApart x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpAttributeAsConstraint x) where
- domainOf _ = return DomainBool
-
-instance DomainOf x => DomainOf (OpDefined x) where
- domainOf (OpDefined f) = do
- fDom <- domainOf f
- case fDom of
- DomainFunction _ _ fr _ -> return $ DomainSet def def fr
- _ -> fail "domainOf, OpDefined, not a function"
-
-instance DomainOf x => DomainOf (OpDiv x) where
- domainOf (OpDiv x y) = do
- xDom :: Dom <- domainOf x
- yDom :: Dom <- domainOf y
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- let vals = [essence| [ &i / &j
- | &iPat : &xDom
- , &jPat : &yDom
- ] |]
- let low = [essence| min(&vals) |]
- let upp = [essence| max(&vals) |]
- return (DomainInt TagInt [RangeBounded low upp] :: Dom)
-
-instance DomainOf (OpDontCare x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpDotLeq x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpDotLt x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpEq x) where
- domainOf _ = return DomainBool
-
-instance (Pretty x, TypeOf x) => DomainOf (OpFactorial x) where
- domainOf op = mkDomainAny ("OpFactorial:" <++> pretty op) <$> typeOf op
-
-instance (Pretty x, TypeOf x, DomainOf x) => DomainOf (OpFlatten x) where
- domainOf (OpFlatten (Just 1) x) = domainOf x >>= innerDomainOf
- domainOf op = mkDomainAny ("OpFlatten:" <++> pretty op) <$> typeOf op
-
-instance (Pretty x, TypeOf x) => DomainOf (OpFreq x) where
- domainOf op = mkDomainAny ("OpFreq:" <++> pretty op) <$> typeOf op
-
-instance DomainOf (OpGeq x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpGt x) where
- domainOf _ = return DomainBool
-
-instance (Pretty x, TypeOf x) => DomainOf (OpHist x) where
- domainOf op = mkDomainAny ("OpHist:" <++> pretty op) <$> typeOf op
-
-instance DomainOf (OpIff x) where
- domainOf _ = return DomainBool
-
-instance (Pretty x, TypeOf x, DomainOf x) => DomainOf (OpImage x) where
-<<<<<<< HEAD
- domainOf op = mkDomainAny ("OpImage:" <++> pretty op) <$> typeOf op
- indexDomainsOf (OpImage _ x) = indexDomainsOf x
-=======
- domainOf (OpImage f _) = do
- fDomain <- domainOf f
- case fDomain of
- DomainFunction _ _ _ to -> return to
- DomainSequence _ _ to -> return to
- _ -> fail "domainOf, OpImage, not a function or sequence"
->>>>>>> master
-
-instance (Pretty x, TypeOf x) => DomainOf (OpImageSet x) where
- domainOf op = mkDomainAny ("OpImageSet:" <++> pretty op) <$> typeOf op
-
-instance DomainOf (OpImply x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpIn x) where
- domainOf _ = return DomainBool
-
-instance (Pretty x, TypeOf x, ExpressionLike x, DomainOf x) => DomainOf (OpIndexing x) where
- domainOf (OpIndexing m i) = do
- iType <- typeOf i
- case iType of
- TypeBool{} -> return ()
- TypeInt{} -> return ()
- _ -> fail "domainOf, OpIndexing, not a bool or int index"
- mDom <- domainOf m
- case mDom of
- DomainMatrix _ inner -> return inner
- DomainTuple inners -> do
- iInt <- intOut "domainOf OpIndexing" i
- return $ atNote "domainOf" inners (fromInteger (iInt-1))
- _ -> fail "domainOf, OpIndexing, not a matrix or tuple"
-
- indexDomainsOf p@(OpIndexing m i) = do
- iType <- typeOf i
- case iType of
- TypeBool{} -> return ()
- TypeInt{} -> return ()
- _ -> fail "domainOf, OpIndexing, not a bool or int index"
- is <- indexDomainsOf m
- case is of
- [] -> fail ("indexDomainsOf{OpIndexing}, not a matrix domain:" <++> pretty p)
- (_:is') -> return is'
-
-instance (Pretty x, TypeOf x) => DomainOf (OpIntersect x) where
- domainOf op = mkDomainAny ("OpIntersect:" <++> pretty op) <$> typeOf op
-
-instance DomainOf (OpInverse x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpLeq x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpLexLeq x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpLexLt x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpLt x) where
- domainOf _ = return DomainBool
-
-instance (Pretty x, TypeOf x, ExpressionLike x, DomainOf x, Domain () x :< x) => DomainOf (OpMax x) where
- domainOf (OpMax x)
- | Just xs <- listOut x
- , not (null xs) = do
- doms <- mapM domainOf xs
- let lows = fromList [ [essence| min(`&d`) |] | d <- doms ]
- let low = [essence| max(&lows) |]
- let upps = fromList [ [essence| max(`&d`) |] | d <- doms ]
- let upp = [essence| max(&upps) |]
- TypeInt t <- typeOfDomain (head doms)
- return (DomainInt t [RangeBounded low upp] :: Dom)
- domainOf op = mkDomainAny ("OpMax:" <++> pretty op) <$> typeOf op
-
-instance (Pretty x, TypeOf x, ExpressionLike x, DomainOf x, Domain () x :< x) => DomainOf (OpMin x) where
- domainOf (OpMin x)
- | Just xs <- listOut x
- , not (null xs) = do
- doms <- mapM domainOf xs
- let lows = fromList [ [essence| min(`&d`) |] | d <- doms ]
- let low = [essence| min(&lows) |]
- let upps = fromList [ [essence| max(`&d`) |] | d <- doms ]
- let upp = [essence| min(&upps) |]
- TypeInt t <- typeOfDomain (head doms)
- return (DomainInt t [RangeBounded low upp] :: Dom)
- domainOf op = mkDomainAny ("OpMin:" <++> pretty op) <$> typeOf op
-
-instance DomainOf x => DomainOf (OpMinus x) where
- domainOf (OpMinus x y) = do
- xDom :: Dom <- domainOf x
- yDom :: Dom <- domainOf y
-
- xDom_Min <- minOfDomain xDom
- xDom_Max <- maxOfDomain xDom
- yDom_Min <- minOfDomain yDom
- yDom_Max <- maxOfDomain yDom
-
- let low = [essence| &xDom_Min - &yDom_Max |]
- let upp = [essence| &xDom_Max - &yDom_Min |]
-
- return (DomainInt TagInt [RangeBounded low upp] :: Dom)
-
-instance (Pretty x, TypeOf x) => DomainOf (OpMod x) where
- domainOf op = mkDomainAny ("OpMod:" <++> pretty op) <$> typeOf op
-
-instance (Pretty x, TypeOf x) => DomainOf (OpNegate x) where
- domainOf op = mkDomainAny ("OpNegate:" <++> pretty op) <$> typeOf op
-
-instance DomainOf (OpNeq x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpNot x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpOr x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpXor x) where
- domainOf _ = return DomainBool
-
-instance (Pretty x, TypeOf x) => DomainOf (OpParticipants x) where
- domainOf op = mkDomainAny ("OpParticipants:" <++> pretty op) <$> typeOf op
-
-instance DomainOf x => DomainOf (OpParts x) where
- domainOf (OpParts p) = do
- dom <- domainOf p
- case dom of
- DomainPartition _ _ inner -> return $ DomainSet def def $ DomainSet def def inner
- _ -> fail "domainOf, OpParts, not a partition"
-
-instance (Pretty x, TypeOf x) => DomainOf (OpParty x) where
- domainOf op = mkDomainAny ("OpParty:" <++> pretty op) <$> typeOf op
-
-
-instance (Pretty x, TypeOf x) => DomainOf (OpCompose x) where
- domainOf op = mkDomainAny ("OpCompose:" <++> pretty op) <$> typeOf op
-
-instance (Pretty x, TypeOf x) => DomainOf (OpPow x) where
- domainOf op = mkDomainAny ("OpPow:" <++> pretty op) <$> typeOf op
-
-instance (Pretty x, TypeOf x) => DomainOf (OpPowerSet x) where
- domainOf op = mkDomainAny ("OpPowerSet:" <++> pretty op) <$> typeOf op
-
-instance (Pretty x, TypeOf x) => DomainOf (OpPreImage x) where
- domainOf op = mkDomainAny ("OpPreImage:" <++> pretty op) <$> typeOf op
-
-instance DomainOf x => DomainOf (OpPred x) where
- domainOf (OpPred x) = domainOf x -- TODO: improve
-
-instance (ExpressionLike x, DomainOf x) => DomainOf (OpProduct x) where
- domainOf (OpProduct x)
- | Just xs <- listOut x
- , not (null xs) = do
- (iPat, i) <- quantifiedVar
- doms <- mapM domainOf xs
- -- maximum absolute value in each domain
- let upps = fromList [ [essence| max([ |&i| | &iPat : &d ]) |]
- | d <- doms ]
- -- a (too lax) upper bound is multiplying all those together
- let upp = [essence| product(&upps) |]
- -- a (too lax) lower bound is -upp
- let low = [essence| -1 * &upp |]
- return $ DomainInt TagInt [RangeBounded low upp]
- domainOf _ = return $ DomainInt TagInt [RangeBounded 1 1]
-
-instance DomainOf x => DomainOf (OpRange x) where
- domainOf (OpRange f) = do
- fDom <- domainOf f
- case fDom of
- DomainFunction _ _ _ to -> return $ DomainSet def def to
- _ -> fail "domainOf, OpRange, not a function"
-
-instance (Pretty x, TypeOf x) => DomainOf (OpRelationProj x) where
- domainOf op = mkDomainAny ("OpRelationProj:" <++> pretty op) <$> typeOf op
-
-instance (DomainOf x, Dom :< x) => DomainOf (OpRestrict x) where
- domainOf (OpRestrict f x) = do
- d <- project x
- fDom <- domainOf f
- case fDom of
- DomainFunction fRepr a _ to -> return (DomainFunction fRepr a d to)
- _ -> fail "domainOf, OpRestrict, not a function"
-
-instance (Pretty x, DomainOf x) => DomainOf (OpSlicing x) where
- domainOf (OpSlicing x _ _) = domainOf x
- indexDomainsOf (OpSlicing x _ _) = indexDomainsOf x
-
-instance DomainOf (OpSubsequence x) where
- domainOf _ = fail "domainOf{OpSubsequence}"
-
-instance (Pretty x, TypeOf x) => DomainOf (OpSubset x) where
- domainOf op = mkDomainAny ("OpSubset:" <++> pretty op) <$> typeOf op
-
-instance (Pretty x, TypeOf x) => DomainOf (OpSubsetEq x) where
- domainOf op = mkDomainAny ("OpSubsetEq:" <++> pretty op) <$> typeOf op
-
-instance DomainOf (OpSubstring x) where
- domainOf _ = fail "domainOf{OpSubstring}"
-
-instance DomainOf x => DomainOf (OpSucc x) where
- domainOf (OpSucc x) = domainOf x -- TODO: improve
-
-instance (ExpressionLike x, DomainOf x) => DomainOf (OpSum x) where
- domainOf (OpSum x)
- | Just xs <- listOut x
- , not (null xs) = do
- doms <- mapM domainOf xs
- let lows = fromList [ [essence| min(`&d`) |] | d <- doms ]
- let low = [essence| sum(&lows) |]
- let upps = fromList [ [essence| max(`&d`) |] | d <- doms ]
- let upp = [essence| sum(&upps) |]
- return (DomainInt TagInt [RangeBounded low upp] :: Dom)
- domainOf _ = return $ DomainInt TagInt [RangeBounded 0 0]
-
-
-instance DomainOf (OpSupset x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpSupsetEq x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpTildeLeq x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpTildeLt x) where
- domainOf _ = return DomainBool
-
-instance DomainOf (OpToInt x) where
- domainOf _ = return $ DomainInt TagInt [RangeBounded 0 1]
-
-instance (Pretty x, TypeOf x) => DomainOf (OpToMSet x) where
- domainOf op = mkDomainAny ("OpToMSet:" <++> pretty op) <$> typeOf op
-
-instance (Pretty x, TypeOf x) => DomainOf (OpToRelation x) where
- domainOf op = mkDomainAny ("OpToRelation:" <++> pretty op) <$> typeOf op
-
-instance (Pretty x, TypeOf x) => DomainOf (OpToSet x) where
- domainOf op = mkDomainAny ("OpToSet:" <++> pretty op) <$> typeOf op
-
-instance DomainOf (OpTogether x) where
- domainOf _ = return DomainBool
-
-instance (Pretty x, TypeOf x) => DomainOf (OpTransform x) where
- domainOf op = mkDomainAny ("OpTransform:" <++> pretty op) <$> typeOf op
-
-instance DomainOf (OpTrue x) where
- domainOf _ = return DomainBool
-
-instance (Pretty x, TypeOf x, Domain () x :< x) => DomainOf (OpTwoBars x) where
- domainOf op = mkDomainAny ("OpTwoBars:" <++> pretty op) <$> typeOf op
-
-instance (Pretty x, TypeOf x) => DomainOf (OpUnion x) where
- domainOf op = mkDomainAny ("OpUnion:" <++> pretty op) <$> typeOf op
-
diff --git a/src/Conjure/Language/Constant.hs.orig b/src/Conjure/Language/Constant.hs.orig
deleted file mode 100644
index fcd2b6c26d..0000000000
--- a/src/Conjure/Language/Constant.hs.orig
+++ /dev/null
@@ -1,535 +0,0 @@
-{-# LANGUAGE DeriveGeneric, DeriveDataTypeable #-}
-
-module Conjure.Language.Constant
- ( Constant(..)
- , valuesInIntDomain
- , normaliseConstant
- , mkUndef, isUndef
- , emptyCollection
- , viewConstantBool
- , viewConstantInt
- , viewConstantTuple
- , viewConstantRecord
- , viewConstantVariant
- , viewConstantMatrix
- , viewConstantSet
- , viewConstantMSet
- , viewConstantFunction
- , viewConstantSequence
- , viewConstantRelation
- , viewConstantPartition
- , viewConstantPermutation
- , reDomConst
- ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Bug
-import Conjure.Language.Name
-import Conjure.Language.Domain
-import Conjure.Language.Type
-import Conjure.Language.AbstractLiteral
-
-import Conjure.Language.DomainSizeOf
-import Conjure.Language.TypeOf
-import Conjure.Language.AdHoc
-import Conjure.Language.Pretty
-
--- base
-import Data.Data ( toConstr, constrIndex )
-
--- QuickCheck
-import Test.QuickCheck ( Arbitrary(..), oneof )
-
-
-data Constant
- = ConstantBool Bool
- | ConstantInt IntTag Integer
- | ConstantEnum Name {- name for the enum domain -}
- [Name] {- values in the enum domain -}
- Name {- the literal -}
- | ConstantField Name Type -- the name of a field of Record or Variant and its type
- | ConstantAbstract (AbstractLiteral Constant)
- | DomainInConstant (Domain () Constant)
- | TypedConstant Constant Type
- | ConstantUndefined Text Type -- never use this for a bool
- -- use false instead for them
- deriving (Show, Data, Typeable, Generic)
-
-instance Eq Constant where
- a == b = compare a b == EQ
-
--- implementing the Eq&Ord instances by hand, because we want to special case the TypedConstant constructor
-instance Ord Constant where
-
- -- do not use type info when comparing
- compare (TypedConstant a _) (TypedConstant b _) = compare a b
- compare (TypedConstant a _) b = compare a b
- compare a (TypedConstant b _) = compare a b
-
- -- the "usual" comparisons
- compare (ConstantBool a) (ConstantBool b) = compare a b
- compare (ConstantInt _ a) (ConstantInt _ b) = compare a b
- compare (ConstantEnum _ aVals aVal) (ConstantEnum _ bVals bVal) =
- compare (elemIndex aVal aVals, aVal) (elemIndex bVal bVals, bVal)
- compare (ConstantField a1 a2) (ConstantField b1 b2) = compare (a1,a2) (b1,b2)
- compare (ConstantAbstract a) (ConstantAbstract b) = compare a b
- compare (DomainInConstant a) (DomainInConstant b) = compare a b
- compare (ConstantUndefined a1 a2) (ConstantUndefined b1 b2) = compare (a1,a2) (b1,b2)
-
- -- if the constructors do not match
- compare a b = compare (constrIndex (toConstr a)) (constrIndex (toConstr b))
-
-instance Serialize Constant
-instance Hashable Constant
-instance ToJSON Constant where toJSON = genericToJSON jsonOptions
-instance FromJSON Constant where parseJSON = genericParseJSON jsonOptions
-
-instance Arbitrary Constant where
- arbitrary = oneof
- [ ConstantBool <$> arbitrary
- , ConstantInt TagInt <$> arbitrary
- ]
-
-instance TypeOf Constant where
- typeOf ConstantBool{} = return TypeBool
- typeOf (ConstantInt t _) = return (TypeInt t)
- typeOf (ConstantEnum defn _ _ ) = return (TypeEnum defn)
- typeOf (ConstantField _ ty) = return ty
- typeOf (ConstantAbstract x ) = typeOf x
- typeOf (DomainInConstant dom) = typeOfDomain dom
- typeOf (TypedConstant _ ty) = return ty
- typeOf (ConstantUndefined _ ty) = return ty
-
-instance DomainSizeOf Constant Integer where
- domainSizeOf DomainBool{} = return 2
- domainSizeOf (DomainIntE x) = bug ("not implemented, domainSizeOf DomainIntE" <+> pretty (show x))
- domainSizeOf (DomainInt _ rs) = domainSizeOfRanges rs
- domainSizeOf DomainEnum{} = fail "domainSizeOf: Unknown for given enum."
- domainSizeOf (DomainTuple ds) = product <$> mapM domainSizeOf ds
- domainSizeOf (DomainMatrix index inner) = intPow <$> domainSizeOf inner <*> domainSizeOf index
- domainSizeOf d@(DomainSet _ (SetAttr attrs) inner) =
- case attrs of
- SizeAttr_None -> do
- innerSize <- domainSizeOf inner
- return (2 `intPow` innerSize)
- SizeAttr_Size (ConstantInt _ size) -> do
- innerSize <- domainSizeOf inner
- return (nchoosek (product . enumFromTo 1) innerSize size)
- SizeAttr_MinSize{} -> do
- -- TODO: we can do better here
- innerSize <- domainSizeOf inner
- return (2 `intPow` innerSize)
- SizeAttr_MaxSize (ConstantInt _ maxSize) -> do
- innerSize <- domainSizeOf inner
- return $ sum [ nchoosek (product . enumFromTo 1) innerSize k | k <- [0 .. maxSize] ]
- SizeAttr_MinMaxSize (ConstantInt _ minSize) (ConstantInt _ maxSize) -> do
- innerSize <- domainSizeOf inner
- return $ sum [ nchoosek (product . enumFromTo 1) innerSize k | k <- [minSize .. maxSize] ]
- _ -> fail ("domainSizeOf{Constant}" <+> pretty d)
- domainSizeOf DomainMSet {} = bug "not implemented: domainSizeOf DomainMSet"
- domainSizeOf DomainFunction {} = bug "not implemented: domainSizeOf DomainFunction"
- domainSizeOf DomainRelation {} = bug "not implemented: domainSizeOf DomainRelation"
- domainSizeOf DomainPartition {} = bug "not implemented: domainSizeOf DomainPartition"
- domainSizeOf _ = bug "not implemented: domainSizeOf"
-
-emptyCollection :: Constant -> Bool
-emptyCollection ConstantBool{} = False
-emptyCollection ConstantInt{} = False
-emptyCollection ConstantEnum{} = False
-emptyCollection ConstantField{} = False
-emptyCollection (ConstantAbstract x) = emptyCollectionAbsLit x
-emptyCollection DomainInConstant{} = False
-emptyCollection (TypedConstant x _) = emptyCollection x
-emptyCollection ConstantUndefined{} = False
-
-intPow :: Integer -> Integer -> Integer
-intPow = (^)
-
-domainSizeOfRanges :: MonadFail m => [Range Constant] -> m Integer
-domainSizeOfRanges = fmap genericLength . valuesInIntDomain
-
-instance DomainSizeOf Constant Constant where
- domainSizeOf = fmap (ConstantInt TagInt) . domainSizeOf
-
-instance Pretty Constant where
-
- -- hack, oh sweet hack!
- -- print a domain instead of a type when printing an empty matrix literal.
- -- this means we print "int()" instead of "int" inside the index of a matrix type
- -- SR expects it this way...
- pretty (TypedConstant (ConstantAbstract (AbsLitMatrix _ [])) ty) =
- let
- pretty' (TypeMatrix index innerNested)
- = "matrix indexed by" <+> prettyList prBrackets "," (map pretty' indices)
- <+> "of" <+> pretty inner
- where
- (indices,inner) = first (index:) $ collect innerNested
- collect (TypeMatrix i j) = first (i:) $ collect j
- collect x = ([],x)
- pretty' TypeInt{} = "int()"
- pretty' t = pretty t
- in
- prParens $ "[] : `" <> pretty' ty <> "`"
-
- pretty (ConstantBool False) = "false"
- pretty (ConstantBool True ) = "true"
- pretty (ConstantInt _ x ) = pretty x
- pretty (ConstantEnum _ _ x) = pretty x
- pretty (ConstantField n _) = pretty n
- pretty (ConstantAbstract x) = pretty x
- pretty (DomainInConstant d) = "`" <> pretty d <> "`"
- pretty (TypedConstant x ty) = prParens $ pretty x <+> ":" <+> "`" <> pretty ty <> "`"
- pretty (ConstantUndefined reason ty) = "undefined" <> prParens (pretty reason <+> ":" <+> "`" <> pretty ty <> "`")
-
-instance ExpressionLike Constant where
- fromInt = ConstantInt TagInt
- fromIntWithTag i t = ConstantInt t i
- intOut _ (ConstantInt _ x) = return x
- intOut doc c = fail $ vcat [ "Expecting an integer, but found:" <+> pretty c
- , "Called from:" <+> doc
- ]
-
- fromBool = ConstantBool
- boolOut (ConstantBool x) = return x
- boolOut ConstantUndefined{} = return False
- boolOut c = fail ("Expecting a boolean, but found:" <+> pretty c)
-
- fromList xs = ConstantAbstract $ AbsLitMatrix (mkDomainIntB 1 (fromInt $ genericLength xs)) xs
- listOut (ConstantAbstract (AbsLitMatrix _ xs)) = return xs
- listOut c = fail ("Expecting a matrix literal, but found:" <+> pretty c)
-
-instance ReferenceContainer Constant where
- fromName name = bug ("ReferenceContainer{Constant} fromName --" <+> pretty name)
- nameOut (ConstantField nm _) = return nm
- nameOut p = bug ("ReferenceContainer{Constant} nameOut --" <+> pretty p)
-
-instance DomainContainer Constant (Domain ()) where
- fromDomain = DomainInConstant
- domainOut (DomainInConstant dom) = return dom
- domainOut _ = fail "domainOut{Constant}"
-
-mkUndef :: Type -> Doc -> Constant
-mkUndef TypeBool _ = ConstantBool False
-mkUndef ty reason = ConstantUndefined (stringToText $ show reason) ty
-
-isUndef :: Constant -> Bool
-isUndef ConstantUndefined{} = True
-isUndef _ = False
-
-normaliseConstant :: Constant -> Constant
-normaliseConstant x@ConstantBool{} = x
-normaliseConstant x@ConstantInt{} = x
-normaliseConstant x@ConstantEnum{} = x
-normaliseConstant x@ConstantField{} = x
-normaliseConstant (ConstantAbstract x) = ConstantAbstract (normaliseAbsLit normaliseConstant x)
-normaliseConstant (DomainInConstant d) = DomainInConstant (normaliseDomain normaliseConstant d)
-normaliseConstant (TypedConstant c ty) = TypedConstant (normaliseConstant c) ty
-normaliseConstant x@ConstantUndefined{} = x
-
-instance Num Constant where
- ConstantInt _ x + ConstantInt _ y = ConstantInt TagInt (x+y)
- x + y = bug $ vcat [ "Num Constant (+)", "x:" <+> pretty x, "y:" <+> pretty y ]
- ConstantInt _ x - ConstantInt _ y = ConstantInt TagInt (x-y)
- x - y = bug $ vcat [ "Num Constant (-)", "x:" <+> pretty x, "y:" <+> pretty y ]
- ConstantInt _ x * ConstantInt _ y = ConstantInt TagInt (x*y)
- x * y = bug $ vcat [ "Num Constant (*)", "x:" <+> pretty x, "y:" <+> pretty y ]
- abs (ConstantInt t x) = ConstantInt t (abs x)
- abs x = bug $ vcat [ "Num Constant abs", "x:" <+> pretty x ]
- signum (ConstantInt t x) = ConstantInt t (signum x)
- signum x = bug $ vcat [ "Num Constant signum", "x:" <+> pretty x ]
- fromInteger = ConstantInt TagInt . fromInteger
-
-
-valuesInIntDomain :: MonadFail m => [Range Constant] -> m [Integer]
-valuesInIntDomain ranges =
- if isFinite
- then return allValues
- else fail $ "Expected finite integer ranges, but got:" <++> prettyList id "," ranges
-
- where
-
- allRanges :: [Maybe [Integer]]
- allRanges =
- [ vals
- | r <- ranges
- , let vals = case r of
- RangeSingle (ConstantInt _ x) -> return [x]
- RangeBounded (ConstantInt _ l) (ConstantInt _ u) -> return [l..u]
- _ -> Nothing
- ]
-
- isFinite :: Bool
- isFinite = Nothing `notElem` allRanges
-
- allValues :: [Integer]
- allValues = sortNub $ concat $ catMaybes allRanges
-
-
-<<<<<<< HEAD
--- | Assuming both the value and the domain are normalised
--- TODO: make this stricter, but write failing test cases first!
-validateConstantForDomain :: forall m r . (MonadFail m, Pretty r) => Name -> Constant -> Domain r Constant -> m ()
-
-validateConstantForDomain _ ConstantBool{} DomainBool{} = return ()
-
-validateConstantForDomain _ _ (DomainInt _ []) = return () -- no restrictions
-
-validateConstantForDomain name c@(ConstantInt cTag i) d@(DomainInt dTag rs) | cTag == dTag =
- let
- intInRange RangeOpen = True
- intInRange (RangeSingle (ConstantInt _ a)) = i == a
- intInRange (RangeLowerBounded (ConstantInt _ a)) = i >= a
- intInRange (RangeUpperBounded (ConstantInt _ a)) = i <= a
- intInRange (RangeBounded (ConstantInt _ a) (ConstantInt _ b)) = i >= a && i <= b
- intInRange _ = False
- in unless (any intInRange rs) (constantNotInDomain name c d)
-
-validateConstantForDomain _ (ConstantInt _ i) (DomainUnnamed _ (ConstantInt _ a)) | i >= 1 && i <= a = return ()
-
-validateConstantForDomain _ _ (DomainEnum _ Nothing _) = return () -- no restrictions
-validateConstantForDomain name c d@(DomainEnum _ _ Nothing) =
- fail $ vcat [ "validateConstantForDomain: enum not handled"
- , pretty name
- , pretty c
- , pretty d
- ]
-validateConstantForDomain name
- c@(ConstantInt cTag _)
- d@(DomainEnum _ (Just ranges) (Just mp)) = nested c d $ do
- let
- -- lu :: MonadFail m => Name -> m Constant
- lu (ConstantEnum _ _ nm) =
- case lookup nm mp of
- Nothing -> fail $ "No value for:" <+> pretty nm
- Just v -> return (ConstantInt cTag v)
- lu (ConstantInt t v) = return (ConstantInt t v)
- lu x = fail $ "validateConstantForDomain.lu" <+> pretty x
-
- -- lu2 :: MonadFail m => Range Name -> m (Range Constant)
- lu2 = mapM lu
-
- rs <- mapM lu2 ranges
- validateConstantForDomain name c (DomainInt cTag rs :: Domain r Constant)
-
-validateConstantForDomain name
- c@(ConstantAbstract (AbsLitTuple cs))
- d@(DomainTuple ds) = nested c d $ zipWithM_ (validateConstantForDomain name) cs ds
-
-validateConstantForDomain name
- c@(ConstantAbstract (AbsLitRecord (sortOn fst -> cs)))
- d@(DomainRecord (sortOn fst -> ds))
- | map fst cs == map fst ds
- = nested c d $ zipWithM_ (validateConstantForDomain name) (map snd cs) (map snd ds)
- | otherwise
- = constantNotInDomain name c d
-
-validateConstantForDomain name
- c@(ConstantAbstract (AbsLitVariant _ n c'))
- d@(DomainVariant ds)
- | Just d' <- lookup n ds
- = nested c d $ validateConstantForDomain name c' d'
- | otherwise
- = constantNotInDomain name c d
-
-validateConstantForDomain name
- c@(ConstantAbstract (AbsLitMatrix cIndex vals))
- d@(DomainMatrix dIndex dInner) = do
- nested c d $
- mapM_ (\ val -> validateConstantForDomain name val dInner ) vals
- let
- isEmptyIntDomain (DomainInt _ []) = True
- isEmptyIntDomain _ = False
- unless (cIndex == dIndex || isEmptyIntDomain cIndex) $ fail $ vcat
- [ "The indices do not match between the value and the domain."
- , "Value :" <+> pretty c
- , "Domain:" <+> pretty d
- ]
-
-validateConstantForDomain name
- c@(ConstantAbstract (AbsLitSet vals))
- d@(DomainSet _ (SetAttr sizeAttr) dInner) = do
- let cardinalityOK = case sizeAttr of
- SizeAttr_None -> True
- SizeAttr_Size (ConstantInt _ s) -> s == genericLength vals
- SizeAttr_MinSize (ConstantInt _ s) -> s <= genericLength vals
- SizeAttr_MaxSize (ConstantInt _ s) -> genericLength vals <= s
- SizeAttr_MinMaxSize (ConstantInt _ smin) (ConstantInt _ smax) ->
- smin <= genericLength vals && genericLength vals <= smax
- _ -> False
- unless cardinalityOK $ fail $ vcat
- [ "The value is not a member of the domain."
- , "Value :" <+> pretty c
- , "Domain:" <+> pretty d
- , "Reason: Domain attributes are not satisfied."
- , "Specifically:" <+> pretty sizeAttr
- ]
- nested c d $ mapM_ (\ val -> validateConstantForDomain name val dInner ) vals
-
-validateConstantForDomain name
- c@(ConstantAbstract (AbsLitMSet vals))
- d@(DomainMSet _ (MSetAttr sizeAttr occurAttr) dInner) = do
- let cardinalityOK = case sizeAttr of
- SizeAttr_None -> True
- SizeAttr_Size (ConstantInt _ s) -> s == genericLength vals
- SizeAttr_MinSize (ConstantInt _ s) -> s <= genericLength vals
- SizeAttr_MaxSize (ConstantInt _ s) -> genericLength vals <= s
- SizeAttr_MinMaxSize (ConstantInt _ smin) (ConstantInt _ smax) ->
- smin <= genericLength vals && genericLength vals <= smax
- _ -> False
- unless cardinalityOK $ fail $ vcat
- [ "The value is not a member of the domain."
- , "Value :" <+> pretty c
- , "Domain:" <+> pretty d
- , "Reason: Domain attributes are not satisfied."
- , "Specifically:" <+> pretty sizeAttr
- ]
- let occurOK = case occurAttr of
- OccurAttr_None -> True
- OccurAttr_MinOccur (ConstantInt _ s) -> and [ s <= occ | (_, occ) <- histogram vals ]
- OccurAttr_MaxOccur (ConstantInt _ s) -> and [ occ <= s | (_, occ) <- histogram vals ]
- OccurAttr_MinMaxOccur (ConstantInt _ smin) (ConstantInt _ smax) ->
- and [ smin <= occ && occ <= smax | (_, occ) <- histogram vals ]
- _ -> False
- unless occurOK $ fail $ vcat
- [ "The value is not a member of the domain."
- , "Value :" <+> pretty c
- , "Domain:" <+> pretty d
- , "Reason: Domain attributes are not satisfied."
- , "Specifically:" <+> pretty occurAttr
- ]
- nested c d $ mapM_ (\ val -> validateConstantForDomain name val dInner ) vals
-
-validateConstantForDomain name
- c@(ConstantAbstract (AbsLitFunction vals))
- d@(DomainFunction _ _ dFrom dTo) = nested c d $ do
- mapM_ (\ val -> validateConstantForDomain name (fst val) dFrom) vals
- mapM_ (\ val -> validateConstantForDomain name (snd val) dTo ) vals
-
-validateConstantForDomain name
- c@(ConstantAbstract (AbsLitSequence vals))
- d@(DomainSequence _ _ dInner) = nested c d $
- mapM_ (\ val -> validateConstantForDomain name val dInner ) vals
-
-validateConstantForDomain name
- c@(ConstantAbstract (AbsLitRelation valss))
- d@(DomainRelation _ _ dInners) = nested c d $
- forM_ valss $ \ vals ->
- zipWithM_ (validateConstantForDomain name) vals dInners
-
-validateConstantForDomain name
- c@(ConstantAbstract (AbsLitPartition valss))
- d@(DomainPartition _ _ dInner) = nested c d $
- mapM_ (\ val -> validateConstantForDomain name val dInner ) (concat valss)
-validateConstantForDomain name
- c@(ConstantAbstract (AbsLitPermutation valss))
- d@(DomainPermutation _ _ dInner) = nested c d $
- mapM_ (\ val -> validateConstantForDomain name val dInner ) (concat valss)
-validateConstantForDomain name c@(TypedConstant c' _) d = nested c d $ validateConstantForDomain name c' d
-
-validateConstantForDomain name c d = constantNotInDomain name c d
-
-
-nested :: (MonadFail m, Pretty r) => Constant -> Domain r Constant -> Either Doc () -> m ()
-nested _ _ Right{} = return ()
-nested c d (Left err) = fail $ vcat
- [ "The value is not a member of the domain."
- , "Value :" <+> pretty c
- , "Domain:" <+> pretty d
- , "Reason:"
- , nest 4 err
- ]
-
-constantNotInDomain :: (MonadFail m, Pretty r) => Name -> Constant -> Domain r Constant -> m ()
-constantNotInDomain n c d = fail $ vcat
- [ "The value is not a member of the domain."
- , "Name :" <+> pretty n
- , "Value :" <+> pretty c
- , "Domain:" <+> pretty d
- ]
-
-
-=======
->>>>>>> master
-viewConstantBool :: MonadFail m => Constant -> m Bool
-viewConstantBool (ConstantBool i) = return i
-viewConstantBool (ConstantInt _ 0) = return False
-viewConstantBool (ConstantInt _ 1) = return True
-viewConstantBool constant = fail ("Expecting a boolean, but got:" <++> pretty constant)
-
-viewConstantInt :: MonadFail m => Constant -> m Integer
-viewConstantInt (ConstantInt _ i) = return i
-viewConstantInt constant = fail ("Expecting an integer, but got:" <++> pretty constant)
-
-viewConstantTuple :: MonadFail m => Constant -> m [Constant]
-viewConstantTuple (ConstantAbstract (AbsLitTuple xs)) = return xs
-viewConstantTuple (TypedConstant c _) = viewConstantTuple c
-viewConstantTuple constant = fail ("Expecting a tuple, but got:" <++> pretty constant)
-
-viewConstantRecord :: MonadFail m => Constant -> m [(Name, Constant)]
-viewConstantRecord (ConstantAbstract (AbsLitRecord xs)) = return xs
-viewConstantRecord (TypedConstant c _) = viewConstantRecord c
-viewConstantRecord constant = fail ("Expecting a record, but got:" <++> pretty constant)
-
-viewConstantVariant :: MonadFail m => Constant -> m (Maybe [(Name, Domain () Constant)], Name, Constant)
-viewConstantVariant (ConstantAbstract (AbsLitVariant lu nm x)) = return (lu, nm, x)
-viewConstantVariant (TypedConstant c _) = viewConstantVariant c
-viewConstantVariant constant = fail ("Expecting a variant, but got:" <++> pretty constant)
-
-viewConstantMatrix :: MonadFail m => Constant -> m (Domain () Constant, [Constant])
-viewConstantMatrix (ConstantAbstract (AbsLitMatrix ind xs)) = return (ind, xs)
-viewConstantMatrix (TypedConstant c _) = viewConstantMatrix c
-viewConstantMatrix constant = fail ("Expecting a matrix, but got:" <++> pretty constant)
-
-viewConstantSet :: MonadFail m => Constant -> m [Constant]
-viewConstantSet (ConstantAbstract (AbsLitSet xs)) = return xs
-viewConstantSet (TypedConstant c _) = viewConstantSet c
-viewConstantSet constant = fail ("Expecting a set, but got:" <++> pretty constant)
-
-viewConstantMSet :: MonadFail m => Constant -> m [Constant]
-viewConstantMSet (ConstantAbstract (AbsLitMSet xs)) = return xs
-viewConstantMSet (TypedConstant c _) = viewConstantMSet c
-viewConstantMSet constant = fail ("Expecting an mset, but got:" <++> pretty constant)
-
-viewConstantFunction :: MonadFail m => Constant -> m [(Constant, Constant)]
-viewConstantFunction (ConstantAbstract (AbsLitFunction xs)) = return xs
-viewConstantFunction (TypedConstant c _) = viewConstantFunction c
-viewConstantFunction constant = do
- let
- suggestion = case constant of
- ConstantAbstract (AbsLitMatrix (DomainInt _ rs) vals) -> do
- froms <- valuesInIntDomain rs
- return $ Just $ pretty $ AbsLitFunction (zip (map (ConstantInt TagInt) froms) vals)
- _ -> return Nothing
- suggestion >>= \case
- Nothing -> fail ("Expecting a function, but got:" <++> pretty constant)
- Just sug -> fail (vcat [ "Expecting a function, but got:" <++> pretty constant
- , "Maybe you meant:" <++> sug
- ])
-
-viewConstantSequence :: MonadFail m => Constant -> m [Constant]
-viewConstantSequence (ConstantAbstract (AbsLitSequence xs)) = return xs
-viewConstantSequence (TypedConstant c _) = viewConstantSequence c
-viewConstantSequence constant = fail ("Expecting a sequence, but got:" <++> pretty constant)
-
-viewConstantRelation :: MonadFail m => Constant -> m [[Constant]]
-viewConstantRelation (ConstantAbstract (AbsLitRelation xs)) = return xs
-viewConstantRelation (TypedConstant c _) = viewConstantRelation c
-viewConstantRelation constant = fail ("Expecting a relation, but got:" <++> pretty constant)
-
-viewConstantPartition :: MonadFail m => Constant -> m [[Constant]]
-viewConstantPartition (ConstantAbstract (AbsLitPartition xs)) = return xs
-viewConstantPartition (TypedConstant c _) = viewConstantPartition c
-viewConstantPartition constant = fail ("Expecting a partition, but got:" <++> pretty constant)
-
-viewConstantPermutation :: MonadFail m => Constant -> m [[Constant]]
-viewConstantPermutation (ConstantAbstract (AbsLitPermutation xs)) = return xs
-viewConstantPermutation (TypedConstant c _) = viewConstantPermutation c
-viewConstantPermutation constant = fail ("Expecting a permutation, but got:" <++> pretty constant)
-
-
-reDomConst :: Domain () Constant -> Domain () Constant
-reDomConst cns = case cns of
- DomainInt t _ -> reTag t cns
- _ -> cns
-
diff --git a/src/Conjure/Language/Domain.hs.orig b/src/Conjure/Language/Domain.hs.orig
deleted file mode 100644
index 9164000946..0000000000
--- a/src/Conjure/Language/Domain.hs.orig
+++ /dev/null
@@ -1,1079 +0,0 @@
-{-# LANGUAGE DeriveGeneric, DeriveDataTypeable, DeriveFunctor, DeriveTraversable, DeriveFoldable #-}
-{-# LANGUAGE TupleSections #-}
-{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# LANGUAGE ViewPatterns #-}
-
-module Conjure.Language.Domain
- ( Domain(..)
- , HasRepresentation(..)
- , Range(..), rangesInts
- , SetAttr(..), SizeAttr(..), getMaxFrom_SizeAttr
- , MSetAttr(..), OccurAttr(..), getMaxFrom_OccurAttr
- , FunctionAttr(..), PartialityAttr(..), JectivityAttr(..)
- , SequenceAttr(..)
- , RelationAttr(..), BinaryRelationAttrs(..), BinaryRelationAttr(..)
- , PartitionAttr(..)
- , PermutationAttr(..)
- , AttrName(..)
- , DomainAttributes(..), DomainAttribute(..) -- only for parsing
- , textToRepresentation, representationToShortText, representationToFullText
- , isPrimitiveDomain, domainCanIndexMatrix, getIndices
- , Tree(..), reprTree, reprAtTopLevel, applyReprTree
- , reprTreeEncoded
- , forgetRepr, changeRepr, defRepr
- , mkDomainBool, mkDomainInt, mkDomainIntB, mkDomainIntBTagged, mkDomainAny
- , typeOfDomain
- , readBinRel, binRelToAttrName
- , normaliseDomain, normaliseRange
- , innerDomainOf
- , singletonDomainInt
- , matrixNumDimsD
- ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Bug
-import Conjure.Language.Name
-import Conjure.Language.Type
-import Conjure.Language.TypeOf
-import Conjure.Language.AdHoc
-import Conjure.Language.Pretty
-
--- base
-import qualified Data.Semigroup as Semigroup ( (<>) )
-
--- QuickCheck
-import Test.QuickCheck ( Arbitrary(..), choose, oneof, vectorOf, sized )
-
--- containers
-import Data.Set as S ( Set, empty, toList, union )
-
--- syb
-import Data.Data ( toConstr, constrIndex )
-
-
-data Domain r x
- = DomainAny Text Type
- | DomainBool
- | DomainIntE x
- | DomainInt IntTag [Range x]
- | DomainEnum
- Name
- (Maybe [Range x]) -- subset of values for this domain
- -- Nothing *only* when GivenDomainDefnEnum and not LettingDomainDefnEnum
- (Maybe [(Name, Integer)]) -- the mapping to integers, if available
- | DomainUnnamed Name x
- | DomainTuple [Domain r x]
- | DomainRecord [(Name, Domain r x)]
- | DomainVariant [(Name, Domain r x)]
- | DomainMatrix (Domain () x) (Domain r x)
- | DomainSet r (SetAttr x) (Domain r x)
- | DomainMSet r (MSetAttr x) (Domain r x)
- | DomainFunction r (FunctionAttr x) (Domain r x) (Domain r x)
- | DomainSequence r (SequenceAttr x) (Domain r x)
- | DomainRelation r (RelationAttr x) [Domain r x]
- | DomainPartition r (PartitionAttr x) (Domain r x)
- | DomainPermutation r (PermutationAttr x) (Domain r x)
- | DomainOp Name [Domain r x]
- | DomainReference Name (Maybe (Domain r x))
- | DomainMetaVar String
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-
-instance (VarSymBreakingDescription x, ToJSON r) => VarSymBreakingDescription (Domain r x) where
- varSymBreakingDescription domain = toJSON $ fmap varSymBreakingDescription domain
-
-mkDomainBool :: Domain () x
-mkDomainBool = DomainBool
-
-mkDomainInt :: [Range x] -> Domain () x
-mkDomainInt = DomainInt TagInt
-
-mkDomainIntB :: x -> x -> Domain () x
-mkDomainIntB l u = DomainInt TagInt [RangeBounded l u]
-
-mkDomainIntBTagged :: IntTag -> x -> x -> Domain () x
-mkDomainIntBTagged t l u = DomainInt t [RangeBounded l u]
-
-mkDomainAny :: Doc -> Type -> Domain r x
-mkDomainAny reason = DomainAny (stringToText $ show reason)
-
-instance (Serialize r, Serialize x) => Serialize (Domain r x)
-instance (Hashable r, Hashable x) => Hashable (Domain r x)
-instance (ToJSON r, ToJSON x) => ToJSON (Domain r x) where toJSON = genericToJSON jsonOptions
-instance (FromJSON r, FromJSON x) => FromJSON (Domain r x) where parseJSON = genericParseJSON jsonOptions
-
-instance Arbitrary x => Arbitrary (Domain r x) where
- arbitrary = sized f
- where
- f 0 = oneof [ return DomainBool
- , DomainInt TagInt <$> arbitrary
- -- , DomainEnum <$> arbitrary <*> arbitrary
- ]
- f s = do
- arity <- choose (2 :: Int, 10)
- DomainTuple <$> vectorOf arity (f (div s 10))
- shrink DomainBool = []
- shrink (DomainInt _ []) = [DomainBool]
- shrink (DomainInt t [r]) = DomainBool : DomainInt t [] : [DomainInt t [r'] | r' <- shrink r]
- shrink (DomainInt t rs) = [DomainInt t (init rs)]
- shrink _ = []
-
-
-typeOfDomain ::
- MonadFail m =>
- Pretty r =>
- TypeOf x =>
- Pretty x =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Domain r x -> m Type
-typeOfDomain (DomainAny _ ty) = return ty
-typeOfDomain DomainBool = return TypeBool
-typeOfDomain d@(DomainIntE x) = do
- ty <- typeOf x
- case ty of
- TypeInt{} -> return () -- pre recoverDomainInt
- TypeList TypeInt{} -> return ()
- TypeMatrix _ TypeInt{} -> return ()
- TypeSet TypeInt{} -> return ()
- _ -> fail $ vcat [ "Expected an integer, but got:" <++> pretty ty
- , "In domain:" <+> pretty d
- ]
- return (TypeInt TagInt)
-typeOfDomain d@(DomainInt t rs) = do
- forM_ rs $ \ r -> forM_ r $ \ x -> do
- ty <- typeOf x
- case ty of
- TypeInt{} -> return ()
- _ -> fail $ vcat [ "Expected an integer, but got:" <++> pretty ty
- , "For:" <+> pretty x
- , "In domain:" <+> pretty d
- ]
- return (TypeInt t)
-typeOfDomain (DomainEnum defn _ _ ) = return (TypeEnum defn)
-typeOfDomain (DomainUnnamed defn _ ) = return (TypeUnnamed defn)
-typeOfDomain (DomainTuple xs ) = TypeTuple <$> mapM typeOfDomain xs
-typeOfDomain (DomainRecord xs ) = TypeRecord <$> sequence [ do t <- typeOfDomain d ; return (n, t)
- | (n,d) <- xs ]
-typeOfDomain (DomainVariant xs ) = TypeVariant <$> sequence [ do t <- typeOfDomain d ; return (n, t)
- | (n,d) <- xs ]
-<<<<<<< HEAD
-typeOfDomain (DomainMatrix ind inn ) = TypeMatrix <$> typeOf ind <*> typeOf inn
-typeOfDomain (DomainSet _ _ x ) = TypeSet <$> typeOf x
-typeOfDomain (DomainMSet _ _ x ) = TypeMSet <$> typeOf x
-typeOfDomain (DomainFunction _ _ x y) = TypeFunction <$> typeOf x <*> typeOf y
-typeOfDomain (DomainSequence _ _ x ) = TypeSequence <$> typeOf x
-typeOfDomain (DomainRelation _ _ xs ) = TypeRelation <$> mapM typeOf xs
-typeOfDomain (DomainPartition _ _ x ) = TypePartition <$> typeOf x
-typeOfDomain (DomainPermutation _ _ x ) = TypePermutation <$> typeOf x
-=======
-typeOfDomain (DomainMatrix ind inn ) = TypeMatrix <$> typeOfDomain ind <*> typeOfDomain inn
-typeOfDomain (DomainSet _ _ x ) = TypeSet <$> typeOfDomain x
-typeOfDomain (DomainMSet _ _ x ) = TypeMSet <$> typeOfDomain x
-typeOfDomain (DomainFunction _ _ x y) = TypeFunction <$> typeOfDomain x <*> typeOfDomain y
-typeOfDomain (DomainSequence _ _ x ) = TypeSequence <$> typeOfDomain x
-typeOfDomain (DomainRelation _ _ xs ) = TypeRelation <$> mapM typeOfDomain xs
-typeOfDomain (DomainPartition _ _ x ) = TypePartition <$> typeOfDomain x
->>>>>>> master
-typeOfDomain p@(DomainOp _ ds) = do
- ts <- mapM typeOfDomain ds
- if typesUnify ts
- then return (mostDefined ts)
- else fail ("Type error in" <+> pretty p)
-typeOfDomain (DomainReference _ (Just d)) = typeOfDomain d
-typeOfDomain (DomainReference nm Nothing) = bug $ "typeOfDomain: DomainReference" <+> pretty nm
-typeOfDomain (DomainMetaVar nm) = bug $ "typeOfDomain: DomainMetaVar &" <> pretty nm
-
-forgetRepr :: Domain r x -> Domain () x
-forgetRepr = defRepr
-
-defRepr :: Default r2 => Domain r x -> Domain r2 x
-defRepr = changeRepr def
-
-changeRepr :: r2 -> Domain r x -> Domain r2 x
-changeRepr rep = go
- where
- go (DomainAny t ty) = DomainAny t ty
- go DomainBool = DomainBool
- go (DomainIntE x) = DomainIntE x
- go (DomainInt t rs) = DomainInt t rs
- go (DomainEnum defn rs mp) = DomainEnum defn rs mp
- go (DomainUnnamed defn s) = DomainUnnamed defn s
- go (DomainTuple ds) = DomainTuple (map go ds)
- go (DomainRecord xs) = DomainRecord (map (second go) xs)
- go (DomainVariant xs) = DomainVariant (map (second go) xs)
- go (DomainMatrix index inner) = DomainMatrix index (go inner)
- go (DomainSet _ attr d) =
- DomainSet rep attr (go d)
- go (DomainMSet _ attr d) =
- DomainMSet rep attr (go d)
- go (DomainFunction _ attr d1 d2) =
- DomainFunction rep attr (go d1) (go d2)
- go (DomainSequence _ attr d) =
- DomainSequence rep attr (go d)
- go (DomainRelation _ attr ds) =
- DomainRelation rep attr (map go ds)
- go (DomainPartition _ attr d) = DomainPartition rep attr (go d)
- go (DomainPermutation _ attr d) = DomainPermutation rep attr (go d)
- go (DomainOp op ds) = DomainOp op (map go ds)
- go (DomainReference x r) = DomainReference x (fmap go r)
- go (DomainMetaVar x) = DomainMetaVar x
-
-
-data Tree a = Tree { rootLabel :: a, subForest :: [Tree a] }
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-
-instance Serialize a => Serialize (Tree a)
-instance Hashable a => Hashable (Tree a)
-instance ToJSON a => ToJSON (Tree a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (Tree a) where parseJSON = genericParseJSON jsonOptions
-
--- | This is to be used when defining `Conjure.Representations.Internal.mkOutName`.
--- Reason is to avoid sharing variables for parts of the same decision variable with differing representations.
--- Example case:
--- (1) find x : set {A} of (int(a..b) , set {B} of int(c..d))
--- (2) find x : set {A} of (int(a..b) , set {C} of int(c..d))
--- Here x_1's should not be shared!
--- If they are, the channelling and symmetry breaking constraints will clash and solutions will be lost.
-reprTreeEncoded :: Domain HasRepresentation x -> Text
-reprTreeEncoded = mconcat . enc1 . reprTree
- where
- enc1 (Tree lbl sub) =
- maybe
- (bug "reprTreeEncoded: top-most representation is Nothing")
- representationToShortText
- lbl
- : concatMap enc sub
- enc (Tree lbl sub) =
- maybe [] representationConstrIndex lbl
- ++ concatMap enc sub
-
-reprTree :: Domain r x -> Tree (Maybe r)
-reprTree DomainAny{} = Tree Nothing []
-reprTree DomainBool{} = Tree Nothing []
-reprTree DomainIntE{} = Tree Nothing []
-reprTree DomainInt{} = Tree Nothing []
-reprTree DomainEnum{} = Tree Nothing []
-reprTree DomainUnnamed{} = Tree Nothing []
-reprTree (DomainTuple as ) = Tree Nothing (map reprTree as)
-reprTree (DomainRecord as ) = Tree Nothing (map (reprTree . snd) as)
-reprTree (DomainVariant as) = Tree Nothing (map (reprTree . snd) as)
-reprTree (DomainMatrix _ a) = Tree Nothing [reprTree a]
-reprTree (DomainSet r _ a ) = Tree (Just r) [reprTree a]
-reprTree (DomainMSet r _ a ) = Tree (Just r) [reprTree a]
-reprTree (DomainFunction r _ a b) = Tree (Just r) [reprTree a, reprTree b]
-reprTree (DomainSequence r _ a ) = Tree (Just r) [reprTree a]
-reprTree (DomainRelation r _ as ) = Tree (Just r) (map reprTree as)
-reprTree (DomainPartition r _ a ) = Tree (Just r) [reprTree a]
-reprTree (DomainPermutation r _ a) = Tree (Just r) [reprTree a]
-reprTree DomainOp{} = Tree Nothing []
-reprTree DomainReference{} = Tree Nothing []
-reprTree DomainMetaVar{} = Tree Nothing []
-
-reprAtTopLevel :: Domain r x -> Maybe r
-reprAtTopLevel = rootLabel . reprTree
-
-applyReprTree :: (MonadFail m, Pretty x, Pretty r2, Default r) => Domain r2 x -> Tree (Maybe r) -> m (Domain r x)
-applyReprTree dom@DomainBool{} (Tree Nothing []) = return (defRepr dom)
-applyReprTree dom@DomainInt{} (Tree Nothing []) = return (defRepr dom)
-applyReprTree dom@DomainIntE{} (Tree Nothing []) = return (defRepr dom)
-applyReprTree dom@DomainEnum{} (Tree Nothing []) = return (defRepr dom)
-applyReprTree dom@DomainUnnamed{} (Tree Nothing []) = return (defRepr dom)
-applyReprTree (DomainTuple as ) (Tree Nothing asRepr) =
- DomainTuple <$> zipWithM applyReprTree as asRepr
-applyReprTree (DomainRecord as ) (Tree Nothing asRepr) =
- (DomainRecord . zip (map fst as)) <$> zipWithM applyReprTree (map snd as) asRepr
-applyReprTree (DomainVariant as) (Tree Nothing asRepr) =
- (DomainVariant . zip (map fst as)) <$> zipWithM applyReprTree (map snd as) asRepr
-applyReprTree (DomainMatrix b a) (Tree Nothing [aRepr]) = DomainMatrix b <$> applyReprTree a aRepr
-applyReprTree (DomainSet _ attr a ) (Tree (Just r) [aRepr]) = DomainSet r attr <$> applyReprTree a aRepr
-applyReprTree (DomainMSet _ attr a ) (Tree (Just r) [aRepr]) = DomainMSet r attr <$> applyReprTree a aRepr
-applyReprTree (DomainFunction _ attr a b) (Tree (Just r) [aRepr, bRepr]) = DomainFunction r attr <$> applyReprTree a aRepr <*> applyReprTree b bRepr
-applyReprTree (DomainSequence _ attr a ) (Tree (Just r) [aRepr]) = DomainSequence r attr <$> applyReprTree a aRepr
-applyReprTree (DomainRelation _ attr as ) (Tree (Just r) asRepr) = DomainRelation r attr <$> zipWithM applyReprTree as asRepr
-applyReprTree (DomainPartition _ attr a ) (Tree (Just r) [aRepr]) = DomainPartition r attr <$> applyReprTree a aRepr
-applyReprTree (DomainPermutation _ attr a ) (Tree (Just r) [aRepr]) = DomainPermutation r attr <$> applyReprTree a aRepr
-applyReprTree dom@DomainOp{} (Tree Nothing []) = return (defRepr dom)
-applyReprTree dom@DomainReference{} (Tree Nothing []) = return (defRepr dom)
-applyReprTree dom@DomainMetaVar{} (Tree Nothing []) = return (defRepr dom)
-applyReprTree dom _ = fail $ "applyReprTree:" <++> pretty dom
-
-isPrimitiveDomain :: Domain r x -> Bool
-isPrimitiveDomain DomainBool{} = True
-isPrimitiveDomain DomainIntE{} = True
-isPrimitiveDomain DomainInt{} = True
-isPrimitiveDomain (DomainMatrix index inner) = and [isPrimitiveDomain index, isPrimitiveDomain inner]
-isPrimitiveDomain _ = False
-
-getIndices :: Domain r x -> ([Domain () x], Domain r x)
-getIndices (DomainMatrix index inner) = first (index:) (getIndices inner)
-getIndices d = ([], d)
-
-domainCanIndexMatrix :: Domain r x -> Bool
-domainCanIndexMatrix DomainBool{} = True
-domainCanIndexMatrix DomainInt {} = True
-domainCanIndexMatrix DomainIntE{} = True
-domainCanIndexMatrix DomainEnum{} = True
-domainCanIndexMatrix _ = False
-
-
---------------------------------------------------------------------------------
--- attribute-as-constraint handling --------------------------------------------
---------------------------------------------------------------------------------
-
-data AttrName
- = AttrName_size
- | AttrName_minSize
- | AttrName_maxSize
- | AttrName_minOccur
- | AttrName_maxOccur
- | AttrName_numParts
- | AttrName_minNumParts
- | AttrName_maxNumParts
- | AttrName_partSize
- | AttrName_minPartSize
- | AttrName_maxPartSize
- | AttrName_total
- | AttrName_injective
- | AttrName_surjective
- | AttrName_bijective
- | AttrName_regular
- -- bin rel ones
- | AttrName_reflexive
- | AttrName_irreflexive
- | AttrName_coreflexive
- | AttrName_symmetric
- | AttrName_antiSymmetric
- | AttrName_aSymmetric
- | AttrName_transitive
- | AttrName_connex
- | AttrName_Euclidean
- | AttrName_serial
- | AttrName_equivalence
- | AttrName_partialOrder
- deriving (Eq, Ord, Show, Data, Typeable, Generic)
-
-instance Serialize AttrName
-instance Hashable AttrName
-instance ToJSON AttrName where toJSON = genericToJSON jsonOptions
-instance FromJSON AttrName where parseJSON = genericParseJSON jsonOptions
-
-instance Pretty AttrName where
- pretty AttrName_size = "size"
- pretty AttrName_minSize = "minSize"
- pretty AttrName_maxSize = "maxSize"
- pretty AttrName_minOccur = "minOccur"
- pretty AttrName_maxOccur = "maxOccur"
- pretty AttrName_numParts = "numParts"
- pretty AttrName_minNumParts = "minNumParts"
- pretty AttrName_maxNumParts = "maxNumParts"
- pretty AttrName_partSize = "partSize"
- pretty AttrName_minPartSize = "minPartSize"
- pretty AttrName_maxPartSize = "maxPartSize"
- pretty AttrName_total = "total"
- pretty AttrName_injective = "injective"
- pretty AttrName_surjective = "surjective"
- pretty AttrName_bijective = "bijective"
- pretty AttrName_regular = "regular"
- pretty AttrName_reflexive = "reflexive"
- pretty AttrName_irreflexive = "irreflexive"
- pretty AttrName_coreflexive = "coreflexive"
- pretty AttrName_symmetric = "symmetric"
- pretty AttrName_antiSymmetric = "antiSymmetric"
- pretty AttrName_aSymmetric = "aSymmetric"
- pretty AttrName_transitive = "transitive"
- pretty AttrName_connex = "connex"
- pretty AttrName_Euclidean = "Euclidean"
- pretty AttrName_serial = "serial"
- pretty AttrName_equivalence = "equivalence"
- pretty AttrName_partialOrder = "partialOrder"
-
-instance IsString AttrName where
- fromString "size" = AttrName_size
- fromString "minSize" = AttrName_minSize
- fromString "maxSize" = AttrName_maxSize
- fromString "minOccur" = AttrName_minOccur
- fromString "maxOccur" = AttrName_maxOccur
- fromString "numParts" = AttrName_numParts
- fromString "minNumParts" = AttrName_minNumParts
- fromString "maxNumParts" = AttrName_maxNumParts
- fromString "partSize" = AttrName_partSize
- fromString "minPartSize" = AttrName_minPartSize
- fromString "maxPartSize" = AttrName_maxPartSize
- fromString "total" = AttrName_total
- fromString "injective" = AttrName_injective
- fromString "surjective" = AttrName_surjective
- fromString "bijective" = AttrName_bijective
- fromString "regular" = AttrName_regular
- fromString "reflexive" = AttrName_reflexive
- fromString "irreflexive" = AttrName_irreflexive
- fromString "coreflexive" = AttrName_coreflexive
- fromString "symmetric" = AttrName_symmetric
- fromString "antiSymmetric" = AttrName_antiSymmetric
- fromString "aSymmetric" = AttrName_aSymmetric
- fromString "transitive" = AttrName_transitive
- fromString "connex" = AttrName_connex
- fromString "Euclidean" = AttrName_Euclidean
- fromString "serial" = AttrName_serial
- fromString "equivalence" = AttrName_equivalence
- fromString "partialOrder" = AttrName_partialOrder
- fromString s = bug $ "fromString{AttrName}:" <+> pretty s
-
-
---------------------------------------------------------------------------------
--- attribute definitions -------------------------------------------------------
---------------------------------------------------------------------------------
-
-data SetAttr a = SetAttr (SizeAttr a)
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-instance Serialize a => Serialize (SetAttr a)
-instance Hashable a => Hashable (SetAttr a)
-instance ToJSON a => ToJSON (SetAttr a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (SetAttr a) where parseJSON = genericParseJSON jsonOptions
-instance Default (SetAttr a) where def = SetAttr def
-instance Pretty a => Pretty (SetAttr a) where
- pretty (SetAttr SizeAttr_None) = prEmpty
- pretty (SetAttr a) = prParens (pretty a)
-
-
-data SizeAttr a
- = SizeAttr_None
- | SizeAttr_Size a
- | SizeAttr_MinSize a
- | SizeAttr_MaxSize a
- | SizeAttr_MinMaxSize a a
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-instance Serialize a => Serialize (SizeAttr a)
-instance Hashable a => Hashable (SizeAttr a)
-instance ToJSON a => ToJSON (SizeAttr a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (SizeAttr a) where parseJSON = genericParseJSON jsonOptions
-instance Default (SizeAttr a) where def = SizeAttr_None
-instance Pretty a => Pretty (SizeAttr a) where
- pretty SizeAttr_None = prEmpty
- pretty (SizeAttr_Size x ) = "size" <+> pretty x
- pretty (SizeAttr_MinSize x ) = "minSize" <+> pretty x
- pretty (SizeAttr_MaxSize x ) = "maxSize" <+> pretty x
- pretty (SizeAttr_MinMaxSize x y) = "minSize" <+> pretty x <> ", maxSize" <+> pretty y
-
-
-getMaxFrom_SizeAttr :: MonadFail m => SizeAttr a -> m a
-getMaxFrom_SizeAttr (SizeAttr_Size n) = return n
-getMaxFrom_SizeAttr (SizeAttr_MaxSize n) = return n
-getMaxFrom_SizeAttr (SizeAttr_MinMaxSize _ n) = return n
-getMaxFrom_SizeAttr _ = fail "getMaxFrom_SizeAttr"
-
-
-data MSetAttr a = MSetAttr (SizeAttr a) (OccurAttr a)
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-instance Serialize a => Serialize (MSetAttr a)
-instance Hashable a => Hashable (MSetAttr a)
-instance ToJSON a => ToJSON (MSetAttr a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (MSetAttr a) where parseJSON = genericParseJSON jsonOptions
-instance Default (MSetAttr a) where def = MSetAttr def def
-instance Pretty a => Pretty (MSetAttr a) where
- pretty (MSetAttr a b) =
- let inside = filter (/=prEmpty) [ pretty a
- , pretty b
- ]
- in if null inside
- then prEmpty
- else prettyList prParens "," inside
-
-
-data OccurAttr a
- = OccurAttr_None
- | OccurAttr_MinOccur a
- | OccurAttr_MaxOccur a
- | OccurAttr_MinMaxOccur a a
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-instance Serialize a => Serialize (OccurAttr a)
-instance Hashable a => Hashable (OccurAttr a)
-instance ToJSON a => ToJSON (OccurAttr a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (OccurAttr a) where parseJSON = genericParseJSON jsonOptions
-instance Default (OccurAttr a) where def = OccurAttr_None
-instance Pretty a => Pretty (OccurAttr a) where
- pretty OccurAttr_None = prEmpty
- pretty (OccurAttr_MinOccur x ) = "minOccur" <+> pretty x
- pretty (OccurAttr_MaxOccur x ) = "maxOccur" <+> pretty x
- pretty (OccurAttr_MinMaxOccur x y) = "minOccur" <+> pretty x <> ", maxOccur" <+> pretty y
-
-
-getMaxFrom_OccurAttr :: MonadFail m => OccurAttr a -> m a
-getMaxFrom_OccurAttr (OccurAttr_MaxOccur n) = return n
-getMaxFrom_OccurAttr (OccurAttr_MinMaxOccur _ n) = return n
-getMaxFrom_OccurAttr _ = fail "getMaxFrom_OccurAttr"
-
-
-data FunctionAttr x
- = FunctionAttr (SizeAttr x) PartialityAttr JectivityAttr
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-instance Serialize a => Serialize (FunctionAttr a)
-instance Hashable a => Hashable (FunctionAttr a)
-instance ToJSON a => ToJSON (FunctionAttr a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (FunctionAttr a) where parseJSON = genericParseJSON jsonOptions
-instance Default (FunctionAttr a) where def = FunctionAttr def def def
-instance Pretty a => Pretty (FunctionAttr a) where
- pretty (FunctionAttr a b c) =
- let inside = filter (/=prEmpty) [pretty a, pretty b, pretty c]
- in if null inside
- then prEmpty
- else prettyList prParens "," inside
-
-
-data PartialityAttr
- = PartialityAttr_Partial
- | PartialityAttr_Total
- deriving (Eq, Ord, Show, Data, Typeable, Generic)
-instance Serialize PartialityAttr
-instance Hashable PartialityAttr
-instance ToJSON PartialityAttr where toJSON = genericToJSON jsonOptions
-instance FromJSON PartialityAttr where parseJSON = genericParseJSON jsonOptions
-instance Default PartialityAttr where def = PartialityAttr_Partial
-instance Pretty PartialityAttr where
- pretty PartialityAttr_Partial = prEmpty -- partial is the default
- pretty PartialityAttr_Total = "total"
-
-
-data JectivityAttr
- = JectivityAttr_None
- | JectivityAttr_Injective
- | JectivityAttr_Surjective
- | JectivityAttr_Bijective
- deriving (Eq, Ord, Show, Data, Typeable, Generic)
-instance Serialize JectivityAttr
-instance Hashable JectivityAttr
-instance ToJSON JectivityAttr where toJSON = genericToJSON jsonOptions
-instance FromJSON JectivityAttr where parseJSON = genericParseJSON jsonOptions
-instance Default JectivityAttr where def = JectivityAttr_None
-instance Pretty JectivityAttr where
- pretty JectivityAttr_None = prEmpty
- pretty JectivityAttr_Injective = "injective"
- pretty JectivityAttr_Surjective = "surjective"
- pretty JectivityAttr_Bijective = "bijective"
-
-
-data SequenceAttr x
- = SequenceAttr (SizeAttr x) JectivityAttr
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-instance Serialize a => Serialize (SequenceAttr a)
-instance Hashable a => Hashable (SequenceAttr a)
-instance ToJSON a => ToJSON (SequenceAttr a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (SequenceAttr a) where parseJSON = genericParseJSON jsonOptions
-instance Default (SequenceAttr a) where def = SequenceAttr def def
-instance Pretty a => Pretty (SequenceAttr a) where
- pretty (SequenceAttr a b) =
- let inside = filter (/=prEmpty) [pretty a, pretty b]
- in if null inside
- then prEmpty
- else prettyList prParens "," inside
-
-
-data RelationAttr a = RelationAttr (SizeAttr a) BinaryRelationAttrs
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-instance Serialize a => Serialize (RelationAttr a)
-instance Hashable a => Hashable (RelationAttr a)
-instance ToJSON a => ToJSON (RelationAttr a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (RelationAttr a) where parseJSON = genericParseJSON jsonOptions
-instance Default (RelationAttr a) where def = RelationAttr def def
-instance Pretty a => Pretty (RelationAttr a) where
- pretty (RelationAttr a b) =
- let inside = filter (/=prEmpty) [pretty a, pretty b]
- in if null inside
- then prEmpty
- else prettyList prParens "," inside
-
-
-data BinaryRelationAttrs = BinaryRelationAttrs (S.Set BinaryRelationAttr)
- deriving (Eq, Ord, Show, Data, Typeable, Generic)
-instance Serialize BinaryRelationAttrs
-instance Hashable BinaryRelationAttrs where hashWithSalt salt (BinaryRelationAttrs a) = hashWithSalt salt (S.toList a)
-instance ToJSON BinaryRelationAttrs where toJSON = genericToJSON jsonOptions
-instance FromJSON BinaryRelationAttrs where parseJSON = genericParseJSON jsonOptions
-instance Default BinaryRelationAttrs where def = BinaryRelationAttrs S.empty
-instance Pretty BinaryRelationAttrs where
- pretty (BinaryRelationAttrs attrs) = prettyList id "," (S.toList attrs)
-instance Semigroup BinaryRelationAttrs where
- (<>) = mappend
-instance Monoid BinaryRelationAttrs where
- mempty = BinaryRelationAttrs def
- mappend (BinaryRelationAttrs a) (BinaryRelationAttrs b) = BinaryRelationAttrs (S.union a b)
-
-
-data BinaryRelationAttr
- = BinRelAttr_Reflexive
- | BinRelAttr_Irreflexive
- | BinRelAttr_Coreflexive
- | BinRelAttr_Symmetric
- | BinRelAttr_AntiSymmetric
- | BinRelAttr_ASymmetric
- | BinRelAttr_Transitive
- | BinRelAttr_Total
- | BinRelAttr_Connex
- | BinRelAttr_Euclidean
- | BinRelAttr_Serial
- | BinRelAttr_Equivalence
- | BinRelAttr_PartialOrder
- deriving (Eq, Ord, Show, Data, Typeable, Generic)
-instance Serialize BinaryRelationAttr
-instance Hashable BinaryRelationAttr
-instance ToJSON BinaryRelationAttr where toJSON = genericToJSON jsonOptions
-instance FromJSON BinaryRelationAttr where parseJSON = genericParseJSON jsonOptions
-instance Pretty BinaryRelationAttr where
- pretty BinRelAttr_Reflexive = "reflexive"
- pretty BinRelAttr_Irreflexive = "irreflexive"
- pretty BinRelAttr_Coreflexive = "coreflexive"
- pretty BinRelAttr_Symmetric = "symmetric"
- pretty BinRelAttr_AntiSymmetric = "antiSymmetric"
- pretty BinRelAttr_ASymmetric = "aSymmetric"
- pretty BinRelAttr_Transitive = "transitive"
- pretty BinRelAttr_Total = "total"
- pretty BinRelAttr_Connex = "connex"
- pretty BinRelAttr_Euclidean = "Euclidean"
- pretty BinRelAttr_Serial = "serial"
- pretty BinRelAttr_Equivalence = "equivalence"
- pretty BinRelAttr_PartialOrder = "partialOrder"
-
-readBinRel :: MonadFail m => AttrName -> m BinaryRelationAttr
-readBinRel AttrName_reflexive = return BinRelAttr_Reflexive
-readBinRel AttrName_irreflexive = return BinRelAttr_Irreflexive
-readBinRel AttrName_coreflexive = return BinRelAttr_Coreflexive
-readBinRel AttrName_symmetric = return BinRelAttr_Symmetric
-readBinRel AttrName_antiSymmetric = return BinRelAttr_AntiSymmetric
-readBinRel AttrName_aSymmetric = return BinRelAttr_ASymmetric
-readBinRel AttrName_transitive = return BinRelAttr_Transitive
-readBinRel AttrName_total = return BinRelAttr_Total
-readBinRel AttrName_connex = return BinRelAttr_Connex
-readBinRel AttrName_Euclidean = return BinRelAttr_Euclidean
-readBinRel AttrName_serial = return BinRelAttr_Serial
-readBinRel AttrName_equivalence = return BinRelAttr_Equivalence
-readBinRel AttrName_partialOrder = return BinRelAttr_PartialOrder
-readBinRel a = fail $ "Not a binary relation attribute:" <+> pretty a
-
-binRelToAttrName :: BinaryRelationAttr -> AttrName
-binRelToAttrName BinRelAttr_Reflexive = AttrName_reflexive
-binRelToAttrName BinRelAttr_Irreflexive = AttrName_irreflexive
-binRelToAttrName BinRelAttr_Coreflexive = AttrName_coreflexive
-binRelToAttrName BinRelAttr_Symmetric = AttrName_symmetric
-binRelToAttrName BinRelAttr_AntiSymmetric = AttrName_antiSymmetric
-binRelToAttrName BinRelAttr_ASymmetric = AttrName_aSymmetric
-binRelToAttrName BinRelAttr_Transitive = AttrName_transitive
-binRelToAttrName BinRelAttr_Total = AttrName_total
-binRelToAttrName BinRelAttr_Connex = AttrName_connex
-binRelToAttrName BinRelAttr_Euclidean = AttrName_Euclidean
-binRelToAttrName BinRelAttr_Serial = AttrName_serial
-binRelToAttrName BinRelAttr_Equivalence = AttrName_equivalence
-binRelToAttrName BinRelAttr_PartialOrder = AttrName_partialOrder
-
--- reflexive forAll x : T . rel(x,x)
--- irreflexive forAll x : T . !rel(x,x)
--- coreflexive forAll x,y : T . rel(x,y) -> x = y
---
--- symmetric forAll x,y : T . rel(x,y) -> rel(y,x)
--- antisymmetric forAll x,y : T . rel(x,y) /\ rel(y,x) -> x = y
--- asymmetric forAll x,y : T . rel(x,y) -> !rel(y,x)
---
--- transitive forAll x,y,z : T . rel(x,y) /\ rel(y,z) -> rel(x,z)
---
--- total forAll x,y : T . rel(x,y) \/ rel(y,x)
--- connex forAll x,y : T . rel(x,y) \/ rel(y,x) \/ x = y
--- Euclidean forAll x,y,z : T . rel(x,y) /\ rel(x,z) -> rel(y,z)
--- serial forAll x : T . exists y : T . rel(x,y)
--- equivalence reflexive + symmetric + transitive
--- partialOrder reflexive + antisymmetric + transitive
-
-
-data PartitionAttr a = PartitionAttr
- { partsNum :: SizeAttr a
- , partsSize :: SizeAttr a
- , isRegular :: Bool
- }
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-instance Serialize a => Serialize (PartitionAttr a)
-instance Hashable a => Hashable (PartitionAttr a)
-instance ToJSON a => ToJSON (PartitionAttr a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (PartitionAttr a) where parseJSON = genericParseJSON jsonOptions
-instance Default (PartitionAttr a) where def = PartitionAttr def def False
-instance Pretty a => Pretty (PartitionAttr a) where
- pretty (PartitionAttr a b c) =
- let inside = filter (/=prEmpty) [ prettyNum a
- , prettySize b
- , prettyReg c
- ]
-
- prettyNum SizeAttr_None = prEmpty
- prettyNum (SizeAttr_Size x ) = "numParts" <+> pretty x
- prettyNum (SizeAttr_MinSize x ) = "minNumParts" <+> pretty x
- prettyNum (SizeAttr_MaxSize x ) = "maxNumParts" <+> pretty x
- prettyNum (SizeAttr_MinMaxSize x y) = "minNumParts" <+> pretty x <> ", maxNumParts" <+> pretty y
-
- prettySize SizeAttr_None = prEmpty
- prettySize (SizeAttr_Size x ) = "partSize" <+> pretty x
- prettySize (SizeAttr_MinSize x ) = "minPartSize" <+> pretty x
- prettySize (SizeAttr_MaxSize x ) = "maxPartSize" <+> pretty x
- prettySize (SizeAttr_MinMaxSize x y) = "minPartSize" <+> pretty x <> ", maxPartSize" <+> pretty y
-
- prettyReg False = prEmpty
- prettyReg True = "regular"
-
- in if null inside
- then prEmpty
- else prettyList prParens "," inside
-
-
-
-data PermutationAttr x
- = PermutationAttr (SizeAttr x)
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-instance Serialize a => Serialize (PermutationAttr a)
-instance Hashable a => Hashable (PermutationAttr a)
-instance ToJSON a => ToJSON (PermutationAttr a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (PermutationAttr a) where parseJSON = genericParseJSON jsonOptions
-instance Default (PermutationAttr a) where def = PermutationAttr def
-instance Pretty a => Pretty (PermutationAttr a) where
- pretty (PermutationAttr a ) =
- let inside = filter (/=prEmpty) [pretty a]
- in if null inside
- then prEmpty
- else prettyList prParens "," inside
-
-
-
-
-data DomainAttributes a = DomainAttributes [DomainAttribute a]
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-
-instance Serialize a => Serialize (DomainAttributes a)
-instance Hashable a => Hashable (DomainAttributes a)
-instance ToJSON a => ToJSON (DomainAttributes a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (DomainAttributes a) where parseJSON = genericParseJSON jsonOptions
-
-instance Default (DomainAttributes a) where
- def = DomainAttributes []
-
-
-data DomainAttribute a
- = DAName Name
- | DANameValue Name a
- | DADotDot
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-
-instance Serialize a => Serialize (DomainAttribute a)
-instance Hashable a => Hashable (DomainAttribute a)
-instance ToJSON a => ToJSON (DomainAttribute a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (DomainAttribute a) where parseJSON = genericParseJSON jsonOptions
-
-
-data Range a
- = RangeOpen
- | RangeSingle a
- | RangeLowerBounded a
- | RangeUpperBounded a
- | RangeBounded a a
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-
-instance Serialize a => Serialize (Range a)
-instance Hashable a => Hashable (Range a)
-instance ToJSON a => ToJSON (Range a) where toJSON = genericToJSON jsonOptions
-instance FromJSON a => FromJSON (Range a) where parseJSON = genericParseJSON jsonOptions
-
-instance Arbitrary a => Arbitrary (Range a) where
- arbitrary = oneof
- [ return RangeOpen
- , RangeSingle <$> arbitrary
- , RangeLowerBounded <$> arbitrary
- , RangeUpperBounded <$> arbitrary
- , RangeBounded <$> arbitrary <*> arbitrary
- ]
-
-rangesInts :: (MonadFail m, ExpressionLike c) => [Range c] -> m [Integer]
-rangesInts = fmap (sortNub . concat) . mapM rangeInts
- where
- rangeInts (RangeSingle x) = return <$> intOut "rangeInts 1" x
- rangeInts (RangeBounded x y) = do x' <- intOut "rangeInts 2" x
- y' <- intOut "rangeInts 3" y
- return [x' .. y']
- rangeInts _ = fail "Infinite range (or not an integer range)"
-
-expandRanges :: ExpressionLike c => [Range c] -> [Range c]
-expandRanges r =
- case rangesInts r of
- Nothing -> r
- Just [] -> []
- Just is ->
- if [ minimum is .. maximum is ] == is
- then [RangeBounded (fromInt (minimum is)) (fromInt (maximum is))]
- else map (RangeSingle . fromInt) is
-
-
-data HasRepresentation
- = NoRepresentation
-
- | Set_Occurrence
- | Set_Explicit
- | Set_ExplicitVarSizeWithFlags
- | Set_ExplicitVarSizeWithMarker
- | Set_ExplicitVarSizeWithDummy
-
- | MSet_Occurrence
- | MSet_ExplicitWithFlags
- | MSet_ExplicitWithRepetition
-
- | Function_1D
- | Function_1DPartial
- | Function_ND
- | Function_NDPartial
- | Function_AsRelation HasRepresentation -- carries: representation for the inner relation
-
- | Sequence_ExplicitBounded
-
- | Relation_AsMatrix
- | Relation_AsSet HasRepresentation -- carries: representation for the inner set
-
- | Partition_AsSet HasRepresentation HasRepresentation -- carries: representations for the inner sets
- | Partition_Occurrence
- | Permutation_AsFunction
-
- deriving (Eq, Ord, Show, Data, Typeable, Generic)
-
-instance Serialize HasRepresentation
-instance Hashable HasRepresentation
-instance ToJSON HasRepresentation where toJSON = genericToJSON jsonOptions
-instance FromJSON HasRepresentation where parseJSON = genericParseJSON jsonOptions
-
-instance Default HasRepresentation where
- def = NoRepresentation
-
-representationConstrIndex :: HasRepresentation -> [Text]
-representationConstrIndex r = oneLevel r : concatMap representationConstrIndex (children r)
- where
- oneLevel :: HasRepresentation -> Text
- oneLevel = stringToText . ("R"++) . show . constrIndex . toConstr
-
-instance (Pretty r, Pretty a) => Pretty (Domain r a) where
-
- pretty DomainAny{} = "?"
-
- pretty DomainBool = "bool"
-
- pretty (DomainIntE x) = "int" <> prParens (pretty x)
-
- pretty (DomainInt (TagEnum nm) _) = pretty nm
- pretty (DomainInt (TagUnnamed nm) _) = pretty nm
-
- pretty (DomainInt _ []) = "int"
-<<<<<<< HEAD
-
- pretty (DomainInt _ ranges) = "int" <> prettyList prParens "," ranges
-
-=======
- pretty (DomainInt _ ranges) = "int" <> prettyList prParens "," ranges
-
->>>>>>> master
- pretty (DomainEnum name (Just ranges) _) = pretty name <> prettyList prParens "," ranges
-
- pretty (DomainEnum name _ _) = pretty name
-
- pretty (DomainUnnamed name _) = pretty name
-
- pretty (DomainTuple inners)
- = (if length inners < 2 then "tuple" else prEmpty)
- <+> prettyList prParens "," inners
-
- pretty (DomainRecord xs) = "record" <+> prettyList prBraces ","
- [ pretty nm <+> ":" <+> pretty d | (nm, d) <- xs ]
-
- pretty (DomainVariant xs) = "variant" <+> prettyList prBraces ","
- [ pretty nm <+> ":" <+> pretty d | (nm, d) <- xs ]
-
- pretty (DomainMatrix index innerNested)
- = "matrix indexed by" <+> prettyList prBrackets "," indices
- <+> "of" <+> pretty inner
- where
- (indices,inner) = first (index:) $ collect innerNested
- collect (DomainMatrix i j) = first (i:) $ collect j
- collect x = ([],x)
-
- pretty (DomainSet r attrs inner) =
- hang ("set" <+> prettyAttrs r attrs <+> "of") 4 (pretty inner)
-
- pretty (DomainMSet r attrs inner) =
- hang ("mset" <+> prettyAttrs r attrs <+> "of") 4 (pretty inner)
-
- pretty (DomainFunction r attrs innerFrom innerTo) =
- hang ("function" <+> prettyAttrs r attrs) 4 $
- hang (pretty innerFrom) 4 $
- "-->" <+> pretty innerTo
-
- pretty (DomainSequence r attrs inner) =
- hang ("sequence" <+> prettyAttrs r attrs <+> "of") 4 (pretty inner)
-
- pretty (DomainRelation r attrs inners)
- = hang ("relation" <+> prettyAttrs r attrs <+> "of") 4 (prettyList prParens " *" inners)
-
- pretty (DomainPartition r attrs inner)
- = hang ("partition" <+> prettyAttrs r attrs <+> "from") 4 (pretty inner)
- pretty (DomainPermutation r attrs inner) = hang ("permutation" <+> prettyAttrs r attrs <+> "of") 4 (pretty inner)
-
- pretty d@DomainOp{} = pretty (show d)
-
- pretty (DomainReference x _) = pretty x
-
- pretty (DomainMetaVar x) = "&" <> pretty x
-
-
-prettyAttrs :: (Pretty a, Pretty b) => a -> b -> Doc
-prettyAttrs a bs =
- let prettya = pretty a
- in if prettya == "()"
- then pretty bs
- else prBraces prettya <+> pretty bs
-
-instance Pretty a => Pretty (DomainAttributes a) where
- pretty (DomainAttributes []) = prEmpty
- pretty (DomainAttributes attrs) = prettyList prParens "," attrs
-
-instance Pretty a => Pretty (DomainAttribute a) where
- pretty (DAName name) = pretty name
- pretty (DANameValue name value) = pretty name <+> pretty value
- pretty DADotDot = ".."
-
-instance Pretty a => Pretty (Range a) where
- pretty RangeOpen = ".."
- pretty (RangeSingle x) = pretty x
- pretty (RangeLowerBounded x) = pretty x <> ".."
- pretty (RangeUpperBounded x) = ".." <> pretty x
- pretty (RangeBounded x y) | show (pretty x) == show (pretty y) = pretty x
- pretty (RangeBounded x y) = pretty x <> ".." <> pretty y
-
-instance Pretty HasRepresentation where
- pretty NoRepresentation = "∅"
- pretty r = pretty (representationToFullText r)
-
-textToRepresentation :: Text -> [HasRepresentation] -> Maybe HasRepresentation
-textToRepresentation t [] | t == "Occurrence" = return Set_Occurrence
-textToRepresentation t [] | t == "Explicit" = return Set_Explicit
-textToRepresentation t [] | t == "ExplicitVarSizeWithFlags" = return Set_ExplicitVarSizeWithFlags
-textToRepresentation t [] | t == "ExplicitVarSizeWithMarker" = return Set_ExplicitVarSizeWithMarker
-textToRepresentation t [] | t == "ExplicitVarSizeWithDummy" = return Set_ExplicitVarSizeWithDummy
-textToRepresentation t [] | t == "MOccurrence" = return MSet_Occurrence
-textToRepresentation t [] | t == "ExplicitWithFlags" = return MSet_ExplicitWithFlags
-textToRepresentation t [] | t == "ExplicitWithRepetition" = return MSet_ExplicitWithRepetition
-textToRepresentation t [] | t == "Function1D" = return Function_1D
-textToRepresentation t [] | t == "Function1DPartial" = return Function_1DPartial
-textToRepresentation t [] | t == "FunctionND" = return Function_ND
-textToRepresentation t [] | t == "FunctionNDPartial" = return Function_NDPartial
-textToRepresentation t [repr] | t == "FunctionAsRelation" = return (Function_AsRelation repr)
-textToRepresentation t [] | t == "ExplicitBounded" = return Sequence_ExplicitBounded
-textToRepresentation t [] | t == "RelationAsMatrix" = return Relation_AsMatrix
-textToRepresentation t [repr] | t == "RelationAsSet" = return (Relation_AsSet repr)
-textToRepresentation t [repr1, repr2] | t == "PartitionAsSet" = return (Partition_AsSet repr1 repr2)
-textToRepresentation t [] | t == "PartitionOccurrence" = return Partition_Occurrence
-<<<<<<< HEAD
-textToRepresentation t [] | t == "PermutationAsFunction" = return Permutation_AsFunction
-textToRepresentation t _ = bug ("textToRepresentation:" <+> pretty t)
-=======
-textToRepresentation _ _ = Nothing
->>>>>>> master
-
-representationToShortText :: HasRepresentation -> Text
-representationToShortText Set_Occurrence = "Occurrence"
-representationToShortText Set_Explicit = "Explicit"
-representationToShortText Set_ExplicitVarSizeWithFlags = "ExplicitVarSizeWithFlags"
-representationToShortText Set_ExplicitVarSizeWithMarker = "ExplicitVarSizeWithMarker"
-representationToShortText Set_ExplicitVarSizeWithDummy = "ExplicitVarSizeWithDummy"
-representationToShortText MSet_Occurrence = "MOccurrence"
-representationToShortText MSet_ExplicitWithFlags = "ExplicitWithFlags"
-representationToShortText MSet_ExplicitWithRepetition = "ExplicitWithRepetition"
-representationToShortText Function_1D = "Function1D"
-representationToShortText Function_1DPartial = "Function1DPartial"
-representationToShortText Function_ND = "FunctionND"
-representationToShortText Function_NDPartial = "FunctionNDPartial"
-representationToShortText Function_AsRelation{} = "FunctionAsRelation"
-representationToShortText Sequence_ExplicitBounded = "ExplicitBounded"
-representationToShortText Relation_AsMatrix = "RelationAsMatrix"
-representationToShortText Relation_AsSet{} = "RelationAsSet"
-representationToShortText Partition_AsSet{} = "PartitionAsSet"
-representationToShortText Partition_Occurrence = "PartitionOccurrence"
-representationToShortText Permutation_AsFunction = "PermutationAsFunction"
-representationToShortText r = bug ("representationToShortText:" <+> pretty (show r))
-
-representationToFullText :: HasRepresentation -> Text
-representationToFullText (Function_AsRelation repr) = mconcat [ "FunctionAsRelation"
- , "["
- , representationToFullText repr
- , "]"
- ]
-representationToFullText (Relation_AsSet repr) = mconcat [ "RelationAsSet"
- , "["
- , representationToFullText repr
- , "]"
- ]
-representationToFullText (Partition_AsSet repr1 repr2) = mconcat [ "PartitionAsSet"
- , "["
- , representationToFullText repr1
- , ","
- , representationToFullText repr2
- , "]"
- ]
-representationToFullText r = representationToShortText r
-
-
-normaliseDomain :: (Ord c, ExpressionLike c) => (c -> c) -> Domain r c -> Domain r c
-normaliseDomain _norm DomainBool = DomainBool
-normaliseDomain norm (DomainInt t rs ) = DomainInt t $ sort $ map (normaliseRange norm) (expandRanges rs)
-normaliseDomain _norm (DomainEnum n Nothing mp) = DomainEnum n Nothing mp
-normaliseDomain _norm (DomainEnum n (Just rs) mp) = DomainEnum n (Just $ sort rs) mp
-normaliseDomain norm (DomainUnnamed n x ) = DomainUnnamed n (norm x)
-normaliseDomain norm (DomainRecord doms ) = DomainRecord [ (n, normaliseDomain norm d)
- | (n, d) <- doms ]
-normaliseDomain norm (DomainVariant doms ) = DomainVariant [ (n, normaliseDomain norm d)
- | (n, d) <- doms ]
-normaliseDomain norm (DomainTuple doms ) = DomainTuple $ map (normaliseDomain norm) doms
-normaliseDomain norm (DomainMatrix dom1 dom2) = DomainMatrix (normaliseDomain norm dom1)
- (normaliseDomain norm dom2)
-normaliseDomain norm (DomainSet r attr dom ) = DomainSet r (fmap norm attr)
- (normaliseDomain norm dom)
-normaliseDomain norm (DomainMSet r attr dom ) = DomainMSet r (fmap norm attr)
- (normaliseDomain norm dom)
-normaliseDomain norm (DomainFunction r attr dom1 dom2) = DomainFunction r (fmap norm attr)
- (normaliseDomain norm dom1)
- (normaliseDomain norm dom2)
-normaliseDomain norm (DomainSequence r attr dom ) = DomainSequence r (fmap norm attr)
- (normaliseDomain norm dom)
-normaliseDomain norm (DomainRelation r attr doms ) = DomainRelation r (fmap norm attr)
- (map (normaliseDomain norm) doms)
-normaliseDomain norm (DomainPartition r attr dom ) = DomainPartition r (fmap norm attr)
- (normaliseDomain norm dom)
-normaliseDomain _norm d = d
-
-normaliseRange :: (c -> c) -> Range c -> Range c
-normaliseRange _norm RangeOpen = RangeOpen
-normaliseRange norm (RangeSingle x) = RangeBounded (norm x) (norm x)
-normaliseRange norm (RangeLowerBounded x) = RangeLowerBounded (norm x)
-normaliseRange norm (RangeUpperBounded x) = RangeUpperBounded (norm x)
-normaliseRange norm (RangeBounded x y) = RangeBounded (norm x) (norm y)
-
-innerDomainOf :: (MonadFail m, Show x) => Domain () x -> m (Domain () x)
-innerDomainOf (DomainMatrix _ t) = return t
-innerDomainOf (DomainSet _ _ t) = return t
-innerDomainOf (DomainMSet _ _ t) = return t
-innerDomainOf (DomainFunction _ _ a b) = return (DomainTuple [a,b])
-innerDomainOf (DomainRelation _ _ ts) = return (DomainTuple ts)
-innerDomainOf (DomainPartition _ _ t) = return (DomainSet () def t)
-innerDomainOf t = fail ("innerDomainOf:" <+> pretty (show t))
-
-singletonDomainInt :: (Eq x, CanBeAnAlias x) => Domain r x -> Maybe x
-singletonDomainInt (DomainInt _ [RangeSingle a]) = Just a
-singletonDomainInt (DomainInt _ [RangeBounded a b]) =
- let
- followAlias (isAlias -> Just x) = followAlias x
- followAlias x = x
- in
- if followAlias a == followAlias b
- then Just a
- else Nothing
-singletonDomainInt _ = Nothing
-
-matrixNumDimsD :: Domain r x -> Int
-matrixNumDimsD (DomainMatrix _ t) = 1 + matrixNumDimsD t
-matrixNumDimsD _ = 0
-
diff --git a/src/Conjure/Language/Expression/Op/Defined.hs.orig b/src/Conjure/Language/Expression/Op/Defined.hs.orig
deleted file mode 100644
index ffd58e4b05..0000000000
--- a/src/Conjure/Language/Expression/Op/Defined.hs.orig
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# LANGUAGE DeriveGeneric, DeriveDataTypeable, DeriveFunctor, DeriveTraversable, DeriveFoldable, ViewPatterns #-}
-
-module Conjure.Language.Expression.Op.Defined where
-
-import Conjure.Prelude
-import Conjure.Language.Expression.Op.Internal.Common
-
-import qualified Data.Aeson as JSON -- aeson
-import qualified Data.HashMap.Strict as M -- unordered-containers
-import qualified Data.Vector as V -- vector
-
-
-data OpDefined x = OpDefined x
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-
-instance Serialize x => Serialize (OpDefined x)
-instance Hashable x => Hashable (OpDefined x)
-instance ToJSON x => ToJSON (OpDefined x) where toJSON = genericToJSON jsonOptions
-instance FromJSON x => FromJSON (OpDefined x) where parseJSON = genericParseJSON jsonOptions
-
-instance (Pretty x, TypeOf x) => TypeOf (OpDefined x) where
- typeOf p@(OpDefined x) = do
- ty <- typeOf x
- case ty of
- TypeFunction a _ -> return (TypeSet a)
- TypePermutation a -> return (TypeSet a)
- TypeSequence _ -> return (TypeSet (TypeInt TagInt))
- _ -> raiseTypeError p
-
-<<<<<<< HEAD
-instance EvaluateOp OpDefined where
- evaluateOp p | any isUndef (childrenBi p) = do
- ty <- typeOf p
- return $ mkUndef ty $ "Has undefined children:" <+> pretty p
- evaluateOp (OpDefined (viewConstantFunction -> Just xs)) =
- return $ ConstantAbstract $ AbsLitSet $ sortNub $ map fst xs
- evaluateOp (OpDefined (viewConstantPermutation -> Just xss)) =
- return $ ConstantAbstract $ AbsLitSet $ join xss
- evaluateOp op = na $ "evaluateOp{OpDefined}:" <++> pretty (show op)
-
-=======
->>>>>>> master
-instance SimplifyOp OpDefined x where
- simplifyOp _ = na "simplifyOp{OpDefined}"
-
-instance Pretty x => Pretty (OpDefined x) where
- prettyPrec _ (OpDefined a) = "defined" <> prParens (pretty a)
-
-instance VarSymBreakingDescription x => VarSymBreakingDescription (OpDefined x) where
- varSymBreakingDescription (OpDefined a) = JSON.Object $ M.fromList
- [ ("type", JSON.String "OpDefined")
- , ("children", JSON.Array $ V.fromList
- [ varSymBreakingDescription a
- ])
- ]
diff --git a/src/Conjure/Language/Expression/Op/Image.hs.orig b/src/Conjure/Language/Expression/Op/Image.hs.orig
deleted file mode 100644
index f70ac2cc3a..0000000000
--- a/src/Conjure/Language/Expression/Op/Image.hs.orig
+++ /dev/null
@@ -1,106 +0,0 @@
-{-# LANGUAGE DeriveGeneric, DeriveDataTypeable, DeriveFunctor, DeriveTraversable, DeriveFoldable, ViewPatterns #-}
-
-module Conjure.Language.Expression.Op.Image where
-
-import Conjure.Prelude
-import Conjure.Language.Expression.Op.Internal.Common
-import Conjure.Bug
-
-import qualified Data.Aeson as JSON -- aeson
-import qualified Data.HashMap.Strict as M -- unordered-containers
-import qualified Data.Vector as V -- vector
-
-import Data.List (cycle)
-
-
-data OpImage x = OpImage x x
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-
-instance Serialize x => Serialize (OpImage x)
-instance Hashable x => Hashable (OpImage x)
-instance ToJSON x => ToJSON (OpImage x) where toJSON = genericToJSON jsonOptions
-instance FromJSON x => FromJSON (OpImage x) where parseJSON = genericParseJSON jsonOptions
-
-instance (TypeOf x, Pretty x) => TypeOf (OpImage x) where
- typeOf p@(OpImage f x) = do
- tyF <- typeOf f
- tyX <- typeOf x
- (from, to) <- case tyF of
- TypeFunction from to -> return (from, to)
- TypeSequence to -> return (TypeInt TagInt, to)
- TypePermutation _ -> return (tyX, tyX)
- _ -> raiseTypeError $ "(function application)" <+> pretty p
- if typesUnify [tyX, from]
- then return to
- else raiseTypeError $ vcat
- [ pretty p
- , "function :" <+> pretty f
- , "function type:" <+> pretty (TypeFunction from to)
- , "argument :" <+> pretty x
- , "argument type:" <+> pretty tyX
- ]
-
-<<<<<<< HEAD
-instance EvaluateOp OpImage where
- evaluateOp (OpImage f@(viewConstantFunction -> Just xs) a) =
- case [ y | (x,y) <- xs, a == x ] of
- [y] -> return y
- [] -> do
- TypeFunction _ tyTo <- typeOf f
- return $ mkUndef tyTo $ vcat
- [ "Function is not defined at this point:" <+> pretty a
- , "Function value:" <+> pretty f
- ]
- _ -> do
- TypeFunction _ tyTo <- typeOf f
- return $ mkUndef tyTo $ vcat
- [ "Function is multiply defined at this point:" <+> pretty a
- , "Function value:" <+> pretty f
- ]
- evaluateOp (OpImage f@(viewConstantSequence -> Just xs) a) =
- case [ y | (x,y) <- zip allNats xs, a == fromInt x ] of
- [y] -> return y
- [] -> do
- TypeSequence tyTo <- typeOf f
- return $ mkUndef tyTo $ vcat
- [ "Sequence is not defined at this point:" <+> pretty a
- , "Sequence value:" <+> pretty f
- ]
- _ -> do
- TypeSequence tyTo <- typeOf f
- return $ mkUndef tyTo $ vcat
- [ "Sequence is multiply defined at this point:" <+> pretty a
- , "Sequence value:" <+> pretty f
- ]
- evaluateOp (OpImage p@(viewConstantPermutation -> Just xss) i) = do
- (TypePermutation ip) <- typeOf p
- ti <- typeOf i
- if typesUnify [ti, ip]
- then case filter (i `elem`) xss of
- [] -> return i
- [h] -> do
- case length $ filter (== i) h of
- 1 -> return $ head $ drop 1 $ dropWhile (/= i) $ cycle h
- _ -> bug "evaluateOp{OpImage} element in cycle of permutationmore than once"
- _ -> bug "evaluateOp{OpPermute} element in more than one cycle of permutation"
- else if ti `containsType` ip
- then na "refinement required to evaluate image of permutation"
- else return i
- evaluateOp op = na $ "evaluateOp{OpImage}:" <++> pretty (show op)
-
-=======
->>>>>>> master
-instance SimplifyOp OpImage x where
- simplifyOp _ = na "simplifyOp{OpImage}"
-
-instance Pretty x => Pretty (OpImage x) where
- prettyPrec _ (OpImage a b) = "image" <> prettyList prParens "," [a,b]
-
-instance VarSymBreakingDescription x => VarSymBreakingDescription (OpImage x) where
- varSymBreakingDescription (OpImage a b) = JSON.Object $ M.fromList
- [ ("type", JSON.String "OpImage")
- , ("children", JSON.Array $ V.fromList
- [ varSymBreakingDescription a
- , varSymBreakingDescription b
- ])
- ]
diff --git a/src/Conjure/Language/Expression/Op/Inverse.hs.orig b/src/Conjure/Language/Expression/Op/Inverse.hs.orig
deleted file mode 100644
index 32ddf466b1..0000000000
--- a/src/Conjure/Language/Expression/Op/Inverse.hs.orig
+++ /dev/null
@@ -1,67 +0,0 @@
-{-# LANGUAGE DeriveGeneric, DeriveDataTypeable, DeriveFunctor, DeriveTraversable, DeriveFoldable, ViewPatterns #-}
-
-module Conjure.Language.Expression.Op.Inverse where
-
-import Conjure.Prelude
-import Conjure.Language.Expression.Op.Internal.Common
-
-import qualified Data.Aeson as JSON -- aeson
-import qualified Data.HashMap.Strict as M -- unordered-containers
-import qualified Data.Vector as V -- vector
-
-import Data.Permutation
-
-
-data OpInverse x = OpInverse x x
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-
-instance Serialize x => Serialize (OpInverse x)
-instance Hashable x => Hashable (OpInverse x)
-instance ToJSON x => ToJSON (OpInverse x) where toJSON = genericToJSON jsonOptions
-instance FromJSON x => FromJSON (OpInverse x) where parseJSON = genericParseJSON jsonOptions
-
-instance (TypeOf x, Pretty x) => TypeOf (OpInverse x) where
- typeOf p@(OpInverse f g) = do
- ft <- typeOf f
- case ft of
- TypeFunction fFrom fTo -> do
- TypeFunction gFrom gTo <- typeOf g
- if typesUnify [fFrom, gTo] && typesUnify [fTo, gFrom]
- then return TypeBool
- else raiseTypeError p
- TypePermutation fi -> do
- TypePermutation gi <- typeOf g
- if typesUnify [fi,gi]
- then return TypeBool
- else raiseTypeError p
- _ -> raiseTypeError p
-
-<<<<<<< HEAD
-instance EvaluateOp OpInverse where
- evaluateOp (OpInverse (viewConstantFunction -> Just xs) (viewConstantFunction -> Just ys)) =
- return $ ConstantBool $ and $ concat [ [ (j,i) `elem` ys | (i,j) <- xs ]
- , [ (j,i) `elem` xs | (i,j) <- ys ]
- ]
- evaluateOp (OpInverse (viewConstantPermutation -> Just xs) (viewConstantPermutation -> Just ys)) =
- case (toFunction <$> fromCycles xs, toFunction <$> fromCycles ys) of
- (Right xfn, Right lfn) -> return $ ConstantBool $ and $ (\x -> x == lfn (xfn x)) <$> join xs
- (Left (PermutationError e),_) -> na $ "evaluateOp{OpInverse}:" <++> pretty e
- (_,Left (PermutationError e)) -> na $ "evaluateOp{OpInverse}:" <++> pretty e
- evaluateOp op = na $ "evaluateOp{OpInverse}:" <++> pretty (show op)
-
-=======
->>>>>>> master
-instance SimplifyOp OpInverse x where
- simplifyOp _ = na "simplifyOp{OpInverse}"
-
-instance Pretty x => Pretty (OpInverse x) where
- prettyPrec _ (OpInverse a b) = "inverse" <> prettyList prParens "," [a,b]
-
-instance VarSymBreakingDescription x => VarSymBreakingDescription (OpInverse x) where
- varSymBreakingDescription (OpInverse a b) = JSON.Object $ M.fromList
- [ ("type", JSON.String "OpInverse")
- , ("children", JSON.Array $ V.fromList
- [ varSymBreakingDescription a
- , varSymBreakingDescription b
- ])
- ]
diff --git a/src/Conjure/Language/Expression/Op/Product.hs.orig b/src/Conjure/Language/Expression/Op/Product.hs.orig
deleted file mode 100644
index 426c3a45d5..0000000000
--- a/src/Conjure/Language/Expression/Op/Product.hs.orig
+++ /dev/null
@@ -1,92 +0,0 @@
-{-# LANGUAGE DeriveGeneric, DeriveDataTypeable, DeriveFunctor, DeriveTraversable, DeriveFoldable #-}
-{-# LANGUAGE UndecidableInstances #-}
-
-module Conjure.Language.Expression.Op.Product where
-
-import Conjure.Prelude
-import Conjure.Language.Expression.Op.Internal.Common
-
-import qualified Data.Aeson as JSON -- aeson
-import qualified Data.HashMap.Strict as M -- unordered-containers
-import qualified Data.Vector as V -- vector
-
-
-data OpProduct x = OpProduct x
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-
-instance Serialize x => Serialize (OpProduct x)
-instance Hashable x => Hashable (OpProduct x)
-instance ToJSON x => ToJSON (OpProduct x) where toJSON = genericToJSON jsonOptions
-instance FromJSON x => FromJSON (OpProduct x) where parseJSON = genericParseJSON jsonOptions
-
-instance (TypeOf x, Pretty x, ExpressionLike x) => TypeOf (OpProduct x) where
- typeOf p@(OpProduct x) = do
- ty <- typeOf x
- innerTy <- case ty of
- TypeList t -> return t
- TypeMatrix _ t -> return t
- TypeSet t -> return t
- TypeMSet t -> return t
- _ -> raiseTypeError $ vcat [ pretty p
- , "The argument has type:" <+> pretty ty
- ]
- case innerTy of
- TypeInt t | ?typeCheckerMode == RelaxedIntegerTags -> return (TypeInt t)
- TypeInt TagInt -> return (TypeInt TagInt)
- _ -> raiseTypeError $ vcat [ pretty p
- , "The argument has type:" <+> pretty ty
- ]
-
-instance BinaryOperator (OpProduct x) where
- opLexeme _ = L_Times
-
-instance EvaluateOp OpProduct where
- evaluateOp p | any isUndef (childrenBi p) =
- return $ mkUndef (TypeInt TagInt) $ "Has undefined children:" <+> pretty p
- evaluateOp p@(OpProduct x)
- | Just xs <- listOut x
- , any isUndef xs =
-<<<<<<< HEAD
- return $ mkUndef (TypeInt AnyTag) $ "Has undefined children:" <+> pretty p
- evaluateOp (OpProduct x) = ConstantInt AnyTag . product <$> intsOut "OpProduct" x
-
--- evaluateOp p@(OpProduct x)
--- | Just xs <- listOut x
--- , any isUndef xs = return $ mkUndef (TypeInt NoTag) $ "Has undefined children:" <+> pretty p
--- evaluateOp (OpProduct x) = ConstantInt NoTag . product <$> intsOut "OpProduct" x
---
-=======
- return $ mkUndef (TypeInt TagInt) $ "Has undefined children:" <+> pretty p
- evaluateOp (OpProduct x) = ConstantInt TagInt . product <$> intsOut "OpProduct" x
->>>>>>> master
-
-instance (OpProduct x :< x) => SimplifyOp OpProduct x where
- simplifyOp (OpProduct x)
- | Just xs <- listOut x
- , let filtered = filter (/=0) xs
- , length filtered /= length xs -- there were 0's
- = return 0
- simplifyOp (OpProduct x)
- | Just xs <- listOut x
- , let filtered = filter (/=1) xs
- , length filtered /= length xs -- there were 1's
- = case filtered of
- [] -> return 1
- [n] -> return n
- _ -> return $ inject $ OpProduct $ fromList filtered
- simplifyOp _ = na "simplifyOp{OpProduct}"
-
-instance (Pretty x, ExpressionLike x) => Pretty (OpProduct x) where
- prettyPrec prec op@(OpProduct x) | Just [a,b] <- listOut x = prettyPrecBinOp prec [op] a b
- prettyPrec _ (OpProduct x) = "product" <> prParens (pretty x)
-
-instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpProduct x) where
- varSymBreakingDescription (OpProduct x) | Just xs <- listOut x = JSON.Object $ M.fromList
- [ ("type", JSON.String "OpProduct")
- , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs)
- , ("symmetricChildren", JSON.Bool True)
- ]
- varSymBreakingDescription (OpProduct x) = JSON.Object $ M.fromList
- [ ("type", JSON.String "OpProduct")
- , ("children", varSymBreakingDescription x)
- ]
diff --git a/src/Conjure/Language/Expression/Op/ToSet.hs.orig b/src/Conjure/Language/Expression/Op/ToSet.hs.orig
deleted file mode 100644
index 54419cda1d..0000000000
--- a/src/Conjure/Language/Expression/Op/ToSet.hs.orig
+++ /dev/null
@@ -1,72 +0,0 @@
-{-# LANGUAGE DeriveGeneric, DeriveDataTypeable, DeriveFunctor, DeriveTraversable, DeriveFoldable, ViewPatterns #-}
-
-module Conjure.Language.Expression.Op.ToSet where
-
-import Conjure.Prelude
-import Conjure.Language.Expression.Op.Internal.Common
-
-import qualified Data.Aeson as JSON -- aeson
-import qualified Data.HashMap.Strict as M -- unordered-containers
-import qualified Data.Vector as V -- vector
-
-import Data.Permutation
-
-
-data OpToSet x = OpToSet
- Bool -- True means we can assume there won't be any duplicates
- x
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-
-instance Serialize x => Serialize (OpToSet x)
-instance Hashable x => Hashable (OpToSet x)
-instance ToJSON x => ToJSON (OpToSet x) where toJSON = genericToJSON jsonOptions
-instance FromJSON x => FromJSON (OpToSet x) where parseJSON = genericParseJSON jsonOptions
-
-instance (TypeOf x, Pretty x) => TypeOf (OpToSet x) where
- typeOf p@(OpToSet _ x) = do
- tx <- typeOf x
- case tx of
- TypeRelation is -> return (TypeSet (TypeTuple is))
- TypePermutation is -> return (TypeSet (TypeTuple [is, is]))
- TypeMSet i -> return (TypeSet i)
- TypeFunction i j -> return (TypeSet (TypeTuple [i,j]))
- TypeMatrix _ i -> return (TypeSet i)
- TypeList i -> return (TypeSet i)
- _ -> raiseTypeError $ vcat [ pretty p
- , "The argument has type:" <+> pretty tx
- ]
-
-<<<<<<< HEAD
-instance EvaluateOp OpToSet where
- evaluateOp (OpToSet _ (viewConstantMatrix -> Just (_, xs))) =
- return $ ConstantAbstract $ AbsLitSet $ sortNub xs
- evaluateOp (OpToSet _ (viewConstantSet -> Just xs)) =
- return $ ConstantAbstract $ AbsLitSet $ sortNub xs
- evaluateOp (OpToSet _ (viewConstantMSet -> Just xs)) =
- return $ ConstantAbstract $ AbsLitSet $ sortNub xs
- evaluateOp (OpToSet _ (viewConstantFunction -> Just xs)) =
- return $ ConstantAbstract $ AbsLitSet $ sortNub [ConstantAbstract $ AbsLitTuple [a,b] | (a,b) <- xs]
- evaluateOp (OpToSet _ (viewConstantRelation -> Just xs)) =
- return $ ConstantAbstract $ AbsLitSet $ sortNub $ map (ConstantAbstract . AbsLitTuple) xs
- evaluateOp (OpToSet _ (viewConstantPermutation -> Just xs)) =
- case toFunction <$> fromCycles xs of
- Left (PermutationError e) -> na $ "evaluateOp{OpToSet}:" <++> pretty e
- Right fn -> return $ ConstantAbstract $ AbsLitSet $ (ConstantAbstract . AbsLitTuple) <$> ((\x -> [x, fn x]) <$> join xs)
- evaluateOp op = na $ "evaluateOp{OpToSet}:" <++> pretty (show op)
-
-=======
->>>>>>> master
-instance SimplifyOp OpToSet x where
- simplifyOp _ = na "simplifyOp{OpToSet}"
-
-instance Pretty x => Pretty (OpToSet x) where
- prettyPrec _ (OpToSet _ a) = "toSet" <> prParens (pretty a)
-
-instance VarSymBreakingDescription x => VarSymBreakingDescription (OpToSet x) where
- varSymBreakingDescription (OpToSet b x) = JSON.Object $ M.fromList
- [ ("type", JSON.String "OpToSet")
- , ("children", JSON.Array $ V.fromList
- [ toJSON b
- , varSymBreakingDescription x
- ])
- ]
diff --git a/src/Conjure/Language/Expression/Op/TwoBars.hs.orig b/src/Conjure/Language/Expression/Op/TwoBars.hs.orig
deleted file mode 100644
index 12f5a57f32..0000000000
--- a/src/Conjure/Language/Expression/Op/TwoBars.hs.orig
+++ /dev/null
@@ -1,73 +0,0 @@
-{-# LANGUAGE DeriveGeneric, DeriveDataTypeable, DeriveFunctor, DeriveTraversable, DeriveFoldable, ViewPatterns #-}
-{-# LANGUAGE UndecidableInstances #-}
-
-module Conjure.Language.Expression.Op.TwoBars where
-
-import Conjure.Prelude
-import Conjure.Language.Expression.Op.Internal.Common
-
-import qualified Data.Aeson as JSON -- aeson
-import qualified Data.HashMap.Strict as M -- unordered-containers
-import qualified Data.Vector as V -- vector
-
-
-data OpTwoBars x = OpTwoBars x
- deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic)
-
-instance Serialize x => Serialize (OpTwoBars x)
-instance Hashable x => Hashable (OpTwoBars x)
-instance ToJSON x => ToJSON (OpTwoBars x) where toJSON = genericToJSON jsonOptions
-instance FromJSON x => FromJSON (OpTwoBars x) where parseJSON = genericParseJSON jsonOptions
-
-instance (TypeOf x, Pretty x, Domain () x :< x) => TypeOf (OpTwoBars x) where
- typeOf p@(OpTwoBars a) = do
-<<<<<<< HEAD
- ty <- typeOf a
- case ty of
- TypeInt _ -> return ()
- TypeList{} -> return ()
- TypeSet{} -> return ()
- TypeMSet{} -> return ()
- TypeFunction{} -> return ()
- TypeSequence{} -> return ()
- TypeRelation{} -> return ()
- TypePartition{} -> return ()
- TypePermutation{} -> return ()
- _ -> raiseTypeError $ vcat [ pretty p
- , "Expected an integer or a collection."
- , "But got:" <+> pretty ty
- ]
-=======
- case project a of
- Just (_ :: Domain () x) -> return ()
- Nothing -> do
- ty <- typeOf a
- case ty of
- TypeInt _ -> return ()
- TypeList{} -> return ()
- TypeSet{} -> return ()
- TypeMSet{} -> return ()
- TypeFunction{} -> return ()
- TypeSequence{} -> return ()
- TypeRelation{} -> return ()
- TypePartition{} -> return ()
- _ -> raiseTypeError $ vcat [ pretty p
- , "Expected an integer or a collection."
- , "But got:" <+> pretty ty
- ]
->>>>>>> master
- return $ TypeInt TagInt
-
-instance SimplifyOp OpTwoBars x where
- simplifyOp _ = na "simplifyOp{OpTwoBars}"
-
-instance Pretty x => Pretty (OpTwoBars x) where
- prettyPrec _ (OpTwoBars a) = "|" <> pretty a <> "|"
-
-instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTwoBars x) where
- varSymBreakingDescription (OpTwoBars a) = JSON.Object $ M.fromList
- [ ("type", JSON.String "OpTwoBars")
- , ("children", JSON.Array $ V.fromList
- [ varSymBreakingDescription a
- ])
- ]
diff --git a/src/Conjure/Language/Instantiate.hs.orig b/src/Conjure/Language/Instantiate.hs.orig
deleted file mode 100644
index d173e5a2f7..0000000000
--- a/src/Conjure/Language/Instantiate.hs.orig
+++ /dev/null
@@ -1,436 +0,0 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-
-module Conjure.Language.Instantiate
- ( instantiateExpression
- , instantiateDomain
- , trySimplify
- , entailed
- ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Bug
-import Conjure.UserError
-import Conjure.Language.Definition
-import Conjure.Language.Expression.Op
-import Conjure.Language.Domain
-import Conjure.Language.Constant
-import Conjure.Language.Type
-import Conjure.Language.TypeOf
-import Conjure.Language.Pretty
-import Conjure.Process.Enumerate ( EnumerateDomain, enumerateDomain, enumerateInConstant )
-
-
--- | Try to simplify an expression recursively.
-trySimplify ::
- MonadUserError m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Expression -> m Expression
-trySimplify x = do
- res <- runMaybeT $ instantiateExpression [] x
- case res of
- Just c -- if the expression can be evaluated into a Constant
- | null [() | ConstantUndefined{} <- universe c] -- and if it doesn't contain undefined's in it
- -> return (Constant c) -- evaluate to the constant
- _ -> descendM trySimplify x -- otherwise, try the same on its children
-
-
-instantiateExpression ::
- MonadFail m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- [(Name, Expression)] -> Expression -> m Constant
-instantiateExpression ctxt x = do
- constant <- normaliseConstant <$> evalStateT (instantiateE x) ctxt
- case (emptyCollection constant, constant) of
- (_, TypedConstant{}) -> return constant
- (True, _) -> do
- ty <- typeOf x
- return (TypedConstant constant ty)
- (False, _) -> return constant
-
-
-instantiateDomain ::
- MonadFail m =>
- EnumerateDomain m =>
- Pretty r =>
- Default r =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- [(Name, Expression)] -> Domain r Expression -> m (Domain r Constant)
-instantiateDomain ctxt x = normaliseDomain normaliseConstant <$> evalStateT (instantiateD x) ctxt
-
-
-newtype HasUndef = HasUndef Any
- deriving (Semigroup, Monoid)
-
-instantiateE ::
- MonadFail m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Expression -> m Constant
-instantiateE (Comprehension body gensOrConds) = do
- let
- loop :: ( MonadFail m
- , MonadState [(Name, Expression)] m
- , EnumerateDomain m
- ) => [GeneratorOrCondition] -> WriterT HasUndef m [Constant]
- loop [] = return <$> instantiateE body
- loop (Generator (GenDomainNoRepr pat domain) : rest) = do
- DomainInConstant domainConstant <- instantiateE (Domain domain)
- let undefinedsInsideTheDomain =
- [ und
- | und@ConstantUndefined{} <- universeBi domainConstant
- ]
- if null undefinedsInsideTheDomain
- then do
- enumeration <- enumerateDomain domainConstant
- concatMapM
- (\ val -> scope $ do
- valid <- bind pat val
- if valid
- then loop rest
- else return [] )
- enumeration
- else do
- tell (HasUndef (Any True))
- return []
- loop (Generator (GenDomainHasRepr pat domain) : rest) =
- loop (Generator (GenDomainNoRepr (Single pat) (forgetRepr domain)) : rest)
- loop (Generator (GenInExpr pat expr) : rest) = do
- exprConstant <- instantiateE expr
- enumeration <- enumerateInConstant exprConstant
- concatMapM
- (\ val -> scope $ do
- valid <- bind pat val
- if valid
- then loop rest
- else return [] )
- enumeration
- loop (Condition expr : rest) = do
- constant <- instantiateE expr
- if constant == ConstantBool True
- then loop rest
- else return []
- loop (ComprehensionLetting n expr : rest) = do
- constant <- instantiateE expr
- valid <- bind (Single n) constant
- unless valid (bug "ComprehensionLetting.bind expected to be valid")
- loop rest
-
-
- (constants, HasUndef (Any undefinedsInsideGeneratorDomains)) <- runWriterT (loop gensOrConds)
- if undefinedsInsideGeneratorDomains
- then do
- ty <- typeOf (Comprehension body gensOrConds)
- return $ ConstantUndefined
- "Comprehension contains undefined values inside generator domains."
- ty
- else
- return $ ConstantAbstract $ AbsLitMatrix
- (DomainInt TagInt [RangeBounded 1 (fromInt (genericLength constants))])
- constants
-
-instantiateE (Reference name (Just (RecordField _ ty))) = return $ ConstantField name ty
-instantiateE (Reference name (Just (VariantField _ ty))) = return $ ConstantField name ty
-instantiateE (Reference _ (Just (Alias x))) = instantiateE x
-instantiateE (Reference name _) = do
- ctxt <- gets id
- case name `lookup` ctxt of
- Nothing -> fail $ vcat
- $ ("No value for:" <+> pretty name)
- : "Bindings in context:"
- : prettyContext ctxt
- Just x -> instantiateE x
-
-instantiateE (Constant c) = return c
-instantiateE (AbstractLiteral lit) = instantiateAbsLit lit
-instantiateE (Typed x ty) = TypedConstant <$> instantiateE x <*> pure ty
-instantiateE (Op op) = instantiateOp op
-
--- "Domain () Expression"s inside expressions are handled specially
-instantiateE (Domain (DomainReference _ (Just d))) = instantiateE (Domain d)
-instantiateE (Domain (DomainReference name Nothing)) = do
- ctxt <- gets id
- case name `lookup` ctxt of
- Just (Domain d) -> instantiateE (Domain d)
- _ -> fail $ vcat
- $ ("No value for:" <+> pretty name)
- : "Bindings in context:"
- : prettyContext ctxt
-instantiateE (Domain domain) = DomainInConstant <$> instantiateD domain
-
-instantiateE (WithLocals b (AuxiliaryVars locals)) = do
- forM_ locals $ \ local -> case local of
- SuchThat xs -> forM_ xs $ \ x -> do
- constant <- instantiateE x
- case constant of
- ConstantBool True -> return ()
- _ -> fail $ "local:" <+> pretty constant
- _ -> fail $ "local:" <+> pretty local
- instantiateE b
-
-instantiateE (WithLocals b (DefinednessConstraints locals)) = do
- forM_ locals $ \ x -> do
- constant <- instantiateE x
- case constant of
- ConstantBool True -> return ()
- _ -> fail $ "local:" <+> pretty constant
- instantiateE b
-
-instantiateE x = fail $ "instantiateE:" <+> pretty (show x)
-
-
-instantiateOp ::
- MonadFail m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Op Expression -> m Constant
-instantiateOp opx = mapM instantiateE opx >>= evaluateOp . fmap normaliseConstant
-
-
-instantiateAbsLit ::
- MonadFail m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- AbstractLiteral Expression -> m Constant
-instantiateAbsLit x = do
- c <- mapM instantiateE x
- case c of
- -- for functions, if the same thing is mapped to multiple values, the result is undefined
- AbsLitFunction vals -> do
- let nubVals = sortNub vals
- if length (sortNub (map fst nubVals)) == length nubVals
- then return $ ConstantAbstract $ AbsLitFunction nubVals
- else do
- ty <- typeOf c
- return $ ConstantUndefined "Multiple mappings for the same value." ty
- _ -> return $ ConstantAbstract c
-
-
-instantiateD ::
- MonadFail m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- Pretty r =>
- Default r =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Domain r Expression -> m (Domain r Constant)
-instantiateD (DomainAny t ty) = return (DomainAny t ty)
-instantiateD DomainBool = return DomainBool
-instantiateD (DomainIntE x) = do
- x' <- instantiateE x
- let vals = case (x', viewConstantMatrix x', viewConstantSet x') of
- (ConstantInt{}, _, _) -> [x']
- (_, Just (_, xs), _) -> xs
- (_, _, Just xs) -> xs
- _ -> []
- return (DomainInt TagInt (map RangeSingle vals))
-instantiateD (DomainInt t ranges) = DomainInt t <$> mapM instantiateR ranges
-instantiateD (DomainEnum nm Nothing _) = do
- st <- gets id
- case lookup nm st of
- Just (Domain dom) -> instantiateD (defRepr dom)
- Just _ -> fail $ ("DomainEnum not found in state, Just:" <+> pretty nm) <++> vcat (map pretty st)
- Nothing -> fail $ ("DomainEnum not found in state, Nothing:" <+> pretty nm) <++> vcat (map pretty st)
-instantiateD (DomainEnum nm rs0 _) = do
- let fmap4 = fmap . fmap . fmap . fmap
- let e2c' x = either bug id (e2c x)
- rs <- transformBiM (\ x -> Constant <$> instantiateE x ) (rs0 :: Maybe [Range Expression])
- |> fmap4 e2c'
- st <- gets id
- mp <- forM (universeBi rs :: [Name]) $ \ n -> case lookup n st of
- Just (Constant (ConstantInt _ i)) -> return (n, i)
- Nothing -> fail $ "No value for member of enum domain:" <+> pretty n
- Just c -> fail $ vcat [ "Incompatible value for member of enum domain:" <+> pretty nm
- , " Looking up for member:" <+> pretty n
- , " Expected an integer, but got:" <+> pretty c
- ]
- return (DomainEnum nm (rs :: Maybe [Range Constant]) (Just mp))
-instantiateD (DomainUnnamed nm s) = DomainUnnamed nm <$> instantiateE s
-instantiateD (DomainTuple inners) = DomainTuple <$> mapM instantiateD inners
-instantiateD (DomainRecord inners) = DomainRecord <$> sequence [ do d' <- instantiateD d ; return (n,d')
- | (n,d) <- inners ]
-instantiateD (DomainVariant inners) = DomainVariant <$> sequence [ do d' <- instantiateD d ; return (n,d')
- | (n,d) <- inners ]
-instantiateD (DomainMatrix index inner) = DomainMatrix <$> instantiateD index <*> instantiateD inner
-instantiateD (DomainSet r attrs inner) = DomainSet r <$> instantiateSetAttr attrs <*> instantiateD inner
-instantiateD (DomainMSet r attrs inner) = DomainMSet r <$> instantiateMSetAttr attrs <*> instantiateD inner
-instantiateD (DomainFunction r attrs innerFr innerTo) = DomainFunction r <$> instantiateFunctionAttr attrs <*> instantiateD innerFr <*> instantiateD innerTo
-instantiateD (DomainSequence r attrs inner) = DomainSequence r <$> instantiateSequenceAttr attrs <*> instantiateD inner
-instantiateD (DomainRelation r attrs inners) = DomainRelation r <$> instantiateRelationAttr attrs <*> mapM instantiateD inners
-instantiateD (DomainPartition r attrs inner) = DomainPartition r <$> instantiatePartitionAttr attrs <*> instantiateD inner
-instantiateD (DomainPermutation r attrs inner) = DomainPermutation r <$> instantiatePermutationAttr attrs <*> instantiateD inner
-instantiateD (DomainOp nm ds) = DomainOp nm <$> mapM instantiateD ds
-instantiateD (DomainReference _ (Just d)) = instantiateD d
-instantiateD (DomainReference name Nothing) = do
- ctxt <- gets id
- case name `lookup` ctxt of
- Just (Domain d) -> instantiateD (defRepr d)
- _ -> fail $ vcat
- $ ("No value for:" <+> pretty name)
- : "Bindings in context:"
- : prettyContext ctxt
-instantiateD DomainMetaVar{} = bug "instantiateD DomainMetaVar"
-
-
-instantiateSetAttr ::
- MonadFail m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- SetAttr Expression -> m (SetAttr Constant)
-instantiateSetAttr (SetAttr s) = SetAttr <$> instantiateSizeAttr s
-
-
-instantiateSizeAttr ::
- MonadFail m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- SizeAttr Expression -> m (SizeAttr Constant)
-instantiateSizeAttr SizeAttr_None = return SizeAttr_None
-instantiateSizeAttr (SizeAttr_Size x) = SizeAttr_Size <$> instantiateE x
-instantiateSizeAttr (SizeAttr_MinSize x) = SizeAttr_MinSize <$> instantiateE x
-instantiateSizeAttr (SizeAttr_MaxSize x) = SizeAttr_MaxSize <$> instantiateE x
-instantiateSizeAttr (SizeAttr_MinMaxSize x y) = SizeAttr_MinMaxSize <$> instantiateE x <*> instantiateE y
-
-
-instantiateMSetAttr ::
- MonadFail m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- MSetAttr Expression -> m (MSetAttr Constant)
-instantiateMSetAttr (MSetAttr s o) = MSetAttr <$> instantiateSizeAttr s <*> instantiateOccurAttr o
-
-
-instantiateOccurAttr ::
- MonadFail m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- OccurAttr Expression -> m (OccurAttr Constant)
-instantiateOccurAttr OccurAttr_None = return OccurAttr_None
-instantiateOccurAttr (OccurAttr_MinOccur x) = OccurAttr_MinOccur <$> instantiateE x
-instantiateOccurAttr (OccurAttr_MaxOccur x) = OccurAttr_MaxOccur <$> instantiateE x
-instantiateOccurAttr (OccurAttr_MinMaxOccur x y) = OccurAttr_MinMaxOccur <$> instantiateE x <*> instantiateE y
-
-
-instantiateFunctionAttr ::
- MonadFail m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- FunctionAttr Expression -> m (FunctionAttr Constant)
-instantiateFunctionAttr (FunctionAttr s p j) =
- FunctionAttr <$> instantiateSizeAttr s
- <*> pure p
- <*> pure j
-
-
-instantiateSequenceAttr ::
- MonadFail m =>
- MonadUserError m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- SequenceAttr Expression -> m (SequenceAttr Constant)
-instantiateSequenceAttr (SequenceAttr s j) =
- SequenceAttr <$> instantiateSizeAttr s
- <*> pure j
-
-
-instantiateRelationAttr ::
- MonadFail m =>
- MonadUserError m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- RelationAttr Expression -> m (RelationAttr Constant)
-instantiateRelationAttr (RelationAttr s b) = RelationAttr <$> instantiateSizeAttr s <*> pure b
-
-
-instantiatePartitionAttr ::
- MonadFail m =>
- MonadUserError m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- PartitionAttr Expression -> m (PartitionAttr Constant)
-instantiatePartitionAttr (PartitionAttr a b r) =
- PartitionAttr <$> instantiateSizeAttr a
- <*> instantiateSizeAttr b
- <*> pure r
-
-
-<<<<<<< HEAD
-instantiatePermutationAttr
- :: ( MonadFail m
- , MonadUserError m
- , MonadState [(Name, Expression)] m
- , EnumerateDomain m
- )
- => PermutationAttr Expression
- -> m (PermutationAttr Constant)
-instantiatePermutationAttr (PermutationAttr s) =
- PermutationAttr <$> instantiateSizeAttr s
-
-
-
-instantiateR
- :: ( MonadFail m
- , MonadUserError m
- , MonadState [(Name, Expression)] m
- , EnumerateDomain m
- )
- => Range Expression
- -> m (Range Constant)
-=======
-instantiateR ::
- MonadFail m =>
- MonadState [(Name, Expression)] m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Range Expression -> m (Range Constant)
->>>>>>> master
-instantiateR RangeOpen = return RangeOpen
-instantiateR (RangeSingle x) = RangeSingle <$> instantiateE x
-instantiateR (RangeLowerBounded x) = RangeLowerBounded <$> instantiateE x
-instantiateR (RangeUpperBounded x) = RangeUpperBounded <$> instantiateE x
-instantiateR (RangeBounded x y) = RangeBounded <$> instantiateE x <*> instantiateE y
-
-
-bind :: (Functor m, MonadState [(Name, Expression)] m)
- => AbstractPattern
- -> Constant
- -> m Bool -- False means skip
-bind (Single nm) val = modify ((nm, Constant val) :) >> return True
-bind (AbsPatTuple pats) (ConstantAbstract (AbsLitTuple vals))
- | length pats == length vals = and <$> zipWithM bind pats vals
-bind (AbsPatMatrix pats) (ConstantAbstract (AbsLitMatrix _ vals))
- | length pats == length vals = and <$> zipWithM bind pats vals
-bind (AbsPatSet pats) (ConstantAbstract (AbsLitSet vals))
- | length pats == length vals = and <$> zipWithM bind pats vals
- | otherwise = return False
-bind pat val = bug $ "Instantiate.bind:" <++> vcat ["pat:" <+> pretty pat, "val:" <+> pretty val]
-
-
--- check if the given expression can be evaluated to True
--- False means it is not entailed, as opposed to "it is known to be false"
-entailed ::
- MonadUserError m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Expression -> m Bool
-entailed x = do
- -- traceM $ show $ "entailed x:" <+> pretty x
- c <- trySimplify x
- -- traceM $ show $ "entailed c:" <+> pretty c
- case c of
- Constant (ConstantBool True) -> return True
- _ -> return False
-
diff --git a/src/Conjure/Language/Lexer.hs.orig b/src/Conjure/Language/Lexer.hs.orig
deleted file mode 100644
index 9092599169..0000000000
--- a/src/Conjure/Language/Lexer.hs.orig
+++ /dev/null
@@ -1,623 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
-
-module Conjure.Language.Lexer
- ( Lexeme(..)
- , LexemePos(..)
- , runLexer
- , textToLexeme
- , lexemeText
- , lexemeFace
- ) where
-
-import Conjure.Prelude
-
-import Data.Char ( isAlpha, isAlphaNum )
-import qualified Data.HashMap.Strict as M
-import qualified Data.Text as T
-import qualified Data.Text.Read as T
-import qualified Text.PrettyPrint as Pr
-
-import Text.Megaparsec.Pos ( SourcePos, initialPos, incSourceLine, incSourceColumn, setSourceColumn )
-import Text.Megaparsec.ShowToken ( ShowToken(..) )
-
-
-data LexemePos = LexemePos
- Lexeme -- the lexeme
- SourcePos -- source position, the beginning of this lexeme
- SourcePos -- source position, just after this lexeme, including whitespace after the lexeme
- deriving Show
-
-data Lexeme
- = LIntLiteral Integer
- | LIdentifier T.Text
- | LMetaVar T.Text
- | LComment T.Text
-
- -- general
- | L_be
- | L_from
- | L_of
- | L_domain
-
- | L_language
- | L_dim
- | L_find
- | L_given
- | L_letting
- | L_where
- | L_such
- | L_that
- | L_minimising
- | L_maximising
- | L_branching
- | L_on
- | L_heuristic
-
- -- type: boolean
- | L_bool
- | L_false
- | L_true
-
- -- type: integer
- | L_int
-
- -- creating a new type
- | L_new
- | L_type
- | L_enum
-
- -- type tuple
- | L_tuple
-
- -- type record
- | L_record
-
- -- type variant
- | L_variant
- | L_active
-
- -- type: matrix
- | L_matrix
- | L_indexed
- | L_by
-
- -- type set
- | L_set
- | L_size
- | L_minSize
- | L_maxSize
-
- -- type: mset
- | L_mset
- | L_minOccur
- | L_maxOccur
-
- -- type: function
- | L_function
- | L_total
- | L_partial
- | L_injective
- | L_surjective
- | L_bijective
-
- -- type: sequence
- | L_sequence
-
- -- type: relation
- | L_relation
-
- -- type: partition
- | L_partition
- | L_regular
- | L_partSize
- | L_minPartSize
- | L_maxPartSize
- | L_numParts
- | L_minNumParts
- | L_maxNumParts
-
- -- type: permutation
- | L_permutation
- | L_compose
-
- -- operators, page 21 of the holy paper
- | L_union
- | L_intersect
- | L_subset
- | L_subsetEq
- | L_supset
- | L_supsetEq
- | L_in
- | L_max
- | L_min
- | L_toSet
- | L_toMSet
- | L_toRelation
- | L_defined
- | L_range
- | L_restrict
- | L_image
- | L_imageSet
- | L_preImage
- | L_inverse
- | L_together
- | L_apart
- | L_party
- | L_participants
- | L_parts
- | L_freq
- | L_hist
-
- | L_toInt
-
- -- global constraints
- | L_allDiff
- | L_alldifferent_except
-
- | L_dontCare
-
- | L_catchUndef
-
- -- matrix only operators
- | L_flatten
- | L_concatenate
- | L_normIndices
-
- -- in the rule language
- -- | L_lambda
- -- | L_quantifier
- -- | L_representation
-
- -- arithmetic operators
-
- | L_Plus -- + -- sum, infix : (int,int) -> int
- | L_Minus -- - -- (subtraction, infix : (int,int) -> int) OR (unary minus : int -> int)
- | L_Times -- * -- multiplication, infix : (int,int) -> int
- | L_Div -- / -- integer division, infix
- | L_Mod -- % -- modulo, infix
- | L_Pow -- ** -- exponentiation, infix : (int,int) -> int
- | L_factorial
-
- -- equality
-
- | L_Eq -- = -- equals, infix.
- | L_Neq -- != -- not-equals, infix
-
- -- comparison
-
- | L_Lt -- < -- less-than, infix.
- | L_Leq -- <= -- less-than-or-eq, infix.
- | L_Gt -- > -- greater-than, infix.
- | L_Geq -- >= -- greater-than-or-eq, infix.
-
- -- logical operators
-
- | L_And -- /\ -- logical-and, infix
- | L_Or -- \/ -- logical-or, infix.
- | L_Imply -- -> -- implication, infix
- | L_Iff -- <-> -- iff, infix.
- -- | L_Not -- ! -- negation, prefix
- | L_ExclamationMark -- for poth L_Factorial and L_ExclamationMark
-
- -- the function arrow
-
- | L_LongArrow -- --> -- function domains and constants
-
- -- in rule language
-
- | L_Colon -- : -- has-domain, infix, (expr,domain) -> bool. also does pattern matching.
- | L_DoubleColon -- :: -- has-type, infix, (expr,type) -> bool. also does pattern matching.
- | L_At -- @ -- bubble operator.
-
- -- lex operators
-
- | L_LexGeq -- >=lex
- | L_LexGt -- >lex
- | L_LexLt -- <=lex
- | L_LexLeq -- >>>>>> master
- deriving (Eq, Ord, Show, Generic)
-
-instance Hashable Lexeme
-
-lexemeText :: Lexeme -> T.Text
-lexemeText l = T.pack $ show (lexemeFace l)
-
-textToLexeme :: T.Text -> Maybe Lexeme
-textToLexeme t = M.lookup t mapTextToLexeme
-
-lexemeFace :: Lexeme -> Pr.Doc
-lexemeFace L_Newline = "new line"
-lexemeFace L_Carriage = "\\r"
-lexemeFace L_Space = "space character"
-lexemeFace L_Tab = "tab character"
-lexemeFace (LIntLiteral i) = Pr.integer i
-lexemeFace (LIdentifier i) = Pr.text (T.unpack i)
-lexemeFace (LComment i) = Pr.text (T.unpack i)
-lexemeFace l =
- case M.lookup l mapLexemeToText of
- Nothing -> Pr.text (show l)
- Just t -> Pr.text (T.unpack t)
-
-lexemeWidth :: Lexeme -> Int
-lexemeWidth L_Carriage = 0
-lexemeWidth L_Tab = 4
-lexemeWidth (LIntLiteral i) = length (show i)
-lexemeWidth (LIdentifier i) = T.length i
-lexemeWidth (LComment i) = T.length i
-lexemeWidth l =
- case lookup l (map swap lexemes) of
- Nothing -> 0
- Just t -> T.length t
-
-mapTextToLexeme :: M.HashMap T.Text Lexeme
-mapTextToLexeme = M.fromList lexemes
-
-mapLexemeToText :: M.HashMap Lexeme T.Text
-mapLexemeToText = M.fromList $ map swap lexemes
-
-lexemes :: [(T.Text, Lexeme)]
-lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap
- [ ( L_be , "be" )
- , ( L_from , "from" )
- , ( L_of , "of" )
- , ( L_domain , "domain" )
- , ( L_language , "language" )
- , ( L_dim , "dim" )
- , ( L_find , "find" )
- , ( L_given , "given" )
- , ( L_letting , "letting" )
- , ( L_where , "where" )
- , ( L_such , "such" )
- , ( L_that , "that" )
- , ( L_minimising , "minimising" )
- , ( L_maximising , "maximising" )
- , ( L_minimising , "minimizing" )
- , ( L_maximising , "maximizing" )
- , ( L_branching , "branching" )
- , ( L_on , "on" )
- , ( L_heuristic , "heuristic" )
-
- , ( L_bool, "bool" )
- , ( L_false, "false" )
- , ( L_true, "true" )
- , ( L_int, "int" )
- , ( L_new, "new" )
- , ( L_type, "type" )
- , ( L_enum, "enum" )
- , ( L_tuple, "tuple" )
- , ( L_record, "record" )
- , ( L_variant, "variant" )
- , ( L_active, "active" )
- , ( L_matrix, "matrix" )
- , ( L_indexed, "indexed" )
- , ( L_by, "by" )
- , ( L_set, "set" )
- -- , ( L_size, "size" )
- -- , ( L_minSize, "minSize" )
- -- , ( L_maxSize, "maxSize" )
- , ( L_mset, "mset" )
- -- , ( L_minOccur, "minOccur" )
- -- , ( L_maxOccur, "maxOccur" )
- , ( L_function, "function" )
- -- , ( L_total, "total" )
- -- , ( L_partial, "partial" )
- -- , ( L_injective, "injective" )
- -- , ( L_surjective, "surjective" )
- -- , ( L_bijective, "bijective" )
- , ( L_sequence, "sequence" )
- , ( L_relation, "relation" )
- , ( L_partition, "partition" )
-
- , ( L_permutation, "permutation" )
- , ( L_compose, "compose")
- -- , ( L_regular, "regular" )
- -- , ( L_partSize, "partSize" )
- -- , ( L_minPartSize, "minPartSize" )
- -- , ( L_maxPartSize, "maxPartSize" )
- -- , ( L_numParts, "numParts" )
- -- , ( L_minNumParts, "minNumParts" )
- -- , ( L_maxNumParts, "maxNumParts" )
- , ( L_union, "union" )
- , ( L_intersect, "intersect" )
- , ( L_subset, "subset" )
- , ( L_subsetEq, "subsetEq" )
- , ( L_supset, "supset" )
- , ( L_supsetEq, "supsetEq" )
- , ( L_in, "in" )
- , ( L_max, "max" )
- , ( L_min, "min" )
- , ( L_toSet, "toSet" )
- , ( L_toMSet, "toMSet" )
- , ( L_toRelation, "toRelation" )
- , ( L_defined, "defined" )
- , ( L_range, "range" )
- , ( L_restrict, "restrict" )
- , ( L_image, "image" )
- , ( L_imageSet, "imageSet" )
- , ( L_preImage, "preImage" )
- , ( L_inverse, "inverse" )
- , ( L_together, "together" )
- , ( L_apart, "apart" )
- , ( L_party, "party" )
- , ( L_participants, "participants" )
- , ( L_parts, "parts" )
- , ( L_freq, "freq" )
- , ( L_hist, "hist" )
- , ( L_toInt, "toInt" )
-
- , ( L_allDiff, "allDiff" )
- , ( L_alldifferent_except, "alldifferent_except" )
-
- , ( L_dontCare, "dontCare" )
- , ( L_catchUndef, "catchUndef" )
-
- , ( L_flatten, "flatten" )
- , ( L_concatenate, "concatenate" )
- , ( L_normIndices, "normIndices" )
- -- , ( L_lambda, "lambda" )
- -- , ( L_quantifier, "quantifier" )
- -- , ( L_representation, "representation" )
- , ( L_Plus , "+" )
- , ( L_Minus , "-" )
- , ( L_Times , "*" )
- , ( L_Div , "/" )
- , ( L_Mod , "%" )
- , ( L_Pow , "**" )
- , ( L_factorial , "factorial" )
- , ( L_Eq , "=" )
- , ( L_Neq , "!=" )
- , ( L_Lt , "<" )
- , ( L_Leq , "<=" )
- , ( L_Gt , ">" )
- , ( L_Geq , ">=" )
- , ( L_And , "/\\" )
- , ( L_Or , "\\/" )
- , ( L_Imply , "->" )
- , ( L_Iff , "<->" )
- , ( L_ExclamationMark , "!" )
- , ( L_LongArrow , "-->" )
- , ( L_Colon , ":" )
- , ( L_DoubleColon , "::" )
- , ( L_At , "@" )
- , ( L_LexGeq , ">=lex" )
- , ( L_LexGt , ">lex" )
- , ( L_LexLeq , "<=lex" )
- , ( L_LexLt , "" )
- , ( L_CaseSeparator , "***" )
-
- , ( L_HasRepr , "hasRepr" )
- , ( L_HasType , "hasType" )
- , ( L_HasDomain , "hasDomain" )
- , ( L_indices , "indices" )
-
- , ( L_DotLt , ".<" )
- , ( L_DotLeq , ".<=" )
- , ( L_DotGt , ".>" )
- , ( L_DotGeq , ".>=" )
-
- , ( L_TildeLt , "~<" )
- , ( L_TildeLeq , "~<=" )
- , ( L_TildeGt , "~>" )
- , ( L_TildeGeq , "~>=" )
-
- , ( L_LeftArrow , "<-" )
-
- , ( L_subsequence , "subsequence" )
- , ( L_substring , "substring" )
- , ( L_powerSet , "powerSet" )
-
- , ( L_pred, "pred" )
- , ( L_succ, "succ" )
-
-<<<<<<< HEAD
- , ( L_tagged, "tagged" )
-=======
-
- , ( L_transform, "transform")
->>>>>>> master
- ]
-
-runLexer :: MonadFail m => T.Text -> m [LexemePos]
-runLexer text = do
- ls <- go text
- let lsPaired = calcPos (initialPos "") ls
- return lsPaired
- where
- go t = do
- let results = catMaybes $ tryLexMetaVar t
- : map (tryLex t) lexemes
- ++ [ tryLexIntLiteral t
- , tryLexIden t
- , tryLexQuotedIden t
- , tryLexComment t
- ]
- if T.null t
- then return []
- else case results of
- [] -> fail ("Lexing error:" Pr.<+> Pr.text (T.unpack t))
- ((rest,lexeme):_) -> (lexeme:) <$> go rest
-
- -- attach source positions to lexemes
- -- discard whitespace, but calculate their contribution to source positions
- calcPos :: SourcePos -> [Lexeme] -> [LexemePos]
- calcPos _pos [] = []
- calcPos pos (this:rest) | isLexemeSpace this -- skip if this one is whitespace
- = calcPos (nextPos pos this) rest -- can only happen at the beginning
- calcPos pos (this:rest) =
- let (restSpaces, restNonSpace) = span isLexemeSpace rest -- eat up all the whitespace after "this"
- pos' = foldl nextPos pos (this:restSpaces)
- in
- if null restNonSpace
- then [LexemePos this pos (nextPos pos this)] -- if this is the last non-whitespace lexeme
- -- do not include the whitespace after it
- else LexemePos this pos pos' : calcPos pos' restNonSpace
-
- nextPos :: SourcePos -> Lexeme -> SourcePos
- nextPos pos L_Newline = incSourceLine (setSourceColumn pos 1) 1
- nextPos pos L_Carriage = pos -- just ignore '\r's
- nextPos pos l = incSourceColumn pos (lexemeWidth l)
-
-isLexemeSpace :: Lexeme -> Bool
-isLexemeSpace L_Newline {} = True
-isLexemeSpace L_Carriage{} = True
-isLexemeSpace L_Tab {} = True
-isLexemeSpace L_Space {} = True
-isLexemeSpace LComment {} = True
-isLexemeSpace _ = False
-
-tryLex :: T.Text -> (T.Text, Lexeme) -> Maybe (T.Text, Lexeme)
-tryLex running (face,lexeme) = do
- rest <- T.stripPrefix face running
- if T.all isIdentifierLetter face
- then
- case T.uncons rest of
- Just (ch, _) | isIdentifierLetter ch -> Nothing
- _ -> Just (rest, lexeme)
- else Just (rest, lexeme)
-
-tryLexIntLiteral :: T.Text -> Maybe (T.Text, Lexeme)
-tryLexIntLiteral t =
- case T.decimal t of
- Left _ -> Nothing
- Right (x, rest) -> Just (rest, LIntLiteral x)
-
-isIdentifierFirstLetter :: Char -> Bool
-isIdentifierFirstLetter ch = isAlpha ch || ch `elem` ("_" :: String)
-
-isIdentifierLetter :: Char -> Bool
-isIdentifierLetter ch = isAlphaNum ch || ch `elem` ("_'" :: String)
-
-tryLexMetaVar :: T.Text -> Maybe (T.Text, Lexeme)
-tryLexMetaVar running = do
- ('&', rest) <- T.uncons running
- (rest2, LIdentifier iden) <- tryLexIden rest
- return (rest2, LMetaVar iden)
-
-tryLexIden :: T.Text -> Maybe (T.Text, Lexeme)
-tryLexIden running = do
- let (iden,rest) = T.span isIdentifierLetter running
- (ch, _) <- T.uncons running
- if isIdentifierFirstLetter ch
- then
- if T.null iden
- then Nothing
- else Just (rest, LIdentifier iden)
- else Nothing
-
-tryLexQuotedIden :: T.Text -> Maybe (T.Text, Lexeme)
-tryLexQuotedIden running = do
- let
- go inp = do
- ('\"', rest) <- T.uncons inp
- go2 "\"" rest
-
- -- after the first "
- go2 sofar inp = do
- (ch, rest) <- T.uncons inp
- case ch of
- -- end
- '\"'
- | sofar /= "\"" -- so we don't allow empty strings
- -> Just (rest, LIdentifier (T.pack (reverse ('\"' : sofar))))
- -- escaped
- '\\' -> do
- (ch2, rest2) <- T.uncons rest
- case ch2 of
- '\"' -> go2 ('\"':sofar) rest2
- '\\' -> go2 ('\\':sofar) rest2
- _ -> Nothing
- _ -> go2 (ch:sofar) rest
- go running
-
-tryLexComment :: T.Text -> Maybe (T.Text, Lexeme)
-tryLexComment running = let (dollar,rest1) = T.span (=='$') running
- in if T.null dollar
- then Nothing
- else let (commentLine,rest2) = T.span (/='\n') rest1
- in Just (rest2, LComment commentLine)
-
-
-instance ShowToken [LexemePos] where
- showToken = intercalate ", " . map showToken
-
-instance ShowToken LexemePos where
- showToken (LexemePos tok _ _) = showToken tok
-
-instance ShowToken Lexeme where
- showToken = show . lexemeFace
diff --git a/src/Conjure/Language/NameResolution.hs.orig b/src/Conjure/Language/NameResolution.hs.orig
deleted file mode 100644
index dae17f1247..0000000000
--- a/src/Conjure/Language/NameResolution.hs.orig
+++ /dev/null
@@ -1,340 +0,0 @@
-{-# LANGUAGE TupleSections #-}
-{-# LANGUAGE QuasiQuotes #-}
-
-module Conjure.Language.NameResolution
- ( resolveNames
- , resolveNamesMulti
- , resolveNamesX
- , resolveX, resolveD -- actually internal, use with care
- ) where
-
-import Conjure.Prelude
-import Conjure.Bug
-import Conjure.UserError
-import Conjure.Language.Definition
-import Conjure.Language.Domain
-import Conjure.Language.Type
-import Conjure.Language.Pretty
-<<<<<<< HEAD
-import Conjure.Language.Expression ( reDomExp )
-import Conjure.Language.Constant ( reDomConst )
-=======
-import Conjure.Language.TH
->>>>>>> master
-
-
-resolveNamesMulti ::
- MonadFail m =>
- MonadLog m =>
- MonadUserError m =>
- NameGen m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- [Model] -> m [Model]
-resolveNamesMulti = flip evalStateT [] . go
- where
- go [] = return []
- go (m:ms) = (:) <$> resolveNames_ m <*> go ms
-
-resolveNames ::
- MonadFail m =>
- MonadLog m =>
- MonadUserError m =>
- NameGen m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Model -> m Model
-resolveNames = flip evalStateT [] . resolveNames_
-
-resolveNames_ ::
- MonadFail m =>
- MonadLog m =>
- MonadState [(Name, ReferenceTo)] m =>
- MonadUserError m =>
- NameGen m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Model -> m Model
-resolveNames_ model = do
- statements <- mapM resolveStatement (mStatements model)
- mapM_ check (universeBi statements)
- return model { mStatements = statements }
-
--- this is for when a name will shadow an already existing name that is outside of this expression
--- we rename the new names to avoid name shadowing
-shadowing ::
- MonadFail m =>
- MonadState [(Name, ReferenceTo)] m =>
- NameGen m =>
- Expression -> m Expression
-shadowing p@(Comprehension _ is) = do
- -- list of names originating from this comprehension
- let generators = concat
- [ names
- | Generator gen <- is
- , let pat = generatorPat gen
- , let names = [ n | n@Name{} <- universeBi pat ]
- ]
- ctxt <- gets id
- -- a subset of names originating from this comprehension that will shadow already existing names
- let shadows = [ g | g <- generators, g `elem` map fst ctxt ]
- shadowsNew <- forM shadows $ \ s -> do n <- nextName "shadow" ; return (s,n)
- let f n = fromMaybe n (lookup n shadowsNew)
- return (transformBi f p)
-shadowing p = return p
-
-
-resolveNamesX ::
- MonadFail m =>
- MonadUserError m =>
- NameGen m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Expression -> m Expression
-resolveNamesX x = do
- x' <- evalStateT (resolveX x) []
- mapM_ check (universe x')
- return x'
-
-
-check :: MonadFail m => Expression -> m ()
-check (Reference nm Nothing) = fail ("Undefined:" <+> pretty nm)
-check _ = return ()
-
-
-resolveStatement ::
- MonadFail m =>
- MonadState [(Name, ReferenceTo)] m =>
- MonadUserError m =>
- NameGen m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Statement -> m Statement
-resolveStatement st =
- case st of
- Declaration decl ->
- case decl of
- FindOrGiven forg nm dom -> do
- dom' <- resolveD dom
- modify ((nm, DeclNoRepr forg nm dom' NoRegion) :)
- return (Declaration (FindOrGiven forg nm dom'))
- Letting nm x -> do
- x' <- resolveX x
- modify ((nm, Alias x') :)
- return (Declaration (Letting nm x'))
- LettingDomainDefnUnnamed nm x -> do
- x' <- resolveX x
- modify ((nm, Alias (Domain (DomainUnnamed nm x'))) :)
- return (Declaration (LettingDomainDefnUnnamed nm x'))
- LettingDomainDefnEnum (Name ename) nms -> do
- modify ( [ (nm, Alias (Constant (ConstantInt (TagEnum ename) i)))
- | (nm, i) <- zip nms [1..]
- ] ++)
- return st
- LettingDomainDefnEnum{} -> bug "resolveStatement, Name"
- GivenDomainDefnEnum{} -> return st -- ignoring
- SearchOrder xs -> SearchOrder <$> mapM resolveSearchOrder xs
- SearchHeuristic nm -> do
- let allowed = ["static", "sdf", "conflict", "srf", "ldf", "wdeg", "domoverwdeg"]
- if nm `elem` allowed
- then return (SearchHeuristic nm)
- else userErr1 $ vcat [ "Invalid heuristic:" <+> pretty nm
- , "Allowed values are:" <+> prettyList id "," allowed
- ]
- Where xs -> Where <$> mapM resolveX xs
- Objective obj x -> Objective obj <$> resolveX x
- SuchThat xs -> SuchThat <$> mapM resolveX xs
-
-
-<<<<<<< HEAD
-
-resolveSearchOrder
- :: ( MonadFail m
- , MonadUserError m
- , MonadState [(Name, ReferenceTo)] m
- , NameGen m
- , ?typeCheckerMode :: TypeCheckerMode
- )
- => SearchOrder
- -> m SearchOrder
-=======
-resolveSearchOrder ::
- MonadFail m =>
- MonadState [(Name, ReferenceTo)] m =>
- MonadUserError m =>
- NameGen m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- SearchOrder -> m SearchOrder
->>>>>>> master
-resolveSearchOrder (BranchingOn nm) = do
- ctxt <- gets id
- mval <- gets (lookup nm)
- case mval of
- Nothing -> userErr1 $ vcat $ ("Undefined reference:" <+> pretty nm)
- : ("Bindings in context:" : prettyContext ctxt)
- Just{} -> return (BranchingOn nm)
-resolveSearchOrder (Cut x) =
- let f Find = CutFind
- f forg = forg
- in Cut . transformBi f <$> resolveX x
-
-
-resolveX ::
- MonadFail m =>
- MonadState [(Name, ReferenceTo)] m =>
- MonadUserError m =>
- NameGen m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Expression -> m Expression
-resolveX (Reference nm Nothing) = do
- ctxt <- gets id
- mval <- gets (lookup nm)
- case mval of
- Nothing -> userErr1 $ vcat $ ("Undefined reference:" <+> pretty nm)
- : ("Bindings in context:" : prettyContext ctxt)
- Just r -> return (Reference nm (Just r))
-
-resolveX p@(Reference nm (Just refto)) = do -- this is for re-resolving
- mval <- gets (lookup nm)
- case mval of
- Nothing -> return p -- hence, do not fail if not in the context
- Just DeclNoRepr{} -- if the newly found guy doesn't have a repr
- | DeclHasRepr{} <- refto -- but the old one did, do not update
- -> return p
- Just (DeclNoRepr forg_ nm_ dom_ _) -- if the newly found guy doesn't have a repr
- | DeclNoRepr _ _ _ region <- refto -- and the old one didn't have one either
- -- preserve the region information
- -> return (Reference nm (Just (DeclNoRepr forg_ nm_ dom_ region)))
- Just (Alias r) -> do
- r' <- resolveX r
- return (Reference nm (Just (Alias r')))
- Just r ->
- return (Reference nm (Just r))
-
-resolveX (AbstractLiteral lit) = AbstractLiteral <$> resolveAbsLit lit
-
-resolveX (Domain x) = Domain <$> resolveD x
-
-resolveX p@Comprehension{} = scope $ do
- p' <- shadowing p
- case p' of
- Comprehension x is -> do
- is' <- forM is $ \ i -> case i of
- Generator gen -> do
- (gen', refto) <- case gen of
- GenDomainNoRepr pat dom -> do
- dom' <- resolveD dom
- let gen'' = GenDomainNoRepr pat dom'
- return
- ( gen''
- , case pat of
- Single nm' -> DeclNoRepr Quantified nm' dom' NoRegion
- _ -> InComprehension gen''
- )
- GenDomainHasRepr nm dom -> do
- dom' <- resolveD dom
- return
- ( GenDomainHasRepr nm dom'
- , DeclHasRepr Quantified nm dom'
- )
- GenInExpr pat expr -> do
- expr' <- resolveX expr
- let gen'' = GenInExpr pat expr'
- return ( gen'' , InComprehension gen'' )
- forM_ (universeBi (generatorPat gen)) $ \ nm ->
- modify ((nm, refto) :)
- return (Generator gen')
- Condition y -> Condition <$> resolveX y
- ComprehensionLetting pat expr -> do
- expr' <- resolveX expr
- resolveAbsPat p pat expr'
- return (ComprehensionLetting pat expr')
- x' <- resolveX x
- return (Comprehension x' is')
- _ -> bug "NameResolution.resolveX.shadowing"
-
-resolveX (WithLocals body (AuxiliaryVars locals)) = scope $ do
- locals' <- mapM resolveStatement locals
- body' <- resolveX body
- return (WithLocals body' (AuxiliaryVars locals'))
-
-resolveX (WithLocals body (DefinednessConstraints locals)) = scope $ do
- locals' <- mapM resolveX locals
- body' <- resolveX body
- return (WithLocals body' (DefinednessConstraints locals'))
-
-resolveX x = descendM resolveX x
-
-
-resolveD ::
- MonadFail m =>
- MonadState [(Name, ReferenceTo)] m =>
- MonadUserError m =>
- NameGen m =>
- Data r =>
- Default r =>
- Pretty r =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Domain r Expression -> m (Domain r Expression)
-resolveD (DomainReference _ (Just d)) = resolveD d
-resolveD (DomainReference nm Nothing) = do
- mval <- gets (lookup nm)
- case mval of
- Nothing -> userErr1 ("Undefined reference to a domain:" <+> pretty nm)
- Just (Alias (Domain r)) -> resolveD (changeRepr def r)
- Just x -> userErr1 ("Expected a domain, but got an expression:" <+> pretty x)
-resolveD (DomainRecord ds) = fmap DomainRecord $ forM ds $ \ (n, d) -> do
- d' <- resolveD d
- t <- typeOfDomain d'
- modify ((n, RecordField n t) :)
- return (n, d')
-resolveD (DomainVariant ds) = fmap DomainVariant $ forM ds $ \ (n, d) -> do
- d' <- resolveD d
- t <- typeOfDomain d'
- modify ((n, VariantField n t) :)
- return (n, d')
-resolveD d = do
- d' <- descendM resolveD d
- mapM resolveX d'
-
-
-resolveAbsPat ::
- MonadState [(Name, ReferenceTo)] m =>
- MonadUserError m =>
- Expression -> AbstractPattern -> Expression -> m ()
-resolveAbsPat _ AbstractPatternMetaVar{} _ = bug "resolveAbsPat AbstractPatternMetaVar"
-resolveAbsPat _ (Single nm) x = modify ((nm, Alias x) :)
-resolveAbsPat context (AbsPatTuple ps) x =
- sequence_ [ resolveAbsPat context p [essence| &x[&i] |]
- | (p, i_) <- zip ps allNats
- , let i = fromInt i_
- ]
-resolveAbsPat context (AbsPatMatrix ps) x =
- sequence_ [ resolveAbsPat context p [essence| &x[&i] |]
- | (p, i_) <- zip ps allNats
- , let i = fromInt i_
- ]
-resolveAbsPat context (AbsPatSet ps) x = do
- ys <- case x of
- Constant (ConstantAbstract (AbsLitSet xs)) -> return (map Constant xs)
- AbstractLiteral (AbsLitSet xs) -> return xs
- _ -> userErr1 $ "Abstract set pattern cannot be used in this context:" <++> pretty context
- sequence_ [ resolveAbsPat context p y
- | (p,y) <- zip ps ys
- ]
-
-
-resolveAbsLit ::
- MonadFail m =>
- MonadState [(Name, ReferenceTo)] m =>
- MonadUserError m =>
- NameGen m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- AbstractLiteral Expression -> m (AbstractLiteral Expression)
-resolveAbsLit (AbsLitVariant Nothing n x) = do
- x' <- resolveX x
- mval <- gets id
- let
- isTheVariant (Alias (Domain d@(DomainVariant nms))) | Just{} <- lookup n nms = Just d
- isTheVariant _ = Nothing
- case mapMaybe (isTheVariant . snd) mval of
- (DomainVariant dom:_) -> return (AbsLitVariant (Just dom) n x')
- _ -> return (AbsLitVariant Nothing n x')
-resolveAbsLit lit = (descendBiM resolveX >=> descendBiM resolveD') lit
- where
- resolveD' d = resolveD (d :: Domain () Expression)
diff --git a/src/Conjure/Representations.hs.orig b/src/Conjure/Representations.hs.orig
deleted file mode 100644
index 8d82ac7364..0000000000
--- a/src/Conjure/Representations.hs.orig
+++ /dev/null
@@ -1,234 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-
-module Conjure.Representations
- ( downD, downC, up
- , downD1, downC1, up1
- , downToX1
- , reprOptions, getStructurals
- , symmetryOrdering
- , reprsStandardOrderNoLevels, reprsStandardOrder, reprsSparseOrder
- , downX1
- , downX
- ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Bug
-import Conjure.Language
-import Conjure.Process.Enumerate
-import Conjure.Compute.DomainOf
-import Conjure.Representations.Combined
-
-
--- | Refine (down) an expression (X), one level (1).
-downX1 ::
- MonadFail m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Expression -> m [Expression]
-downX1 (Constant x) = onConstant x
-downX1 (AbstractLiteral x) = onAbstractLiteral x
-downX1 (Reference x (Just refTo)) = onReference x refTo
-downX1 (Op x) = onOp x
-downX1 (Comprehension body stmts) = do
- xs <- downX1 body
- return [Comprehension x stmts | x <- xs]
-downX1 x@WithLocals{} = fail ("downX1:" <++> pretty (show x))
-downX1 x = bug ("downX1:" <++> pretty (show x))
-
-
--- | Refine (down) an expression (X), all the way.
-downX ::
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Expression -> m [Expression]
-downX x = do
- res <- runMaybeT $ downX1 x
- case res of
- Nothing -> return [x]
- Just [] -> return [x]
- Just xs -> concatMapM downX xs
-
-
-onConstant ::
- MonadFail m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Constant -> m [Expression]
-onConstant (ConstantAbstract (AbsLitTuple xs)) = return (map Constant xs)
-onConstant (ConstantAbstract (AbsLitRecord xs)) = return (map (Constant . snd) xs)
-onConstant (ConstantAbstract (AbsLitVariant (Just t) n x))
- | Just i <- elemIndex n (map fst t)
- , let iExpr = fromInt (fromIntegral (i+1))
- = return $ iExpr : [ if n == n'
- then Constant x
- else ExpressionMetaVar "zeroVal for variant"
- | (n',_) <- t ]
-onConstant (ConstantAbstract (AbsLitMatrix index xs)) = do
- yss <- mapM (downX1 . Constant) xs
- let indexX = fmap Constant index
- return [ AbstractLiteral (AbsLitMatrix indexX ys) | ys <- transpose yss ]
-onConstant (TypedConstant c _) = onConstant c
-onConstant x = bug ("downX1.onConstant:" <++> pretty (show x))
-
-onAbstractLiteral ::
- MonadFail m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- AbstractLiteral Expression -> m [Expression]
-onAbstractLiteral (AbsLitTuple xs) = return xs
-onAbstractLiteral (AbsLitRecord xs) = return (map snd xs)
-onAbstractLiteral (AbsLitVariant (Just t) n x)
- | Just i <- elemIndex n (map fst t)
- , let iExpr = fromInt (fromIntegral (i+1))
- = return $ iExpr : [ if n == n'
- then x
- else ExpressionMetaVar "zeroVal for variant"
- | (n',_) <- t ]
-onAbstractLiteral (AbsLitMatrix index xs) = do
- yss <- mapM downX1 xs
- return [ AbstractLiteral (AbsLitMatrix index ys) | ys <- transpose yss ]
-onAbstractLiteral x = bug ("downX1.onAbstractLiteral:" <++> pretty (show x))
-
-onReference ::
- MonadFail m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Name -> ReferenceTo -> m [Expression]
-onReference nm refTo =
- case refTo of
- Alias x -> downX1 x
- InComprehension{} -> fail ("downX1.onReference.InComprehension:" <++> pretty (show nm))
- DeclNoRepr{} -> fail ("downX1.onReference.DeclNoRepr:" <++> pretty (show nm))
- DeclHasRepr forg _ domain -> downToX1 forg nm domain
- RecordField{} -> fail ("downX1.onReference.RecordField:" <++> pretty (show nm))
- VariantField{} -> fail ("downX1.onReference.VariantField:" <++> pretty (show nm))
-
-onOp ::
- MonadFail m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Op Expression -> m [Expression]
-onOp p@(MkOpIndexing (OpIndexing m i)) = do
- ty <- typeOf m
- case ty of
- TypeMatrix{} -> return ()
- TypeList{} -> return ()
- _ -> fail $ "[onOp, not a TypeMatrix or TypeList]" <+> vcat [pretty ty, pretty p]
- xs <- downX1 m
- let iIndexed x = Op (MkOpIndexing (OpIndexing x i))
- return (map iIndexed xs)
-onOp op = fail ("downX1.onOp:" <++> pretty op)
-
-
-
-symmetryOrdering ::
- MonadFail m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Expression -> m Expression
-<<<<<<< HEAD
-symmetryOrdering inp' = do
- let constBool (ConstantBool True) = ConstantInt TagInt 1
- constBool (ConstantBool False) = ConstantInt TagInt 0
- constBool x = x
- inp = transformBi constBool inp'
- ta <- typeOf inp
- case ta of
- TypeBool -> return [essence| [-toInt(&inp)] |]
- TypeInt{} -> return [essence| [&inp] |]
- TypeList TypeInt{} -> return inp
- TypeMatrix TypeInt{} TypeInt{} -> return inp
- _ -> do
- case inp of
- -- Constant x -> so_onConstant x
- -- AbstractLiteral _ -> return inp
- Constant (ConstantAbstract x) -> do
- case x of
- AbsLitTuple xs -> do
- soVals <- sequence (symmetryOrdering <$> (Constant <$> xs))
- return $ fromList soVals
- AbsLitMatrix _ xs -> do
- soVals <- sequence (symmetryOrdering <$> (Constant <$> xs))
- return $ fromList soVals
- _ -> bug ("symmetryOrdering: AbstractLiteral:" <++> pretty (show inp) <++> pretty (inp))
- Constant (ConstantBool b) -> return [essence| -toInt(&inp) |]
- AbstractLiteral x -> do
- case x of
- AbsLitTuple xs -> do
- soVals <- sequence (symmetryOrdering <$> xs)
- return $ AbstractLiteral $ AbsLitTuple soVals
- AbsLitMatrix d xs -> do
- soVals <- sequence (symmetryOrdering <$> xs)
- return $ AbstractLiteral $ AbsLitMatrix d soVals
- _ -> bug ("symmetryOrdering: AbstractLiteral:" <++> pretty (show inp) <++> pretty (inp))
-
-
- Reference _ (Just refTo) -> do
- case refTo of
- Alias x -> symmetryOrdering x
- InComprehension{} -> bug ("symmetryOrdering.InComprehension:" <++> pretty (show inp))
- DeclNoRepr{} -> bug ("symmetryOrdering.DeclNoRepr:" <++> pretty (show inp))
- DeclHasRepr _forg _name domain -> symmetryOrderingDispatch downX1 inp domain
- RecordField{} -> bug ("symmetryOrdering.RecordField:" <++> pretty (show inp))
- VariantField{} -> bug ("symmetryOrdering.VariantField:" <++> pretty (show inp))
- Op op -> case op of
- MkOpIndexing (OpIndexing m _) -> do
-
- ty <- typeOf m
- case ty of
- TypeMatrix{} -> return ()
- TypeList{} -> return ()
- _ -> bug $ "[symmetryOrdering.onOp, not a TypeMatrix or TypeList]" <+> vcat [pretty ty, pretty op]
- mDom <- domainOfR m
- case mDom of
- DomainMatrix _ domainInner -> symmetryOrderingDispatch downX1 inp domainInner
- _ -> bug ("symmetryOrdering, not DomainMatrix:" <++> pretty (show op))
- MkOpImage (OpImage p x) -> do
- so <- symmetryOrdering x
- return [essence| image(&p, &so) |]
- _ -> bug ("symmetryOrdering, no OpIndexing:" <++> pretty (show op))
- Comprehension body stmts -> do
- xs <- symmetryOrdering body
- return $ make opFlatten $ Comprehension xs stmts
- -- x@WithLocals{} -> bug ("downX1:" <++> pretty (show x))
- _ -> bug ("symmetryOrdering:" <++> pretty (show inp) <++> pretty (inp))
-=======
-symmetryOrdering inp =
- case inp of
- -- Constant x -> so_onConstant x
- -- AbstractLiteral x
- Reference _ (Just refTo) -> do
- case refTo of
- Alias x -> symmetryOrdering x
- InComprehension{} -> bug ("symmetryOrdering.InComprehension:" <++> pretty (show inp))
- DeclNoRepr{} -> bug ("symmetryOrdering.DeclNoRepr:" <++> pretty (show inp))
- DeclHasRepr _forg _name domain -> symmetryOrderingDispatch downX1 inp domain
- RecordField{} -> bug ("symmetryOrdering.RecordField:" <++> pretty (show inp))
- VariantField{} -> bug ("symmetryOrdering.VariantField:" <++> pretty (show inp))
- Op op -> case op of
- MkOpIndexing (OpIndexing m _) -> do
- ty <- typeOf m
- case ty of
- TypeMatrix{} -> return ()
- TypeList{} -> return ()
- _ -> bug $ "[symmetryOrdering.onOp, not a TypeMatrix or TypeList]" <+> vcat [pretty ty, pretty op]
- mDom <- domainOfR m
- case mDom of
- DomainMatrix _ domainInner -> symmetryOrderingDispatch downX1 inp domainInner
- _ -> bug ("symmetryOrdering, not DomainMatrix:" <++> pretty (show op))
- _ -> bug ("symmetryOrdering, unhandled Op:" <++> pretty (show op))
- -- Comprehension body stmts -> do
- -- xs <- downX1 body
- -- return [Comprehension x stmts | x <- xs]
- -- x@WithLocals{} -> bug ("downX1:" <++> pretty (show x))
- _ -> bug ("symmetryOrdering:" <++> pretty (show inp))
->>>>>>> master
-
diff --git a/src/Conjure/Representations/Function/Function1D.hs.orig b/src/Conjure/Representations/Function/Function1D.hs.orig
deleted file mode 100644
index 57b2687cd6..0000000000
--- a/src/Conjure/Representations/Function/Function1D.hs.orig
+++ /dev/null
@@ -1,199 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-
-module Conjure.Representations.Function.Function1D
- ( function1D
- , domainValues
- ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Language.Definition
-import Conjure.Language.Domain
-import Conjure.Language.Type
-import Conjure.Language.Constant
-import Conjure.Language.DomainSizeOf
-import Conjure.Language.Expression.DomainSizeOf ()
-import Conjure.Language.TH
-import Conjure.Language.Pretty
-import Conjure.Representations.Internal
-import Conjure.Representations.Common
-
--- unordered-containers
-import qualified Data.HashMap.Strict as M
-
-
-function1D :: forall m . (MonadFail m, NameGen m, ?typeCheckerMode :: TypeCheckerMode) => Representation m
-function1D = Representation chck downD structuralCons downC up symmetryOrdering
-
- where
-
- chck :: TypeOf_ReprCheck m
- chck f (DomainFunction _
- attrs@(FunctionAttr _ PartialityAttr_Total _)
- innerDomainFr
- innerDomainTo) | domainCanIndexMatrix innerDomainFr = do
- innerDomainFr' <- f innerDomainFr
- innerDomainTo' <- f innerDomainTo
- return [ DomainFunction Function_1D attrs fr to
- | fr <- innerDomainFr'
- , to <- innerDomainTo'
- ]
- chck _ _ = return []
-
- outName :: Domain HasRepresentation x -> Name -> Name
- outName = mkOutName Nothing
-
- downD :: TypeOf_DownD m
- downD (name, domain@(DomainFunction Function_1D
- (FunctionAttr _ PartialityAttr_Total _)
- innerDomainFr
- innerDomainTo)) | domainCanIndexMatrix innerDomainFr = return $ Just
- [ ( outName domain name
- , DomainMatrix
- (forgetRepr innerDomainFr)
- innerDomainTo
- ) ]
- downD _ = na "{downD} Function1D"
-
- structuralCons :: TypeOf_Structural m
- structuralCons f downX1
- (DomainFunction Function_1D
- (FunctionAttr sizeAttr PartialityAttr_Total jectivityAttr)
- innerDomainFr
- innerDomainTo) | domainCanIndexMatrix innerDomainFr = do
-
- let
- injectiveCons :: Expression -> m [Expression]
- injectiveCons m = do
- tyTo <- typeOfDomain innerDomainTo
- let canAllDiff = case tyTo of
- TypeBool{} -> True
- TypeInt{} -> True
- TypeEnum{} -> True
- _ -> False
- if canAllDiff
- then
- return $ return $ -- list
- [essence| allDiff(&m) |]
- else do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- return $ return $ -- list
- [essence|
- forAll &iPat, &jPat : &innerDomainFr .
- &i .< &j -> &m[&i] != &m[&j]
- |]
-
- surjectiveCons :: Expression -> m [Expression]
- surjectiveCons m = do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- return $ return $ -- list
- [essence|
- forAll &iPat : &innerDomainTo .
- exists &jPat : &innerDomainFr .
- &m[&j] = &i
- |]
-
- jectivityCons :: Expression -> m [Expression]
- jectivityCons m = case jectivityAttr of
- JectivityAttr_None -> return []
- JectivityAttr_Injective -> injectiveCons m
- JectivityAttr_Surjective -> surjectiveCons m
- JectivityAttr_Bijective -> (++) <$> injectiveCons m <*> surjectiveCons m
-
- cardinality <- domainSizeOf innerDomainFr
-
- let innerStructuralCons m = do
- (iPat, i) <- quantifiedVarOverDomain (forgetRepr innerDomainFr)
- let activeZone b = [essence| forAll &iPat : &innerDomainFr . &b |]
-
- -- preparing structural constraints for the inner guys
- innerStructuralConsGen <- f innerDomainTo
-
- let inLoop = [essence| &m[&i] |]
- outs <- innerStructuralConsGen inLoop
- return (map activeZone outs)
-
- return $ \ func -> do
- refs <- downX1 func
- case refs of
- [m] ->
- concat <$> sequence
- [ jectivityCons m
- , return (mkSizeCons sizeAttr cardinality)
- , innerStructuralCons m
- ]
- _ -> na "{structuralCons} Function1D"
-
- structuralCons _ _ _ = na "{structuralCons} Function1D"
-
- downC :: TypeOf_DownC m
- downC ( name
- , domain@(DomainFunction Function_1D
- (FunctionAttr _ PartialityAttr_Total _)
- innerDomainFr
- innerDomainTo)
- , ConstantAbstract (AbsLitFunction vals_)
- ) | domainCanIndexMatrix innerDomainFr = do
- let vals = M.fromList vals_
- froms <- domainValues innerDomainFr
- valsOut <- sequence
- [ val
- | fr <- froms
- , let val = case M.lookup fr vals of
- Nothing -> fail $ vcat [ "No value for" <+> pretty fr
- , "In:" <+> pretty (AbsLitFunction vals_)
- ]
- Just v -> return v
- ]
- return $ Just
- [ ( outName domain name
- , DomainMatrix (forgetRepr innerDomainFr) innerDomainTo
- , ConstantAbstract $ AbsLitMatrix (forgetRepr innerDomainFr) valsOut
- ) ]
- downC _ = na "{downC} Function1D"
-
- up :: TypeOf_Up m
- up ctxt (name, domain@(DomainFunction Function_1D
- (FunctionAttr _ PartialityAttr_Total _)
- innerDomainFr _)) =
- case lookup (outName domain name) ctxt of
- Nothing -> fail $ vcat $
- [ "(in Function1D up)"
- , "No value for:" <+> pretty (outName domain name)
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- Just constant ->
- case viewConstantMatrix constant of
- Just (_, vals) -> do
- froms <- domainValues innerDomainFr
- return ( name
- , ConstantAbstract $ AbsLitFunction $ zip froms vals
- )
- _ -> fail $ vcat
- [ "Expecting a matrix literal for:" <+> pretty (outName domain name)
- , "But got:" <+> pretty constant
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ]
- up _ _ = na "{up} Function1D"
-
- symmetryOrdering :: TypeOf_SymmetryOrdering m
- symmetryOrdering innerSO downX1 inp domain = do
- [inner] <- downX1 inp
- Just [(_, innerDomain)] <- downD ("SO", domain)
- innerSO downX1 inner innerDomain
-<<<<<<< HEAD
-=======
-
->>>>>>> master
-
-domainValues :: (MonadFail m, Pretty r) => Domain r Constant -> m [Constant]
-domainValues dom =
- case dom of
- DomainBool -> return [ConstantBool False, ConstantBool True]
- DomainInt t rs -> map (ConstantInt t) <$> valuesInIntDomain rs
- _ -> fail ("domainValues, not supported:" <+> pretty dom)
diff --git a/src/Conjure/Representations/Function/Function1DPartial.hs.orig b/src/Conjure/Representations/Function/Function1DPartial.hs.orig
deleted file mode 100644
index 96550c4858..0000000000
--- a/src/Conjure/Representations/Function/Function1DPartial.hs.orig
+++ /dev/null
@@ -1,229 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-
-module Conjure.Representations.Function.Function1DPartial ( function1DPartial ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Language
-import Conjure.Language.ZeroVal ( zeroVal, EnumerateDomain )
-import Conjure.Representations.Internal
-import Conjure.Representations.Common
-import Conjure.Representations.Function.Function1D ( domainValues )
-
--- unordered-containers
-import qualified Data.HashMap.Strict as M
-
-
-function1DPartial :: forall m . (MonadFail m, NameGen m, EnumerateDomain m) => Representation m
-function1DPartial = Representation chck downD structuralCons downC up symmetryOrdering
-
- where
-
- chck :: TypeOf_ReprCheck m
- chck f (DomainFunction _
- attrs@(FunctionAttr _ PartialityAttr_Partial _)
- innerDomainFr
- innerDomainTo) | domainCanIndexMatrix innerDomainFr = do
- innerDomainFr' <- f innerDomainFr
- innerDomainTo' <- f innerDomainTo
- return [ DomainFunction Function_1DPartial attrs fr to
- | fr <- innerDomainFr'
- , to <- innerDomainTo'
- ]
- chck _ _ = return []
-
- nameFlags = mkOutName (Just "Flags")
- nameValues = mkOutName (Just "Values")
-
- downD :: TypeOf_DownD m
- downD (name, domain@(DomainFunction Function_1DPartial
- (FunctionAttr _ PartialityAttr_Partial _)
- innerDomainFr
- innerDomainTo)) | domainCanIndexMatrix innerDomainFr = return $ Just
- [ ( nameFlags domain name
- , DomainMatrix
- (forgetRepr innerDomainFr)
- DomainBool
- )
- , ( nameValues domain name
- , DomainMatrix
- (forgetRepr innerDomainFr)
- innerDomainTo
- )
- ]
- downD _ = na "{downD} Function1DPartial"
-
- structuralCons :: TypeOf_Structural m
- structuralCons f downX1
- (DomainFunction Function_1DPartial
- (FunctionAttr sizeAttr PartialityAttr_Partial jectivityAttr)
- innerDomainFr
- innerDomainTo) | domainCanIndexMatrix innerDomainFr = do
-
- let injectiveCons flags values = do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- return $ return $ -- list
- [essence|
- and([ &values[&i] != &values[&j]
- | &iPat : &innerDomainFr
- , &jPat : &innerDomainFr
- , &i .< &j
- , &flags[&i]
- , &flags[&j]
- ])
- |]
-
- let surjectiveCons flags values = do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- return $ return $ -- list
- [essence|
- forAll &iPat : &innerDomainTo .
- exists &jPat : &innerDomainFr .
- &flags[&j] /\ &values[&j] = &i
- |]
-
- let jectivityCons flags values = case jectivityAttr of
- JectivityAttr_None -> return []
- JectivityAttr_Injective -> injectiveCons flags values
- JectivityAttr_Surjective -> surjectiveCons flags values
- JectivityAttr_Bijective -> (++) <$> injectiveCons flags values
- <*> surjectiveCons flags values
-
- let cardinality flags = do
- (iPat, i) <- quantifiedVar
- return [essence| sum &iPat : &innerDomainFr . toInt(&flags[&i]) |]
-
- let dontCareInactives flags values = do
- (iPat, i) <- quantifiedVar
- return $ return $ -- list
- [essence|
- forAll &iPat : &innerDomainFr . &flags[&i] = false ->
- dontCare(&values[&i])
- |]
-
- let innerStructuralCons flags values = do
- (iPat, i) <- quantifiedVarOverDomain (forgetRepr innerDomainFr)
- let activeZone b = [essence| forAll &iPat : &innerDomainFr . &flags[&i] -> &b |]
-
- -- preparing structural constraints for the inner guys
- innerStructuralConsGen <- f innerDomainTo
-
- let inLoop = [essence| &values[&i] |]
- outs <- innerStructuralConsGen inLoop
- return (map activeZone outs)
-
- return $ \ func -> do
- refs <- downX1 func
- case refs of
- [flags,values] ->
- concat <$> sequence
- [ jectivityCons flags values
- , dontCareInactives flags values
- , mkSizeCons sizeAttr <$> cardinality flags
- , innerStructuralCons flags values
- ]
- _ -> na "{structuralCons} Function1DPartial"
-
- structuralCons _ _ _ = na "{structuralCons} Function1DPartial"
-
- downC :: TypeOf_DownC m
- downC ( name
- , domain@(DomainFunction Function_1DPartial
- (FunctionAttr _ PartialityAttr_Partial _)
- innerDomainFr
- innerDomainTo)
- , ConstantAbstract (AbsLitFunction vals_)
- ) | domainCanIndexMatrix innerDomainFr = do
- let vals = M.fromList vals_
- z <- zeroVal innerDomainTo
- froms <- domainValues innerDomainFr
- (flagsOut, valsOut) <- unzip <$> sequence
- [ val
- | fr <- froms
- , let val = case M.lookup fr vals of
- Nothing -> return (ConstantBool False, z)
- Just v -> return (ConstantBool True , v)
- ]
- return $ Just
- [ ( nameFlags domain name
- , DomainMatrix
- (forgetRepr innerDomainFr)
- DomainBool
- , ConstantAbstract $ AbsLitMatrix
- (forgetRepr innerDomainFr)
- flagsOut
- )
- , ( nameValues domain name
- , DomainMatrix
- (forgetRepr innerDomainFr)
- innerDomainTo
- , ConstantAbstract $ AbsLitMatrix
- (forgetRepr innerDomainFr)
- valsOut
- )
- ]
- downC (name, domain, constant) = na $ vcat [ "{downC} Function1DPartial"
- , "name:" <+> pretty name
- , "domain:" <+> pretty domain
- , "constant:" <+> pretty constant
- ]
-
- up :: TypeOf_Up m
- up ctxt (name, domain@(DomainFunction Function_1DPartial
- (FunctionAttr _ PartialityAttr_Partial _)
- innerDomainFr _)) =
- case (lookup (nameFlags domain name) ctxt, lookup (nameValues domain name) ctxt) of
- ( Just (ConstantAbstract (AbsLitMatrix _ flagMatrix)) ,
- Just (ConstantAbstract (AbsLitMatrix _ valuesMatrix)) ) -> do
- froms <- domainValues innerDomainFr
- functionValues <- forM (zip3 flagMatrix froms valuesMatrix) $ \ (flag, from, to) ->
- case viewConstantBool flag of
- Just b -> return $ if b then Just (from,to) else Nothing
- Nothing -> fail $ vcat [ "Expected a boolean, but got:" <++> pretty flag
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ]
- return ( name, ConstantAbstract $ AbsLitFunction $ catMaybes functionValues )
- (Nothing, _) -> fail $ vcat $
- [ "(in Function1DPartial up 1)"
- , "No value for:" <+> pretty (nameFlags domain name)
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- (_, Nothing) -> fail $ vcat $
- [ "(in Function1DPartial up 2)"
- , "No value for:" <+> pretty (nameValues domain name)
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- _ -> fail $ vcat $
- [ "Expected matrix literals for:" <+> pretty (nameFlags domain name)
- <+> "and" <+> pretty (nameValues domain name)
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- up _ _ = na "{up} Function1DPartial"
-
- symmetryOrdering :: TypeOf_SymmetryOrdering m
- symmetryOrdering innerSO downX1 inp domain = do
- [flags, values] <- downX1 inp
- Just [_, (_, DomainMatrix innerDomainFr innerDomainTo)] <- downD ("SO", domain)
- (iPat, i) <- quantifiedVar
- soValues <- innerSO downX1 [essence| &values[&i] |] innerDomainTo
- return
- [essence|
- [ ( -toInt(&flags[&i])
- , &soValues
- )
- | &iPat : &innerDomainFr
- ]
- |]
-<<<<<<< HEAD
-=======
-
->>>>>>> master
diff --git a/src/Conjure/Representations/Function/FunctionND.hs.orig b/src/Conjure/Representations/Function/FunctionND.hs.orig
deleted file mode 100644
index 948b9baaee..0000000000
--- a/src/Conjure/Representations/Function/FunctionND.hs.orig
+++ /dev/null
@@ -1,283 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-{-# LANGUAGE ViewPatterns #-}
-
-module Conjure.Representations.Function.FunctionND ( functionND, viewAsDomainTuple, mkLensAsDomainTuple ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Bug
-import Conjure.Language
-import Conjure.Representations.Internal
-import Conjure.Representations.Common
-import Conjure.Representations.Function.Function1D ( domainValues )
-
-
-functionND :: forall m . (MonadFail m, NameGen m, ?typeCheckerMode :: TypeCheckerMode) => Representation m
-functionND = Representation chck downD structuralCons downC up symmetryOrdering
-
- where
-
- chck :: TypeOf_ReprCheck m
- chck f (DomainFunction _
- attrs@(FunctionAttr _ PartialityAttr_Total _)
- innerDomainFr@(viewAsDomainTuple -> Just innerDomainFrs)
- innerDomainTo) | all domainCanIndexMatrix innerDomainFrs = do
- innerDomainFr' <- f innerDomainFr
- innerDomainTo' <- f innerDomainTo
- return [ DomainFunction Function_ND attrs fr to
- | fr <- innerDomainFr'
- , to <- innerDomainTo'
- ]
- chck _ _ = return []
-
- nameValues :: Domain HasRepresentation x -> Name -> Name
- nameValues = mkOutName Nothing
-
- downD :: TypeOf_DownD m
- downD (name, domain@(DomainFunction Function_ND
- (FunctionAttr _ PartialityAttr_Total _)
- (viewAsDomainTuple -> Just innerDomainFrs)
- innerDomainTo)) | all domainCanIndexMatrix innerDomainFrs = do
- let unroll is j = foldr DomainMatrix j is
- return $ Just
- [ ( nameValues domain name
- , unroll (map forgetRepr innerDomainFrs) innerDomainTo
- )
- ]
- downD _ = na "{downD} FunctionND"
-
- structuralCons :: TypeOf_Structural m
- structuralCons f downX1
- (DomainFunction Function_ND
- (FunctionAttr sizeAttr PartialityAttr_Total jectivityAttr)
- innerDomainFr@(viewAsDomainTuple -> Just innerDomainFrs)
- innerDomainTo) | all domainCanIndexMatrix innerDomainFrs = do
-
- let
- kRange = case innerDomainFr of
- DomainTuple ts -> map fromInt [1 .. genericLength ts]
- DomainRecord rs -> map (fromName . fst) rs
- _ -> bug $ vcat [ "FunctionNDPartial.structuralCons"
- , "innerDomainFr:" <+> pretty innerDomainFr
- ]
- toIndex x = [ [essence| &x[&k] |] | k <- kRange ]
- index x m = make opMatrixIndexing m (toIndex x)
-
- let
- injectiveCons :: Expression -> m [Expression]
- injectiveCons values = do
- tyTo <- typeOfDomain innerDomainTo
- let canAllDiff = case tyTo of
- TypeBool{} -> True
- TypeInt{} -> True
- TypeEnum{} -> True
- _ -> False
- if canAllDiff
- then do
- (iPat, i) <- quantifiedVar
- let valuesIndexedI = index i values
- return $ return $ -- list
- [essence|
- allDiff([ &valuesIndexedI
- | &iPat : &innerDomainFr
- ])
- |]
- else do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- let valuesIndexedI = index i values
- let valuesIndexedJ = index j values
- return $ return $ -- list
- [essence|
- forAll &iPat, &jPat : &innerDomainFr .
- &i .< &j -> &valuesIndexedI != &valuesIndexedJ
- |]
-
- surjectiveCons :: Expression -> m [Expression]
- surjectiveCons values = do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- let valuesIndexedJ = index j values
- return $ return $ -- list
- [essence|
- forAll &iPat : &innerDomainTo .
- exists &jPat : &innerDomainFr .
- &valuesIndexedJ = &i
- |]
-
- jectivityCons :: Expression -> m [Expression]
- jectivityCons values = case jectivityAttr of
- JectivityAttr_None -> return []
- JectivityAttr_Injective -> injectiveCons values
- JectivityAttr_Surjective -> surjectiveCons values
- JectivityAttr_Bijective -> (++) <$> injectiveCons values
- <*> surjectiveCons values
-
- cardinality :: m Expression
- cardinality = do
- (iPat, _) <- quantifiedVar
- return [essence| sum &iPat : &innerDomainFr . 1 |]
-
- let innerStructuralCons values = do
- (iPat, i) <- quantifiedVarOverDomain (forgetRepr innerDomainFr)
- let valuesIndexedI = index i values
- let activeZone b = [essence| forAll &iPat : &innerDomainFr . &b |]
-
- -- preparing structural constraints for the inner guys
- innerStructuralConsGen <- f innerDomainTo
-
- let inLoop = valuesIndexedI
- outs <- innerStructuralConsGen inLoop
- return (map activeZone outs)
-
- return $ \ func -> do
- refs <- downX1 func
- case refs of
- [values] ->
- concat <$> sequence
- [ jectivityCons values
- , mkSizeCons sizeAttr <$> cardinality
- , innerStructuralCons values
- ]
- _ -> na "{structuralCons} FunctionND"
-
- structuralCons _ _ _ = na "{structuralCons} FunctionND"
-
- downC :: TypeOf_DownC m
- downC ( name
- , domain@(DomainFunction Function_ND
- (FunctionAttr _ PartialityAttr_Total _)
- innerDomainFr@(viewAsDomainTuple -> Just innerDomainFrs)
- innerDomainTo)
- , value@(ConstantAbstract (AbsLitFunction vals))
- ) | all domainCanIndexMatrix innerDomainFrs
- , Just (_mk, inspect) <- mkLensAsDomainTuple innerDomainFr = do
- let
- check :: [Constant] -> Maybe Constant
- check indices = listToMaybe [ v
- | (inspect -> Just k, v) <- vals
- , k == indices
- ]
-
- let
- unrollD :: [Domain () Constant] -> Domain r Constant -> Domain r Constant
- unrollD is j = foldr DomainMatrix j is
-
- let
- unrollC :: MonadFail m
- => [Domain () Constant]
- -> [Constant] -- indices
- -> m Constant
- unrollC [i] prevIndices = do
- domVals <- domainValues i
- let active val = check $ prevIndices ++ [val]
-
- missing <- concatForM domVals $ \ val ->
- case active val of
- Nothing -> return [ConstantAbstract $ AbsLitTuple $ prevIndices ++ [val]]
- Just {} -> return []
-
- unless (null missing) $
- fail $ vcat [ "Some points are undefined on a total function:" <++> prettyList id "," missing
- , " Function:" <+> pretty name
- , " Domain:" <++> pretty domain
- , " Value :" <++> pretty value
- ]
-
- return $ ConstantAbstract $ AbsLitMatrix i
- [ fromMaybe (bug $ "FunctionND downC" <+> pretty val) (active val)
- | val <- domVals ]
- unrollC (i:is) prevIndices = do
- domVals <- domainValues i
- matrixVals <- forM domVals $ \ val ->
- unrollC is (prevIndices ++ [val])
- return $ ConstantAbstract $ AbsLitMatrix i matrixVals
- unrollC is prevIndices = fail $ vcat [ "FunctionND.up.unrollC"
- , " is :" <+> vcat (map pretty is)
- , " prevIndices:" <+> pretty (show prevIndices)
- ]
-
- outValues <- unrollC (map forgetRepr innerDomainFrs) []
- return $ Just
- [ ( nameValues domain name
- , unrollD (map forgetRepr innerDomainFrs) innerDomainTo
- , outValues
- )
- ]
-
- downC _ = na "{downC} FunctionND"
-
- up :: TypeOf_Up m
- up ctxt (name, domain@(DomainFunction Function_ND
- (FunctionAttr _ PartialityAttr_Total _)
- innerDomainFr@(viewAsDomainTuple -> Just innerDomainFrs) _))
-
- | Just (mk, _inspect) <- mkLensAsDomainTuple innerDomainFr =
-
- case lookup (nameValues domain name) ctxt of
- Just valuesMatrix -> do
- let
- allIndices :: (MonadFail m, Pretty r) => [Domain r Constant] -> m [[Constant]]
- allIndices = fmap sequence . mapM domainValues
-
- index :: MonadFail m => Constant -> [Constant] -> m Constant
- index m [] = return m
- index (ConstantAbstract (AbsLitMatrix indexDomain vals)) (i:is) = do
- froms <- domainValues indexDomain
- case lookup i (zip froms vals) of
- Nothing -> fail "Value not found. FunctionND.up.index"
- Just v -> index v is
- index m is = bug ("FunctionND.up.index" <+> pretty m <+> pretty (show is))
-
- indices <- allIndices innerDomainFrs
- vals <- forM indices $ \ these -> do
- value <- index valuesMatrix these
- return (mk these, value)
- return ( name
- , ConstantAbstract $ AbsLitFunction vals
- )
- Nothing -> fail $ vcat $
- [ "(in FunctionND up)"
- , "No value for:" <+> pretty (nameValues domain name)
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- up _ _ = na "{up} FunctionND"
-
- symmetryOrdering :: TypeOf_SymmetryOrdering m
- symmetryOrdering innerSO downX1 inp domain = do
- [inner] <- downX1 inp
- Just [(_, innerDomain)] <- downD ("SO", domain)
- innerSO downX1 inner innerDomain
-<<<<<<< HEAD
-
-
-=======
->>>>>>> master
-
-viewAsDomainTuple :: Domain r x -> Maybe [Domain r x]
-viewAsDomainTuple (DomainTuple doms) = Just doms
-viewAsDomainTuple (DomainRecord doms) = Just (doms |> sortBy (comparing fst) |> map snd)
-viewAsDomainTuple _ = Nothing
-
-
-mkLensAsDomainTuple :: Domain r x -> Maybe ( [Constant] -> Constant -- how to make a literal
- , Constant -> Maybe [Constant] -- how to inspect a literal
- )
-mkLensAsDomainTuple (DomainTuple _) =
- Just
- ( \ vals -> ConstantAbstract (AbsLitTuple vals)
- , \ val -> case val of
- ConstantAbstract (AbsLitTuple vals) -> Just vals
- _ -> Nothing
- )
-mkLensAsDomainTuple (DomainRecord doms) =
- let names = doms |> sortBy (comparing fst) |> map fst
- in Just
- ( \ vals -> ConstantAbstract (AbsLitRecord (zip names vals))
- , \ val -> case val of
- ConstantAbstract (AbsLitRecord vals) -> Just (vals |> sortBy (comparing fst) |> map snd)
- _ -> Nothing
- )
-mkLensAsDomainTuple _ = Nothing
diff --git a/src/Conjure/Representations/MSet/Occurrence.hs.orig b/src/Conjure/Representations/MSet/Occurrence.hs.orig
deleted file mode 100644
index 4a870f7d39..0000000000
--- a/src/Conjure/Representations/MSet/Occurrence.hs.orig
+++ /dev/null
@@ -1,122 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-
-module Conjure.Representations.MSet.Occurrence ( msetOccurrence ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Language
-import Conjure.Representations.Internal
-import Conjure.Representations.Common
-
-
-msetOccurrence :: forall m . (MonadFail m, NameGen m) => Representation m
-msetOccurrence = Representation chck downD structuralCons downC up symmetryOrdering
-
- where
-
- chck :: TypeOf_ReprCheck m
- chck f (DomainMSet _ attrs innerDomain@DomainInt{}) = map (DomainMSet MSet_Occurrence attrs) <$> f innerDomain
- chck _ _ = return []
-
- outName :: Domain HasRepresentation x -> Name -> Name
- outName = mkOutName Nothing
-
- getMinOccur attrs = case attrs of
- MSetAttr _ (OccurAttr_MinOccur x) -> x
- MSetAttr _ (OccurAttr_MinMaxOccur x _) -> x
- MSetAttr _ _ -> 0
-
- getMaxOccur attrs = case attrs of
- MSetAttr _ (OccurAttr_MaxOccur x) -> return x
- MSetAttr _ (OccurAttr_MinMaxOccur _ x) -> return x
- MSetAttr (SizeAttr_Size x) _ -> return x
- MSetAttr (SizeAttr_MaxSize x) _ -> return x
- MSetAttr (SizeAttr_MinMaxSize _ x) _ -> return x
- _ -> fail ("getMaxOccur, mset not supported. attributes:" <+> pretty attrs)
-
- downD :: TypeOf_DownD m
- downD (name, domain@(DomainMSet MSet_Occurrence attrs innerDomain@DomainInt{})) = do
- maxOccur <- getMaxOccur attrs
- return $ Just
- [ ( outName domain name
- , DomainMatrix (forgetRepr innerDomain) (DomainInt TagInt [RangeBounded 0 maxOccur])
- )
- ]
- downD _ = na "{downD} Occurrence"
-
- structuralCons :: TypeOf_Structural m
- structuralCons _ downX1 (DomainMSet MSet_Occurrence
- attrs@(MSetAttr sizeAttr _occurAttr)
- innerDomain@DomainInt{}) =
- return $ \ mset -> do
- refs <- downX1 mset
- case refs of
- [m] -> do
- (iPat, i) <- quantifiedVar
- let
- minOccur = getMinOccur attrs
- minOccurCons =
- [ [essence| forAll &iPat : &innerDomain . &m[&i] = 0 \/ &m[&i] >= &minOccur |]
- | minOccur /= 0 ]
- let
- cardinality = [essence| sum &iPat : &innerDomain . &m[&i] |]
- cardinalityCons = mkSizeCons sizeAttr cardinality
- return (minOccurCons ++ cardinalityCons)
- _ -> na "{structuralCons} Occurrence"
- structuralCons _ _ _ = na "{structuralCons} Occurrence"
-
- downC :: TypeOf_DownC m
- downC ( name
- , domain@(DomainMSet MSet_Occurrence _attrs innerDomain@(DomainInt t intRanges))
- , ConstantAbstract (AbsLitMSet constants)
- ) = do
- innerDomainVals <- valuesInIntDomain intRanges
- return $ Just
- [ ( outName domain name
- , DomainMatrix (forgetRepr innerDomain) DomainBool
- , ConstantAbstract $ AbsLitMatrix (forgetRepr innerDomain)
- [ ConstantBool isIn
- | v <- innerDomainVals
- , let isIn = ConstantInt t v `elem` constants
- ]
- )
- ]
- downC _ = na "{downC} Occurrence"
-
- up :: TypeOf_Up m
- up ctxt (name, domain@(DomainMSet _ _ (DomainInt t intRanges)))=
- case lookup (outName domain name) ctxt of
- Just constantMatrix ->
- case viewConstantMatrix constantMatrix of
- Just (_, vals) -> do
- innerDomainVals <- valuesInIntDomain intRanges
- return (name, ConstantAbstract $ AbsLitMSet $ concat
- [ case viewConstantInt x of
- Just n -> replicate (fromInteger n) (ConstantInt t v)
- Nothing -> []
- | (v,x) <- zip innerDomainVals vals
- ] )
- _ -> fail $ vcat
- [ "Expecting a matrix literal for:" <+> pretty (outName domain name)
- , "But got:" <+> pretty constantMatrix
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ]
- Nothing -> fail $ vcat $
- [ "(in MSet Occurrence up)"
- , "No value for:" <+> pretty (outName domain name)
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- up _ _ = na "{up} Occurrence"
-
- symmetryOrdering :: TypeOf_SymmetryOrdering m
- symmetryOrdering innerSO downX1 inp domain = do
- [inner] <- downX1 inp
- Just [(_, innerDomain)] <- downD ("SO", domain)
- innerSO downX1 inner innerDomain
-<<<<<<< HEAD
-=======
-
->>>>>>> master
diff --git a/src/Conjure/Representations/Partition/Occurrence.hs.orig b/src/Conjure/Representations/Partition/Occurrence.hs.orig
deleted file mode 100644
index f838692f5a..0000000000
--- a/src/Conjure/Representations/Partition/Occurrence.hs.orig
+++ /dev/null
@@ -1,329 +0,0 @@
--- {-# LANGUAGE Rank2Types #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE QuasiQuotes #-}
-{-# LANGUAGE ViewPatterns #-}
-
-module Conjure.Representations.Partition.Occurrence ( partitionOccurrence ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Bug
-import Conjure.Language
-import Conjure.Language.DomainSizeOf
-import Conjure.Language.Expression.DomainSizeOf ()
-import Conjure.Language.ZeroVal ( zeroVal, EnumerateDomain )
-import Conjure.Representations.Internal
-import Conjure.Representations.Common
-import Conjure.Representations.Function.Function1D ( domainValues )
-
-
--- | works for "partition from A", where A can be used as an index of a matrix
--- _WhichPart: matrix indexed by [A] of int(1..maxNumParts)
--- (indicating which part an element belongs to)
--- _NumParts : int(1..maxNumParts)
--- (indicating the total number of parts)
--- only use part numbers from 1.._NumParts, never use the others
--- part(i) is used -> part(i-1) is used, forAll i:int(3..maxNumParts)
-partitionOccurrence :: forall m . (MonadFail m, NameGen m, EnumerateDomain m) => Representation m
-partitionOccurrence = Representation chck downD structuralCons downC up symmetryOrdering
-
- where
-
- chck :: TypeOf_ReprCheck m
- chck f (DomainPartition _ attrs innerDomain)
- | domainCanIndexMatrix innerDomain
- = map (DomainPartition Partition_Occurrence attrs) <$> f innerDomain
- chck _ _ = return []
-
- nameNumParts = mkOutName (Just "NumParts")
- nameWhichPart = mkOutName (Just "WhichPart")
- namePartSizes = mkOutName (Just "PartSizes")
- nameFirstIndex = mkOutName (Just "FirstIndex")
-
- getMaxNumParts attrs d =
- case partsNum attrs of
- SizeAttr_Size x -> return x
- SizeAttr_MaxSize x -> return x
- SizeAttr_MinMaxSize _ x -> return x
- _ -> domainSizeOf d
-
- getMaxPartSizes attrs d =
- case partsSize attrs of
- SizeAttr_Size x -> return x
- SizeAttr_MaxSize x -> return x
- SizeAttr_MinMaxSize _ x -> return x
- _ -> domainSizeOf d
-
- -- downD :: TypeOf_DownD m
- downD (name, domain@(DomainPartition Partition_Occurrence attrs innerDomain))
- | domainCanIndexMatrix innerDomain = do
- maxNumParts <- getMaxNumParts attrs innerDomain
- maxPartSizes <- getMaxPartSizes attrs innerDomain
- return $ Just
- [
- -- number of active parts
- ( nameNumParts domain name
- , DomainInt TagInt [RangeBounded 1 maxNumParts]
- )
- -- for each element, the part it belongs to
- , ( nameWhichPart domain name
- , DomainMatrix
- (forgetRepr innerDomain)
- (DomainInt TagInt [RangeBounded 1 maxNumParts])
- )
- -- for each part, number of elements in the part
- , ( namePartSizes domain name
- , DomainMatrix
- (DomainInt TagInt [RangeBounded 1 maxNumParts])
- (DomainInt TagInt [RangeBounded 0 maxPartSizes])
- )
- -- wtf was this?
- , ( nameFirstIndex domain name
- , DomainMatrix
- (DomainInt TagInt [RangeBounded 1 maxNumParts])
- innerDomain -- dontCare if not used
- )
- ]
- downD _ = na "{downD} Occurrence"
-
- structuralCons :: TypeOf_Structural m
- structuralCons _ downX1 (DomainPartition _ attrs innerDomain)
- | domainCanIndexMatrix innerDomain = do
- maxNumParts <- getMaxNumParts attrs innerDomain
- let
- numPartsChannelling whichPart numPartsVar = do
- (iPat, i) <- quantifiedVar
- return $ return -- for list
- [essence|
- &numPartsVar =
- max([ &whichPart[&i] | &iPat : &innerDomain ])
- |]
-
- partSizesChannelling whichPart partSizesVar = do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- return $ return -- for list
- [essence|
- and([ &partSizesVar[&i] = sum([ 1 | &jPat : &innerDomain , &whichPart[&j] = &i ])
- | &iPat : int(1..&maxNumParts)
- ])
- |]
-
- firstIndexChannelling whichPart numPartsVar firstIndexVar = do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- return
- [ -- firstIndexVar[i] is <= all indices belonging to part i
- [essence|
- forAll &iPat : int(1..&maxNumParts) , &i <= &numPartsVar .
- forAll &jPat : &innerDomain .
- &whichPart[&j] = &i -> &firstIndexVar[&i] <= &j
- |]
- , -- firstIndexVar[i] is equal to one of those
- [essence|
- forAll &iPat : int(1..&maxNumParts) , &i <= &numPartsVar .
- exists &jPat : &innerDomain .
- &whichPart[&j] = &i /\ &firstIndexVar[&i] = &j
- |]
- , -- firstIndexVar[i] is dontCare, if nothing is in part i
- [essence|
- forAll &iPat : int(1..&maxNumParts) , &i > &numPartsVar .
- dontCare(&firstIndexVar[&i])
- |]
- ]
-
- symmetryBreaking numPartsVar firstIndexVar = do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- return $ return -- for list
- [essence|
- forAll &iPat, &jPat : int(1..&maxNumParts) , &i <= &numPartsVar /\ &j <= &numPartsVar .
- &i < &j <-> &firstIndexVar[&i] < &firstIndexVar[&j]
- |]
-
- numPartsCons numPartsVar =
- return $ mkSizeCons (partsNum attrs) numPartsVar
-
- partSizeCons numPartsVar partSizesVar = do
- (iPat, i) <- quantifiedVar
- let theConsForI = make opAnd $ fromList $
- mkSizeCons (partsSize attrs) [essence| &partSizesVar[&i] |]
- return
- [ [essence|
- and([ &theConsForI
- | &iPat : int(1..&maxNumParts) $ forAll part numbers
- , &i <= &numPartsVar $ that are active
- ])
- |]
- , [essence|
- and([ &partSizesVar[&i] = 0
- | &iPat : int(1..&maxNumParts) $ forAll part numbers
- , &i > &numPartsVar $ that are inactive
- ])
- |]
- ]
-
- noGaps whichPart numPartsVar = do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- return $ return -- for list
- [essence|
- and([ or([ &whichPart[&j] = &i $ there must be a member in that part
- | &jPat : &innerDomain
- ])
- | &iPat : int(3..&maxNumParts) $ forAll part numbers (except 1 and 2)
- , &i <= &numPartsVar $ that are active
- ])
- |]
-
- fixedPartSize =
- case attrs of
- PartitionAttr _ SizeAttr_Size{} _ -> True
- _ -> False
-
- regular numPartsVar partSizesVar | isRegular attrs && not fixedPartSize = do
- (iPat, i) <- quantifiedVar
- return $ return -- for list
- [essence|
- and([ &partSizesVar[&i-1] = &partSizesVar[&i]
- | &iPat : int(2..&maxNumParts)
- , &i <= &numPartsVar
- ])
- |]
- regular _ _ = return []
-
- return $ \ inpPartition -> do
- [numPartsVar, whichPart, partSizesVar, firstIndexVar] <- downX1 inpPartition
- concat <$> sequence
- [ partSizeCons numPartsVar partSizesVar
- , numPartsCons numPartsVar
- , noGaps whichPart numPartsVar
- , regular numPartsVar partSizesVar
- , numPartsChannelling whichPart numPartsVar
- , partSizesChannelling whichPart partSizesVar
- , firstIndexChannelling whichPart numPartsVar firstIndexVar
- , symmetryBreaking numPartsVar firstIndexVar
- ]
- structuralCons _ _ domain = na $ vcat [ "{structuralCons} Occurrence"
- , "domain:" <+> pretty domain
- ]
-
- downC :: TypeOf_DownC m
- downC ( name
- , inDom@(DomainPartition Partition_Occurrence attrs innerDomain)
- , inConstant@(ConstantAbstract (AbsLitPartition vals))
- ) = do
- Just [ ( numPartsVar , numPartsDom )
- , ( whichPart , whichPartDom )
- , ( partSizesVar , partSizesDom )
- , ( firstIndexVar , firstIndexDom )
- ] <- downD (name, inDom)
- members <- domainValues innerDomain
- maxNumParts' <- getMaxNumParts attrs innerDomain
- maxNumParts <- case viewConstantInt maxNumParts' of
- Just i -> return i
- Nothing -> bug ("expecting an integer literal, but got:" <++> pretty maxNumParts')
- z <- zeroVal innerDomain
- let
- whichPartValInside :: [(Integer, Constant)]
- whichPartValInside =
- [ case whichPartIsIt of
- [p] -> p
- [] -> bug $ vcat [ "Not found:" <+> pretty mem
- , "Inside:" <+> pretty inConstant
- ]
- _ -> bug $ vcat [ "Found multiple times:" <+> pretty mem
- , "Inside:" <+> pretty inConstant
- ]
- | mem <- members
- , let whichPartIsIt = [ (p, mem)
- | (p, pVals) <- zip [1..] vals
- , mem `elem` pVals
- ]
- ]
- numPartsVal = ConstantInt TagInt (genericLength vals)
- whichPartVal = ConstantAbstract (AbsLitMatrix
- (forgetRepr innerDomain)
- (map (ConstantInt TagInt . fst) whichPartValInside))
- partSizesVal = ConstantAbstract (AbsLitMatrix
- (DomainInt TagInt [RangeBounded 1 maxNumParts'])
- (map (ConstantInt TagInt . genericLength) vals
- ++ replicate (fromInteger (maxNumParts - genericLength vals))
- (ConstantInt TagInt 0)))
- firstIndexVal = ConstantAbstract (AbsLitMatrix
- (DomainInt TagInt [RangeBounded 1 maxNumParts'])
- ([ case lookup p whichPartValInside of
- Nothing -> bug $ vcat [ "Not found:" <+> pretty p
- , "Inside:" <+> prettyList id "," whichPartValInside
- ]
- Just i -> i
- | p <- [1..genericLength vals] ]
- ++ replicate (fromInteger (maxNumParts - genericLength vals))
- z))
- return $ Just
- [ ( numPartsVar , numPartsDom , numPartsVal )
- , ( whichPart , whichPartDom , whichPartVal )
- , ( partSizesVar , partSizesDom , partSizesVal )
- , ( firstIndexVar , firstIndexDom , firstIndexVal )
- ]
- downC (name, domain, constant) = na $ vcat [ "{downC} Occurrence"
- , "name:" <+> pretty name
- , "domain:" <+> pretty domain
- , "constant:" <+> pretty constant
- ]
-
- up :: TypeOf_Up m
- up ctxt (name, domain@(DomainPartition Partition_Occurrence _ innerDomain)) =
- case (lookup (nameNumParts domain name) ctxt, lookup (nameWhichPart domain name) ctxt) of
- ( Just (viewConstantInt -> Just numPartsValue) ,
- Just (viewConstantMatrix -> Just (_, whichPartValues)) ) -> do
- members <- domainValues innerDomain
- return
- ( name
- , normaliseConstant $ ConstantAbstract $ AbsLitPartition
- [ [ member | (member, b) <- zip members whichPartValues, b == ConstantInt TagInt bucket ]
- | bucket <- [1..numPartsValue]
- ]
- )
- (Just val, _) -> fail $ vcat $
- [ "(in Partition Occurrence up)"
- , "Expecting an integer literal for:" <+> pretty (nameNumParts domain name)
- , "But got:" <+> pretty val
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- (_, Just val) -> fail $ vcat $
- [ "(in Partition Occurrence up)"
- , "Expecting a matrix literal for:" <+> pretty (nameWhichPart domain name)
- , "But got:" <+> pretty val
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- (Nothing, _) -> fail $ vcat $
- [ "(in Partition Occurrence up)"
- , "No value for:" <+> pretty (nameNumParts domain name)
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- up ctxt (name, domain) =
- na $ vcat [ "{up} Occurrence"
- , "name:" <+> pretty name
- , "domain:" <+> pretty domain
- , "ctxt:" <+> vcat (map pretty ctxt)
- ]
-
- symmetryOrdering :: TypeOf_SymmetryOrdering m
- symmetryOrdering innerSO downX1 inp domain = do
- xs <- downX1 inp
- Just xsDoms' <- downD ("SO", domain)
- let xsDoms = map snd xsDoms'
- soValues <- sequence [ innerSO downX1 x xDom | (x, xDom) <- zip xs xsDoms ]
-<<<<<<< HEAD
- return (fromList soValues)
-=======
- return $ AbstractLiteral $ AbsLitTuple soValues
-
->>>>>>> master
diff --git a/src/Conjure/Representations/Record.hs.orig b/src/Conjure/Representations/Record.hs.orig
deleted file mode 100644
index 3a324772f4..0000000000
--- a/src/Conjure/Representations/Record.hs.orig
+++ /dev/null
@@ -1,90 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-
-module Conjure.Representations.Record
- ( record
- ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Bug
-import Conjure.Language
-import Conjure.Representations.Internal
-
-
-record :: forall m . (MonadFail m, NameGen m) => Representation m
-record = Representation chck downD structuralCons downC up symmetryOrdering
-
- where
-
- chck :: TypeOf_ReprCheck m
- chck f (DomainRecord ds) = do
- let names = map fst ds
- outDoms <- sequence <$> mapM (f . snd) ds
- return [ DomainRecord (zip names ds') | ds' <- outDoms ]
- chck _ _ = return []
-
- mkName name n = mconcat [name, "_", n]
-
- downD :: TypeOf_DownD m
- downD (name, DomainRecord ds) = return $ Just
- [ (mkName name n, d)
- | (n,d) <- ds
- ]
- downD _ = na "{downD}"
-
- structuralCons :: TypeOf_Structural m
- structuralCons f downX1 (DomainRecord ds) = return $ \ tup -> do
- refs <- downX1 tup
- concat <$> sequence
- [ do
- innerStructuralConsGen <- f dom
- outs <- innerStructuralConsGen ref
- return outs
- | (ref, (_n, dom)) <- zip refs ds
- ]
- structuralCons _ _ _ = na "{structuralCons} record"
-
- -- TODO: check if (length ds == length cs)
- downC :: TypeOf_DownC m
- downC (name, DomainRecord ds, ConstantAbstract (AbsLitRecord cs))
- | sort (map fst ds) == sort (map fst cs) = return $ Just
- [ case lookup n cs of
- Nothing -> bug "Record.downC"
- Just c -> (mkName name n, d, c)
- | (n,d) <- ds
- ]
- downC (n, d, c) =
- na $ "{downC} record" <+> vcat
- [ "name :" <+> pretty n
- , "domain:" <+> pretty d
- , "value :" <+> pretty c
- ]
-
- up :: TypeOf_Up m
- up ctxt (name, DomainRecord ds) = do
- let names = map (mkName name . fst) ds
- vals <- forM names $ \ n ->
- case lookup n ctxt of
- Nothing -> fail $ vcat $
- [ "(in Record up)"
- , "No value for:" <+> pretty n
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty (DomainRecord ds)
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- Just val -> return (n, val)
- -- TODO: check if (length ds == length vals)
- return (name, ConstantAbstract (AbsLitRecord vals))
- up _ _ = na "{up}"
-
- symmetryOrdering :: TypeOf_SymmetryOrdering m
- symmetryOrdering innerSO downX1 inp domain = do
- xs <- downX1 inp
- Just xsDoms' <- downD ("SO", domain)
- let xsDoms = map snd xsDoms'
- soValues <- sequence [ innerSO downX1 x xDom | (x, xDom) <- zip xs xsDoms ]
- return $ AbstractLiteral $ AbsLitTuple soValues
-<<<<<<< HEAD
-=======
-
->>>>>>> master
diff --git a/src/Conjure/Representations/Set/Explicit.hs.orig b/src/Conjure/Representations/Set/Explicit.hs.orig
deleted file mode 100644
index c0005d64c2..0000000000
--- a/src/Conjure/Representations/Set/Explicit.hs.orig
+++ /dev/null
@@ -1,117 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-
-module Conjure.Representations.Set.Explicit ( setExplicit ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Language
-import Conjure.Representations.Internal
-
-
-setExplicit :: forall m . (MonadFail m, NameGen m) => Representation m
-setExplicit = Representation chck downD structuralCons downC up symmetryOrdering
-
- where
-
- -- | We can represent any inner domain but set must be fixed size
- chck :: TypeOf_ReprCheck m
- chck f (DomainSet _ attrs@(SetAttr SizeAttr_Size{}) innerDomain) =
- map (DomainSet Set_Explicit attrs) <$> f innerDomain
- chck _ _ = return []
-
- outName :: Domain HasRepresentation x -> Name -> Name
- outName = mkOutName Nothing
-
- -- | A 1D matrix of size of set containing innerDomain objects
- downD :: TypeOf_DownD m
- downD (name, domain@(DomainSet Set_Explicit (SetAttr (SizeAttr_Size size)) innerDomain)) = return $ Just
- [ ( outName domain name
- , DomainMatrix
- (DomainInt TagInt [RangeBounded 1 size])
- innerDomain
- ) ]
- downD _ = na "{downD} Explicit"
-
- -- | Enforce lex ordering of matrix (symmetry breaking) and inner structural constraints of
- -- 'active' elements of inner domain
- structuralCons :: TypeOf_Structural m
- structuralCons f downX1 (DomainSet Set_Explicit (SetAttr (SizeAttr_Size size)) innerDomain) = do
- let
- -- | Makes sure i'th value is lex less than (i+1)'th value
- -- a symmetry breaking structural constraint
- ordering m = do
- (iPat, i) <- quantifiedVar
- return $ return -- for list
- [essence|
- forAll &iPat : int(1..&size-1) .
- &m[&i] .< &m[&i+1]
- |]
-
- -- | Enforces structural constraints for the elements of the inner domain
- -- that are in the set.
- innerStructuralCons m = do
- (iPat, i) <- quantifiedVarOverDomain [essenceDomain| int(1..&size) |]
- let activeZone b = [essence| forAll &iPat : int(1..&size) . &b |]
-
- -- preparing structural constraints for the inner guys
- innerStructuralConsGen <- f innerDomain
-
- let inLoop = [essence| &m[&i] |]
- outs <- innerStructuralConsGen inLoop
- return (map activeZone outs)
-
- return $ \ ref -> do
- refs <- downX1 ref
- case refs of
- [m] ->
- concat <$> sequence
- [ ordering m
- , innerStructuralCons m
- ]
- _ -> na "{structuralCons} Explicit"
- structuralCons _ _ _ = na "{structuralCons} Explicit"
-
- downC :: TypeOf_DownC m
- downC ( name
- , domain@(DomainSet Set_Explicit (SetAttr (SizeAttr_Size size)) innerDomain)
- , ConstantAbstract (AbsLitSet constants)
- ) =
- let outIndexDomain = mkDomainIntB 1 size
- in return $ Just
- [ ( outName domain name
- , DomainMatrix outIndexDomain innerDomain
- , ConstantAbstract $ AbsLitMatrix outIndexDomain constants
- ) ]
- downC _ = na "{downC} Explicit"
-
- up :: TypeOf_Up m
- up ctxt (name, domain@(DomainSet Set_Explicit (SetAttr (SizeAttr_Size _)) _)) =
- case lookup (outName domain name) ctxt of
- Nothing -> fail $ vcat $
- [ "(in Set Explicit up)"
- , "No value for:" <+> pretty (outName domain name)
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- Just constant ->
- case viewConstantMatrix constant of
- Just (_, vals) ->
- return (name, ConstantAbstract (AbsLitSet vals))
- _ -> fail $ vcat
- [ "Expecting a matrix literal for:" <+> pretty (outName domain name)
- , "But got:" <+> pretty constant
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ]
- up _ _ = na "{up} Explicit"
-
- symmetryOrdering :: TypeOf_SymmetryOrdering m
- symmetryOrdering innerSO downX1 inp domain = do
- [inner] <- downX1 inp
- Just [(_, innerDomain)] <- downD ("SO", domain)
- innerSO downX1 inner innerDomain
-<<<<<<< HEAD
-
-=======
->>>>>>> master
diff --git a/src/Conjure/Representations/Set/ExplicitVarSizeWithDummy.hs.orig b/src/Conjure/Representations/Set/ExplicitVarSizeWithDummy.hs.orig
deleted file mode 100644
index b2687270ec..0000000000
--- a/src/Conjure/Representations/Set/ExplicitVarSizeWithDummy.hs.orig
+++ /dev/null
@@ -1,178 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-
-module Conjure.Representations.Set.ExplicitVarSizeWithDummy ( setExplicitVarSizeWithDummy ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Bug
-import Conjure.Language
-import Conjure.Language.DomainSizeOf
-import Conjure.Language.Expression.DomainSizeOf ()
-import Conjure.Representations.Internal
-import Conjure.Representations.Common
-
-
-setExplicitVarSizeWithDummy :: forall m . (MonadFail m, NameGen m) => Representation m
-setExplicitVarSizeWithDummy = Representation chck downD structuralCons downC up symmetryOrdering
-
- where
-
- chck :: TypeOf_ReprCheck m
- chck _ (DomainSet _ (SetAttr SizeAttr_Size{}) _) = return []
- chck f (DomainSet _ attrs innerDomain@DomainInt{}) =
- map (DomainSet Set_ExplicitVarSizeWithDummy attrs) <$> f innerDomain
- chck _ _ = return []
-
- outName :: Domain HasRepresentation x -> Name -> Name
- outName = mkOutName Nothing
-
- getMaxSize attrs innerDomain = case attrs of
- SizeAttr_MaxSize x -> return x
- SizeAttr_MinMaxSize _ x -> return x
- _ -> reTag TagInt <$> domainSizeOf innerDomain
-
- calcDummyDomain :: Pretty r => Domain r Expression -> Domain r Expression
- calcDummyDomain (DomainInt t [RangeBounded lb ub]) =
- DomainInt t [RangeBounded lb [essence| &ub + 1 |]]
- calcDummyDomain dom@(DomainInt t ranges) =
- let dummyElem = calcDummyElem dom
- in DomainInt t (ranges ++ [RangeSingle dummyElem])
- calcDummyDomain dom = bug ("ExplicitVarSizeWithDummy.calcDummyDomain" <+> pretty dom)
-
- calcDummyElem :: Pretty r => Domain r Expression -> Expression
- calcDummyElem dom =
- let theMax = bugFail "calcDummyElem: maxOfDomain" (maxOfDomain dom)
- in [essence| &theMax + 1 |]
-
- calcDummyElemC :: Pretty r => Domain r Constant -> Constant
- calcDummyElemC (DomainInt _ []) = bug "ExplicitVarSizeWithDummy.calcDummyElemC []"
- calcDummyElemC (DomainInt t rs) = ConstantInt t $
- 1 + maximum [ i
- | r <- rs
- , i <- case r of
- RangeSingle (ConstantInt _ x) -> [x]
- RangeBounded (ConstantInt _ x) (ConstantInt _ y) -> [x..y]
- _ -> bug ("ExplicitVarSizeWithDummy.calcDummyElemC" <+> pretty r)
- ]
- calcDummyElemC d = bug ("ExplicitVarSizeWithDummy.calcDummyElemC" <+> pretty d)
-
- downD :: TypeOf_DownD m
- downD (name, domain@(DomainSet Set_ExplicitVarSizeWithDummy (SetAttr attrs) innerDomain@DomainInt{})) = do
- let domainWithDummy = calcDummyDomain innerDomain
- maxSize <- getMaxSize attrs innerDomain
- return $ Just
- [ ( outName domain name
- , DomainMatrix
- (DomainInt TagInt [RangeBounded 1 maxSize])
- domainWithDummy
- ) ]
- downD _ = na "{downD} ExplicitVarSizeWithDummy"
-
- structuralCons :: TypeOf_Structural m
- structuralCons f downX1 (DomainSet Set_ExplicitVarSizeWithDummy (SetAttr attrs) innerDomain) = do
- maxSize <- getMaxSize attrs innerDomain
- let
- dummyElem = calcDummyElem innerDomain
-
- ordering m = do
- (iPat, i) <- quantifiedVar
- return $ return -- for list
- [essence|
- forAll &iPat : int(1..&maxSize-1) .
- (&m[&i] .< &m[&i+1]) \/ (&m[&i] = &dummyElem)
- |]
-
- dummyToTheRight m = do
- (iPat, i) <- quantifiedVar
- return $ return -- for list
- [essence|
- forAll &iPat : int(1..&maxSize-1) .
- (&m[&i] = &dummyElem) -> (&m[&i+1] = &dummyElem)
- |]
-
- cardinality m = do
- (iPat, i) <- quantifiedVar
- return [essence| sum &iPat : int(1..&maxSize) . toInt(&m[&i] != &dummyElem) |]
-
- innerStructuralCons m = do
- (iPat, i) <- quantifiedVarOverDomain [essenceDomain| int(1..&maxSize) |]
- let activeZone b = [essence| forAll &iPat : int(1..&maxSize) . &m[&i] != &dummyElem -> &b |]
-
- -- preparing structural constraints for the inner guys
- innerStructuralConsGen <- f innerDomain
-
- let inLoop = [essence| &m[&i] |]
- outs <- innerStructuralConsGen inLoop
- return (map activeZone outs)
-
- return $ \ ref -> do
- refs <- downX1 ref
- case refs of
- [m] ->
- concat <$> sequence
- [ ordering m
- , dummyToTheRight m
- , mkSizeCons attrs <$> cardinality m
- , innerStructuralCons m
- ]
- _ -> na "{structuralCons} ExplicitVarSizeWithDummy"
- structuralCons _ _ _ = na "{structuralCons} ExplicitVarSizeWithDummy"
-
- downC :: TypeOf_DownC m
- downC ( name
- , domain@(DomainSet Set_ExplicitVarSizeWithDummy (SetAttr attrs) innerDomain)
- , ConstantAbstract (AbsLitSet constants)
- ) = do
- maxSize <- getMaxSize attrs innerDomain
- let indexDomain i = mkDomainIntB (fromInt i) maxSize
- maxSizeInt <-
- case maxSize of
- ConstantInt _ x -> return x
- _ -> fail $ vcat
- [ "Expecting an integer for the maxSize attribute."
- , "But got:" <+> pretty maxSize
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ]
- let dummyElem = calcDummyElemC innerDomain
- let dummies = replicate (fromInteger (maxSizeInt - genericLength constants)) dummyElem
- return $ Just
- [ ( outName domain name
- , DomainMatrix (indexDomain 1) innerDomain
- , ConstantAbstract $ AbsLitMatrix (indexDomain 1) (constants ++ dummies)
- )
- ]
- downC _ = na "{downC} ExplicitVarSizeWithDummy"
-
- up :: TypeOf_Up m
- up ctxt (name, domain@(DomainSet Set_ExplicitVarSizeWithDummy _ innerDomain)) = do
- let dummyElem = calcDummyElemC innerDomain
- case lookup (outName domain name) ctxt of
- Nothing -> fail $ vcat $
- [ "(in Set ExplicitVarSizeWithDummy up)"
- , "No value for:" <+> pretty (outName domain name)
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- Just constant ->
- case viewConstantMatrix constant of
- Just (_, vals) ->
- return (name, ConstantAbstract (AbsLitSet [ v | v <- vals, v /= dummyElem ]))
- _ -> fail $ vcat
- [ "Expecting a matrix literal for:" <+> pretty (outName domain name)
- , "But got:" <+> pretty constant
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty domain
- ]
- up _ _ = na "{up} ExplicitVarSizeWithDummy"
-
- symmetryOrdering :: TypeOf_SymmetryOrdering m
- symmetryOrdering innerSO downX1 inp domain = do
- [inner] <- downX1 inp
- Just [(_, innerDomain)] <- downD ("SO", domain)
- innerSO downX1 inner innerDomain
-<<<<<<< HEAD
-=======
-
->>>>>>> master
diff --git a/src/Conjure/Representations/Tuple.hs.orig b/src/Conjure/Representations/Tuple.hs.orig
deleted file mode 100644
index 2673bde1ec..0000000000
--- a/src/Conjure/Representations/Tuple.hs.orig
+++ /dev/null
@@ -1,90 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-{-# LANGUAGE ParallelListComp #-}
-
-module Conjure.Representations.Tuple
- ( tuple
- ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Language
-import Conjure.Representations.Internal
-
--- text
-import Data.Text ( pack )
-
-
-tuple :: forall m . (MonadFail m, NameGen m) => Representation m
-tuple = Representation chck downD structuralCons downC up symmetryOrdering
-
- where
-
- chck :: TypeOf_ReprCheck m
- chck f (DomainTuple ds) = map DomainTuple . sequence <$> mapM f ds
- chck _ _ = return []
-
- mkName :: Name -> Int -> Name
- mkName name i = mconcat [name, "_", Name (pack (show i))]
-
- downD :: TypeOf_DownD m
- downD (name, DomainTuple ds) = return $ Just
- [ (mkName name i, d)
- | i <- [1..]
- | d <- ds
- ]
- downD _ = na "{downD}"
-
- structuralCons :: TypeOf_Structural m
- structuralCons f downX1 (DomainTuple ds) = return $ \ tup -> do
- refs <- downX1 tup
- concat <$> sequence
- [ do
- innerStructuralConsGen <- f dom
- outs <- innerStructuralConsGen ref
- return outs
- | (ref, dom) <- zip refs ds
- ]
- structuralCons _ _ _ = na "{structuralCons} tuple"
-
- downC :: TypeOf_DownC m
- downC (name, DomainTuple ds, ConstantAbstract (AbsLitTuple cs))
- | length ds == length cs = return $ Just
- [ (mkName name i, d, c)
- | i <- [1..]
- | d <- ds
- | c <- cs
- ]
- downC (n, d, c) =
- na $ "{downC} tuple" <+> vcat
- [ "name :" <+> pretty n
- , "domain:" <+> pretty d
- , "value :" <+> pretty c
- ]
-
- up :: TypeOf_Up m
- up ctxt (name, DomainTuple ds) = do
- let names = map (mkName name) [1 .. length ds]
- vals <- forM names $ \ n ->
- case lookup n ctxt of
- Nothing -> fail $ vcat $
- [ "(in Tuple up)"
- , "No value for:" <+> pretty n
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty (DomainTuple ds)
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- Just val -> return val
- return (name, ConstantAbstract (AbsLitTuple vals))
- up _ _ = na "{up}"
-
- symmetryOrdering :: TypeOf_SymmetryOrdering m
- symmetryOrdering innerSO downX1 inp domain = do
- xs <- downX1 inp
- Just xsDoms' <- downD ("SO", domain)
- let xsDoms = map snd xsDoms'
- soValues <- sequence [ innerSO downX1 x xDom | (x, xDom) <- zip xs xsDoms ]
- return $ AbstractLiteral $ AbsLitTuple soValues
-<<<<<<< HEAD
-=======
-
->>>>>>> master
diff --git a/src/Conjure/Representations/Variant.hs.orig b/src/Conjure/Representations/Variant.hs.orig
deleted file mode 100644
index 80b443e699..0000000000
--- a/src/Conjure/Representations/Variant.hs.orig
+++ /dev/null
@@ -1,128 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-
-module Conjure.Representations.Variant
- ( variant
- ) where
-
--- conjure
-import Conjure.Prelude
-import Conjure.Bug
-import Conjure.Language
-import Conjure.Representations.Internal
-import Conjure.Language.ZeroVal ( EnumerateDomain, zeroVal )
-
-
-variant :: forall m . (MonadFail m, NameGen m, EnumerateDomain m) => Representation m
-variant = Representation chck downD structuralCons downC up symmetryOrdering
-
- where
-
- chck :: TypeOf_ReprCheck m
- chck f (DomainVariant ds) = do
- let names = map fst ds
- outDoms <- sequence <$> mapM (f . snd) ds
- return [ DomainVariant (zip names ds') | ds' <- outDoms ]
- chck _ _ = return []
-
- mkName name n = mconcat [name, "_", n]
-
- downD :: TypeOf_DownD m
- downD (name, DomainVariant ds) = return $ Just
- $ (mkName name "_tag", defRepr $ mkDomainIntB 1 (fromInt (genericLength ds)))
- : [ (mkName name n, d)
- | (n,d) <- ds
- ]
- downD _ = na "{downD}"
-
- structuralCons :: TypeOf_Structural m
- structuralCons f downX1 (DomainVariant ds) = do
- let
- innerStructuralCons which thisIndex thisRef thisDom = do
- let activeZone b = [essence| &which = &thisIndex -> &b |]
- -- preparing structural constraints for the inner guys
- innerStructuralConsGen <- f thisDom
- outs <- innerStructuralConsGen thisRef
- return (map activeZone outs)
-
- dontCares which thisIndex thisRef =
- [essence| &which != &thisIndex -> dontCare(&thisRef) |]
-
- return $ \ rec -> do
- (which:refs) <- downX1 rec
- concat <$> sequence
- [ do
- isc <- innerStructuralCons which (fromInt i) ref dom
- let dcs = dontCares which (fromInt i) ref
- return (dcs:isc)
- | (i, ref, (_, dom)) <- zip3 [1..] refs ds
- ]
- structuralCons _ _ _ = na "{structuralCons} variant"
-
- -- TODO: check if (length ds == length cs)
- downC :: TypeOf_DownC m
- downC (name, DomainVariant ds, ConstantAbstract (AbsLitVariant _ n c)) = do
- let theTag =
- ( mkName name "_tag"
- , defRepr $ mkDomainIntB 1 (fromInt (genericLength ds))
- , case [ fromInt i
- | (i, (n', _)) <- zip [1..] ds
- , n == n' ] of
- [v] -> v
- _ -> bug "downC variant tag"
- )
- outs <- forM ds $ \ (n', d) -> do
- c' <- if n == n'
- then return c
- else zeroVal d
- return (mkName name n', d, c')
- return $ Just (theTag : outs)
- downC (n, d, c) =
- na $ "{downC} variant" <+> vcat
- [ "name :" <+> pretty n
- , "domain:" <+> pretty d
- , "value :" <+> pretty c
- ]
-
- up :: TypeOf_Up m
- up ctxt (name, DomainVariant ds) = do
- let dsForgotten = [ (n, defRepr d) | (n,d) <- ds ]
- case lookup (mkName name "_tag") ctxt of
- Just (ConstantInt _ i) ->
- let iTag = at ds (fromInteger (i-1)) |> fst
- iName = mkName name iTag
- in case lookup iName ctxt of
- Just val -> return (name, ConstantAbstract $ AbsLitVariant (Just dsForgotten) iTag val)
- Nothing -> fail $ vcat $
- [ "(in Variant up 1)"
- , "No value for:" <+> pretty iName
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty (DomainRecord ds)
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- Nothing -> fail $ vcat $
- [ "(in Variant up 2)"
- , "No value for:" <+> pretty (mkName name "_tag")
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty (DomainRecord ds)
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- Just val -> fail $ vcat $
- [ "Expecting an integer value for:" <+> pretty (mkName name "_tag")
- , "When working on:" <+> pretty name
- , "With domain:" <+> pretty (DomainRecord ds)
- , "But got:" <+> pretty val
- ] ++
- ("Bindings in context:" : prettyContext ctxt)
- up _ _ = na "{up}"
-
- symmetryOrdering :: TypeOf_SymmetryOrdering m
- symmetryOrdering innerSO downX1 inp domain = do
- xs <- downX1 inp
- Just xsDoms' <- downD ("SO", domain)
- let xsDoms = map snd xsDoms'
- soValues <- sequence [ innerSO downX1 x xDom | (x, xDom) <- zip xs xsDoms ]
- return (fromList soValues)
-<<<<<<< HEAD
-=======
-
->>>>>>> master
diff --git a/src/Conjure/UI/Model.hs.orig b/src/Conjure/UI/Model.hs.orig
deleted file mode 100644
index da88b01869..0000000000
--- a/src/Conjure/UI/Model.hs.orig
+++ /dev/null
@@ -1,2916 +0,0 @@
-{-# LANGUAGE Rank2Types #-}
-{-# LANGUAGE TupleSections #-}
-{-# LANGUAGE QuasiQuotes #-}
-{-# LANGUAGE ViewPatterns #-}
-{-# LANGUAGE RecordWildCards #-}
-
-module Conjure.UI.Model
- ( outputModels
- , Strategy(..), Config(..), parseStrategy
- , nbUses
- , modelRepresentationsJSON
- ) where
-
-import Conjure.Prelude
-import Conjure.Bug
-import Conjure.UserError
-import Conjure.Language.Definition
-import Conjure.Language.Expression.Internal.Generated ()
-import Conjure.Language.Domain
-import Conjure.Language.Type
-import Conjure.Language.Pretty
-import Conjure.Language.CategoryOf
-import Conjure.Language.TypeOf
-import Conjure.Compute.DomainOf
-import Conjure.Language.Lenses
-import Conjure.Language.TH ( essence )
-import Conjure.Language.Expression ( reDomExp )
-import Conjure.Language.Constant ( reDomConst )
-import Conjure.Language.Expression.Op
-import Conjure.Language.ModelStats ( modelInfo )
-import Conjure.Language.Instantiate ( instantiateExpression, trySimplify )
-import Conjure.Process.Sanity ( sanityChecks )
-import Conjure.Process.Enums ( removeEnumsFromModel )
-import Conjure.Process.Unnameds ( removeUnnamedsFromModel )
-import Conjure.Process.FiniteGivens ( finiteGivens )
-import Conjure.Process.LettingsForComplexInDoms ( lettingsForComplexInDoms
- , inlineLettingDomainsForDecls
- , removeDomainLettings
- )
-import Conjure.Process.AttributeAsConstraints ( attributeAsConstraints, mkAttributeToConstraint )
-import Conjure.Process.InferAttributes ( inferAttributes )
-import Conjure.Process.DealWithCuts ( dealWithCuts )
-import Conjure.Process.Enumerate ( EnumerateDomain )
-import Conjure.Language.NameResolution ( resolveNames, resolveNamesX )
-import Conjure.UI.TypeCheck ( typeCheckModel, typeCheckModel_StandAlone )
-import Conjure.UI ( OutputFormat(..) )
-import Conjure.UI.IO ( writeModel )
-import Conjure.UI.NormaliseQuantified ( distinctQuantifiedVars, renameQuantifiedVarsToAvoidShadowing
- , normaliseQuantifiedVariablesS, normaliseQuantifiedVariablesE
- )
-
-import Conjure.Representations
- ( downX, downX1, downD, reprOptions, getStructurals
- , symmetryOrdering
- , reprsStandardOrderNoLevels, reprsStandardOrder, reprsSparseOrder
- )
-
-import Conjure.Rules.Definition
-
-import qualified Conjure.Rules.Vertical.Tuple as Vertical.Tuple
-import qualified Conjure.Rules.Vertical.Record as Vertical.Record
-import qualified Conjure.Rules.Vertical.Variant as Vertical.Variant
-import qualified Conjure.Rules.Vertical.Matrix as Vertical.Matrix
-
-import qualified Conjure.Rules.Horizontal.Set as Horizontal.Set
-import qualified Conjure.Rules.Vertical.Set.Explicit as Vertical.Set.Explicit
-import qualified Conjure.Rules.Vertical.Set.ExplicitVarSizeWithDummy as Vertical.Set.ExplicitVarSizeWithDummy
-import qualified Conjure.Rules.Vertical.Set.ExplicitVarSizeWithFlags as Vertical.Set.ExplicitVarSizeWithFlags
-import qualified Conjure.Rules.Vertical.Set.ExplicitVarSizeWithMarker as Vertical.Set.ExplicitVarSizeWithMarker
-import qualified Conjure.Rules.Vertical.Set.Occurrence as Vertical.Set.Occurrence
-
-import qualified Conjure.Rules.Horizontal.MSet as Horizontal.MSet
-import qualified Conjure.Rules.Vertical.MSet.Occurrence as Vertical.MSet.Occurrence
-import qualified Conjure.Rules.Vertical.MSet.ExplicitWithFlags as Vertical.MSet.ExplicitWithFlags
-import qualified Conjure.Rules.Vertical.MSet.ExplicitWithRepetition as Vertical.MSet.ExplicitWithRepetition
-
-import qualified Conjure.Rules.Horizontal.Function as Horizontal.Function
-import qualified Conjure.Rules.Vertical.Function.Function1D as Vertical.Function.Function1D
-import qualified Conjure.Rules.Vertical.Function.Function1DPartial as Vertical.Function.Function1DPartial
-import qualified Conjure.Rules.Vertical.Function.FunctionND as Vertical.Function.FunctionND
-import qualified Conjure.Rules.Vertical.Function.FunctionNDPartial as Vertical.Function.FunctionNDPartial
-import qualified Conjure.Rules.Vertical.Function.FunctionAsRelation as Vertical.Function.FunctionAsRelation
-
-import qualified Conjure.Rules.Horizontal.Sequence as Horizontal.Sequence
-import qualified Conjure.Rules.Vertical.Sequence.ExplicitBounded as Vertical.Sequence.ExplicitBounded
-
-import qualified Conjure.Rules.Horizontal.Relation as Horizontal.Relation
-import qualified Conjure.Rules.Vertical.Relation.RelationAsMatrix as Vertical.Relation.RelationAsMatrix
-import qualified Conjure.Rules.Vertical.Relation.RelationAsSet as Vertical.Relation.RelationAsSet
-
-import qualified Conjure.Rules.Horizontal.Partition as Horizontal.Partition
-import qualified Conjure.Rules.Vertical.Partition.PartitionAsSet as Vertical.Partition.PartitionAsSet
-import qualified Conjure.Rules.Vertical.Partition.Occurrence as Vertical.Partition.Occurrence
-import qualified Conjure.Rules.Transform as Transform
-
-import qualified Conjure.Rules.Vertical.Permutation as Vertical.Permutation
-import qualified Conjure.Rules.Horizontal.Permutation as Horizontal.Permutation
-
-import qualified Conjure.Rules.BubbleUp as BubbleUp
-import qualified Conjure.Rules.DontCare as DontCare
-import qualified Conjure.Rules.TildeOrdering as TildeOrdering
-
--- base
-import System.IO ( hFlush, stdout )
-import Data.IORef ( IORef, newIORef, readIORef, writeIORef )
-import System.IO.Unsafe ( unsafePerformIO )
-
--- uniplate
-import Data.Generics.Uniplate.Zipper ( hole, replaceHole )
-import Data.Generics.Uniplate.Zipper as Zipper ( right, up )
-
--- pipes
-import Pipes ( Pipe, Producer, await, yield, (>->), cat )
-import qualified Pipes.Prelude as Pipes ( foldM )
-
-import qualified Data.Aeson.Types as JSON -- aeson
-import qualified Data.HashMap.Strict as M -- containers
-import qualified Data.Vector as V -- vector
-
-
-outputModels ::
- forall m .
- MonadIO m =>
- MonadFail m =>
- MonadLog m =>
- NameGen m =>
- EnumerateDomain m =>
- MonadUserError m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Config ->
- Model ->
- m ()
-outputModels config model = do
-
- liftIO $ writeIORef recordedResponses (responses config)
- liftIO $ writeIORef recordedResponsesRepresentation (responsesRepresentation config)
-
- -- Savile Row does not support ' characters in identifiers
- -- We could implement a workaround where we insert a marker (like __PRIME__) for each ' character
- -- and recover these after a solution is found.
- -- But this will be too hairy, instead we will reject such identifiers for now.
- -- If somebody really needs to use a ' character as part of an identifier, we can revisit this decision.
- let
- primeyIdentifiers = catMaybes
- [ if '\'' `elem` textToString identifier
- then Just identifier
- else Nothing
- | Declaration decl <- mStatements model
- , Name identifier <- universeBi decl
- ]
- unless (null primeyIdentifiers) $ userErr1 $ vcat
- ["Identifiers cannot contain a quotation mark character in them:" <+> prettyList id "," primeyIdentifiers]
-
- let dir = outputDirectory config
-
- unless (estimateNumberOfModels config) $
- liftIO $ createDirectoryIfMissing True dir
-
- let
- limitModelsIfEstimating :: Pipe LogOrModel LogOrModel m ()
- limitModelsIfEstimating =
- if estimateNumberOfModels config
- then limitModelsNeeded 1
- else Pipes.cat
-
- limitModelsIfNeeded :: Pipe LogOrModel LogOrModel m ()
- limitModelsIfNeeded = maybe Pipes.cat limitModelsNeeded (limitModels config)
-
- limitModelsNeeded :: Int -> Pipe LogOrModel LogOrModel m ()
- limitModelsNeeded 0 = return ()
- limitModelsNeeded n = do
- x <- Pipes.await
- Pipes.yield x
- case x of
- Left {} -> limitModelsNeeded n -- yielded a log, still n models to produce
- Right{} -> limitModelsNeeded (n-1) -- yielded a model, produce n-1 more models
-
- each i logOrModel =
- case logOrModel of
- Left (l,msg) -> do
- log l msg
- return i
- Right eprime -> do
- let gen =
- if smartFilenames config
- then [ choice
- | (_question, choice, numOptions) <-
- eprime |> mInfo |> miTrailCompact
- , numOptions > 1
- ] |> map (('_':) . show)
- |> concat
- else padLeft 6 '0' (show i)
- let filename = dir > "model" ++ gen ++ ".eprime"
- if estimateNumberOfModels config
- then do
- let
- estimate :: Integer
- estimate = product $ 1 : [ toInteger numOptions
- | (_question, _choice, numOptions) <-
- eprime |> mInfo |> miTrailCompact
- ]
- liftIO $ print
- $ "These options would generate at least"
- <+> pretty estimate
- <+> (if estimate == 1 then "model" else "models") <> "."
- else writeModel (lineWidth config) Plain (Just filename) eprime
- return (i+1)
-
- let ?typeCheckerMode = RelaxedIntegerTags
-
- Pipes.foldM each
- (return (numberingStart config))
- (const $ return ())
- (toCompletion config model
- >-> limitModelsIfNeeded
- >-> limitModelsIfEstimating)
-
-
-toCompletion :: forall m .
- MonadIO m =>
- MonadFail m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Config ->
- Model ->
- Producer LogOrModel m ()
-toCompletion config m = do
- m2 <- let ?typeCheckerMode = StronglyTyped in prologue config m
- namegenst <- exportNameGenState
- let m2Info = mInfo m2
- let m3 = m2 { mInfo = m2Info { miStrategyQ = strategyQ config
- , miStrategyA = strategyA config
- , miNameGenState = namegenst
- } }
- logDebug $ modelInfo m3
- loopy (StartOver m3)
- where
- driver :: Driver
- driver = strategyToDriver config
-
- loopy :: ModelWIP -> Producer LogOrModel m ()
- loopy modelWIP = do
- logDebug $ "[loop]" <+> pretty ((modelWIPOut modelWIP) {mInfo = def})
- qs <- remainingWIP config modelWIP
- if null qs
- then do
- let model = modelWIPOut modelWIP
- model' <- epilogue model
- yield (Right model')
- else do
- nextModels <- driver qs
- mapM_ loopy nextModels
-
-
-modelRepresentationsJSON ::
- MonadFail m =>
- NameGen m =>
- EnumerateDomain m =>
- MonadLog m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Model -> m JSONValue
-modelRepresentationsJSON model = do
- reprs <- modelRepresentations model
- return $ JSON.Array $ V.fromList
- [ JSON.Object $ M.fromList
- [ "name" ~~ r name
- , "representations" ~~ representationsJSON
- ]
- | (name, domains) <- reprs
- , let representationsJSON = JSON.Array $ V.fromList
- [ JSON.Object $ M.fromList
- [ "description" ~~ r d
- , "answer" ~~ toJSON i
- ]
- | (i, d) <- zip allNats domains
- ]
- ]
- where
- (~~) :: Text -> JSONValue -> (Text, JSONValue)
- x ~~ y = (x, y)
- r s = JSON.String $ stringToText $ render 100000 $ pretty s
-
-
-modelRepresentations ::
- MonadFail m =>
- NameGen m =>
- EnumerateDomain m =>
- MonadLog m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Model -> m [(Name, [Domain HasRepresentation Expression])]
-modelRepresentations model0 = do
- model <- prologue model0
- concatForM (mStatements model) $ \case
- Declaration (FindOrGiven _ name domain) -> do
- domOpts <- reprOptions reprsStandardOrderNoLevels domain
- return [(name, domOpts)]
- _ -> return []
-
-
--- | If a rule is applied at a position P, the MonadZipper will be retained focused at that location
--- and new rules will be tried using P as the top of the zipper-tree.
--- The whole model (containing P too) will be tried later for completeness.
-remainingWIP ::
- MonadFail m =>
- MonadLog m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Config ->
- ModelWIP ->
- m [Question]
-remainingWIP config (StartOver model)
- | Just modelZipper <- mkModelZipper model = do
- qs <- remaining config modelZipper (mInfo model)
- return qs
- | otherwise = return []
-remainingWIP config wip@(TryThisFirst modelZipper info) = do
- qs <- remaining config modelZipper info
- case (null qs, Zipper.right modelZipper, Zipper.up modelZipper) of
- (False, _, _) -> return qs -- not null, return
- (_, Just r, _) -> remainingWIP config (TryThisFirst r info) -- there is a sibling to the right
- (_, _, Just u) -> remainingWIP config (TryThisFirst u info) -- there is a parent
- _ -> remainingWIP config (StartOver (modelWIPOut wip)) -- we are done here,
- -- start-over the whole model in case
- -- something on the left needs attention.
-
-
-remaining ::
- MonadFail m =>
- MonadLog m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Config ->
- ModelZipper ->
- ModelInfo ->
- m [Question]
-remaining config modelZipper minfo = do
- -- note: the call to getQuestions can update the NameGen state
- importNameGenState (minfo |> miNameGenState)
- questions <- getQuestions config modelZipper
- namegenst0 <- exportNameGenState
- forM questions $ \ (focus, answers0) -> do
- answers1 <- forM answers0 $ \ (ruleName, RuleResult{..}) -> do
- importNameGenState namegenst0
- ruleResultExpr <- ruleResult
- -- ruleResultExpr <- fmap fixRelationProj ruleResult -- TODO: do we need the fixRelationProj?
- let fullModelBeforeHook = replaceHole ruleResultExpr focus
- let mtyBefore = typeOf (hole focus)
- let mtyAfter = typeOf ruleResultExpr
- case (mtyBefore, mtyAfter) of
- (Right tyBefore, Right tyAfter) ->
- unless (typesUnify [tyBefore, tyAfter]) $
- bug $ vcat
- [ "Rule application changes type:" <+> pretty ruleName
- , "Before:" <+> pretty (hole focus)
- , "After :" <+> pretty ruleResultExpr
- , "Type before:" <+> pretty (show tyBefore)
- , "Type after :" <+> pretty (show tyAfter)
- ]
- (Left msg, _) -> bug $ vcat
- [ "Type error before rule application:" <+> pretty ruleName
- , "Before:" <+> pretty (hole focus)
- , "After :" <+> pretty ruleResultExpr
- , "Error :" <+> pretty msg
- ]
- (_, Left msg) -> bug $ vcat
- [ "Type error after rule application:" <+> pretty ruleName
- , "Before:" <+> pretty (hole focus)
- , "After :" <+> pretty ruleResultExpr
- , "Error :" <+> pretty msg
- ]
-
- fullModelAfterHook <- case ruleResultHook of
- Nothing -> do
- namegenst <- exportNameGenState
- return (TryThisFirst fullModelBeforeHook minfo { miNameGenState = namegenst })
- Just hook -> do
- namegenst1 <- exportNameGenState
- let m1 = fromModelZipper fullModelBeforeHook minfo { miNameGenState = namegenst1 }
- m2 <- hook m1
- namegenst2 <- exportNameGenState
- let m3 = m2 { mInfo = (mInfo m2) { miNameGenState = namegenst2 } }
- return (StartOver m3)
-
- return
- ( Answer
- { aText = ruleName <> ":" <+> ruleResultDescr
- , aRuleName = ruleName
- , aBefore = hole focus
- , aAnswer = ruleResultExpr
- , aFullModel = fullModelAfterHook
- }
- , ruleResultType
- )
- let qTypes = map snd answers1
- qType' <- if all (head qTypes ==) (tail qTypes)
- then return (head qTypes)
- else bug "Rules of different rule kinds applicable, this is a bug."
- return Question
- { qType = qType'
- , qHole = hole focus
- , qAscendants = tail (ascendants focus)
- , qAnswers = map fst answers1
- }
-
-
--- | Computes all applicable questions.
--- strategyQ == PickFirst is special-cased for performance.
-getQuestions ::
- MonadLog m =>
- MonadFail m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Config ->
- ModelZipper ->
- m [(ModelZipper, [(Doc, RuleResult m)])]
-getQuestions config modelZipper | strategyQ config == PickFirst = maybeToList <$>
- let
- loopLevels :: Monad m => [m (Maybe a)] -> m (Maybe a)
- loopLevels [] = return Nothing
- loopLevels (a:as) = do bs <- a
- case bs of
- Nothing -> loopLevels as
- Just {} -> return bs
-
- processLevel :: (MonadFail m, MonadLog m, NameGen m, EnumerateDomain m)
- => [Rule]
- -> m (Maybe (ModelZipper, [(Doc, RuleResult m)]))
- processLevel rulesAtLevel =
- let
- go [] = return Nothing
- go (x:xs) = do
- ys <- applicableRules config rulesAtLevel x
- if null ys
- then go xs
- else return (Just (x, ys))
- in
- go (allContextsExceptReferences modelZipper)
- in
- loopLevels (map processLevel (allRules config))
-getQuestions config modelZipper =
- let
- loopLevels :: Monad m => [m [a]] -> m [a]
- loopLevels [] = return []
- loopLevels (a:as) = do bs <- a
- if null bs
- then loopLevels as
- else return bs
-
- processLevel :: (MonadFail m, MonadLog m, NameGen m, EnumerateDomain m)
- => [Rule]
- -> m [(ModelZipper, [(Doc, RuleResult m)])]
- processLevel rulesAtLevel =
- fmap catMaybes $ forM (allContextsExceptReferences modelZipper) $ \ x -> do
- ys <- applicableRules config rulesAtLevel x
- return $ if null ys
- then Nothing
- else Just (x, ys)
- in
- loopLevels (map processLevel (allRules config))
-
-
-strategyToDriver :: Config -> Driver
-strategyToDriver config questions = do
- let optionsQ =
- [ (doc, q)
- | (n, q) <- zip allNats questions
- , let doc =
- vcat $ ("Question" <+> pretty n <> ":" <+> pretty (qHole q))
- : [ nest 4 ("Context #" <> pretty i <> ":" <+> pretty c)
-<<<<<<< HEAD
- | (i,c) <- zip allNats (qAscendants q), i < 2
-=======
- | (i,c) <- zip allNats (qAscendants q)
- -- if logLevel < LogDebugVerbose, only show a select few levels
- , logLevel config == LogDebugVerbose || i `elem` [1,3,5,10,25]
->>>>>>> master
- ]
- ]
- pickedQs <- executeStrategy (bug "strategyToDriver no Question") optionsQ (strategyQ config)
- fmap concat $ forM pickedQs $ \ (pickedQNumber, pickedQDescr, pickedQ) -> do
- let optionsA =
- [ (doc, a)
- | (n, a) <- zip allNats (qAnswers pickedQ)
- , let doc = nest 4 $ "Answer" <+> pretty n <> ":" <+>
- if "choose-repr" `isPrefixOf` show (aRuleName a)
- then pretty (aText a)
- else vcat [ pretty (aText a)
- , sep [pretty (qHole pickedQ), "~~>", pretty (aAnswer a)]
- ]
- ]
- let strategyA' = case qType pickedQ of
- ChooseRepr -> representations
- ChooseRepr_Find{} -> representationsFinds
- ChooseRepr_Given{} -> representationsGivens
- ChooseRepr_Auxiliary -> representationsAuxiliaries
- ChooseRepr_Quantified -> representationsQuantifieds
- ChooseRepr_Cut{} -> representationsCuts
- ExpressionRefinement -> strategyA
- pickedAs <- executeAnswerStrategy config pickedQ optionsA (strategyA' config)
- return
- [ theModel
- | (pickedANumber, pickedADescr, pickedA) <- pickedAs
- , let upd = addToTrail
- config
- (strategyQ config) pickedQNumber pickedQDescr
- (strategyA' config) pickedANumber (length optionsA) pickedADescr
- (aText pickedA)
- (aBefore pickedA)
- (aAnswer pickedA)
- , let theModel = updateModelWIPInfo upd (aFullModel pickedA)
- ]
-
-
-recordedResponses :: IORef (Maybe [Int])
-{-# NOINLINE recordedResponses #-}
-recordedResponses = unsafePerformIO (newIORef Nothing)
-
-recordedResponsesRepresentation :: IORef (Maybe [(Name, Int)])
-{-# NOINLINE recordedResponsesRepresentation #-}
-recordedResponsesRepresentation = unsafePerformIO (newIORef Nothing)
-
-
-executeStrategy :: (MonadIO m, MonadLog m) => Question -> [(Doc, a)] -> Strategy -> m [(Int, Doc, a)]
-executeStrategy _ [] _ = bug "executeStrategy: nothing to choose from"
-executeStrategy _ [(doc, option)] (viewAuto -> (_, True)) = do
- logDebug ("Picking the only option:" <+> doc)
- return [(1, doc, option)]
-executeStrategy question options@((doc, option):_) (viewAuto -> (strategy, _)) =
- case strategy of
- Auto _ -> bug "executeStrategy: Auto"
- PickFirst -> do
- logDebug ("Picking the first option:" <+> doc)
- return [(1, doc, option)]
- Sparse -> do
- logDebug ("Picking the first option (in sparse order):" <+> doc)
- return [(1, doc, option)]
- PickAll -> return [ (i,d,o) | (i,(d,o)) <- zip [1..] options ]
- Interactive -> liftIO $ do
- putStrLn $ render 80 $ vcat (map fst options)
- recordedResponsesRepresentation' <- readIORef recordedResponsesRepresentation
- let
- nextRecordedResponse :: IO (Maybe Int)
- nextRecordedResponse = do
- mres <- readIORef recordedResponses
- case mres of
- Just (next:rest) -> do
- writeIORef recordedResponses (Just rest)
- return (Just next)
- _ -> return Nothing
-
- nextRecordedResponseRepresentation :: Name -> Maybe Int
- nextRecordedResponseRepresentation nm =
- case recordedResponsesRepresentation' of
- Nothing -> Nothing
- Just mres -> lookup nm mres
-
- pickIndex :: IO Int
- pickIndex = do
- let useStoredReprResponse =
- case qType question of
- ChooseRepr_Find nm -> Just nm
- ChooseRepr_Given nm -> Just nm
- ChooseRepr_Cut nm -> Just nm
- _ -> Nothing
- let storedReprResponse =
- case useStoredReprResponse of
- Just nm -> nextRecordedResponseRepresentation nm
- Nothing -> Nothing
- case storedReprResponse of
- Just recorded -> do
- putStrLn ("Response: " ++ show recorded)
- unless (recorded >= 1 && recorded <= length options) $
- userErr1 $ vcat [ "Recorded response out of range."
- , nest 4 $ "Expected a value between 1 and" <+> pretty (length options)
- , nest 4 $ "But got: " <+> pretty recorded
- ]
- return recorded
- Nothing -> do
- mrecorded <- nextRecordedResponse
- case mrecorded of
- Just recorded -> do
- putStrLn ("Response: " ++ show recorded)
- unless (recorded >= 1 && recorded <= length options) $
- userErr1 $ vcat [ "Recorded response out of range."
- , nest 4 $ "Expected a value between 1 and" <+> pretty (length options)
- , nest 4 $ "But got: " <+> pretty recorded
- ]
- return recorded
- Nothing -> do
- putStr "Pick option: "
- hFlush stdout
- line <- getLine
- case (line, readMay line) of
- ("", _) -> return 1
- (_, Just lineInt) | lineInt >= 1 && lineInt <= length options -> return lineInt
- (_, Nothing) -> do
- putStrLn "Enter an integer value."
- pickIndex
- (_, Just _) -> do
- print $ pretty $ "Enter a value between 1 and" <+> pretty (length options)
- pickIndex
-
- pickedIndex <- pickIndex
- let (pickedDescr, picked) = at options (pickedIndex - 1)
- return [(pickedIndex, pickedDescr, picked)]
- AtRandom -> do
- let nbOptions = length options
- pickedIndex <- liftIO $ randomRIO (1, nbOptions)
- let (pickedDescr, picked) = at options (pickedIndex - 1)
- logDebug ("Randomly picking option #" <> pretty pickedIndex <+> "out of" <+> pretty nbOptions)
- return [(pickedIndex, pickedDescr, picked)]
- Compact -> bug "executeStrategy: Compact"
-
-
-executeAnswerStrategy :: (MonadIO m, MonadLog m)
- => Config -> Question -> [(Doc, Answer)] -> Strategy -> m [(Int, Doc, Answer)]
-executeAnswerStrategy _ _ [] _ = bug "executeStrategy: nothing to choose from"
-executeAnswerStrategy _ _ [(doc, option)] (viewAuto -> (_, True)) = do
- logDebug ("Picking the only option:" <+> doc)
- return [(1, doc, option)]
-executeAnswerStrategy _ question options st@(viewAuto -> (strategy, _)) =
- case strategy of
- Compact -> do
- let (n,(doc,c)) = minimumBy (compactCompareAnswer `on` (snd . snd)) (zip [1..] options)
- return [(n, doc, c)]
- _ -> executeStrategy question options st
-
-
-compactCompareAnswer :: Answer -> Answer -> Ordering
-compactCompareAnswer = comparing (expressionDepth . aAnswer)
- where
- expressionDepth :: Data a => a -> Int
- expressionDepth x = 1 + maximum (0 : map expressionDepth (children x))
-
-
-addToTrail
- :: Config
- -> Strategy -> Int -> Doc
- -> Strategy -> Int -> Int -> Doc
- -> Doc -> Expression -> Expression
- -> ModelInfo -> ModelInfo
-addToTrail Config{..}
- questionStrategy questionNumber questionDescr
- answerStrategy answerNumber answerNumbers answerDescr
- ruleDescr oldExpr newExpr
- oldInfo = newInfo
- where
- newInfo = oldInfo { miTrailCompact = (questionNumber, answerNumber, answerNumbers)
- : miTrailCompact oldInfo
- , miTrailVerbose = if verboseTrail
- then theA : theQ : miTrailVerbose oldInfo
- else []
- , miTrailRewrites = if rewritesTrail
- then theRewrite : miTrailRewrites oldInfo
- else []
- }
- theQ = Decision
- { dDescription = map (stringToText . renderWide)
- $ ("Question #" <> pretty questionNumber)
- : (" (Using strategy:" <+> pretty (show questionStrategy) <> ")")
- : map pretty (lines (renderWide questionDescr))
- , dDecision = questionNumber
- , dNumOptions = Nothing
- }
- theA = Decision
- { dDescription = map (stringToText . renderWide)
- $ ("Answer #" <> pretty answerNumber <+> "out of" <+> pretty (show answerNumbers))
- : (" (Using strategy:" <+> pretty (show answerStrategy) <> ")")
- : map pretty (lines (renderWide answerDescr))
- , dDecision = answerNumber
- , dNumOptions = Just answerNumbers
- }
- theRewrite = TrailRewrites
- { trRule = stringToText $ renderWide ruleDescr
- , trBefore = map stringToText $ lines $ renderWide $ pretty oldExpr
- , trAfter = map stringToText $ lines $ renderWide $ pretty newExpr
- }
-
-
--- | Add a true-constraint, for every decision variable (whether it is used or not in the model) and
--- for every parameter (that is not used in the model).
--- A true-constraint has no effect, other than forcing Conjure to produce a representation.
--- It can be used to make sure that a declaration doesn't get lost (if it isn't used anywhere in the model)
--- It can also be used to produce "extra" representations (if it is used in the model)
-addTrueConstraints :: Model -> Model
-addTrueConstraints m =
- let
- mkTrueConstraint forg nm dom = Op $ MkOpTrue $ OpTrue (Reference nm (Just (DeclNoRepr forg nm dom NoRegion)))
- trueConstraints = [ mkTrueConstraint forg nm d
- | (Declaration (FindOrGiven forg nm d), after) <- withAfter (mStatements m)
- , forg == Find || (forg == Given && nbUses nm after == 0)
- ]
- in
- m { mStatements = mStatements m ++ [SuchThat trueConstraints] }
-
-
-reverseTrails :: Model -> Model
-reverseTrails m =
- let
- oldInfo = mInfo m
- newInfo = oldInfo { miTrailCompact = reverse (miTrailCompact oldInfo)
- , miTrailVerbose = reverse (miTrailVerbose oldInfo)
- , miTrailRewrites = reverse (miTrailRewrites oldInfo)
- }
- in
- m { mInfo = newInfo }
-
-
-oneSuchThat :: Model -> Model
-oneSuchThat m = m { mStatements = onStatements (mStatements m)
- |> nubBy ((==) `on` normaliseQuantifiedVariablesS) }
-
- where
-
- onStatements :: [Statement] -> [Statement]
- onStatements xs =
- let
- (suchThats0, objectives, others) = xs |> map collect |> mconcat
- suchThats = suchThats0
- |> map breakConjunctions -- break top level /\'s
- |> mconcat
- |> filter (/= Constant (ConstantBool True)) -- remove top level true's
- |> nubBy ((==) `on` normaliseQuantifiedVariablesE) -- uniq
- in
- others ++ objectives ++ [SuchThat (combine suchThats)]
-
- collect :: Statement -> ( [Expression] -- SuchThats
- , [Statement] -- Objectives
- , [Statement] -- other statements
- )
- collect (SuchThat s) = (s, [], [])
- collect s@Objective{} = ([], [s], [])
- collect s = ([], [], [s])
-
- combine :: [Expression] -> [Expression]
- combine xs = if null xs
- then [Constant (ConstantBool True)]
- else xs
-
- breakConjunctions :: Expression -> [Expression]
- breakConjunctions p@(Op (MkOpAnd (OpAnd x))) =
- case listOut x of
- Nothing -> [p] -- doesn't contain a list
- Just xs -> concatMap breakConjunctions xs
- breakConjunctions x = [x]
-
-
-emptyMatrixLiterals :: Model -> Model
-emptyMatrixLiterals model =
- let
- f (TypeList ty) = TypeMatrix (TypeInt TagInt) ty
- f x = x
- in
- model { mStatements = mStatements model |> transformBi f }
-
-
--- | Add a default search order (branching on [...])
--- to include all the primary variables and none of the aux variables that will potentailly be generated by Conjure.
--- Do not change the model if it already contains a SearchOrder in it.
-addSearchOrder :: Model -> Model
-addSearchOrder model
- | let hasSearchOrder = not $ null [ () | SearchOrder{} <- mStatements model ]
- , hasSearchOrder = model
- | otherwise =
- let finds = [ nm | Declaration (FindOrGiven Find nm _domain) <- mStatements model ]
- in model { mStatements = mStatements model ++ [SearchOrder (map BranchingOn finds)] }
-
-
-inlineDecVarLettings :: Model -> Model
-inlineDecVarLettings model =
- let
- inline p@(Reference nm _) = do
- x <- gets (lookup nm)
- return (fromMaybe p x)
- inline p = return p
-
- statements = catMaybes
- $ flip evalState []
- $ forM (mStatements model)
- $ \ st ->
- case st of
- Declaration (Letting nm x)
- | categoryOf x == CatDecision
- -> modify ((nm,x) :) >> return Nothing
- -- The following doesn't work when the identifier is used in a domain
- -- Declaration (Letting nm x@Reference{})
- -- -> modify ((nm,x) :) >> return Nothing
- _ -> Just <$> transformBiM inline st
- in
- model { mStatements = statements }
-
-flattenLex :: MonadFail m
- => NameGen m
- => (?typeCheckerMode :: TypeCheckerMode)
- => Model -> m Model
-flattenLex m = do
- let
- flatten a = do
- ta <- typeOf a
- case ta of
- TypeBool -> return [essence| [-toInt(&a)] |]
- TypeInt{} -> return [essence| [&a] |]
- TypeList TypeInt{} -> return a
- TypeMatrix TypeInt{} TypeInt{} -> return a
- _ ->
- case a of
- AbstractLiteral x -> do
- case x of
- AbsLitTuple xs -> do
- fxs <- sequence (flatten <$> xs)
- let flatxs = fromList fxs
- return [essence| flatten(&flatxs) |]
- AbsLitMatrix _ xs -> do
- fxs <- sequence (flatten <$> xs)
- let flatxs = fromList fxs
- return [essence| flatten(&flatxs) |]
- _ -> bug $ "epilogue: flattenLex: isn't defined for this abslit fellow..."
- <+> vcat [pretty a, pretty ta, stringToDoc $ show a]
- Constant c ->
- case c of
- ConstantAbstract ca ->
- case ca of
- AbsLitTuple xs -> do
- fxs <- sequence (flatten <$> (Constant <$> xs))
- let flatxs = fromList fxs
- return [essence| flatten(&flatxs) |]
- AbsLitMatrix _ xs -> do
- fxs <- sequence (flatten <$> (Constant <$> xs))
- let flatxs = fromList fxs
- return [essence| flatten(&flatxs) |]
- _ -> bug $ "epilogue: flattenLex: isn't defined for this fellow..."
- <+> vcat [pretty a, pretty ta, stringToDoc $ show a]
- TypedConstant tc _ -> flatten (Constant tc)
- _ -> bug $ "epilogue: flattenLex: isn't defined for this constant fellow."
- <+> vcat [pretty a, pretty ta, stringToDoc $ show a]
--- Op op -> do
--- case op of
--- MkOpIndexing (OpIndexing m i) ->
--- bug $ "epilogue: flattenLex: flatten not defined for this indexed fellow."
--- <+> vcat [stringToDoc (show a)
--- ,"fellow:" <+> stringToDoc (show m)
--- ,"index:" <+> stringToDoc (show i)]
- Reference nm ex ->
- bug $ "epilogue: flattenLex: flatten not defined for this referenced fellow."
- <+> vcat [stringToDoc (show a)
- ,"reference:" <+> stringToDoc (show nm)
- ,"fellow:" <+> stringToDoc (show ex)]
- Comprehension body gocs -> do
- fbody <- flatten body
- let comp = Comprehension fbody gocs
--- return [essence| flatten(&comp) |]
- return [essence| &comp |]
- _ -> bug $ "epilogue: flattenLex: isn't defined for this expression fellow..."
- <+> vcat [pretty a, pretty ta, stringToDoc $ show a]
-
-
- flattener [essence| &a
- (?typeCheckerMode :: TypeCheckerMode) =>
- Model -> m Model
-dropTagForSR m = do
- let
- replacePredSucc [essence| pred(&x) |] = do
- ty <- typeOf x
- case ty of
- TypeBool{} -> return [essence| false |]
- -- since True becomes False
- -- False becomes out-of-bounds, hence False
- TypeInt{} -> do
- let xTagInt = reTag TagInt x
- return [essence| &xTagInt - 1 |]
- _ -> bug "predSucc"
- replacePredSucc [essence| succ(&x) |] = do
- ty <- typeOf x
- case ty of
- TypeBool{} -> return [essence| !&x |]
- -- since False becomes True
- -- True becomes out-of-bounds, hence False
- -- "succ" is exactly "negate" on bools
- TypeInt{} -> do
- let xTagInt = reTag TagInt x
- return [essence| &xTagInt + 1 |]
- _ -> bug "predSucc"
- -- replacePredSucc [essence| &a .< &b |] = return [essence| &a < &b |]
- -- replacePredSucc [essence| &a .<= &b |] = return [essence| &a <= &b |]
- replacePredSucc x = return x
-
- st <- transformBiM replacePredSucc (mStatements m)
- return m { mStatements = transformBi (\ _ -> TagInt) st }
-
-
-updateDeclarations ::
- MonadUserError m =>
- MonadFail m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Model -> m Model
-updateDeclarations model = do
- let
- representations = model |> mInfo |> miRepresentations
-
- onEachStatement (inStatement, afters) =
- case inStatement of
- Declaration (FindOrGiven forg nm _) -> do
- let
- -- the refined domains for the high level declaration
- domains = [ d | (n, d) <- representations, n == nm ]
- nub <$> concatMapM (onEachDomain forg nm) domains
- Declaration (GivenDomainDefnEnum name) -> return
- [ Declaration (FindOrGiven Given (name `mappend` "_EnumSize") (DomainInt TagInt [])) ]
- Declaration (Letting nm x) -> do
- let usedAfter = nbUses nm afters > 0
- let isRefined = (0 :: Int) == sum
- [ case y of
- Constant (ConstantAbstract AbsLitMatrix{}) -> 0
- Constant ConstantAbstract{} -> 1
- AbstractLiteral AbsLitMatrix{} -> 0
- AbstractLiteral{} -> 1
- _ -> 0
- | y <- universe x ]
- return [inStatement | and [usedAfter, isRefined]]
- Declaration LettingDomainDefnEnum{} -> return []
- Declaration LettingDomainDefnUnnamed{} -> return []
- SearchOrder orders -> do
- orders' <- forM orders $ \case
- BranchingOn nm -> do
- let domains = [ d | (n, d) <- representations, n == nm ]
- -- last one is the representation of what's in true(?)
- -- put that first!
- let reorder xs =
- case reverse xs of
- [] -> []
- (y:ys) -> y : reverse ys
- outNames <- concatMapM (onEachDomainSearch nm) (reorder domains)
- return $ map BranchingOn $ nub outNames
- Cut{} -> bug "updateDeclarations, Cut shouldn't be here"
- return [ SearchOrder (concat orders') ]
- _ -> return [inStatement]
-
- onEachDomain forg nm domain =
- runExceptT (downD (nm, domain)) >>= \case
- Left err -> bug err
- Right outs -> forM outs $ \ (n, d) -> do
- d' <- transformBiM (trySimplify []) $ forgetRepr d
- return $ Declaration (FindOrGiven forg n d')
-
- onEachDomainSearch nm domain =
- runExceptT (downD (nm, domain)) >>= \case
- Left err -> bug err
- Right outs -> return [ n
- | (n, _) <- outs
- ]
-
- statements <- concatMapM onEachStatement (withAfter (mStatements model))
- return model { mStatements = statements }
-
-
--- | checking whether any `Reference`s with `DeclHasRepr`s are left in the model
-checkIfAllRefined :: MonadFail m => Model -> m Model
-checkIfAllRefined m | Just modelZipper <- mkModelZipper m = do -- we exclude the mInfo here
- let returnMsg x = return
- $ ""
- : ("Not refined:" <+> pretty (hole x))
- <+> stringToDoc(show (hole x))
- : [ nest 4 ("Context #" <> pretty i <> ":" <+> pretty c)
- | (i, c) <- zip allNats (tail (ascendants x))
- ]
-
- fails <- fmap (nub . concat) $ forM (allContextsExceptReferences modelZipper) $ \ x ->
- case hole x of
- Reference _ (Just (DeclHasRepr _ _ dom))
- | not (isPrimitiveDomain dom) ->
- return $ ""
- : ("Not refined:" <+> pretty (hole x))
- <+> stringToDoc(show (hole x))
- : ("Domain :" <+> pretty dom)
- : [ nest 4 ("Context #" <> pretty i <> ":" <+> pretty c)
- | (i, c) <- zip allNats (tail (ascendants x))
- ]
- Constant (ConstantAbstract AbsLitMatrix{}) -> return []
- Constant ConstantAbstract{} -> returnMsg x
- AbstractLiteral AbsLitMatrix{} -> return []
- AbstractLiteral{} -> returnMsg x
- WithLocals{} -> returnMsg x
- Comprehension _ stmts -> do
- decisionConditions <-
- fmap catMaybes $ forM stmts $ \ stmt -> case stmt of
- Condition c ->
- if categoryOf c >= CatDecision
- then return (Just c)
- else return Nothing
- _ -> return Nothing
- comprehensionLettings <-
- fmap catMaybes $ forM stmts $ \ stmt -> case stmt of
- ComprehensionLetting{} -> return (Just stmt)
- _ -> return Nothing
- unsupportedGenerator <-
- fmap catMaybes $ forM stmts $ \ stmt -> case stmt of
- Generator GenInExpr{} -> return (Just stmt)
- _ -> return Nothing
- let msgs = [ "decision expressions as conditions"
- | not (null decisionConditions) ]
- ++ [ "local lettings"
- | not (null comprehensionLettings) ]
- ++ [ "unsupported generators"
- | not (null unsupportedGenerator) ]
- let msg = "Comprehension contains" <+> prettyListDoc id "," msgs <> "."
- case msgs of
- [] -> return []
- _ -> return $ [ msg ]
- ++ [ nest 4 (pretty (hole x)) ]
- ++ [ nest 4 ("Context #" <> pretty i <> ":" <+> pretty c)
- | (i, c) <- zip allNats (tail (ascendants x))
- ]
- [essence| &_ .< &_ |] ->
- return ["", ("Not refined:" <+> pretty (hole x))
- <+> stringToDoc(show (hole x))]
- [essence| &_ .<= &_ |] ->
- return ["", ("Not refined:" <+> pretty (hole x))
- <+> stringToDoc(show (hole x))]
- _ -> return []
- unless (null fails) (bug (vcat fails))
- return m
-checkIfAllRefined m = return m
-
-
--- | checking whether any undefined values creeped into the final model
-checkIfHasUndefined :: MonadFail m => Model -> m Model
-checkIfHasUndefined m | Just modelZipper <- mkModelZipper m = do
- let returnMsg x = return
- $ ""
- : ("Undefined value in the final model:" <+> pretty (hole x))
- : [ nest 4 ("Context #" <> pretty i <> ":" <+> pretty c)
- | (i, c) <- zip allNats (tail (ascendants x))
- ]
-
- fails <- fmap concat $ forM (allContextsExceptReferences modelZipper) $ \ x ->
- case hole x of
- Constant ConstantUndefined{} -> returnMsg x
- _ -> return []
- unless (null fails) (bug (vcat fails))
- return m
-checkIfHasUndefined m = return m
-
-
-topLevelBubbles ::
- MonadFail m =>
- MonadUserError m =>
- NameGen m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Model -> m Model
-topLevelBubbles m = do
- let
- onStmt (SuchThat xs) = onExprs xs
- onStmt (Where xs) = concatMapM onWheres xs
- onStmt (Objective obj (WithLocals h locals)) =
- case locals of
- AuxiliaryVars locs -> ( locs ++ [Objective obj h] ) |> onStmts
- DefinednessConstraints locs -> ( [SuchThat locs] ++ [Objective obj h] ) |> onStmts
- onStmt (Declaration decl) =
- let
- f (WithLocals h locs) = tell [locs] >> return h
- f x = return x
-
- (decl', locals) = runWriter (transformBiM f decl)
-
- conv :: InBubble -> [Statement]
- conv (AuxiliaryVars locs) = locs
- conv (DefinednessConstraints locs) = [SuchThat locs]
-
- newStmts :: [Statement]
- newStmts = concatMap conv locals
- in
- if null newStmts
- then return [Declaration decl]
- else onStmts (newStmts ++ [Declaration decl'])
- onStmt s = return [s]
-
- -- a where that has a bubble at the top-most level will be replaced
- -- with a Comprehension. this is to avoid creating a where with decision variables inside.
- onWheres (WithLocals h (DefinednessConstraints locals)) =
- return $ map (Where . return) (locals ++ [h])
- onWheres (WithLocals h (AuxiliaryVars locals)) = do
- let (localfinds, gens) = mconcat
- [ case local of
- Declaration (FindOrGiven LocalFind nm dom) ->
- ([nm], [Generator (GenDomainNoRepr (Single nm) dom)])
- SuchThat xs ->
- ([], map Condition xs)
- _ -> bug ("topLevelBubbles.onWheres:" <+> pretty local)
- | local <- locals
- ]
- let forgetReprsOfLocalFinds (Reference nm _) | nm `elem` localfinds = Reference nm Nothing
- forgetReprsOfLocalFinds x = descend forgetReprsOfLocalFinds x
- let out = Comprehension h gens
- out' <- resolveNamesX (forgetReprsOfLocalFinds out)
- return [Where [out']]
- onWheres x = return [Where [x]]
-
- onExpr (WithLocals h (AuxiliaryVars locals)) = ( locals ++ [SuchThat [h]]) |> onStmts
- onExpr (WithLocals h (DefinednessConstraints locals)) = ([SuchThat locals] ++ [SuchThat [h]]) |> onStmts
- onExpr x = return [SuchThat [x]]
-
- onStmts = concatMapM onStmt
- onExprs = concatMapM onExpr
-
- statements' <- onStmts (mStatements m)
- return m { mStatements = statements' }
-
-
-sliceThemMatrices ::
- Monad m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Model -> m Model
-sliceThemMatrices model = do
- let
- -- nothing stays with a matrix type
- -- we are doing this top down
- -- when we reach a matrix-typed expression, we know it needs to be sliced
- -- we descend otherwise
- -- we also descend into components of the matrix-typed expression during slicing
- onExpr :: Monad m => Expression -> m Expression
- onExpr p = do
- let computeExistingSlices t =
- case match opSlicing t of
- Nothing -> return 0
- Just (t', _, _) -> (+1) <$> computeExistingSlices t'
- let isIndexedMatrix = do
- (m, is) <- match opMatrixIndexing p
- tyM <- typeOf m
- nSlices <- computeExistingSlices m
- return (m, nSlices, is, tyM)
- case isIndexedMatrix of
- Nothing -> descendM onExpr p
- Just (m, existingSlices, is, tyM) -> do
- let nestingLevel (TypeMatrix _ a) = 1 + nestingLevel a
- nestingLevel (TypeList a) = 1 + nestingLevel a
- nestingLevel _ = 0 :: Int
- -- "is" is the number of existing indices
- -- "nestingLevel" is the nesting level of the original matrix
- -- "existingSlices" is the number of existing slices
- let howMany = nestingLevel tyM - existingSlices - length is
- let unroll a 0 = a
- unroll a i = make opSlicing (unroll a (i-1)) Nothing Nothing
- m' <- descendM onExpr m
- is' <- mapM onExpr is
- let p' = make opMatrixIndexing m' is'
- return $ unroll p' howMany
-
- statements <- descendBiM onExpr (mStatements model)
- return model { mStatements = statements }
-
-
-removeExtraSlices :: Monad m => Model -> m Model
-removeExtraSlices model = do
- let
- -- a slice at the end of a chain of slices & indexings
- -- does no good in Essence and should be removed
- onExpr :: Monad m => Expression -> m Expression
- onExpr (match opSlicing -> Just (m,_,_)) = onExpr m
- onExpr p@(match opIndexing -> Just _) = return p
- onExpr p = descendM onExpr p
-
- statements <- descendBiM onExpr (mStatements model)
- return model { mStatements = statements }
-
-
-lexSingletons :: (?typeCheckerMode :: TypeCheckerMode)
- => Monad m
- => Model -> m Model
-lexSingletons model = do
- let onExpr :: (?typeCheckerMode :: TypeCheckerMode)
- => Monad m => Expression -> m Expression
- onExpr [essence| &l return [essence| &l return [essence| &ls < &rs |]
- _ -> bug $ "lexSingleton: match inconsistent"
- onExpr [essence| &l <=lex &r |] =
- case (matchSingleton l, matchSingleton r) of
- (Nothing, Nothing) -> return [essence| &l <=lex &r |]
- (Just ls, Just rs) -> return [essence| &ls <= &rs |]
- _ -> bug $ "lexSingleton: match inconsistent"
- onExpr x = return x
- matchSingleton :: (?typeCheckerMode :: TypeCheckerMode)
- => Expression -> Maybe Expression
- matchSingleton (match matrixLiteral -> Just (TypeMatrix _ TypeInt{},_,[s])) =
- Just s
- matchSingleton _ = Nothing
- statements <- transformBiM onExpr (mStatements model)
- return model { mStatements = statements }
-
-
-logDebugIdModel :: MonadLog m => Doc -> Model -> m Model
-logDebugIdModel msg a = logDebug (msg <++> pretty (a {mInfo = def})) >> return a
-
-prologue ::
- MonadFail m =>
- MonadLog m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Config ->
- Model ->
- m Model
-prologue config model = do
- void $ typeCheckModel_StandAlone model
- return model >>= logDebugIdModel "[input]"
- >>= enforceTagConsistency >>= logDebugIdModel "[enforceTagConsistency]"
- >>= return . addSearchOrder >>= logDebugIdModel "[addSearchOrder]"
- >>= attributeAsConstraints >>= logDebugIdModel "[attributeAsConstraints]"
- >>= inferAttributes >>= logDebugIdModel "[inferAttributes]"
- >>= inlineLettingDomainsForDecls >>= logDebugIdModel "[inlineLettingDomainsForDecls]"
- >>= lettingsForComplexInDoms >>= logDebugIdModel "[lettingsForComplexInDoms]"
- >>= distinctQuantifiedVars >>= logDebugIdModel "[distinctQuantifiedVars]"
- >>= return . initInfo >>= logDebugIdModel "[initInfo]"
- >>= addUnnamedSymmetryBreaking (unnamedSymmetryBreaking config)
- >>= logDebugIdModel "[addUnnamedSymmetryBreaking]"
- >>= removeUnnamedsFromModel >>= logDebugIdModel "[removeUnnamedsFromModel]"
- >>= removeEnumsFromModel >>= logDebugIdModel "[removeEnumsFromModel]"
- >>= finiteGivens >>= logDebugIdModel "[finiteGivens]"
- >>= renameQuantifiedVarsToAvoidShadowing
- >>= logDebugIdModel "[renameQuantifiedVarsToAvoidShadowing]"
- >>= resolveNames >>= logDebugIdModel "[resolveNames]"
- >>= return . initInfo_Lettings >>= logDebugIdModel "[initInfo_Lettings]"
- >>= removeDomainLettings >>= logDebugIdModel "[removeDomainLettings]"
- >>= (let ?typeCheckerMode = RelaxedIntegerTags in typeCheckModel)
- >>= logDebugIdModel "[typeCheckModel]"
- >>= categoryChecking >>= logDebugIdModel "[categoryChecking]"
- >>= sanityChecks >>= logDebugIdModel "[sanityChecks]"
- >>= dealWithCuts >>= logDebugIdModel "[dealWithCuts]"
- >>= removeExtraSlices >>= logDebugIdModel "[removeExtraSlices]"
- >>= return . addTrueConstraints >>= logDebugIdModel "[addTrueConstraints]"
- >>= enforceTagConsistency >>= logDebugIdModel "[enforceTagConsistency]"
-
-
-epilogue ::
- MonadFail m =>
- MonadLog m =>
- NameGen m =>
- EnumerateDomain m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Model -> m Model
-epilogue model = return model
- >>= logDebugIdModel "[epilogue]"
-<<<<<<< HEAD
- >>= flattenLex >>= logDebugIdModel "[flattenLex]"
- >>= dropTagForSR >>= logDebugIdModel "[dropTagForSR]"
-=======
- >>= lexSingletons >>= logDebugIdModel "[lexSingletons]"
->>>>>>> master
- >>= updateDeclarations >>= logDebugIdModel "[updateDeclarations]"
- >>= return . inlineDecVarLettings >>= logDebugIdModel "[inlineDecVarLettings]"
- >>= topLevelBubbles >>= logDebugIdModel "[topLevelBubbles]"
- >>= checkIfAllRefined >>= logDebugIdModel "[checkIfAllRefined]"
- >>= checkIfHasUndefined >>= logDebugIdModel "[checkIfHasUndefined]"
- >>= sliceThemMatrices >>= logDebugIdModel "[sliceThemMatrices]"
- >>= dropTagForSR >>= logDebugIdModel "[dropTagForSR]"
- >>= return . emptyMatrixLiterals >>= logDebugIdModel "[emptyMatrixLiterals]"
- >>= return . reverseTrails >>= logDebugIdModel "[reverseTrails]"
- >>= return . oneSuchThat >>= logDebugIdModel "[oneSuchThat]"
- >>= return . languageEprime >>= logDebugIdModel "[languageEprime]"
-
-
-applicableRules :: forall m n .
- MonadUserError n =>
- MonadLog n =>
- NameGen n =>
- EnumerateDomain n =>
- MonadUserError m =>
- MonadLog m =>
- NameGen m =>
- EnumerateDomain m =>
- MonadFail m =>
- (?typeCheckerMode :: TypeCheckerMode) =>
- Config ->
- [Rule] ->
- ModelZipper ->
- n [(Doc, RuleResult m)]
-applicableRules Config{..} rulesAtLevel x = do
- let logAttempt = if logRuleAttempts then logInfo else const (return ())
- let logFail = if logRuleFails then logInfo else const (return ())
- let logSuccess = if logRuleSuccesses then logInfo else const (return ())
-
- mys <- sequence [ do logAttempt ("attempting rule" <+> rName r <+> "on" <+> pretty (hole x))
- applied <- runExceptT $ runReaderT (rApply r x (hole x)) x
- return (rName r, applied)
- | r <- rulesAtLevel ]
- forM_ mys $ \ (rule, my) ->
- case my of
- Left failed -> unless ("N/A" `isPrefixOf` show failed) $ logFail $ vcat
- [ " rule failed:" <+> rule
- , " on:" <+> pretty (hole x)
- , " message:" <+> failed
- ]
- Right ys -> logSuccess $ vcat
- [ "rule applied:" <+> rule
- , " on:" <+> pretty (hole x)
- , " message:" <+> vcat (map ruleResultDescr ys)
- ]
- return [ (name, res {ruleResult = ruleResult'})
- | (name, Right ress) <- mys
- , res <- ress
- , let ruleResult' = do
- rResult <- ruleResult res
- case (hole x, rResult) of
- (Reference nm1 _, Reference nm2 _)
- | name /= "choose-repr"
- , nm1 == nm2 -> bug $ vcat
- [ "Rule applied inside a Reference."
- , "Rule :" <+> pretty name
- , "Rule input :" <+> pretty (hole x)
- , "Rule output :" <+> pretty rResult
- , "Rule input (show):" <+> pretty (show (hole x))
- , "Rule output (show):" <+> pretty (show rResult)
- ]
- _ -> return ()
- merr <- runExceptT (resolveNamesX rResult)
- case merr of
- Left err -> bug $ vcat
- [ "Name resolution failed after rule application."
- , "Rule :" <+> pretty name
- , "Rule input :" <+> pretty (hole x)
- , "Rule output :" <+> pretty rResult
- , "Rule input (show):" <+> pretty (show (hole x))
- , "Rule output (show):" <+> pretty (show rResult)
- , "The error :" <+> err
- ]
- Right r -> return r
- ]
-
-
-allRules :: (?typeCheckerMode :: TypeCheckerMode) => Config -> [[Rule]]
-allRules config =
- [ Transform.rules_Transform
- , [ rule_FullEvaluate
- ]
- , [ rule_PartialEvaluate
- ]
- ] ++ paramRules ++
- [ [ rule_ChooseRepr config
- , rule_ChooseReprForComprehension config
- , rule_ChooseReprForLocals config
- ]
- , bubbleUpRules
- , [ rule_Eq
- , rule_Neq
- , rule_Comprehension_Cardinality
- , rule_Flatten_Cardinality
- ]
- , verticalRules
- , horizontalRules
- ] ++ otherRules
- ++ delayedRules
-
-
--- | For information that can be readily pulled out from parameters.
--- Some things are easier when everything involved is a param.
--- These rules aren't necessary for correctness, but they can help remove some verbose expressions from the output.
--- Make Savile Row happier so it makes us happier. :)
-paramRules :: [[Rule]]
-paramRules =
- [ [ Horizontal.Set.rule_Param_MinOfSet
- , Horizontal.Set.rule_Param_MaxOfSet
- , Horizontal.Set.rule_Param_Card
- ]
- , [ Horizontal.Function.rule_Param_DefinedRange
- , Horizontal.Relation.rule_Param_Card
- ]
- ]
-
-verticalRules :: [Rule]
-verticalRules =
- [ Vertical.Permutation.rule_Image
- , Vertical.Permutation.rule_Cardinality
- , Vertical.Permutation.rule_Defined
- , Vertical.Permutation.rule_Comprehension
-
-
- , Vertical.Tuple.rule_Tuple_Eq
- , Vertical.Tuple.rule_Tuple_Neq
- , Vertical.Tuple.rule_Tuple_Leq
- , Vertical.Tuple.rule_Tuple_Lt
- , Vertical.Tuple.rule_Tuple_TildeLeq
- , Vertical.Tuple.rule_Tuple_TildeLt
- , Vertical.Tuple.rule_Tuple_Index
-
-
-
- , Vertical.Record.rule_Record_Eq
- , Vertical.Record.rule_Record_Neq
- , Vertical.Record.rule_Record_Leq
- , Vertical.Record.rule_Record_Lt
- , Vertical.Record.rule_Record_Index
-
- , Vertical.Variant.rule_Variant_Eq
- , Vertical.Variant.rule_Variant_Neq
- , Vertical.Variant.rule_Variant_Leq
- , Vertical.Variant.rule_Variant_Lt
- , Vertical.Variant.rule_Variant_Index
- , Vertical.Variant.rule_Variant_Active
-
- , Vertical.Matrix.rule_Comprehension_Literal
- , Vertical.Matrix.rule_Comprehension
- , Vertical.Matrix.rule_Comprehension_Flatten
- , Vertical.Matrix.rule_ModifierAroundIndexedMatrixLiteral
- , Vertical.Matrix.rule_Comprehension_LiteralIndexed
- , Vertical.Matrix.rule_Comprehension_Nested
- , Vertical.Matrix.rule_Comprehension_Hist
- , Vertical.Matrix.rule_Comprehension_ToSet_Matrix
- , Vertical.Matrix.rule_Comprehension_ToSet_List
- , Vertical.Matrix.rule_Comprehension_ToSet_List_DuplicateFree
- , Vertical.Matrix.rule_Matrix_Eq
- , Vertical.Matrix.rule_Matrix_Neq
- , Vertical.Matrix.rule_Matrix_Leq_Primitive
- , Vertical.Matrix.rule_Matrix_Leq_Decompose
- , Vertical.Matrix.rule_Matrix_Lt_Primitive
- , Vertical.Matrix.rule_Matrix_Lt_Decompose
- , Vertical.Matrix.rule_IndexingIdentical
- , Vertical.Matrix.rule_ExpandSlices
-
- , Vertical.Set.Explicit.rule_Min
- , Vertical.Set.Explicit.rule_Max
- , Vertical.Set.Explicit.rule_Card
- , Vertical.Set.Explicit.rule_Comprehension
- , Vertical.Set.Explicit.rule_PowerSet_Comprehension
- , Vertical.Set.ExplicitVarSizeWithDummy.rule_Comprehension
- , Vertical.Set.ExplicitVarSizeWithDummy.rule_PowerSet_Comprehension
- , Vertical.Set.ExplicitVarSizeWithFlags.rule_Comprehension
- , Vertical.Set.ExplicitVarSizeWithFlags.rule_PowerSet_Comprehension
- , Vertical.Set.ExplicitVarSizeWithMarker.rule_Card
- , Vertical.Set.ExplicitVarSizeWithMarker.rule_Comprehension
- , Vertical.Set.ExplicitVarSizeWithMarker.rule_PowerSet_Comprehension
- , Vertical.Set.Occurrence.rule_Comprehension
- , Vertical.Set.Occurrence.rule_PowerSet_Comprehension
- , Vertical.Set.Occurrence.rule_In
-
- , Vertical.MSet.Occurrence.rule_Comprehension
- , Vertical.MSet.Occurrence.rule_Freq
-
- , Vertical.MSet.ExplicitWithFlags.rule_Comprehension
- , Vertical.MSet.ExplicitWithFlags.rule_Freq
-
- , Vertical.MSet.ExplicitWithRepetition.rule_Comprehension
-
- , Vertical.Function.Function1D.rule_Comprehension
- , Vertical.Function.Function1D.rule_Comprehension_Defined
- , Vertical.Function.Function1D.rule_Image
-
- , Vertical.Function.Function1DPartial.rule_Comprehension
- , Vertical.Function.Function1DPartial.rule_PowerSet_Comprehension
- , Vertical.Function.Function1DPartial.rule_Image_NotABool
- , Vertical.Function.Function1DPartial.rule_Image_Bool
- , Vertical.Function.Function1DPartial.rule_InDefined
- , Vertical.Function.Function1DPartial.rule_DefinedEqDefined
-
- , Vertical.Function.FunctionND.rule_Comprehension
- , Vertical.Function.FunctionND.rule_Comprehension_Defined
- , Vertical.Function.FunctionND.rule_Image
-
- , Vertical.Function.FunctionNDPartial.rule_Comprehension
- , Vertical.Function.FunctionNDPartial.rule_Image_NotABool
- , Vertical.Function.FunctionNDPartial.rule_Image_Bool
- , Vertical.Function.FunctionNDPartial.rule_InDefined
-
- , Vertical.Function.FunctionAsRelation.rule_Comprehension
- , Vertical.Function.FunctionAsRelation.rule_Image_Eq
-
- , Vertical.Sequence.ExplicitBounded.rule_Comprehension
- , Vertical.Sequence.ExplicitBounded.rule_Card
- , Vertical.Sequence.ExplicitBounded.rule_Image_Bool
- , Vertical.Sequence.ExplicitBounded.rule_Image_NotABool
- , Vertical.Sequence.ExplicitBounded.rule_Leq
- , Vertical.Sequence.ExplicitBounded.rule_Lt
-
- , Vertical.Relation.RelationAsMatrix.rule_Comprehension
- , Vertical.Relation.RelationAsMatrix.rule_Image
-
- , Vertical.Relation.RelationAsSet.rule_Comprehension
- , Vertical.Relation.RelationAsSet.rule_Card
-
- , Vertical.Partition.PartitionAsSet.rule_Comprehension
- , Vertical.Partition.Occurrence.rule_Comprehension
-
- ]
-
-horizontalRules :: [Rule]
-horizontalRules =
- [ Horizontal.Permutation.rule_Cardinality_Literal
- , Horizontal.Permutation.rule_Equality
- , Horizontal.Permutation.rule_Comprehension
- , Horizontal.Permutation.rule_Compose_Image
- , Horizontal.Permutation.rule_Image_Matrix_Indexing
- , Horizontal.Permutation.rule_Image_Comprehension
--- , Horizontal.Permutation.rule_Image_Matrix_Indexing_Comprehension
--- , Horizontal.Permutation.rule_Compose
- , Horizontal.Permutation.rule_Image_Partition
- , Horizontal.Permutation.rule_Image_Sequence
- , Horizontal.Permutation.rule_Image_Sequence_Defined
- , Horizontal.Permutation.rule_In
- , Horizontal.Permutation.rule_Permutation_Inverse
- , Horizontal.Permutation.rule_Image_Comprehendable
- , Horizontal.Permutation.rule_Image_Incomprehendable
- , Horizontal.Permutation.rule_Image_Literal
-
-
- , Horizontal.Set.rule_Comprehension_Literal
- , Horizontal.Set.rule_Eq
- , Horizontal.Set.rule_Neq
- , Horizontal.Set.rule_Subset
- , Horizontal.Set.rule_SubsetEq
- , Horizontal.Set.rule_Supset
- , Horizontal.Set.rule_SupsetEq
- , Horizontal.Set.rule_In
- , Horizontal.Set.rule_Card
- , Horizontal.Set.rule_CardViaFreq
- , Horizontal.Set.rule_Intersect
- , Horizontal.Set.rule_Union
- , Horizontal.Set.rule_Difference
- , Horizontal.Set.rule_PowerSet_Comprehension
- , Horizontal.Set.rule_PowerSet_Difference
- , Horizontal.Set.rule_MaxMin
-
- , Horizontal.MSet.rule_Comprehension_Literal
- , Horizontal.MSet.rule_Comprehension_ToSet_Literal
- , Horizontal.MSet.rule_Eq
- , Horizontal.MSet.rule_Neq
- , Horizontal.MSet.rule_Subset
- , Horizontal.MSet.rule_SubsetEq
- , Horizontal.MSet.rule_Supset
- , Horizontal.MSet.rule_SupsetEq
- , Horizontal.MSet.rule_Freq
- , Horizontal.MSet.rule_In
- , Horizontal.MSet.rule_Card
- , Horizontal.MSet.rule_MaxMin
-
- , Horizontal.Function.rule_Comprehension_Literal
- , Horizontal.Function.rule_Image_Bool
- , Horizontal.Function.rule_Image_BoolMatrixIndexed
- , Horizontal.Function.rule_Image_BoolTupleIndexed
- , Horizontal.Function.rule_Image_Int
- , Horizontal.Function.rule_Image_IntMatrixIndexed
- , Horizontal.Function.rule_Image_IntTupleIndexed
- , Horizontal.Function.rule_Image_Matrix_LexLhs
- , Horizontal.Function.rule_Image_Matrix_LexRhs
-
- , Horizontal.Function.rule_Comprehension_Image
- , Horizontal.Function.rule_Comprehension_ImageSet
- , Horizontal.Function.rule_Eq
- , Horizontal.Function.rule_Neq
- , Horizontal.Function.rule_Subset
- , Horizontal.Function.rule_SubsetEq
- , Horizontal.Function.rule_Supset
- , Horizontal.Function.rule_SupsetEq
- , Horizontal.Function.rule_Inverse
- , Horizontal.Function.rule_Card
- , Horizontal.Function.rule_Comprehension_PreImage
- , Horizontal.Function.rule_Comprehension_Defined
- , Horizontal.Function.rule_Comprehension_Range
- , Horizontal.Function.rule_In
- , Horizontal.Function.rule_Restrict_Image
- , Horizontal.Function.rule_Restrict_Comprehension
- , Horizontal.Function.rule_Comprehension_Defined_Size
- , Horizontal.Function.rule_Comprehension_Range_Size
- , Horizontal.Function.rule_Defined_Intersect
- , Horizontal.Function.rule_DefinedOrRange_Union
- , Horizontal.Function.rule_DefinedOrRange_Difference
-
- , Horizontal.Sequence.rule_Comprehension_Literal
- , Horizontal.Sequence.rule_Image_Bool
- , Horizontal.Sequence.rule_Image_Int
- , Horizontal.Sequence.rule_Comprehension_Image
- , Horizontal.Sequence.rule_Image_Literal_Bool
- , Horizontal.Sequence.rule_Image_Literal_Int
- , Horizontal.Sequence.rule_Eq_Literal
- , Horizontal.Sequence.rule_Eq
- , Horizontal.Sequence.rule_Eq_Comprehension
- , Horizontal.Sequence.rule_Neq
- , Horizontal.Sequence.rule_Subset
- , Horizontal.Sequence.rule_SubsetEq
- , Horizontal.Sequence.rule_Supset
- , Horizontal.Sequence.rule_SupsetEq
- , Horizontal.Sequence.rule_Card
- , Horizontal.Sequence.rule_Comprehension_PreImage
- , Horizontal.Sequence.rule_Comprehension_Defined
- , Horizontal.Sequence.rule_Comprehension_Range
- , Horizontal.Sequence.rule_In
- , Horizontal.Sequence.rule_Restrict_Image
- , Horizontal.Sequence.rule_Restrict_Comprehension
- , Horizontal.Sequence.rule_Substring
- , Horizontal.Sequence.rule_Subsequence
-
- , Horizontal.Relation.rule_Comprehension_Literal
- , Horizontal.Relation.rule_Comprehension_Projection
- , Horizontal.Relation.rule_PowerSet_Comprehension
- , Horizontal.Relation.rule_Image
- , Horizontal.Relation.rule_In
- , Horizontal.Relation.rule_Eq
- , Horizontal.Relation.rule_Neq
- , Horizontal.Relation.rule_Subset
- , Horizontal.Relation.rule_SubsetEq
- , Horizontal.Relation.rule_Supset
- , Horizontal.Relation.rule_SupsetEq
- , Horizontal.Relation.rule_Card
-
- , Horizontal.Partition.rule_Comprehension_Literal
- , Horizontal.Partition.rule_Eq
- , Horizontal.Partition.rule_Neq
- , Horizontal.Partition.rule_Together
- , Horizontal.Partition.rule_Apart
- , Horizontal.Partition.rule_Party
- , Horizontal.Partition.rule_Participants
- , Horizontal.Partition.rule_Card
- , Horizontal.Partition.rule_In
-
-
- ]
-
-
-bubbleUpRules :: [Rule]
-bubbleUpRules =
- [ BubbleUp.rule_MergeNested
- , BubbleUp.rule_ToAnd
- , BubbleUp.rule_ToMultiply_HeadOfIntComprehension
- , BubbleUp.rule_NotBoolYet
- , BubbleUp.rule_ConditionInsideGeneratorDomain
- , BubbleUp.rule_LiftVars
- ]
-
-
-otherRules :: [[Rule]]
-otherRules =
- [
- [ rule_Xor_To_Sum ]
- ,
- [ TildeOrdering.rule_BoolInt
- , TildeOrdering.rule_MSet
- , TildeOrdering.rule_ViaMSet
- , TildeOrdering.rule_TildeLeq
- ]
- ,
- [ DontCare.rule_Bool
- , DontCare.rule_Int
- , DontCare.rule_Tuple
- , DontCare.rule_Record
- , DontCare.rule_Variant
- , DontCare.rule_Permutation
- , DontCare.rule_Matrix
- , DontCare.rule_Abstract
- ]
- ,
- [ rule_TrueIsNoOp
- , rule_FlattenOf1D
- , rule_Decompose_AllDiff
-
- , rule_GeneratorsFirst
- ]
- ,
- [ rule_DomainCardinality
- , rule_DomainMinMax
-
- , rule_ComplexAbsPat
-
- , rule_AttributeToConstraint
-
- , rule_QuantifierShift
- , rule_QuantifierShift2
- , rule_QuantifierShift3
-
- ]
-
- , [ rule_Comprehension_Simplify
- ]
-
- , [ rule_InlineConditions
- , rule_InlineConditions_AllDiff
- , rule_InlineConditions_MaxMin
- ]
- ]
-
--- | These rules depend on other rules firing first.
-delayedRules :: [[Rule]]
-delayedRules =
- [
- [ Vertical.Matrix.rule_Comprehension_Singleton
- , Vertical.Matrix.rule_Comprehension_SingletonDomain
- , Vertical.Matrix.rule_Concatenate_Singleton
- , Vertical.Matrix.rule_MatrixIndexing
-
- ]
- , [ rule_ReducerToComprehension
- ]
- , [ rule_DotLtLeq
- , rule_Flatten_Lex
- ]
- ]
-
-
-rule_ChooseRepr :: (?typeCheckerMode :: TypeCheckerMode) => Config -> Rule
-rule_ChooseRepr config = Rule "choose-repr" (const theRule) where
-
- theRule (Reference nm (Just (DeclNoRepr forg _ inpDom region))) | forg `elem` [Find, Given, CutFind] = do
- let reprsWhichOrder
- | (forg, representationsGivens config) == (Given, Sparse) = reprsSparseOrder
- | representationLevels config == False = reprsStandardOrderNoLevels
- | otherwise = reprsStandardOrder
- domOpts <- reprOptions reprsWhichOrder inpDom
- when (null domOpts) $
- bug $ "No representation matches this beast:" <++> pretty inpDom
- let options =
- [ RuleResult { ruleResultDescr = msg
- , ruleResultType = case forg of
- Find -> ChooseRepr_Find nm
- Given -> ChooseRepr_Given nm
- CutFind -> ChooseRepr_Cut nm
- _ -> bug "rule_ChooseRepr ruleResultType"
- , ruleResult = return out
- , ruleResultHook = Just hook
- }
- | thisDom <- domOpts
- , let msg = "Choosing representation for" <+> pretty nm <> ":" <++> pretty thisDom
- , let out = Reference nm (Just (DeclHasRepr forg nm thisDom))
- , let hook = mkHook (channelling config) forg nm thisDom region
- ]
- return options
- theRule _ = na "rule_ChooseRepr"
-
- mkHook
- :: ( MonadLog m
- , MonadFail m
- , NameGen m
- , EnumerateDomain m
- )
- => Bool
- -> FindOrGiven
- -> Name
- -> Domain HasRepresentation Expression
- -> Region
- -> Model
- -> m Model
- mkHook useChannelling -- whether to use channelling or not
- forg -- find or given
- name -- name of the original declaration
- domain -- domain with representation selected
- region -- the region of the Reference we are working on
- model = do
- let
-
- representations = model |> mInfo |> miRepresentations
- representationsTree = model |> mInfo |> miRepresentationsTree
- |> concatMap (\ (n, ds) -> map (n,) ds )
-
- usedBefore = (name, reprTree domain) `elem` representationsTree
-
- mkStructurals :: (MonadLog m, MonadFail m, NameGen m, EnumerateDomain m)
- => m [Expression]
- mkStructurals = do
- let ref = Reference name (Just (DeclHasRepr forg name domain))
- logDebugVerbose $ "Generating structural constraints for:" <+> vcat [pretty ref, pretty domain]
- structurals <- getStructurals downX1 domain >>= \ gen -> gen ref
- logDebugVerbose $ "Before name resolution:" <+> vcat (map pretty structurals)
- resolved <- mapM resolveNamesX structurals -- re-resolving names
- logDebugVerbose $ "After name resolution:" <+> vcat (map pretty resolved)
- return resolved
-
- addStructurals :: (MonadLog m, MonadFail m, NameGen m, EnumerateDomain m)
- => Model -> m Model
- addStructurals
- | forg == Given = return
- | usedBefore = return
- | otherwise = \ m -> do
- structurals <- mkStructurals
- return $ if null structurals
- then m
- else m { mStatements = mStatements m ++ [SuchThat structurals] }
-
- channels =
- [ make opEq this that
- | (n, d) <- representations
- , n == name
- , let this = Reference name (Just (DeclHasRepr forg name domain))
- , let that = Reference name (Just (DeclHasRepr forg name d))
- ]
-
- addChannels
- | forg == Given = return
- | usedBefore = return
- | null channels = return
- | otherwise = \ m -> return
- m { mStatements = mStatements m ++ [SuchThat channels] }
-
- recordThis
- | usedBefore = return
- | otherwise = \ m ->
- let
- oldInfo = mInfo m
- newInfo = oldInfo
- { miRepresentations = representations ++ [(name, domain)]
- , miRepresentationsTree = (representationsTree ++ [(name, reprTree domain)])
- |> sortBy (comparing fst)
- |> groupBy ((==) `on` fst)
- |> map (\ grp -> (fst (head grp), map snd grp) )
- }
- in return m { mInfo = newInfo }
-
- fixReprForAllOthers
- | useChannelling = return -- no-op, if channelling=yes
- | otherwise = \ m ->
- let
- f (Reference nm _)
- | nm == name
- = Reference nm (Just (DeclHasRepr forg name domain))
- f x = x
- in
- return m { mStatements = transformBi f (mStatements m) }
-
- fixReprForSameRegion
- | region == NoRegion = return -- no-op, if we aren't in a particular region
- | otherwise = \ m ->
- let
- f (Reference nm (Just (DeclNoRepr _ _ _ region')))
- | nm == name
- , region' == region
- = Reference nm (Just (DeclHasRepr forg name domain))
- f x = x
- in
- return m { mStatements = transformBi f (mStatements m) }
-
-
- logDebugVerbose $ vcat
- [ "Name :" <+> pretty name
- , "Previously :" <+> vcat [ pretty (show d) | (n,d) <- representations, n == name ]
- , "This guy :" <+> pretty (show domain)
- , "usedBefore? :" <+> pretty usedBefore
- ]
-
- return model
- >>= addStructurals -- unless usedBefore: add structurals
- >>= addChannels -- for each in previously recorded representation
- >>= recordThis -- unless usedBefore: record (name, domain) as being used in the model
- >>= fixReprForAllOthers -- fix the representation of this guy in the whole model, if channelling=no
- >>= fixReprForSameRegion -- fix the representation of this guy in the whole model,
- -- for those references with the same "region"
- >>= resolveNames -- we need to re-resolve names to avoid repeatedly selecting representations
- -- for abstract stuff inside aliases.
-
-
-rule_ChooseReprForComprehension :: Config -> Rule
-rule_ChooseReprForComprehension config = Rule "choose-repr-for-comprehension" (const theRule) where
-
- theRule (Comprehension body gensOrConds) = do
- (gocBefore, (nm, domain), gocAfter) <- matchFirst gensOrConds $ \ goc -> case goc of
- Generator (GenDomainNoRepr (Single nm) domain) -> return (nm, domain)
- _ -> na "rule_ChooseReprForComprehension"
-
- let reprsWhichOrder
- | representationsGivens config == Sparse = reprsSparseOrder
- | representationLevels config == False = reprsStandardOrderNoLevels
- | otherwise = reprsStandardOrder
- domOpts <- reprOptions reprsWhichOrder domain
- when (null domOpts) $
- bug $ "No representation matches this beast:" <++> pretty domain
-
- return
- [ RuleResult
- { ruleResultDescr = "Choosing representation for quantified variable" <+>
- pretty nm <> ":" <++> pretty thisDom
- , ruleResultType = ChooseRepr_Quantified
- , ruleResult = bugFailT "rule_ChooseReprForComprehension" $ do
- outDomains <- downD (nm, thisDom)
- structurals <- mkStructurals nm thisDom
- let updateRepr (Reference nm' _)
- | nm == nm'
- = Reference nm (Just (DeclHasRepr Quantified nm thisDom))
- updateRepr p = p
- let out' = Comprehension (transform updateRepr body)
- $ gocBefore
- ++ [ Generator (GenDomainHasRepr name dom)
- | (name, dom) <- outDomains ]
- ++ map Condition structurals
- ++ transformBi updateRepr gocAfter
- out <- resolveNamesX out'
- return out
- , ruleResultHook = Nothing
- }
- | thisDom <- domOpts
- ]
- theRule _ = na "rule_ChooseReprForComprehension"
-
- mkStructurals name domain = do
- let ref = Reference name (Just (DeclHasRepr Quantified name domain))
- gen <- getStructurals downX1 domain
- gen ref
-
-
-rule_ChooseReprForLocals :: Config -> Rule
-rule_ChooseReprForLocals config = Rule "choose-repr-for-locals" (const theRule) where
-
- theRule (WithLocals body (AuxiliaryVars locals)) = do
- (stmtBefore, (nm, domain), stmtAfter) <- matchFirst locals $ \ local -> case local of
- Declaration (FindOrGiven LocalFind nm domain) -> return (nm, domain)
- _ -> na "rule_ChooseReprForLocals"
-
- let
- isReferencedWithoutRepr (Reference nm' (Just DeclNoRepr{})) | nm == nm' = True
- isReferencedWithoutRepr _ = False
-
- unless (any isReferencedWithoutRepr (universeBi (body, stmtBefore, stmtAfter))) $
- na $ "This local variable seems to be handled before:" <+> pretty nm
-
- let reprsWhichOrder
- | representationsAuxiliaries config == Sparse = reprsSparseOrder
- | representationLevels config == False = reprsStandardOrderNoLevels
- | otherwise = reprsStandardOrder
- domOpts <- reprOptions reprsWhichOrder domain
- when (null domOpts) $
- bug $ "No representation matches this beast:" <++> pretty domain
-
- return
- [ RuleResult
- { ruleResultDescr = "Choosing representation for auxiliary variable" <+>
- pretty nm <> ":" <++> pretty thisDom
- , ruleResultType = ChooseRepr_Auxiliary
- , ruleResult = bugFailT "rule_ChooseReprForLocals" $ do
- outDomains <- downD (nm, thisDom)
- structurals <- mkStructurals nm thisDom
- let updateRepr (Reference nm' _)
- | nm == nm'
- = Reference nm (Just (DeclHasRepr LocalFind nm thisDom))
- updateRepr p = p
- let out' = WithLocals (transform updateRepr body) $ AuxiliaryVars
- ( stmtBefore
- ++ [ Declaration (FindOrGiven
- LocalFind
- name
- (forgetRepr dom))
- | (name, dom) <- outDomains ]
- ++ [ SuchThat structurals | not (null structurals) ]
- ++ transformBi updateRepr stmtAfter
- )
- out <- resolveNamesX out'
- return out
- , ruleResultHook = Nothing
- }
- | thisDom <- domOpts
- ]
- theRule _ = na "rule_ChooseReprForLocals"
-
- mkStructurals name domain = do
- let ref = Reference name (Just (DeclHasRepr LocalFind name domain))
- gen <- getStructurals downX1 domain
- gen ref
-
-
-rule_GeneratorsFirst :: Rule
-rule_GeneratorsFirst = "generators-first" `namedRule` theRule where
- theRule (Comprehension body [])
- = return
- ( "Empty generators."
- , return $ AbstractLiteral $ AbsLitMatrix (mkDomainIntB 1 1) [body]
- )
- theRule (Comprehension body gensOrConds)
- | let (gens, rest) = mconcat
- [ case x of
- Generator{} -> ([x],[])
- _ -> ([],[x])
- | x <- gensOrConds
- ]
- , let gensOrConds' = gens ++ rest
- , gensOrConds /= gensOrConds'
- = return
- ( "Generators come first."
- , return $ Comprehension body gensOrConds'
- )
- theRule (Comprehension body gensOrConds)
- | let (lettings :: [Name], rest :: [GeneratorOrCondition]) = mconcat
- [ case x of
- ComprehensionLetting pat _ -> (universeBi pat,[] )
- _ -> ([] ,[x])
- | x <- gensOrConds
- ]
- , let f (Reference nm (Just (Alias x))) | nm `elem` lettings = f x
- f x = x
- , not (null lettings)
- = return
- ( "Inlining comprehension lettings."
- , return $ transformBi f $ Comprehension body rest
- )
- theRule _ = na "rule_GeneratorsFirst"
-
-
-rule_Eq :: Rule
-rule_Eq = "identical-domain-eq" `namedRule` theRule where
- theRule p = do
- (x,y) <- match opEq p
- domX <- domainOf x
- domY <- domainOf y
- unless (domX == domY) $ na "rule_Eq domains not identical"
- sameRepresentationTree x y
- xs <- downX x
- ys <- downX y
- unless (length xs == length ys) $ na "rule_Eq"
- when (xs == [x]) $ na "rule_Eq"
- when (ys == [y]) $ na "rule_Eq"
- return
- ( "Generic vertical rule for identical-domain equality"
- , return $ make opAnd $ fromList $ zipWith (\ i j -> [essence| &i = &j |] ) xs ys
- )
-
-
-rule_Neq :: Rule
-rule_Neq = "identical-domain-neq" `namedRule` theRule where
- theRule p = do
- (x,y) <- match opNeq p
- domX <- domainOf x
- domY <- domainOf y
- unless (domX == domY) $ na "rule_Neq domains not identical"
- sameRepresentationTree x y
- xs <- downX x
- ys <- downX y
- unless (length xs == length ys) $ na "rule_Neq"
- when (xs == [x]) $ na "rule_Neq"
- when (ys == [y]) $ na "rule_Neq"
- return
- ( "Generic vertical rule for identical-domain equality"
- , return $ make opOr $ fromList $ zipWith (\ i j -> [essence| &i != &j |] ) xs ys
- )
-
-
-rule_DotLtLeq :: Rule
-rule_DotLtLeq = "generic-DotLtLeq" `namedRule` theRule where
- theRule p = do
- (a,b,mk) <- case p of
- [essence| &a .< &b |] -> return ( a, b, \ i j -> [essence| &i return ( a, b, \ i j -> [essence| &i <=lex &j |] )
- _ -> na "rule_DotLtLeq"
-<<<<<<< HEAD
- -- aType <- typeOf a
- -- case aType of
- -- TypeTuple{} -> return ()
- -- TypeMatrix{} -> return ()
- -- TypeSet{} -> return ()
- -- TypeMSet{} -> return ()
- -- TypeFunction{} -> return ()
- -- TypeSequence{} -> return ()
- -- TypeRelation{} -> return ()
- -- TypePartition{} -> return ()
- -- _ -> na "rule_DotLtLeq"
- -- sameRepresentationTree a b
- ma <- symmetryOrdering a
-=======
- ma <- symmetryOrdering a
->>>>>>> master
- mb <- symmetryOrdering b
- return
- ( "Generic vertical rule for dotLt and dotLeq:" <+> pretty p
- , return $ mk ma mb
- )
-
-
-rule_Flatten_Lex :: Rule
-rule_Flatten_Lex = "flatten-lex" `namedRule` theRule where
- theRule [essence| &a
- na "rule_Flatten_Lex"
- (TypeMatrix TypeInt{} TypeInt{}, TypeMatrix TypeInt{} TypeInt{}) ->
- na "rule_Flatten_Lex"
- _ -> return ()
- fa <- flatten a
- fb <- flatten b
- tfa <- typeOf fa
- tfb <- typeOf fb
- case (tfa, tfb) of
- (TypeList TypeInt{}, TypeList TypeInt{}) -> return ()
- (TypeMatrix TypeInt{} TypeInt{}, TypeMatrix TypeInt{} TypeInt{}) -> return ()
- _ -> bug $ "flattener: " <+> vcat [stringToDoc $ show tfa, stringToDoc $ show tfb]
- return ( "Flatten Lex less"
- , return [essence| &fa
- na "rule_Flatten_Lex"
- (TypeMatrix TypeInt{} TypeInt{}, TypeMatrix TypeInt{} TypeInt{}) ->
- na "rule_Flatten_Lex"
- _ -> return ()
- fa <- flatten a
- fb <- flatten b
- tfa <- typeOf fa
- tfb <- typeOf fb
- case (tfa, tfb) of
- (TypeList TypeInt{}, TypeList TypeInt{}) -> return ()
- (TypeMatrix TypeInt{} TypeInt{}, TypeMatrix TypeInt{} TypeInt{}) -> return ()
- _ -> bug $ "flattener: " <+> vcat [stringToDoc $ show tfa, stringToDoc $ show tfb]
- return ( "Flatten Lex Lt"
- , return [essence| &fa <=lex &fb |]
- )
- theRule _ = na "rule_Flatten_Lex"
- flatten a = do
- ta <- typeOf a
- case ta of
- TypeBool -> return [essence| [-toInt(&a)] |]
- TypeInt{} -> return [essence| [&a] |]
- TypeList TypeInt{} -> return a
- TypeMatrix TypeInt{} TypeInt{} -> return a
- TypeTuple ts -> do
- case a of
- AbstractLiteral x -> do
- case x of
- AbsLitTuple xs -> do
- fxs <- sequence (flatten <$> xs)
- let flatxs = fromList fxs
- return [essence| flatten(&flatxs) |]
- _ -> bug $ "rule_FlattenLex: flatten isn't defined for this abslit fellow..."
- <+> vcat [pretty a, pretty ta, stringToDoc $ show a]
- Constant c ->
- case c of
- ConstantAbstract ca ->
- case ca of
- AbsLitTuple xs -> do
- fxs <- sequence (flatten <$> (Constant <$> xs))
- let flatxs = fromList fxs
- return [essence| flatten(&flatxs) |]
- _ -> bug $ "rule_FlattenLex: flatten isn't defined for this constant fellow..."
- <+> vcat [pretty a, pretty ta, stringToDoc $ show a]
- _ -> bug $ "rule_FlattenLex: flatten isn't defined for this constant fellow..."
- <+> vcat [pretty a, pretty ta, stringToDoc $ show a]
- Op _ -> do
- (oName, o) <- quantifiedVar
- flatten $ Comprehension o [ComprehensionLetting oName a]
- _ -> do
- ps <- sequence $ (\(i,_) -> do
- (Single nm, tm) <- quantifiedVar
- return (i,nm,tm)) <$> (zip [1..] ts)
- let lts = (\(i,nm,_tm) -> ComprehensionLetting (Single nm) [essence| &a[&i] |]) <$> ps
- tup = AbstractLiteral $ AbsLitTuple $ (\(_,_,tm) -> tm) <$> ps
- flatten $ Comprehension tup lts
- _ ->
- case a of
- AbstractLiteral x -> do
- case x of
- AbsLitMatrix _ xs -> do
- fxs <- sequence (flatten <$> xs)
- let flatxs = fromList fxs
- return [essence| flatten(&flatxs) |]
- _ -> bug $ "rule_FlattenLex: flatten isn't defined for this abslit fellow..."
- <+> vcat [pretty a, pretty ta, stringToDoc $ show a]
- Constant c ->
- case c of
- ConstantAbstract ca ->
- case ca of
- AbsLitMatrix _ [] ->
- return [essence| ([] : `matrix indexed by [int()] of int`) |]
- AbsLitMatrix _ xs -> do
- fxs <- sequence (flatten <$> (Constant <$> xs))
- let flatxs = fromList fxs
- return [essence| flatten(&flatxs) |]
- _ -> bug $ "rule_FlattenLex: flatten isn't defined for this constant fellow..."
- <+> vcat [pretty a, pretty ta, stringToDoc $ show a]
- TypedConstant tc _ -> flatten (Constant tc)
- _ -> bug $ "rule_FlattenLex: flatten isn't defined for this constant fellow..."
- <+> vcat [pretty a, pretty ta, stringToDoc $ show a]
- Op _ -> do
- (oName, o) <- quantifiedVar
- flatten $ Comprehension o [ComprehensionLetting oName a]
- Reference nm ex ->
- bug $ "rule_FlattenLex: flatten isn't defined for this reference fellow..."
- <+> vcat [stringToDoc (show a)
- ,"reference:" <+> stringToDoc (show nm)
- ,"fellow:" <+> stringToDoc (show ex)]
- Comprehension body gocs -> do
- fbody <- flatten body
- let comp = Comprehension fbody gocs
- return [essence| flatten(&comp) |]
- _ -> bug $ "rule_FlattenLex: flatten isn't defined for this expression fellow..."
-
- <+> vcat [pretty a, pretty ta, stringToDoc $ show a]
-
-
-rule_ReducerToComprehension :: Rule
-rule_ReducerToComprehension = "reducer-to-comprehension" `namedRule` theRule where
- theRule p = do
- (_, _, mk, coll) <- match opReducer p
- -- leave comprehensions alone
- let
- isComprehension Comprehension{} = True
- isComprehension _ = False
- case followAliases isComprehension coll of
- True -> na "rule_ReducerToComprehension"
- False -> return ()
- -- leave matrix literals alone
- case tryMatch matrixLiteral coll of
- Nothing -> return ()
- Just {} -> na "rule_ReducerToComprehension"
- tyColl <- typeOf coll
- howToIndex <- case tyColl of
- TypeSequence{} -> return $ Left ()
- TypeMatrix{} -> return $ Right ()
- TypeList{} -> return $ Right ()
- TypeSet{} -> return $ Right ()
- TypeMSet{} -> return $ Right ()
- _ -> na "rule_ReducerToComprehension"
- return
- ( "Creating a comprehension for the collection inside the reducer operator."
- , do
- (iPat, i) <- quantifiedVar
- case howToIndex of
- Left{} -> return $ mk [essence| [ &i[2] | &iPat <- &coll ] |]
- Right{} -> return $ mk [essence| [ &i | &iPat <- &coll ] |]
- )
-
-
-rule_TrueIsNoOp :: Rule
-rule_TrueIsNoOp = "true-is-noop" `namedRule` theRule where
- theRule (Op (MkOpTrue (OpTrue ref))) =
- case ref of
- Reference _ (Just DeclHasRepr{}) ->
- return ( "Remove the argument from true."
- , return $ Constant $ ConstantBool True
- )
- _ -> na "The argument of true doesn't have a representation."
- theRule _ = na "rule_TrueIsNoOp"
-
-
-rule_FlattenOf1D :: Rule
-rule_FlattenOf1D = "flatten-of-1D" `namedRule` theRule where
- theRule p = do
- x <- match opFlatten p
- tyx <- typeOf x
- out <- case tyx of
- TypeList TypeBool{} -> return x
- TypeList TypeInt{} -> return x
- TypeMatrix _ TypeBool{} -> return x
- TypeMatrix _ TypeInt{} -> return x
- TypeMatrix{} -> -- more than 1D
- case listOut x of
- Just [y] -> return (make opFlatten y)
- _ -> na "rule_FlattenOf1D"
- _ -> na "rule_FlattenOf1D"
- return ( "1D matrices do not need a flatten."
- , return out
- )
-
-
-rule_Decompose_AllDiff :: Rule
-rule_Decompose_AllDiff = "decompose-allDiff" `namedRule` theRule where
- theRule [essence| allDiff(&m) |] = do
- ty <- typeOf m
- case ty of
- TypeMatrix _ TypeBool -> na "allDiff can stay"
- TypeMatrix _ (TypeInt _) -> na "allDiff can stay"
- TypeMatrix _ _ -> return ()
- _ -> na "allDiff on something other than a matrix."
- index:_ <- indexDomainsOf m
- return
- ( "Decomposing allDiff. Type:" <+> pretty ty
- , do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- return
- [essence|
- and([ &m[&i] != &m[&j]
- | &iPat : &index
- , &jPat : &index
- , &i < &j
- ])
- |]
- )
- theRule _ = na "rule_Decompose_AllDiff"
-
-
-rule_DomainCardinality :: Rule
-rule_DomainCardinality = "domain-cardinality" `namedRule` theRule where
- theRule p = do
- maybeDomain <- match opTwoBars p
- d <- case maybeDomain of
- Domain d -> return d
- Reference _ (Just (Alias (Domain d))) -> return d
- _ -> na "rule_DomainCardinality"
- return
- ( "Cardinality of a domain"
- , case d of
- DomainInt _ [RangeBounded 1 u] -> return u
- _ -> do
- (iPat, _) <- quantifiedVar
- return [essence| sum([ 1 | &iPat : &d ]) |]
- )
-
-
-rule_DomainMinMax :: Rule
-rule_DomainMinMax = "domain-MinMax" `namedRule` theRule where
- theRule [essence| max(&maybeDomain) |] = do
- d <- getDomain maybeDomain
- return
- ( "max of a domain"
- , maxOfDomain d
- )
- theRule [essence| min(&maybeDomain) |] = do
- d <- getDomain maybeDomain
- return
- ( "min of a domain"
- , minOfDomain d
- )
- theRule _ = na "rule_DomainMinMax"
-
- getDomain :: MonadFail m => Expression -> m (Domain () Expression)
- getDomain (Domain d) = return d
- getDomain (Reference _ (Just (Alias (Domain d)))) = getDomain (Domain d)
- getDomain _ = na "rule_DomainMinMax.getDomain"
-
-
-rule_ComplexAbsPat :: Rule
-rule_ComplexAbsPat = "complex-pattern" `namedRule` theRule where
- theRule (Comprehension body gensOrConds) = do
- (gocBefore, (pat, domainOrExpr), gocAfter) <- matchFirst gensOrConds $ \ goc -> case goc of
- Generator (GenDomainNoRepr pat@AbsPatTuple{} domain) -> return (pat, Left domain)
- Generator (GenInExpr pat@AbsPatTuple{} expr) -> return (pat, Right expr)
- _ -> na "rule_ComplexAbsPat"
- return
- ( "complex pattern on tuple patterns"
- , do
- (iPat, i) <- quantifiedVar
- let replacements = [ (p, make opMatrixIndexing i (map (fromInt . fromIntegral) is))
- | (p, is) <- genMappings pat
- ]
- let f x@(Reference nm _) = fromMaybe x (lookup nm replacements)
- f x = x
- return $ Comprehension (transform f body)
- $ gocBefore
- ++ [ either (Generator . GenDomainNoRepr iPat)
- (Generator . GenInExpr iPat)
- domainOrExpr ]
- ++ transformBi f gocAfter
- )
- theRule _ = na "rule_ComplexAbsPat"
-
- -- i --> i -> []
- -- (i,j) --> i -> [1]
- -- j -> [2]
- -- (i,(j,k)) --> i -> [1]
- -- j -> [2,1]
- -- k -> [2,2]
- genMappings :: AbstractPattern -> [(Name, [Int])]
- genMappings (Single nm) = [(nm, [])]
- genMappings (AbsPatTuple pats)
- = concat
- [ [ (patCore, i:is) | (patCore, is) <- genMappings pat ]
- | (i, pat) <- zip [1..] pats
- ]
- genMappings (AbsPatMatrix pats)
- = concat
- [ [ (patCore, i:is) | (patCore, is) <- genMappings pat ]
- | (i, pat) <- zip [1..] pats
- ]
- genMappings pat = bug ("rule_ComplexLambda.genMappings:" <+> pretty (show pat))
-
-
--- this rule doesn't use `namedRule` because it need access to ascendants through the zipper
-rule_InlineConditions :: Rule
-rule_InlineConditions = Rule "inline-conditions" theRule where
- theRule z (Comprehension body gensOrConds) = do
- let (toInline, toKeep) = mconcat
- [ case goc of
- Condition x | categoryOf x == CatDecision -> ([x],[])
- _ -> ([],[goc])
- | goc <- gensOrConds
- ]
- theGuard <- case toInline of
- [] -> na "No condition to inline."
- [x] -> return x
- xs -> return $ make opAnd $ fromList xs
- (nameQ, opSkip) <- queryQ z
- let bodySkipped = opSkip theGuard body
- return
- [ RuleResult
- { ruleResultDescr = "Inlining conditions, inside" <+> nameQ
- , ruleResultType = ExpressionRefinement
- , ruleResult = return $ Comprehension bodySkipped toKeep
- , ruleResultHook = Nothing
- } ]
- theRule _ _ = na "rule_InlineConditions"
-
- -- keep going up, until finding a quantifier
- -- when found, return the skipping operator for the quantifier
- -- if none exists, do not apply the rule.
- -- (or maybe we should call bug right ahead, it can't be anything else.)
-<<<<<<< HEAD
- queryQ z0 = case Zipper.up z0 of
- Nothing -> na "rule_InlineConditions (top)"
- Just z -> queryQ_handleLevel z (hole z)
-
- queryQ_handleLevel z h
- | Just{} <- match opAnd h = return ("and", opAndSkip)
- | Just{} <- match opOr h = return ("or" , opOrSkip )
- | Just{} <- match opSum h = return ("sum", opSumSkip)
- | Just{} <- match opMin h = na "rule_InlineConditions (min)"
- | Just{} <- match opMax h = na "rule_InlineConditions (max)"
- | Just{} <- match opOrdering h = return ("ordering", opSumSkip)
- | Comprehension{} <- h = queryQ z
- | Just{} <- match opFlatten h = queryQ z
- | otherwise = na "rule_InlineConditions (stop)"
-
- opAndSkip b x = [essence| &b -> &x |]
- opOrSkip b x = [essence| &b /\ &x |]
-
- opSumSkip b [essence| flatten(&x)|] = make opFlatten (opSumSkip b x)
- opSumSkip b (Comprehension body gocs) = Comprehension (opSumSkip b body) gocs
- opSumSkip b x = [essence| toInt(&b) * catchUndef(&x, 0) |]
-=======
- queryQ z0 =
- case Zipper.up z0 of
- Nothing -> na "rule_InlineConditions (meh-1)"
- Just z -> do
- let h = hole z
- case ( match opAnd h, match opOr h, match opSum h, match opProduct h
- , match opMin h, match opMax h, match opOrdering h ) of
- (Just{}, _, _, _, _, _, _) -> return ("and", opAndSkip)
- (_, Just{}, _, _, _, _, _) -> return ("or" , opOrSkip )
- (_, _, Just{}, _, _, _, _) -> return ("sum", opSumSkip)
- (_, _, _, Just{}, _, _, _) -> return ("product", opProductSkip)
- (_, _, _, _, Just{}, _, _) -> na "rule_InlineConditions (min)"
- (_, _, _, _, _, Just{}, _) -> na "rule_InlineConditions (max)"
- (_, _, _, _, _, _, Just{}) -> return ("ordering", opSumSkip)
- _ -> na "rule_InlineConditions (meh-2)"
- -- case Zipper.up z of
- -- Nothing -> na "queryQ"
- -- Just u -> queryQ u
-
- opAndSkip b x = [essence| &b -> &x |]
- opOrSkip b x = [essence| &b /\ &x |]
- opSumSkip b x = [essence| toInt(&b) * catchUndef(&x, 0) |]
- opProductSkip b x = [essence| [ 1
- , catchUndef(&x,1)
- ; int(0..1)
- ] [toInt(&b)] |]
->>>>>>> master
-
-
-rule_InlineConditions_AllDiff :: Rule
-rule_InlineConditions_AllDiff = "inline-conditions-allDiff" `namedRule` theRule where
- theRule (Op (MkOpAllDiff (OpAllDiff (Comprehension body gensOrConds)))) = do
- let (toInline, toKeep) = mconcat
- [ case goc of
- Condition x | categoryOf x == CatDecision -> ([x],[])
- _ -> ([],[goc])
- | goc <- gensOrConds
- ]
- theGuard <- case toInline of
- [] -> na "No condition to inline."
- [x] -> return x
- xs -> return $ make opAnd $ fromList xs
-
- domBody <- domainOf body
- let
- collectLowerBounds (RangeSingle x) = return x
- collectLowerBounds (RangeBounded x _) = return x
- collectLowerBounds _ = userErr1 ("Unexpected infinite domain:" <+> pretty domBody)
-
- collectLowerBoundsD (DomainInt _ rs) = mapM collectLowerBounds rs
- collectLowerBoundsD _ = userErr1 ("Expected an integer domain, but got:" <+> pretty domBody)
-
- bounds <- collectLowerBoundsD domBody
- let lowerBound = make opMin (fromList bounds)
-
- -- for each element, we do element-lowerBound+1
- -- this makes sure the smallest element is 1
- -- hence we can use 0 as the except value!
- let bodySkipped = [essence| toInt(&theGuard) * catchUndef(&body + (1 - &lowerBound), 0) |]
-
- return
- ( "Inlining conditions, inside allDiff"
- , return $ make opAllDiffExcept (Comprehension bodySkipped toKeep) 0
- )
- theRule _ = na "rule_InlineConditions_AllDiff"
-
-
-rule_InlineConditions_MaxMin :: Rule
-rule_InlineConditions_MaxMin = "aux-for-MaxMin" `namedRule` theRule where
- theRule p = do
- when (categoryOf p < CatDecision) $ na "rule_InlineConditions_MaxMin"
- (nameQ, binOp, Comprehension body gensOrConds) <-
- case (match opMax p, match opMin p) of
- (Just res, _) -> return ("max", \ a b -> [essence| &a <= &b |], res )
- (_, Just res) -> return ("min", \ a b -> [essence| &a >= &b |], res )
- _ -> na "rule_InlineConditions_MaxMin"
- let
- (toInline, gocInExpr, _toKeep) = mconcat
- [ case goc of
- Condition x | categoryOf x == CatDecision -> ([x],[],[])
- Generator (GenInExpr {}) -> ([],[goc],[])
- _ -> ([],[],[goc])
- | goc <- gensOrConds
- ]
- when (null toInline && null gocInExpr) $ na "rule_InlineConditions_MaxMin"
- auxDomain <- domainOf body
- return
- ( "Creating auxiliary variable for a" <+> nameQ
- , do
- (auxName, aux) <- auxiliaryVar
- let auxDefinedLHS = make opSum (Comprehension 1 gensOrConds)
- let auxDefined = [essence| &auxDefinedLHS > 0 |]
- let auxUndefined = [essence| &auxDefinedLHS = 0 |]
- let aux' = WithLocals aux (DefinednessConstraints [auxDefined])
- return $ WithLocals aux'
- (AuxiliaryVars
- [ Declaration (FindOrGiven LocalFind auxName auxDomain)
- , SuchThat
- [ make opAnd $ Comprehension
- (binOp body aux)
- gensOrConds
-
- -- either one of the members of this comprehension, or dontCare
- -- if it is indeed dontCare, care should be taken to make sure it isn't used as a normal value
- , make opAnd $ fromList
- [ make opImply auxDefined
- (make opOr $ Comprehension
- [essence| &body = &aux |]
- gensOrConds)
- , make opImply auxUndefined (make opDontCare aux)
- ]
- ]
- ])
- )
-
-
-rule_AttributeToConstraint :: Rule
-rule_AttributeToConstraint = "attribute-to-constraint" `namedRule` theRule where
- theRule (Op (MkOpAttributeAsConstraint (OpAttributeAsConstraint thing attr mval))) = do
- dom <- domainOf thing
- let conv = mkAttributeToConstraint dom attr mval thing
- return
- ( "Converting an attribute to a constraint"
- , bugFailT "rule_AttributeToConstraint" conv
- )
- theRule _ = na "rule_AttributeToConstraint"
-
-
-rule_FullEvaluate :: Rule
-rule_FullEvaluate = "full-evaluate" `namedRule` theRule where
- theRule Constant{} = na "rule_FullEvaluate"
- theRule Domain{} = na "rule_FullEvaluate"
- theRule p = do
- constant <- instantiateExpression [] p
- unless (null [() | ConstantUndefined{} <- universe constant]) $
- na "rule_PartialEvaluate, undefined"
- return
- ( "Full evaluator"
- , return $ Constant constant
- )
-
-
-rule_PartialEvaluate :: Rule
-rule_PartialEvaluate = "partial-evaluate" `namedRuleZ` theRule where
- -- if a variable only has a single value in its domain, replace it with the value
- theRule z (Reference _ (Just (DeclHasRepr _ _ (singletonDomainInt -> Just val)))) =
- case hole <$> Zipper.up z of
- Just (Op (MkOpTrue _)) -> na "rule_PartialEvaluate, inside a true(ref)"
- _ -> return ( "Partial evaluator"
- , return val
- )
- theRule _ (Op op)
- | Just (x, y) <- case op of
- MkOpLeq (OpLeq x y) -> Just (x,y)
- MkOpGeq (OpGeq x y) -> Just (x,y)
- MkOpEq (OpEq x y) -> Just (x,y)
- _ -> Nothing
- , Reference nmX _ <- x
- , Reference nmY _ <- y
- , nmX == nmY
- , categoryOf x <= CatQuantified
- , categoryOf y <= CatQuantified
- = return
- ( "Parameter = parameter (or quantified)"
- , return (fromBool True)
- )
- theRule _ (Op x) = do
- x' <- simplifyOp x
- when (Op x == x') $ bug $ vcat
- [ "rule_PartialEvaluate, simplifier returns the input unchanged."
- , "input:" <+> vcat [ pretty (Op x)
- , pretty (show (Op x))
- ]
- ]
- return
- ( "Partial evaluator"
- , return x'
- )
- theRule _ _ = na "rule_PartialEvaluate"
-
-
--- | shifting quantifiers inwards, if they operate on a row of a 2d matrix,
--- make them operate on the rows directly then index
-rule_QuantifierShift :: Rule
-rule_QuantifierShift = "quantifier-shift" `namedRule` theRule where
- theRule p = do
- (_, _, mkQuan, inner) <- match opReducer p
- (matrix, indexer) <- match opIndexing inner
- (TypeMatrix _ ty, index, elems) <- match matrixLiteral matrix
- case ty of
- TypeMatrix{} -> return ()
- TypeList{} -> return ()
- _ -> na "rule_QuantifierShift"
- return
- ( "Shifting quantifier inwards"
- , return $ make opIndexing
- (make matrixLiteral
- ty
- index
- (map mkQuan elems))
- indexer
- )
-
-
--- | shifting quantifiers inwards, if they operate on a flattened multi-dim matrix.
-rule_QuantifierShift2 :: Rule
-rule_QuantifierShift2 = "quantifier-shift2" `namedRule` theRule where
- theRule p = do
- (_, _, mkQuan, inner) <- match opReducer p
- matrix <- match opFlatten inner
- (TypeMatrix _ ty, index, elems) <- match matrixLiteral matrix
- case ty of
- TypeMatrix{} -> return () -- the matrix literal should contain further matrix/list stuff.
- TypeList{} -> return ()
- _ -> na "rule_QuantifierShift2"
- return
- ( "Shifting quantifier inwards"
- , return $ mkQuan
- (make matrixLiteral
- ty
- index
- (map (mkQuan . flattenIfNeeded (matrixNumDims ty)) elems))
- )
-
-
--- | shifting quantifiers inwards, if they operate on a concatenated multi-dim matrix.
-rule_QuantifierShift3 :: Rule
-rule_QuantifierShift3 = "quantifier-shift3" `namedRule` theRule where
- theRule p = do
- (_, True, mkQuan, inner) <- match opReducer p
- matrix <- match opConcatenate inner
- (TypeMatrix _ ty, index, elems) <- match matrixLiteral matrix
- return
- ( "Shifting quantifier inwards"
- , return $ mkQuan $ make matrixLiteral
- ty
- index
- (map mkQuan elems)
- )
-
-
-rule_Comprehension_Simplify :: Rule
-rule_Comprehension_Simplify = "comprehension-simplify" `namedRule` theRule where
- theRule (Comprehension x gocs)
- | let isTrueCondition (Condition (Constant (ConstantBool True))) = True
- isTrueCondition _ = False
- , let gocs' = filter (not . isTrueCondition) gocs
- , length gocs' < length gocs
- = return
- ( "Removing true conditions"
- , return $ Comprehension x gocs'
- )
- theRule _ = na "rule_Comprehension_Simplify"
-
-
-rule_Xor_To_Sum :: Rule
-rule_Xor_To_Sum = "xor-to-sum" `namedRule` theRule where
- theRule [essence| xor(&arg) |] =
- case arg of
- Comprehension body goc -> do
- let argOut = Comprehension [essence| toInt(&body) |] goc
- return
- ( "xor to sum"
- , return [essence| 1 = sum(&argOut) |]
- )
- AbstractLiteral (AbsLitMatrix dom elems) -> do
- let argOut = AbstractLiteral $ AbsLitMatrix dom
- [ [essence| toInt(&el) |] | el <- elems ]
- return
- ( "xor to sum"
- , return [essence| 1 = sum(&argOut) |]
- )
- _ -> do
- (iPat, i) <- quantifiedVar
- return
- ( "xor to sum"
- , return [essence| 1 = sum([ toInt(&i) | &iPat <- &arg ]) |]
- )
- theRule _ = na "rule_Xor_To_Sum"
-
-
-<<<<<<< HEAD
-enforceTagConsistency :: MonadFail m => Model -> m Model
-enforceTagConsistency model = do
- let statements' = transformBi reDomExp $ transformBi reDomConst (mStatements model)
- return model { mStatements = statements' }
-
-
-addUnnamedSymmetryBreaking ::
- NameGen m =>
- Maybe UnnamedSymmetryBreaking ->
- Model ->
- m Model
-addUnnamedSymmetryBreaking mode model = do
-
- let
- allUnnamedTypes :: [(Domain () Expression, Expression)]
- allUnnamedTypes =
- [ reTag (TagUnnamed nm') (DomainReference nm Nothing, x) --x is a TagInt at this point so we must reTag it
- | Declaration (LettingDomainDefnUnnamed nm@(Name nm') x) <- mStatements model
- ]
-
- allDecVars =
- [ (Reference nm Nothing, domain)
- | Declaration (FindOrGiven Find nm domain) <- mStatements model
- ]
-
- allDecVarsAux auxSuffix =
- [ (Reference (mconcat [nm, "_auxFor_", auxSuffix]) Nothing, domain)
- | Declaration (FindOrGiven Find nm domain) <- mStatements model
- ]
-
- varsTuple = AbstractLiteral $ AbsLitTuple $ map fst allDecVars
- mkAuxTuple auxSuffix = AbstractLiteral $ AbsLitTuple $ map fst (allDecVarsAux auxSuffix)
-
--- traceM $ show $ "Unnamed types in this model:" <++> prettyList id "," allUnnamedTypes
--- traceM $ show $ "Unnamed decision variables in this model:" <++> prettyList id "," allDecVars
-
- -- 3 axis of doom
- -- 1. Quick/Complete. Quick is x .<= p(x)
- -- Complete is x .<= y /\ y = p(x)
- -- 2. Scope. Consecutive
- -- AllPairs
- -- AllPermutations
- -- 3. Independently/Altogether
-
- case mode of
- Nothing -> return model
- Just (UnnamedSymmetryBreaking quickOrComplete usbScope independentlyOrAltogether) -> do
- let newDecls =
- case quickOrComplete of
- USBQuick -> []
- USBComplete ->
- case independentlyOrAltogether of
- USBIndependently ->
- [ Declaration (FindOrGiven LocalFind nm' domain)
- | Declaration (FindOrGiven Find nm domain) <- mStatements model
- , (DomainReference uName _, _) <- allUnnamedTypes
- , let nm' = mconcat [nm, "_auxFor_", uName]
- ]
- USBAltogether ->
- [ Declaration (FindOrGiven LocalFind nm' domain)
- | Declaration (FindOrGiven Find nm domain) <- mStatements model
- , let nm' = mconcat [nm, "_auxFor_all"]
- ]
-
- let
-
- buildPermutationChain [] vars = vars
- buildPermutationChain (p:ps) vars =
- let applied = buildPermutationChain ps vars
- in [essence| image(&p, &applied) |]
-
- nestInBubbles :: Expression -> Int -> [(Expression,Statement)] -> Expression -> Expression
- nestInBubbles _ _ [] expr = expr
- nestInBubbles modl i (fv:auxVars) expr =
- let v = fst fv
- ii = fromInt (fromIntegral i)
- in WithLocals [essence| &modl[&ii] .<= &v |] (AuxiliaryVars ((snd fv):[SuchThat [nestInBubbles modl (i + 1) auxVars expr]]))
-
- combinedPermApply auxSuffix perms =
- case quickOrComplete of
- USBQuick ->
- let applied = buildPermutationChain perms varsTuple
- in [essence| &varsTuple .<= &applied |]
- USBComplete ->
- let applied = buildPermutationChain perms varsTuple
- thisAuxTuple = mkAuxTuple auxSuffix
-
- dVars = map fst (allDecVarsAux auxSuffix)
- in nestInBubbles varsTuple 1 (zip dVars newDecls)
- [essence| &thisAuxTuple = &applied |]
-
- mkGenerator_Consecutive _ _ [] = bug "must have at least one unnamed type"
- mkGenerator_Consecutive auxSuffix perms [(u, uSize)] = do
- (iPat, i) <- quantifiedVar
- let perm = [essence| permutation((&i, succ(&i))) |]
- let applied = combinedPermApply auxSuffix (perm:perms)
- return [essence|
- and([ &applied
- | &iPat : &u
- , &i < &uSize
- ])
- |]
- mkGenerator_Consecutive auxSuffix perms ((u, uSize):us) = do
- (iPat, i) <- quantifiedVar
- let perm = [essence| permutation((&i, succ(&i))) |]
- applied <- mkGenerator_Consecutive auxSuffix (perm:perms) us
- return [essence|
- and([ &applied
- | &iPat : &u
- , &i < &uSize
- ])
- |]
-
-
- mkGenerator_AllPairs _ _ [] = bug "must have at least one unnamed type"
- mkGenerator_AllPairs auxSuffix perms [(u, _uSize)] = do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- let perm = [essence| permutation((&i, &j)) |]
- let applied = combinedPermApply auxSuffix (perm:perms)
- return [essence|
- and([ &applied
- | &iPat : &u
- , &jPat : &u
- , &i < &j
- ])
- |]
- mkGenerator_AllPairs auxSuffix perms ((u, _uSize):us) = do
- (iPat, i) <- quantifiedVar
- (jPat, j) <- quantifiedVar
- let perm = [essence| permutation((&i, &j)) |]
- applied <- mkGenerator_AllPairs auxSuffix (perm:perms) us
- return [essence|
- and([ &applied
- | &iPat : &u
- , &jPat : &u
- , &i < &j
- ])
- |]
-
- mkGenerator_AllPermutations _ _ [] = bug "must have at least one unnamed type"
- mkGenerator_AllPermutations auxSuffix perms [(u, _uSize)] = do
- (iPat, i) <- quantifiedVar
- let perm = i
- let applied = combinedPermApply auxSuffix (perm:perms)
- return [essence|
- and([ &applied
- | &iPat : permutation of &u
- ])
- |]
- mkGenerator_AllPermutations auxSuffix perms ((u, _uSize):us) = do
- (iPat, i) <- quantifiedVar
- let perm = i
- applied <- mkGenerator_AllPermutations auxSuffix (perm:perms) us
- return [essence|
- and([ &applied
- | &iPat : permutation of &u
- ])
- |]
-
- mkGenerator auxSuffix perms us =
- case usbScope of
- USBConsecutive -> mkGenerator_Consecutive auxSuffix perms us
- USBAllPairs -> mkGenerator_AllPairs auxSuffix perms us
- USBAllPermutations -> mkGenerator_AllPermutations auxSuffix perms us
- newCons <-
- case independentlyOrAltogether of
- USBIndependently -> do
- xs <- (sequence
- [ mkGenerator uName [] [(u, uSize)]
- | (u@(DomainReference uName _), uSize) <- allUnnamedTypes
- ])
- return [SuchThat xs]
- USBAltogether -> do
- cons <- mkGenerator "all" [] allUnnamedTypes
- return [SuchThat [cons]]
-
- let stmts = newCons
- traceM $ show $ vcat $ "Adding the following unnamed symmetry breaking constraints:"
- : map (nest 4 . pretty) stmts
- return model { mStatements = mStatements model ++ stmts}
-=======
-rule_Comprehension_Cardinality :: Rule
-rule_Comprehension_Cardinality = "comprehension-cardinality" `namedRule` theRule where
- theRule p = do
- Comprehension _ gensOrConds <- match opTwoBars p
- let ofones = Comprehension (fromInt 1) gensOrConds
- return ( "Horizontal rule for comprehension cardinality"
- , return [essence| sum(&ofones) |]
- )
-
-rule_Flatten_Cardinality :: Rule
-rule_Flatten_Cardinality = "flatten-cardinality" `namedRule` theRule where
- theRule p = do
- list <- match opTwoBars p >>= match opConcatenate
- return ( "Horizontal rule for comprehension cardinality"
- , do
- (iPat, i) <- quantifiedVar
- return [essence| sum([ |&i| | &iPat <- &list ]) |]
- )
->>>>>>> master
-
diff --git a/tests/custom/basic/function-literal-suggestion/run.sh.orig b/tests/custom/basic/function-literal-suggestion/run.sh.orig
deleted file mode 100755
index ddf5903d30..0000000000
--- a/tests/custom/basic/function-literal-suggestion/run.sh.orig
+++ /dev/null
@@ -1,8 +0,0 @@
-<<<<<<< HEAD
-conjure solve *.essence *.param
-||||||| merged common ancestors
-=======
-rm -rf conjure-output
-conjure solve *.essence *.param
-rm -rf conjure-output
->>>>>>> taggedints
diff --git a/tests/custom/basic/function-literal-suggestion/stdout.expected.orig b/tests/custom/basic/function-literal-suggestion/stdout.expected.orig
deleted file mode 100644
index 11c8d0c0e6..0000000000
--- a/tests/custom/basic/function-literal-suggestion/stdout.expected.orig
+++ /dev/null
@@ -1,10 +0,0 @@
-<<<<<<< HEAD
-Using cached models.
-Savile Row: model000001.eprime p.param
-||||||| merged common ancestors
-=======
-Generating models for func.essence
-Generated models: model000001.eprime
-Saved under: conjure-output
-Savile Row: model000001.eprime p.param
->>>>>>> taggedints
diff --git a/tests/custom/issues/119/1/stdout.expected.orig b/tests/custom/issues/119/1/stdout.expected.orig
deleted file mode 100644
index 8e4a745555..0000000000
--- a/tests/custom/issues/119/1/stdout.expected.orig
+++ /dev/null
@@ -1,56 +0,0 @@
-Generating models for _old_issues_118_smaller.essence
-Generated models: model_1.eprime, model_2.eprime, model_3.eprime, model_4.eprime
-Saved under: conjure-output
-Savile Row: model_1.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_2.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_3.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_4.eprime
-Running minion for domain filtering.
-Running solver: minion
-Validating solution: conjure-output/model_1-solution000001.solution
-Validating solution: conjure-output/model_2-solution000001.solution
-Validating solution: conjure-output/model_3-solution000001.solution
-Validating solution: conjure-output/model_4-solution000001.solution
-----
-language Essence 1.3
-
-letting p be partition({1}, {2}, {3})
-$ Visualisation for p
-$ 1
-$ 2
-$ 3
-
-language Essence 1.3
-
-letting p be partition({1}, {2}, {3})
-$ Visualisation for p
-$ 1
-$ 2
-$ 3
-
-language Essence 1.3
-
-letting p be partition({1}, {2}, {3})
-$ Visualisation for p
-$ 1
-$ 2
-$ 3
-
-language Essence 1.3
-
-letting p be partition({1}, {2}, {3})
-$ Visualisation for p
-$ 1
-$ 2
-$ 3
-
-----
-
-language Essence 1.3
-letting p be partition({1}, {2}, {3})
diff --git a/tests/custom/issues/119/2/stdout.expected.orig b/tests/custom/issues/119/2/stdout.expected.orig
deleted file mode 100644
index 0ca6e24ba7..0000000000
--- a/tests/custom/issues/119/2/stdout.expected.orig
+++ /dev/null
@@ -1,44 +0,0 @@
-Generating models for _old_issues_118_smaller2.essence
-Generated models: model_1.eprime, model_2.eprime, model_3.eprime
-Saved under: conjure-output
-Savile Row: model_1.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_2.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_3.eprime
-Running minion for domain filtering.
-Running solver: minion
-Validating solution: conjure-output/model_1-solution000001.solution
-Validating solution: conjure-output/model_2-solution000001.solution
-Validating solution: conjure-output/model_3-solution000001.solution
-----
-language Essence 1.3
-
-letting p be partition({1}, {2}, {3})
-$ Visualisation for p
-$ 1
-$ 2
-$ 3
-
-language Essence 1.3
-
-letting p be partition({1}, {2}, {3})
-$ Visualisation for p
-$ 1
-$ 2
-$ 3
-
-language Essence 1.3
-
-letting p be partition({1}, {2}, {3})
-$ Visualisation for p
-$ 1
-$ 2
-$ 3
-
-----
-
-language Essence 1.3
-letting p be partition({1}, {2}, {3})
diff --git a/tests/custom/issues/370/01/stdout.expected.orig b/tests/custom/issues/370/01/stdout.expected.orig
deleted file mode 100644
index ddc21686c5..0000000000
--- a/tests/custom/issues/370/01/stdout.expected.orig
+++ /dev/null
@@ -1,36 +0,0 @@
-Generating models for 370.essence
-Generated models: model_1.eprime, model_2.eprime, model_3.eprime, model_4.eprime, model_5.eprime, model_6.eprime,
- model_7.eprime, model_8.eprime
-Saved under: conjure-output
-Savile Row: model_1.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_2.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_3.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_4.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_5.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_6.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_7.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_8.eprime
-Running minion for domain filtering.
-Running solver: minion
-Validating solution: conjure-output/model_1-solution000001.solution
-Validating solution: conjure-output/model_2-solution000001.solution
-Validating solution: conjure-output/model_3-solution000001.solution
-Validating solution: conjure-output/model_4-solution000001.solution
-Validating solution: conjure-output/model_5-solution000001.solution
-Validating solution: conjure-output/model_6-solution000001.solution
-Validating solution: conjure-output/model_7-solution000001.solution
-Validating solution: conjure-output/model_8-solution000001.solution
diff --git a/tests/custom/issues/370/03/stdout.expected.orig b/tests/custom/issues/370/03/stdout.expected.orig
deleted file mode 100644
index 01531ebc89..0000000000
--- a/tests/custom/issues/370/03/stdout.expected.orig
+++ /dev/null
@@ -1,19 +0,0 @@
-Generating models for 370.essence
-Generated models: model_1.eprime, model_2.eprime, model_3.eprime, model_4.eprime
-Saved under: conjure-output
-Savile Row: model_1.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_2.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_3.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_4.eprime
-Running minion for domain filtering.
-Running solver: minion
-Validating solution: conjure-output/model_1-solution000001.solution
-Validating solution: conjure-output/model_2-solution000001.solution
-Validating solution: conjure-output/model_3-solution000001.solution
-Validating solution: conjure-output/model_4-solution000001.solution
diff --git a/tests/custom/issues/388/2/stdout.expected.orig b/tests/custom/issues/388/2/stdout.expected.orig
deleted file mode 100644
index 8d07a74ca9..0000000000
--- a/tests/custom/issues/388/2/stdout.expected.orig
+++ /dev/null
@@ -1,157 +0,0 @@
-Generating models for 388-2.essence
-Generated models: model_1_1.eprime, model_1_2.eprime, model_1_3.eprime, model_1_4.eprime, model_2_1.eprime,
- model_2_2.eprime, model_2_3.eprime, model_2_4.eprime, model_3_1.eprime, model_3_2.eprime,
- model_3_3.eprime, model_3_4.eprime, model_4_1.eprime, model_4_2.eprime, model_4_3.eprime,
- model_4_4.eprime
-Saved under: conjure-output
-Savile Row: model_1_1.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_1_2.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_1_3.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_1_4.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_2_1.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_2_2.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_2_3.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_2_4.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_3_1.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_3_2.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_3_3.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_3_4.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_4_1.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_4_2.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_4_3.eprime
-Running minion for domain filtering.
-Running solver: minion
-Savile Row: model_4_4.eprime
-Running minion for domain filtering.
-Running solver: minion
-Validating solution: conjure-output/model_1_1-solution000001.solution
-Validating solution: conjure-output/model_1_2-solution000001.solution
-Validating solution: conjure-output/model_1_3-solution000001.solution
-Validating solution: conjure-output/model_1_4-solution000001.solution
-Validating solution: conjure-output/model_2_1-solution000001.solution
-Validating solution: conjure-output/model_2_2-solution000001.solution
-Validating solution: conjure-output/model_2_3-solution000001.solution
-Validating solution: conjure-output/model_2_4-solution000001.solution
-Validating solution: conjure-output/model_3_1-solution000001.solution
-Validating solution: conjure-output/model_3_2-solution000001.solution
-Validating solution: conjure-output/model_3_3-solution000001.solution
-Validating solution: conjure-output/model_3_4-solution000001.solution
-Validating solution: conjure-output/model_4_1-solution000001.solution
-Validating solution: conjure-output/model_4_2-solution000001.solution
-Validating solution: conjure-output/model_4_3-solution000001.solution
-Validating solution: conjure-output/model_4_4-solution000001.solution
-----
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-language Essence 1.3
-
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
-----
-
-language Essence 1.3
-letting C be {1, 2, 3}
-letting X be [2, 3, 1, 2, 3, 1, 2, 3, 1, 2; int(1..10)]
-letting c be 3
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000007.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000008.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_1-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_1.eprime.orig b/tests/exhaustive/autogen/gen02/expected/model_1_1.eprime.orig
deleted file mode 100644
index bd9607c328..0000000000
--- a/tests/exhaustive/autogen/gen02/expected/model_1_1.eprime.orig
+++ /dev/null
@@ -1,43 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-branching on
- [var2_ExplicitVarSizeWithMarkerR5_Marker, var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- or([q11 <= var2_ExplicitVarSizeWithMarkerR5_Marker /\
- sum([toInt(q12 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q11])
- | q12 : int(1..2)])
- >= -7
- | q11 : int(1..4)]),
- and([q2 + 1 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q2]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q2, q8])
- | q8 : int(1..2)];
- int(1..2)])
- var2_ExplicitVarSizeWithMarkerR5_Marker ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q3] = 0 /\
- and([var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q3, q10] = false
- | q10 : int(1..2)])
- | q3 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q4] ->
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, 1]) <
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, 2]))
- | q4 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q6 > var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q4] ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, q6] = false
- | q6 : int(1..2)])
- | q4 : int(1..4)])
-
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000007.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000008.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_2-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_2.eprime.orig b/tests/exhaustive/autogen/gen02/expected/model_1_2.eprime.orig
deleted file mode 100644
index e4f45c462c..0000000000
--- a/tests/exhaustive/autogen/gen02/expected/model_1_2.eprime.orig
+++ /dev/null
@@ -1,122 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithMarkerR4_Marker: int(0..4)
-find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-branching on
- [var2_ExplicitVarSizeWithMarkerR4_Marker, var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags,
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithMarkerR5_Marker,
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- or([q47 <= var2_ExplicitVarSizeWithMarkerR5_Marker /\
- sum([toInt(q48 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q47])
- | q48 : int(1..2)])
- >= -7
- | q47 : int(1..4)]),
- and([q2 + 1 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q2]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q2, q8])
- | q8 : int(1..2)];
- int(1..2)])
- var2_ExplicitVarSizeWithMarkerR5_Marker ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q3] = 0 /\
- and([var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q3, q10] = false
- | q10 : int(1..2)])
- | q3 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q4] ->
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, 1]) <
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, 2]))
- | q4 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q6 > var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q4] ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, q6] = false
- | q6 : int(1..2)])
- | q4 : int(1..4)]),
- and([q11 + 1 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- flatten([flatten([[-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q11, q19]);
- int(1)],
- [-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q11, q19]);
- int(1)];
- int(1..2)])
- | q19 : int(1..2)])
- var2_ExplicitVarSizeWithMarkerR4_Marker ->
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q12, q21] = false
- | q21 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q12, q22] = false
- | q22 : int(1..2)])
- | q12 : int(1..4)]),
- and([q13 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q13, 2] ->
- -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q13, 1]) <
- -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q13, 2]))
- | q13 : int(1..4)]),
- and([q13 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q13, q15] = false ->
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q13, q15] = false
- | q15 : int(1..2)])
- | q13 : int(1..4)]),
- and([q13 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q13, 2] ->
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q13, 1])
- | q13 : int(1..4)]),
- and([q24 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- or([q26 <= var2_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q28 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q26] ->
- or([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q24, q30] /\
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q24, q30] =
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q26, q28]
- | q30 : int(1..2)])
- | q28 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q24, q32] ->
- or([q34 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q26] /\
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q26, q34] =
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q24, q32]
- | q34 : int(1..2)])
- | q32 : int(1..2)]))
- | q26 : int(1..4)])
- | q24 : int(1..4)]),
- and([q36 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q38 <= var2_ExplicitVarSizeWithMarkerR4_Marker /\
- (and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q38, q40] ->
- or([q42 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q36] /\
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q36, q42] =
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q38, q40]
- | q42 : int(1..2)])
- | q40 : int(1..2)])
- /\
- and([q44 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q36] ->
- or([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q38, q46] /\
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q38, q46] =
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q36, q44]
- | q46 : int(1..2)])
- | q44 : int(1..2)]))
- | q38 : int(1..4)])
- | q36 : int(1..4)])
-
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000007.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000008.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_3-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_3.eprime.orig b/tests/exhaustive/autogen/gen02/expected/model_1_3.eprime.orig
deleted file mode 100644
index 03b9841ffb..0000000000
--- a/tests/exhaustive/autogen/gen02/expected/model_1_3.eprime.orig
+++ /dev/null
@@ -1,97 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithFlagsR5_Flags: matrix indexed by [int(1..4)] of bool
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-branching on
- [var2_ExplicitVarSizeWithFlagsR5_Flags, var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithMarkerR5_Marker,
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- or([q34 <= var2_ExplicitVarSizeWithMarkerR5_Marker /\
- sum([toInt(q35 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q34])
- | q35 : int(1..2)])
- >= -7
- | q34 : int(1..4)]),
- and([q2 + 1 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q2]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q2, q8])
- | q8 : int(1..2)];
- int(1..2)])
- var2_ExplicitVarSizeWithMarkerR5_Marker ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q3] = 0 /\
- and([var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q3, q10] = false
- | q10 : int(1..2)])
- | q3 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q4] ->
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, 1]) <
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, 2]))
- | q4 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q6 > var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q4] ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, q6] = false
- | q6 : int(1..2)])
- | q4 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q11 + 1] ->
- flatten([[var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q11]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q11, q19])
- | q19 : int(1..2)];
- int(1..2)])
-
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q12] = 0 /\
- and([var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q12, q21] = false
- | q21 : int(1..2)])
- | q12 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q13 + 1] -> var2_ExplicitVarSizeWithFlagsR5_Flags[q13]
- | q13 : int(1..3)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q15] ->
- (2 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q15] ->
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q15, 1]) <
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q15, 2]))
- | q15 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q15] ->
- and([q17 > var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q15] ->
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q15, q17] = false
- | q17 : int(1..2)])
- | q15 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q23] ->
- or([q25 <= var2_ExplicitVarSizeWithMarkerR5_Marker /\
- (var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q25] =
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q23]
- /\
- and([var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q25, q26] =
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q23, q26]
- | q26 : int(1..2)]))
- | q25 : int(1..4)])
- | q23 : int(1..4)]),
- and([q29 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- or([var2_ExplicitVarSizeWithFlagsR5_Flags[q31] /\
- (var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q31] =
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q29]
- /\
- and([var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q31, q32] =
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q29, q32]
- | q32 : int(1..2)]))
- | q31 : int(1..4)])
- | q29 : int(1..4)])
-
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000007.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000008.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_1_4-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_1_4.eprime.orig b/tests/exhaustive/autogen/gen02/expected/model_1_4.eprime.orig
deleted file mode 100644
index d4d7fdf24c..0000000000
--- a/tests/exhaustive/autogen/gen02/expected/model_1_4.eprime.orig
+++ /dev/null
@@ -1,123 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithFlagsR4_Flags: matrix indexed by [int(1..4)] of bool
-find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-branching on
- [var2_ExplicitVarSizeWithFlagsR4_Flags, var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags,
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithMarkerR5_Marker,
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- or([q49 <= var2_ExplicitVarSizeWithMarkerR5_Marker /\
- sum([toInt(q50 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q49])
- | q50 : int(1..2)])
- >= -7
- | q49 : int(1..4)]),
- and([q2 + 1 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q2]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q2, q8])
- | q8 : int(1..2)];
- int(1..2)])
- var2_ExplicitVarSizeWithMarkerR5_Marker ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q3] = 0 /\
- and([var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q3, q10] = false
- | q10 : int(1..2)])
- | q3 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q4] ->
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, 1]) <
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, 2]))
- | q4 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q6 > var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q4] ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, q6] = false
- | q6 : int(1..2)])
- | q4 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q11 + 1] ->
- flatten([flatten([[-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q11, q21]);
- int(1)],
- [-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q11, q21]);
- int(1)];
- int(1..2)])
- | q21 : int(1..2)])
-
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q12, q23] = false
- | q23 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q12, q24] = false
- | q24 : int(1..2)])
- | q12 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q13 + 1] -> var2_ExplicitVarSizeWithFlagsR4_Flags[q13]
- | q13 : int(1..3)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q15] ->
- (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q15, 2] ->
- -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q15, 1]) <
- -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q15, 2]))
- | q15 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q15] ->
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q15, q17] = false ->
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q15, q17] = false
- | q17 : int(1..2)])
- | q15 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q15] ->
- (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q15, 2] ->
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q15, 1])
- | q15 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q26] ->
- or([q28 <= var2_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q30 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q28] ->
- or([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q26, q32] /\
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q26, q32] =
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q28, q30]
- | q32 : int(1..2)])
- | q30 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q26, q34] ->
- or([q36 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q28] /\
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q28, q36] =
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q26, q34]
- | q36 : int(1..2)])
- | q34 : int(1..2)]))
- | q28 : int(1..4)])
- | q26 : int(1..4)]),
- and([q38 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- or([var2_ExplicitVarSizeWithFlagsR4_Flags[q40] /\
- (and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q40, q42] ->
- or([q44 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q38] /\
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q38, q44] =
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q40, q42]
- | q44 : int(1..2)])
- | q42 : int(1..2)])
- /\
- and([q46 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q38] ->
- or([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q40, q48] /\
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q40, q48] =
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q38, q46]
- | q48 : int(1..2)])
- | q46 : int(1..2)]))
- | q40 : int(1..4)])
- | q38 : int(1..4)])
-
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000007.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000008.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_1-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_1.eprime.orig b/tests/exhaustive/autogen/gen02/expected/model_2_1.eprime.orig
deleted file mode 100644
index f5534e4857..0000000000
--- a/tests/exhaustive/autogen/gen02/expected/model_2_1.eprime.orig
+++ /dev/null
@@ -1,120 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_ExplicitVarSizeWithMarkerR4_Marker: int(0..4)
-find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-branching on
- [var2_ExplicitVarSizeWithMarkerR5_Marker, var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithMarkerR4_Marker,
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags,
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values]
-such that
- or([q47 <= var2_ExplicitVarSizeWithMarkerR4_Marker /\
- sum([toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q47, q48]) | q48 : int(1..2)])
- >= -7
- | q47 : int(1..4)]),
- and([q2 + 1 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- flatten([flatten([[-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q2, q10]);
- int(1)],
- [-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q2, q10]);
- int(1)];
- int(1..2)])
- | q10 : int(1..2)])
- var2_ExplicitVarSizeWithMarkerR4_Marker ->
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q3, q12] = false
- | q12 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q3, q13] = false
- | q13 : int(1..2)])
- | q3 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, 2] ->
- -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q4, 1]) <
- -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q4, 2]))
- | q4 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, q6] = false ->
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q4, q6] = false
- | q6 : int(1..2)])
- | q4 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, 2] ->
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, 1])
- | q4 : int(1..4)]),
- and([q14 + 1 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q14]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q14, q20])
- | q20 : int(1..2)];
- int(1..2)])
- var2_ExplicitVarSizeWithMarkerR5_Marker ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q15] = 0 /\
- and([var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q15, q22] = false
- | q22 : int(1..2)])
- | q15 : int(1..4)]),
- and([q16 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q16] ->
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q16, 1]) <
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q16, 2]))
- | q16 : int(1..4)]),
- and([q16 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q18 > var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q16] ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q16, q18] = false
- | q18 : int(1..2)])
- | q16 : int(1..4)]),
- and([q24 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q26 <= var2_ExplicitVarSizeWithMarkerR4_Marker /\
- (and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q26, q28] ->
- or([q30 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q24] /\
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q24, q30] =
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q26, q28]
- | q30 : int(1..2)])
- | q28 : int(1..2)])
- /\
- and([q32 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q24] ->
- or([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q26, q34] /\
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q26, q34] =
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q24, q32]
- | q34 : int(1..2)])
- | q32 : int(1..2)]))
- | q26 : int(1..4)])
- | q24 : int(1..4)]),
- and([q36 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- or([q38 <= var2_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q40 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q38] ->
- or([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q36, q42] /\
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q36, q42] =
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q38, q40]
- | q42 : int(1..2)])
- | q40 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q36, q44] ->
- or([q46 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q38] /\
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q38, q46] =
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q36, q44]
- | q46 : int(1..2)])
- | q44 : int(1..2)]))
- | q38 : int(1..4)])
- | q36 : int(1..4)])
-
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000007.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000008.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_2.eprime b/tests/exhaustive/autogen/gen02/expected/model_2_2.eprime
new file mode 100644
index 0000000000..c1cfaf2da7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_2.eprime
@@ -0,0 +1,53 @@
+language ESSENCE' 1.0
+
+find var2_ExplicitVarSizeWithMarkerR4_Marker: int(0..4)
+find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+branching on
+ [var2_ExplicitVarSizeWithMarkerR4_Marker, var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags,
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q14 <= var2_ExplicitVarSizeWithMarkerR4_Marker /\
+ sum([toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q14, q15]) | q15 : int(1..2)])
+ >= -7
+ | q14 : int(1..4)]),
+ and([q2 + 1 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ flatten([flatten([[-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q2, q10]);
+ int(1)],
+ [-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q2, q10]);
+ int(1)];
+ int(1..2)])
+ | q10 : int(1..2)])
+ var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q3, q12] = false
+ | q12 : int(1..2)])
+ /\
+ and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q3, q13] = false
+ | q13 : int(1..2)])
+ | q3 : int(1..4)]),
+ and([q4 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, 2] ->
+ -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q4, 1]) <
+ -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q4, 2]))
+ | q4 : int(1..4)]),
+ and([q4 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, q6] = false ->
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q4, q6] = false
+ | q6 : int(1..2)])
+ | q4 : int(1..4)]),
+ and([q4 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, 2] ->
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, 1])
+ | q4 : int(1..4)])
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000007.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000008.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_3-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_3.eprime.orig b/tests/exhaustive/autogen/gen02/expected/model_2_3.eprime.orig
deleted file mode 100644
index 055cdc557c..0000000000
--- a/tests/exhaustive/autogen/gen02/expected/model_2_3.eprime.orig
+++ /dev/null
@@ -1,121 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_ExplicitVarSizeWithMarkerR4_Marker: int(0..4)
-find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithFlagsR5_Flags: matrix indexed by [int(1..4)] of bool
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-branching on
- [var2_ExplicitVarSizeWithFlagsR5_Flags, var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithMarkerR4_Marker,
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags,
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values]
-such that
- or([q49 <= var2_ExplicitVarSizeWithMarkerR4_Marker /\
- sum([toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q49, q50]) | q50 : int(1..2)])
- >= -7
- | q49 : int(1..4)]),
- and([q2 + 1 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- flatten([flatten([[-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q2, q10]);
- int(1)],
- [-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q2, q10]);
- int(1)];
- int(1..2)])
- | q10 : int(1..2)])
- var2_ExplicitVarSizeWithMarkerR4_Marker ->
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q3, q12] = false
- | q12 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q3, q13] = false
- | q13 : int(1..2)])
- | q3 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, 2] ->
- -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q4, 1]) <
- -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q4, 2]))
- | q4 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, q6] = false ->
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q4, q6] = false
- | q6 : int(1..2)])
- | q4 : int(1..4)]),
- and([q4 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, 2] ->
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, 1])
- | q4 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q14 + 1] ->
- flatten([[var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q14]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q14, q22])
- | q22 : int(1..2)];
- int(1..2)])
-
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q15] = 0 /\
- and([var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q15, q24] = false
- | q24 : int(1..2)])
- | q15 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q16 + 1] -> var2_ExplicitVarSizeWithFlagsR5_Flags[q16]
- | q16 : int(1..3)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q18] ->
- (2 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q18] ->
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q18, 1]) <
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q18, 2]))
- | q18 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q18] ->
- and([q20 > var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q18] ->
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q18, q20] = false
- | q20 : int(1..2)])
- | q18 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q26] ->
- or([q28 <= var2_ExplicitVarSizeWithMarkerR4_Marker /\
- (and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q28, q30] ->
- or([q32 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q26] /\
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q26, q32] =
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q28, q30]
- | q32 : int(1..2)])
- | q30 : int(1..2)])
- /\
- and([q34 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q26] ->
- or([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q28, q36] /\
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q28, q36] =
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q26, q34]
- | q36 : int(1..2)])
- | q34 : int(1..2)]))
- | q28 : int(1..4)])
- | q26 : int(1..4)]),
- and([q38 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- or([var2_ExplicitVarSizeWithFlagsR5_Flags[q40] /\
- (and([q42 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q40] ->
- or([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q38, q44] /\
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q38, q44] =
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q40, q42]
- | q44 : int(1..2)])
- | q42 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q38, q46] ->
- or([q48 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q40] /\
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q40, q48] =
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q38, q46]
- | q48 : int(1..2)])
- | q46 : int(1..2)]))
- | q40 : int(1..4)])
- | q38 : int(1..4)])
-
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000007.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000008.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_2_4.eprime b/tests/exhaustive/autogen/gen02/expected/model_2_4.eprime
new file mode 100644
index 0000000000..1c6891d59e
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_2_4.eprime
@@ -0,0 +1,121 @@
+language ESSENCE' 1.0
+
+find var2_ExplicitVarSizeWithMarkerR4_Marker: int(0..4)
+find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+find var2_ExplicitVarSizeWithFlagsR4_Flags: matrix indexed by [int(1..4)] of bool
+find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+branching on
+ [var2_ExplicitVarSizeWithFlagsR4_Flags, var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags,
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithMarkerR4_Marker,
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags,
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q44 <= var2_ExplicitVarSizeWithMarkerR4_Marker /\
+ sum([toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q44, q45]) | q45 : int(1..2)])
+ >= -7
+ | q44 : int(1..4)]),
+ and([q2 + 1 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ flatten([flatten([[-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q2, q10]);
+ int(1)],
+ [-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q2, q10]);
+ int(1)];
+ int(1..2)])
+ | q10 : int(1..2)])
+ var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q3, q12] = false
+ | q12 : int(1..2)])
+ /\
+ and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q3, q13] = false
+ | q13 : int(1..2)])
+ | q3 : int(1..4)]),
+ and([q4 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, 2] ->
+ -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q4, 1]) <
+ -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q4, 2]))
+ | q4 : int(1..4)]),
+ and([q4 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, q6] = false ->
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q4, q6] = false
+ | q6 : int(1..2)])
+ | q4 : int(1..4)]),
+ and([q4 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, 2] ->
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q4, 1])
+ | q4 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q14 + 1] ->
+ flatten([flatten([[-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q14, q24]);
+ int(1)],
+ [-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q14, q24]);
+ int(1)];
+ int(1..2)])
+ | q24 : int(1..2)])
+
+ and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q15, q26] = false
+ | q26 : int(1..2)])
+ /\
+ and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q15, q27] = false
+ | q27 : int(1..2)])
+ | q15 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q16 + 1] -> var2_ExplicitVarSizeWithFlagsR4_Flags[q16]
+ | q16 : int(1..3)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q18] ->
+ (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q18, 2] ->
+ -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q18, 1]) <
+ -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q18, 2]))
+ | q18 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q18] ->
+ and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q18, q20] = false ->
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q18, q20] = false
+ | q20 : int(1..2)])
+ | q18 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q18] ->
+ (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q18, 2] ->
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q18, 1])
+ | q18 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q29] ->
+ or([q31 <= var2_ExplicitVarSizeWithMarkerR4_Marker /\
+ (and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q31, q32] =
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q29, q32]
+ | q32 : int(1..2)])
+ /\
+ and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q31, q34] =
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q29, q34]
+ | q34 : int(1..2)]))
+ | q31 : int(1..4)])
+ | q29 : int(1..4)]),
+ and([q37 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ or([var2_ExplicitVarSizeWithFlagsR4_Flags[q39] /\
+ (and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q39, q40] =
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q37, q40]
+ | q40 : int(1..2)])
+ /\
+ and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q39, q42] =
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q37, q42]
+ | q42 : int(1..2)]))
+ | q39 : int(1..4)])
+ | q37 : int(1..4)])
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000007.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000008.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_1-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_1.eprime.orig b/tests/exhaustive/autogen/gen02/expected/model_3_1.eprime.orig
deleted file mode 100644
index d6d73bb27b..0000000000
--- a/tests/exhaustive/autogen/gen02/expected/model_3_1.eprime.orig
+++ /dev/null
@@ -1,96 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_ExplicitVarSizeWithFlagsR5_Flags: matrix indexed by [int(1..4)] of bool
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-branching on
- [var2_ExplicitVarSizeWithMarkerR5_Marker, var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithFlagsR5_Flags,
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- or([var2_ExplicitVarSizeWithFlagsR5_Flags[q34] /\
- sum([toInt(q35 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q34])
- | q35 : int(1..2)])
- >= -7
- | q34 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q2 + 1] ->
- flatten([[var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q2]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q2, q10])
- | q10 : int(1..2)];
- int(1..2)])
-
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q3] = 0 /\
- and([var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q3, q12] = false
- | q12 : int(1..2)])
- | q3 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q4 + 1] -> var2_ExplicitVarSizeWithFlagsR5_Flags[q4] | q4 : int(1..3)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q6] ->
- (2 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q6, 1]) <
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q6, 2]))
- | q6 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q6] ->
- and([q8 > var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q6, q8] = false
- | q8 : int(1..2)])
- | q6 : int(1..4)]),
- and([q13 + 1 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q13]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q13, q19])
- | q19 : int(1..2)];
- int(1..2)])
- var2_ExplicitVarSizeWithMarkerR5_Marker ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q14] = 0 /\
- and([var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q14, q21] = false
- | q21 : int(1..2)])
- | q14 : int(1..4)]),
- and([q15 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q15] ->
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q15, 1]) <
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q15, 2]))
- | q15 : int(1..4)]),
- and([q15 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q17 > var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q15] ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q15, q17] = false
- | q17 : int(1..2)])
- | q15 : int(1..4)]),
- and([q23 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- or([var2_ExplicitVarSizeWithFlagsR5_Flags[q25] /\
- (var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q25] =
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q23]
- /\
- and([var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q25, q26] =
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q23, q26]
- | q26 : int(1..2)]))
- | q25 : int(1..4)])
- | q23 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q29] ->
- or([q31 <= var2_ExplicitVarSizeWithMarkerR5_Marker /\
- (var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q31] =
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q29]
- /\
- and([var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q31, q32] =
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q29, q32]
- | q32 : int(1..2)]))
- | q31 : int(1..4)])
- | q29 : int(1..4)])
-
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000007.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000008.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_2-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_2.eprime.orig b/tests/exhaustive/autogen/gen02/expected/model_3_2.eprime.orig
deleted file mode 100644
index 8f85be80ea..0000000000
--- a/tests/exhaustive/autogen/gen02/expected/model_3_2.eprime.orig
+++ /dev/null
@@ -1,122 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_ExplicitVarSizeWithFlagsR5_Flags: matrix indexed by [int(1..4)] of bool
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithMarkerR4_Marker: int(0..4)
-find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-branching on
- [var2_ExplicitVarSizeWithMarkerR4_Marker, var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags,
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithFlagsR5_Flags,
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- or([var2_ExplicitVarSizeWithFlagsR5_Flags[q49] /\
- sum([toInt(q50 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q49])
- | q50 : int(1..2)])
- >= -7
- | q49 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q2 + 1] ->
- flatten([[var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q2]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q2, q10])
- | q10 : int(1..2)];
- int(1..2)])
-
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q3] = 0 /\
- and([var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q3, q12] = false
- | q12 : int(1..2)])
- | q3 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q4 + 1] -> var2_ExplicitVarSizeWithFlagsR5_Flags[q4] | q4 : int(1..3)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q6] ->
- (2 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q6, 1]) <
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q6, 2]))
- | q6 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q6] ->
- and([q8 > var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q6, q8] = false
- | q8 : int(1..2)])
- | q6 : int(1..4)]),
- and([q13 + 1 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- flatten([flatten([[-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q13, q21]);
- int(1)],
- [-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q13, q21]);
- int(1)];
- int(1..2)])
- | q21 : int(1..2)])
- var2_ExplicitVarSizeWithMarkerR4_Marker ->
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q14, q23] = false
- | q23 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q14, q24] = false
- | q24 : int(1..2)])
- | q14 : int(1..4)]),
- and([q15 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q15, 2] ->
- -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q15, 1]) <
- -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q15, 2]))
- | q15 : int(1..4)]),
- and([q15 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q15, q17] = false ->
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q15, q17] = false
- | q17 : int(1..2)])
- | q15 : int(1..4)]),
- and([q15 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q15, 2] ->
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q15, 1])
- | q15 : int(1..4)]),
- and([q26 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
- or([var2_ExplicitVarSizeWithFlagsR5_Flags[q28] /\
- (and([q30 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q28] ->
- or([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q26, q32] /\
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q26, q32] =
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q28, q30]
- | q32 : int(1..2)])
- | q30 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q26, q34] ->
- or([q36 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q28] /\
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q28, q36] =
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q26, q34]
- | q36 : int(1..2)])
- | q34 : int(1..2)]))
- | q28 : int(1..4)])
- | q26 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q38] ->
- or([q40 <= var2_ExplicitVarSizeWithMarkerR4_Marker /\
- (and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q40, q42] ->
- or([q44 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q38] /\
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q38, q44] =
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q40, q42]
- | q44 : int(1..2)])
- | q42 : int(1..2)])
- /\
- and([q46 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q38] ->
- or([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q40, q48] /\
- var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q40, q48] =
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q38, q46]
- | q48 : int(1..2)])
- | q46 : int(1..2)]))
- | q40 : int(1..4)])
- | q38 : int(1..4)])
-
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000007.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000008.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_3-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_3.eprime.orig b/tests/exhaustive/autogen/gen02/expected/model_3_3.eprime.orig
deleted file mode 100644
index d983f1c128..0000000000
--- a/tests/exhaustive/autogen/gen02/expected/model_3_3.eprime.orig
+++ /dev/null
@@ -1,43 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_ExplicitVarSizeWithFlagsR5_Flags: matrix indexed by [int(1..4)] of bool
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-branching on
- [var2_ExplicitVarSizeWithFlagsR5_Flags, var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- or([var2_ExplicitVarSizeWithFlagsR5_Flags[q13] /\
- sum([toInt(q14 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q13])
- | q14 : int(1..2)])
- >= -7
- | q13 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q2 + 1] ->
- flatten([[var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q2]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q2, q10])
- | q10 : int(1..2)];
- int(1..2)])
-
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q3] = 0 /\
- and([var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q3, q12] = false
- | q12 : int(1..2)])
- | q3 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q4 + 1] -> var2_ExplicitVarSizeWithFlagsR5_Flags[q4] | q4 : int(1..3)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q6] ->
- (2 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q6, 1]) <
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q6, 2]))
- | q6 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q6] ->
- and([q8 > var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q6, q8] = false
- | q8 : int(1..2)])
- | q6 : int(1..4)])
-
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000007.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000008.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_3_4-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_3_4.eprime.orig b/tests/exhaustive/autogen/gen02/expected/model_3_4.eprime.orig
deleted file mode 100644
index cb59ea7091..0000000000
--- a/tests/exhaustive/autogen/gen02/expected/model_3_4.eprime.orig
+++ /dev/null
@@ -1,123 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_ExplicitVarSizeWithFlagsR5_Flags: matrix indexed by [int(1..4)] of bool
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithFlagsR4_Flags: matrix indexed by [int(1..4)] of bool
-find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-branching on
- [var2_ExplicitVarSizeWithFlagsR4_Flags, var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags,
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithFlagsR5_Flags,
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- or([var2_ExplicitVarSizeWithFlagsR5_Flags[q51] /\
- sum([toInt(q52 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q51])
- | q52 : int(1..2)])
- >= -7
- | q51 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q2 + 1] ->
- flatten([[var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q2]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q2, q10])
- | q10 : int(1..2)];
- int(1..2)])
-
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q3] = 0 /\
- and([var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q3, q12] = false
- | q12 : int(1..2)])
- | q3 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q4 + 1] -> var2_ExplicitVarSizeWithFlagsR5_Flags[q4] | q4 : int(1..3)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q6] ->
- (2 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q6, 1]) <
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q6, 2]))
- | q6 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q6] ->
- and([q8 > var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q6, q8] = false
- | q8 : int(1..2)])
- | q6 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q13 + 1] ->
- flatten([flatten([[-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q13, q23]);
- int(1)],
- [-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q13, q23]);
- int(1)];
- int(1..2)])
- | q23 : int(1..2)])
-
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q14, q25] = false
- | q25 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q14, q26] = false
- | q26 : int(1..2)])
- | q14 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q15 + 1] -> var2_ExplicitVarSizeWithFlagsR4_Flags[q15]
- | q15 : int(1..3)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q17] ->
- (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q17, 2] ->
- -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q17, 1]) <
- -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q17, 2]))
- | q17 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q17] ->
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q17, q19] = false ->
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q17, q19] = false
- | q19 : int(1..2)])
- | q17 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q17] ->
- (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q17, 2] ->
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q17, 1])
- | q17 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q28] ->
- or([var2_ExplicitVarSizeWithFlagsR5_Flags[q30] /\
- (and([q32 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q30] ->
- or([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q28, q34] /\
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q28, q34] =
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q30, q32]
- | q34 : int(1..2)])
- | q32 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q28, q36] ->
- or([q38 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q30] /\
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q30, q38] =
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q28, q36]
- | q38 : int(1..2)])
- | q36 : int(1..2)]))
- | q30 : int(1..4)])
- | q28 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q40] ->
- or([var2_ExplicitVarSizeWithFlagsR4_Flags[q42] /\
- (and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q42, q44] ->
- or([q46 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q40] /\
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q40, q46] =
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q42, q44]
- | q46 : int(1..2)])
- | q44 : int(1..2)])
- /\
- and([q48 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q40] ->
- or([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q42, q50] /\
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q42, q50] =
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q40, q48]
- | q50 : int(1..2)])
- | q48 : int(1..2)]))
- | q42 : int(1..4)])
- | q40 : int(1..4)])
-
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000007.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000008.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_1-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_1.eprime.orig b/tests/exhaustive/autogen/gen02/expected/model_4_1.eprime.orig
deleted file mode 100644
index 5952bfe7b5..0000000000
--- a/tests/exhaustive/autogen/gen02/expected/model_4_1.eprime.orig
+++ /dev/null
@@ -1,119 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_ExplicitVarSizeWithFlagsR4_Flags: matrix indexed by [int(1..4)] of bool
-find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-branching on
- [var2_ExplicitVarSizeWithMarkerR5_Marker, var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithFlagsR4_Flags,
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags,
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values]
-such that
- or([var2_ExplicitVarSizeWithFlagsR4_Flags[q49] /\
- sum([toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q49, q50]) | q50 : int(1..2)])
- >= -7
- | q49 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q2 + 1] ->
- flatten([flatten([[-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q2, q12]);
- int(1)],
- [-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q2, q12]);
- int(1)];
- int(1..2)])
- | q12 : int(1..2)])
-
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q3, q14] = false | q14 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q3, q15] = false
- | q15 : int(1..2)])
- | q3 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q4 + 1] -> var2_ExplicitVarSizeWithFlagsR4_Flags[q4] | q4 : int(1..3)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q6] ->
- (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, 2] ->
- -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q6, 1]) <
- -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q6, 2]))
- | q6 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q6] ->
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, q8] = false ->
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q6, q8] = false
- | q8 : int(1..2)])
- | q6 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q6] ->
- (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, 2] ->
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, 1])
- | q6 : int(1..4)]),
- and([q16 + 1 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q16]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q16, q22])
- | q22 : int(1..2)];
- int(1..2)])
- var2_ExplicitVarSizeWithMarkerR5_Marker ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q17] = 0 /\
- and([var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q17, q24] = false
- | q24 : int(1..2)])
- | q17 : int(1..4)]),
- and([q18 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q18] ->
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q18, 1]) <
- -toInt(var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q18, 2]))
- | q18 : int(1..4)]),
- and([q18 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q20 > var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q18] ->
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q18, q20] = false
- | q20 : int(1..2)])
- | q18 : int(1..4)]),
- and([q26 <= var2_ExplicitVarSizeWithMarkerR5_Marker ->
- or([var2_ExplicitVarSizeWithFlagsR4_Flags[q28] /\
- (and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q28, q30] ->
- or([q32 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q26] /\
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q26, q32] =
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q28, q30]
- | q32 : int(1..2)])
- | q30 : int(1..2)])
- /\
- and([q34 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q26] ->
- or([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q28, q36] /\
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q28, q36] =
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q26, q34]
- | q36 : int(1..2)])
- | q34 : int(1..2)]))
- | q28 : int(1..4)])
- | q26 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q38] ->
- or([q40 <= var2_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q42 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q40] ->
- or([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q38, q44] /\
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q38, q44] =
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q40, q42]
- | q44 : int(1..2)])
- | q42 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q38, q46] ->
- or([q48 <= var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q40] /\
- var2_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q40, q48] =
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q38, q46]
- | q48 : int(1..2)])
- | q46 : int(1..2)]))
- | q40 : int(1..4)])
- | q38 : int(1..4)])
-
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000007.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000008.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_2.eprime b/tests/exhaustive/autogen/gen02/expected/model_4_2.eprime
new file mode 100644
index 0000000000..c50ffb2189
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_2.eprime
@@ -0,0 +1,119 @@
+language ESSENCE' 1.0
+
+find var2_ExplicitVarSizeWithFlagsR4_Flags: matrix indexed by [int(1..4)] of bool
+find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+find var2_ExplicitVarSizeWithMarkerR4_Marker: int(0..4)
+find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+find var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+branching on
+ [var2_ExplicitVarSizeWithMarkerR4_Marker, var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags,
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithFlagsR4_Flags,
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags,
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_ExplicitVarSizeWithFlagsR4_Flags[q44] /\
+ sum([toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q44, q45]) | q45 : int(1..2)])
+ >= -7
+ | q44 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q2 + 1] ->
+ flatten([flatten([[-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q2, q12]);
+ int(1)],
+ [-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q2, q12]);
+ int(1)];
+ int(1..2)])
+ | q12 : int(1..2)])
+
+ and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q3, q14] = false | q14 : int(1..2)])
+ /\
+ and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q3, q15] = false
+ | q15 : int(1..2)])
+ | q3 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q4 + 1] -> var2_ExplicitVarSizeWithFlagsR4_Flags[q4] | q4 : int(1..3)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q6] ->
+ (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, 2] ->
+ -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q6, 1]) <
+ -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q6, 2]))
+ | q6 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q6] ->
+ and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, q8] = false ->
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q6, q8] = false
+ | q8 : int(1..2)])
+ | q6 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q6] ->
+ (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, 2] ->
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, 1])
+ | q6 : int(1..4)]),
+ and([q16 + 1 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ flatten([flatten([[-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q16, q24]);
+ int(1)],
+ [-toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q16, q24]);
+ int(1)];
+ int(1..2)])
+ | q24 : int(1..2)])
+ var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q17, q26] = false
+ | q26 : int(1..2)])
+ /\
+ and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q17, q27] = false
+ | q27 : int(1..2)])
+ | q17 : int(1..4)]),
+ and([q18 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q18, 2] ->
+ -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q18, 1]) <
+ -toInt(var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q18, 2]))
+ | q18 : int(1..4)]),
+ and([q18 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q18, q20] = false ->
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q18, q20] = false
+ | q20 : int(1..2)])
+ | q18 : int(1..4)]),
+ and([q18 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ (var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q18, 2] ->
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q18, 1])
+ | q18 : int(1..4)]),
+ and([q29 <= var2_ExplicitVarSizeWithMarkerR4_Marker ->
+ or([var2_ExplicitVarSizeWithFlagsR4_Flags[q31] /\
+ (and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q31, q32] =
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q29, q32]
+ | q32 : int(1..2)])
+ /\
+ and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q31, q34] =
+ var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q29, q34]
+ | q34 : int(1..2)]))
+ | q31 : int(1..4)])
+ | q29 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q37] ->
+ or([q39 <= var2_ExplicitVarSizeWithMarkerR4_Marker /\
+ (and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q39, q40] =
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q37, q40]
+ | q40 : int(1..2)])
+ /\
+ and([var2_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q39, q42] =
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q37, q42]
+ | q42 : int(1..2)]))
+ | q39 : int(1..4)])
+ | q37 : int(1..4)])
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000007.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000008.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_3-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_3.eprime.orig b/tests/exhaustive/autogen/gen02/expected/model_4_3.eprime.orig
deleted file mode 100644
index 8f90ca4866..0000000000
--- a/tests/exhaustive/autogen/gen02/expected/model_4_3.eprime.orig
+++ /dev/null
@@ -1,120 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_ExplicitVarSizeWithFlagsR4_Flags: matrix indexed by [int(1..4)] of bool
-find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-find var2_ExplicitVarSizeWithFlagsR5_Flags: matrix indexed by [int(1..4)] of bool
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)
-find var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of bool
-branching on
- [var2_ExplicitVarSizeWithFlagsR5_Flags, var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker,
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithFlagsR4_Flags,
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags,
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values]
-such that
- or([var2_ExplicitVarSizeWithFlagsR4_Flags[q51] /\
- sum([toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q51, q52]) | q52 : int(1..2)])
- >= -7
- | q51 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q2 + 1] ->
- flatten([flatten([[-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q2, q12]);
- int(1)],
- [-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q2, q12]);
- int(1)];
- int(1..2)])
- | q12 : int(1..2)])
-
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q3, q14] = false | q14 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q3, q15] = false
- | q15 : int(1..2)])
- | q3 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q4 + 1] -> var2_ExplicitVarSizeWithFlagsR4_Flags[q4] | q4 : int(1..3)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q6] ->
- (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, 2] ->
- -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q6, 1]) <
- -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q6, 2]))
- | q6 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q6] ->
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, q8] = false ->
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q6, q8] = false
- | q8 : int(1..2)])
- | q6 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q6] ->
- (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, 2] ->
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, 1])
- | q6 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q16 + 1] ->
- flatten([[var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q16]; int(1)],
- [-toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q16, q24])
- | q24 : int(1..2)];
- int(1..2)])
-
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q17] = 0 /\
- and([var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q17, q26] = false
- | q26 : int(1..2)])
- | q17 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q18 + 1] -> var2_ExplicitVarSizeWithFlagsR5_Flags[q18]
- | q18 : int(1..3)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q20] ->
- (2 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q20] ->
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q20, 1]) <
- -toInt(var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q20, 2]))
- | q20 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q20] ->
- and([q22 > var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q20] ->
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q20, q22] = false
- | q22 : int(1..2)])
- | q20 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR5_Flags[q28] ->
- or([var2_ExplicitVarSizeWithFlagsR4_Flags[q30] /\
- (and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q30, q32] ->
- or([q34 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q28] /\
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q28, q34] =
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q30, q32]
- | q34 : int(1..2)])
- | q32 : int(1..2)])
- /\
- and([q36 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q28] ->
- or([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q30, q38] /\
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q30, q38] =
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q28, q36]
- | q38 : int(1..2)])
- | q36 : int(1..2)]))
- | q30 : int(1..4)])
- | q28 : int(1..4)]),
- and([var2_ExplicitVarSizeWithFlagsR4_Flags[q40] ->
- or([var2_ExplicitVarSizeWithFlagsR5_Flags[q42] /\
- (and([q44 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q42] ->
- or([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q40, q46] /\
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q40, q46] =
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q42, q44]
- | q46 : int(1..2)])
- | q44 : int(1..2)])
- /\
- and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q40, q48] ->
- or([q50 <= var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q42] /\
- var2_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q42, q50] =
- var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q40, q48]
- | q50 : int(1..2)])
- | q48 : int(1..2)]))
- | q42 : int(1..4)])
- | q40 : int(1..4)])
-
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000001.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000001.solution
new file mode 100644
index 0000000000..19d999ca82
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var2 be {{}}
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000002.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000002.solution
new file mode 100644
index 0000000000..937293310f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false}}
+$ Visualisation for var2
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000003.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000003.solution
new file mode 100644
index 0000000000..5a187652fa
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{true}}
+$ Visualisation for var2
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000004.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000004.solution
new file mode 100644
index 0000000000..0678d41bf8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var2 be {{false, true}}
+$ Visualisation for var2
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000005.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000005.solution
new file mode 100644
index 0000000000..73f1bfe1ac
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}}
+$ Visualisation for var2
+$
+$ _
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000006.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000006.solution
new file mode 100644
index 0000000000..d4c4a238b9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {true}}
+$ Visualisation for var2
+$
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000007.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000007.solution
new file mode 100644
index 0000000000..2b6a8959da
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {true}}
+$ Visualisation for var2
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000008.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000008.solution
new file mode 100644
index 0000000000..9c15a8e4e1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}}
+$ Visualisation for var2
+$
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000009.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000009.solution
new file mode 100644
index 0000000000..b2e98e56a6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}}
+$ Visualisation for var2
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000010.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000010.solution
new file mode 100644
index 0000000000..4fc309134f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var2 be {{false, true}, {true}}
+$ Visualisation for var2
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000011.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000011.solution
new file mode 100644
index 0000000000..70d0f91f38
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000011.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000012.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000012.solution
new file mode 100644
index 0000000000..ebc3fe4182
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000013.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000013.solution
new file mode 100644
index 0000000000..fa4340a533
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000014.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000014.solution
new file mode 100644
index 0000000000..371f28aab7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting var2 be {{false}, {false, true}, {true}}
+$ Visualisation for var2
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000015.solution b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000015.solution
new file mode 100644
index 0000000000..35cfa328e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4-solution000015.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting var2 be {{}, {false}, {false, true}, {true}}
+$ Visualisation for var2
+$
+$ _
+$ _ T
+$ T
+
diff --git a/tests/exhaustive/autogen/gen02/expected/model_4_4.eprime b/tests/exhaustive/autogen/gen02/expected/model_4_4.eprime
new file mode 100644
index 0000000000..e694258b7c
--- /dev/null
+++ b/tests/exhaustive/autogen/gen02/expected/model_4_4.eprime
@@ -0,0 +1,52 @@
+language ESSENCE' 1.0
+
+find var2_ExplicitVarSizeWithFlagsR4_Flags: matrix indexed by [int(1..4)] of bool
+find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+find var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+branching on
+ [var2_ExplicitVarSizeWithFlagsR4_Flags, var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags,
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_ExplicitVarSizeWithFlagsR4_Flags[q16] /\
+ sum([toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q16, q17]) | q17 : int(1..2)])
+ >= -7
+ | q16 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q2 + 1] ->
+ flatten([flatten([[-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q2, q12]);
+ int(1)],
+ [-toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q2, q12]);
+ int(1)];
+ int(1..2)])
+ | q12 : int(1..2)])
+
+ and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q3, q14] = false | q14 : int(1..2)])
+ /\
+ and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q3, q15] = false
+ | q15 : int(1..2)])
+ | q3 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q4 + 1] -> var2_ExplicitVarSizeWithFlagsR4_Flags[q4] | q4 : int(1..3)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q6] ->
+ (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, 2] ->
+ -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q6, 1]) <
+ -toInt(var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q6, 2]))
+ | q6 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q6] ->
+ and([var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, q8] = false ->
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q6, q8] = false
+ | q8 : int(1..2)])
+ | q6 : int(1..4)]),
+ and([var2_ExplicitVarSizeWithFlagsR4_Flags[q6] ->
+ (var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, 2] ->
+ var2_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q6, 1])
+ | q6 : int(1..4)])
+
diff --git a/tests/exhaustive/autogen/gen14_1/expected/model_1-solution000001.solution b/tests/exhaustive/autogen/gen14_1/expected/model_1-solution000001.solution
new file mode 100644
index 0000000000..dc001498cc
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_1/expected/model_1-solution000001.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var1 be partition({1, 2})
+$ Visualisation for var1
+$ 1 2
+
diff --git a/tests/exhaustive/autogen/gen14_1/expected/model_1-solution000002.solution b/tests/exhaustive/autogen/gen14_1/expected/model_1-solution000002.solution
new file mode 100644
index 0000000000..d53bf91bd1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_1/expected/model_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var1 be partition({1}, {2})
+$ Visualisation for var1
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/autogen/gen14_1/expected/model_1.eprime.orig b/tests/exhaustive/autogen/gen14_1/expected/model_1.eprime.orig
deleted file mode 100644
index fcfc0075cb..0000000000
--- a/tests/exhaustive/autogen/gen14_1/expected/model_1.eprime.orig
+++ /dev/null
@@ -1,104 +0,0 @@
-language ESSENCE' 1.0
-
-find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker: int(0..2)
-find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-branching on
- [var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence]
-such that
- !(and([q43 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- or([q47 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- (and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q47, q36] ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q43, q36]
- | q36 : int(1..2)])
- /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q43, q37] ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q47, q37]
- | q37 : int(1..2)]))
- | q47 : int(1..2)])
- | q43 : int(1..2)])
- /\
- and([q49 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- or([q45 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- (and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q45, q40] ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q49, q40]
- | q40 : int(1..2)])
- /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q49, q41] ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q45, q41]
- | q41 : int(1..2)]))
- | q45 : int(1..2)])
- | q49 : int(1..2)]))
- \/
- !(and([q30 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q30, 1] /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q30, q22] -> 1 = q22
- | q22 : int(1..2)])
- | q30 : int(1..2)])
- /\
- or([q32 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- (and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q32, q26] -> 1 = q26
- | q26 : int(1..2)])
- /\ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q32, 1])
- | q32 : int(1..2)]))
- \/
- !(and([q70 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- or([q74 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- (and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q74, q63] ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q70, q63]
- | q63 : int(1..2)])
- /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q70, q64] ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q74, q64]
- | q64 : int(1..2)]))
- | q74 : int(1..2)])
- | q70 : int(1..2)])
- /\
- and([q76 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- or([q72 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- (and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q72, q67] ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q76, q67]
- | q67 : int(1..2)])
- /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q76, q68] ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q72, q68]
- | q68 : int(1..2)]))
- | q72 : int(1..2)])
- | q76 : int(1..2)])
- \/
- or([q78 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- (and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q78, q53] -> 1 = q53
- | q53 : int(1..2)])
- /\ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q78, 1])
- | q78 : int(1..2)])
- /\
- and([q80 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q80, 1] /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q80, q59] -> 1 = q59
- | q59 : int(1..2)])
- | q80 : int(1..2)])),
- and([1 =
- sum([toInt(q14 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q14, q1])
- | q14 : int(1..2)])
- | q1 : int(1..2)]),
- and([q15 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- sum([toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q15, q16]) | q16 : int(1..2)]) >=
- 1 | q15 : int(1..2)]),
- 2 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- [-toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[1, q9]) | q9 : int(1..2)] var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q5, q11] = false | q11 : int(1..2)])
- | q5 : int(1..2)]),
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker <= 2,
- and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- sum([toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q6, q7]) | q7 : int(1..2)]) <= 2
- | q6 : int(1..2)]),
- 2 =
- sum([toInt(q12 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker) *
- catchUndef(sum([toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q12, q13])
- | q13 : int(1..2)]),
- 0)
- | q12 : int(1..2)])
-
diff --git a/tests/exhaustive/autogen/gen14_1/expected/model_2-solution000001.solution b/tests/exhaustive/autogen/gen14_1/expected/model_2-solution000001.solution
new file mode 100644
index 0000000000..dc001498cc
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_1/expected/model_2-solution000001.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var1 be partition({1, 2})
+$ Visualisation for var1
+$ 1 2
+
diff --git a/tests/exhaustive/autogen/gen14_1/expected/model_2-solution000002.solution b/tests/exhaustive/autogen/gen14_1/expected/model_2-solution000002.solution
new file mode 100644
index 0000000000..d53bf91bd1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_1/expected/model_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var1 be partition({1}, {2})
+$ Visualisation for var1
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/autogen/gen14_1/expected/model_2.eprime.orig b/tests/exhaustive/autogen/gen14_1/expected/model_2.eprime.orig
deleted file mode 100644
index 357f1abe59..0000000000
--- a/tests/exhaustive/autogen/gen14_1/expected/model_2.eprime.orig
+++ /dev/null
@@ -1,174 +0,0 @@
-language ESSENCE' 1.0
-
-find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker: int(0..2)
-find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..2), int(1..2)] of int(1..3)
-branching on
- [var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy]
-such that
- !(and([q55 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- or([q65 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- (and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q65, q66] != 3 ->
- or([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q55, q58] != 3
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q55, q58] =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q65, q66]
- | q58 : int(1..2)])
- | q66 : int(1..2)])
- /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q55, q56] != 3 ->
- or([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q65, q68] != 3
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q65, q68] =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q55, q56]
- | q68 : int(1..2)])
- | q56 : int(1..2)]))
- | q65 : int(1..2)])
- | q55 : int(1..2)])
- /\
- and([q70 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- or([q60 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- (and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q60, q61] != 3 ->
- or([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q70, q73] != 3
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q70, q73] =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q60, q61]
- | q73 : int(1..2)])
- | q61 : int(1..2)])
- /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q70, q71] != 3 ->
- or([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q60, q63] != 3
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q60, q63] =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q70, q71]
- | q63 : int(1..2)])
- | q71 : int(1..2)]))
- | q60 : int(1..2)])
- | q70 : int(1..2)]))
- \/
- !(and([q36 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- or([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q36, q39] != 3 /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q36, q39] = 1
- | q39 : int(1..2)])
- /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q36, q37] != 3 ->
- 1 = var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q36, q37]
- | q37 : int(1..2)])
- | q36 : int(1..2)])
- /\
- or([q41 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- (and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q41, q42] != 3 ->
- 1 = var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q41, q42]
- | q42 : int(1..2)])
- /\
- or([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q41, q44] != 3 /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q41, q44] = 1
- | q44 : int(1..2)]))
- | q41 : int(1..2)]))
- \/
- !(and([q94 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- or([q104 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- (and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q104, q105] != 3 ->
- or([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q94, q97] != 3
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q94, q97] =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q104, q105]
- | q97 : int(1..2)])
- | q105 : int(1..2)])
- /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q94, q95] != 3 ->
- or([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q104, q107] !=
- 3
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q104, q107] =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q94, q95]
- | q107 : int(1..2)])
- | q95 : int(1..2)]))
- | q104 : int(1..2)])
- | q94 : int(1..2)])
- /\
- and([q109 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- or([q99 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- (and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q99, q100] != 3 ->
- or([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q109, q112] !=
- 3
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q109, q112] =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q99, q100]
- | q112 : int(1..2)])
- | q100 : int(1..2)])
- /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q109, q110] != 3 ->
- or([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q99, q102] != 3
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q99, q102] =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q109, q110]
- | q102 : int(1..2)])
- | q110 : int(1..2)]))
- | q99 : int(1..2)])
- | q109 : int(1..2)])
- \/
- or([q114 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- (and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q114, q115] != 3 ->
- 1 = var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q114, q115]
- | q115 : int(1..2)])
- /\
- or([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q114, q117] != 3 /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q114, q117] = 1
- | q117 : int(1..2)]))
- | q114 : int(1..2)])
- /\
- and([q119 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- or([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q119, q122] != 3 /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q119, q122] = 1
- | q122 : int(1..2)])
- /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q119, q120] != 3 ->
- 1 = var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q119, q120]
- | q120 : int(1..2)])
- | q119 : int(1..2)])),
- alldifferent_except([toInt(q18 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q18, q19]
- != 3)
- *
- catchUndef(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy
- [q18, q19],
- 0)
- | q18 : int(1..2), q19 : int(1..2)],
- 0),
- and([q20 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- sum([toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q20, q22] != 3)
- | q22 : int(1..2)])
- >= 1
- | q20 : int(1..2)]),
- 2 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- [var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[1, q12] | q12 : int(1..2)] var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q5, q17] = 1
- | q17 : int(1..2)])
- | q5 : int(1..2)]),
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker <= 2,
- and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, 1] <
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, 2]
- \/ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, 1] = 3
- | q6 : int(1..2)]),
- and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- (var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, 1] = 3 ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, 2] = 3)
- | q6 : int(1..2)]),
- and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- sum([toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q9] != 3)
- | q9 : int(1..2)])
- <= 2
- | q6 : int(1..2)]),
- 2 =
- sum([toInt(q14 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker) *
- catchUndef(sum([toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q14, q16]
- != 3)
- | q16 : int(1..2)]),
- 0)
- | q14 : int(1..2)])
-
diff --git a/tests/exhaustive/autogen/gen14_1/expected/model_3-solution000001.solution b/tests/exhaustive/autogen/gen14_1/expected/model_3-solution000001.solution
new file mode 100644
index 0000000000..dc001498cc
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_1/expected/model_3-solution000001.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var1 be partition({1, 2})
+$ Visualisation for var1
+$ 1 2
+
diff --git a/tests/exhaustive/autogen/gen14_1/expected/model_3-solution000002.solution b/tests/exhaustive/autogen/gen14_1/expected/model_3-solution000002.solution
new file mode 100644
index 0000000000..d53bf91bd1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_1/expected/model_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var1 be partition({1}, {2})
+$ Visualisation for var1
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/autogen/gen14_1/expected/model_3.eprime.orig b/tests/exhaustive/autogen/gen14_1/expected/model_3.eprime.orig
deleted file mode 100644
index 730eb14fca..0000000000
--- a/tests/exhaustive/autogen/gen14_1/expected/model_3.eprime.orig
+++ /dev/null
@@ -1,220 +0,0 @@
-language ESSENCE' 1.0
-
-find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker: int(0..2)
-find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..2)] of int(0..2)
-find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..2), int(1..2)] of int(1..2)
-branching on
- [var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- !(and([q50 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q60 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q61 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q60]
- ->
- or([q53 <=
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q50]
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q50, q53]
- =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q60, q61]
- | q53 : int(1..2)])
- | q61 : int(1..2)])
- /\
- and([q51 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q50]
- ->
- or([q63 <=
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q60]
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q60, q63]
- =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q50, q51]
- | q63 : int(1..2)])
- | q51 : int(1..2)]))
- | q60 : int(1..2)])
- | q50 : int(1..2)])
- /\
- and([q65 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q55 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q56 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q55]
- ->
- or([q68 <=
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q65]
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q65, q68]
- =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q55, q56]
- | q68 : int(1..2)])
- | q56 : int(1..2)])
- /\
- and([q66 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q65]
- ->
- or([q58 <=
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q55]
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q55, q58]
- =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q65, q66]
- | q58 : int(1..2)])
- | q66 : int(1..2)]))
- | q55 : int(1..2)])
- | q65 : int(1..2)]))
- \/
- !(and([q31 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q34 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q31] /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q31, q34] = 1
- | q34 : int(1..2)])
- /\
- and([q32 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q31] ->
- 1 = var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q31, q32]
- | q32 : int(1..2)])
- | q31 : int(1..2)])
- /\
- or([q36 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q37 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q36] ->
- 1 = var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q36, q37]
- | q37 : int(1..2)])
- /\
- or([q39 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q36] /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q36, q39] = 1
- | q39 : int(1..2)]))
- | q36 : int(1..2)]))
- \/
- !(and([q89 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q99 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q100 <=
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q99]
- ->
- or([q92 <=
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q89]
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q89, q92]
- =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q99, q100]
- | q92 : int(1..2)])
- | q100 : int(1..2)])
- /\
- and([q90 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q89]
- ->
- or([q102 <=
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q99]
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q99, q102]
- =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q89, q90]
- | q102 : int(1..2)])
- | q90 : int(1..2)]))
- | q99 : int(1..2)])
- | q89 : int(1..2)])
- /\
- and([q104 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q94 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q95 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q94]
- ->
- or([q107 <=
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q104]
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q104, q107]
- =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q94, q95]
- | q107 : int(1..2)])
- | q95 : int(1..2)])
- /\
- and([q105 <=
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q104]
- ->
- or([q97 <=
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q94]
- /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q94, q97]
- =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q104, q105]
- | q97 : int(1..2)])
- | q105 : int(1..2)]))
- | q94 : int(1..2)])
- | q104 : int(1..2)])
- \/
- or([q109 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q110 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q109] ->
- 1 = var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q109, q110]
- | q110 : int(1..2)])
- /\
- or([q112 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q109] /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q109, q112] = 1
- | q112 : int(1..2)]))
- | q109 : int(1..2)])
- /\
- and([q114 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q117 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q114] /\
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q114, q117] = 1
- | q117 : int(1..2)])
- /\
- and([q115 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q114] ->
- 1 = var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q114, q115]
- | q115 : int(1..2)])
- | q114 : int(1..2)])),
- alldifferent_except([toInt(q15 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q16 <=
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker
- [q15])
- *
- catchUndef(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q15, q16],
- 0)
- | q15 : int(1..2), q16 : int(1..2)],
- 0),
- and([q17 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q17] >= 1
- | q17 : int(1..2)]),
- 2 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[1, q11]
- | q11 : int(1..2)];
- int(1..2)])
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q5] = 0 /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q5, q14] = 1
- | q14 : int(1..2)])
- | q5 : int(1..2)]),
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker <= 2,
- and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, 1] <
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, 2])
- | q6 : int(1..2)]),
- and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q8 > var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q8] = 1
- | q8 : int(1..2)])
- | q6 : int(1..2)]),
- and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] <= 2
- | q6 : int(1..2)]),
- 2 =
- sum([toInt(q13 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker) *
- catchUndef(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q13], 0)
- | q13 : int(1..2)])
-
diff --git a/tests/exhaustive/autogen/gen14_1/expected/model_4-solution000001.solution b/tests/exhaustive/autogen/gen14_1/expected/model_4-solution000001.solution
new file mode 100644
index 0000000000..dc001498cc
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_1/expected/model_4-solution000001.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var1 be partition({1, 2})
+$ Visualisation for var1
+$ 1 2
+
diff --git a/tests/exhaustive/autogen/gen14_1/expected/model_4-solution000002.solution b/tests/exhaustive/autogen/gen14_1/expected/model_4-solution000002.solution
new file mode 100644
index 0000000000..d53bf91bd1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_1/expected/model_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var1 be partition({1}, {2})
+$ Visualisation for var1
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/autogen/gen14_1/expected/model_4.eprime.orig b/tests/exhaustive/autogen/gen14_1/expected/model_4.eprime.orig
deleted file mode 100644
index cf8cf69ad9..0000000000
--- a/tests/exhaustive/autogen/gen14_1/expected/model_4.eprime.orig
+++ /dev/null
@@ -1,97 +0,0 @@
-language ESSENCE' 1.0
-
-find var1_PartitionOccurrence_NumParts: int(1..2)
-find var1_PartitionOccurrence_WhichPart: matrix indexed by [int(1..2)] of int(1..2)
-find var1_PartitionOccurrence_PartSizes: matrix indexed by [int(1..2)] of int(0..2)
-find var1_PartitionOccurrence_FirstIndex: matrix indexed by [int(1..2)] of int(1..2)
-branching on
- [var1_PartitionOccurrence_NumParts, var1_PartitionOccurrence_WhichPart, var1_PartitionOccurrence_PartSizes,
- var1_PartitionOccurrence_FirstIndex]
-such that
- !(and([q42 <= var1_PartitionOccurrence_NumParts ->
- or([q52 <= var1_PartitionOccurrence_NumParts /\
- (and([var1_PartitionOccurrence_WhichPart[q54] = q52 ->
- or([var1_PartitionOccurrence_WhichPart[q45] = q42 /\ q45 = q54 | q45 : int(1..2)])
- | q54 : int(1..2)])
- /\
- and([var1_PartitionOccurrence_WhichPart[q46] = q42 ->
- or([var1_PartitionOccurrence_WhichPart[q56] = q52 /\ q56 = q46 | q56 : int(1..2)])
- | q46 : int(1..2)]))
- | q52 : int(1..2)])
- | q42 : int(1..2)])
- /\
- and([q57 <= var1_PartitionOccurrence_NumParts ->
- or([q47 <= var1_PartitionOccurrence_NumParts /\
- (and([var1_PartitionOccurrence_WhichPart[q49] = q47 ->
- or([var1_PartitionOccurrence_WhichPart[q60] = q57 /\ q60 = q49 | q60 : int(1..2)])
- | q49 : int(1..2)])
- /\
- and([var1_PartitionOccurrence_WhichPart[q61] = q57 ->
- or([var1_PartitionOccurrence_WhichPart[q51] = q47 /\ q51 = q61 | q51 : int(1..2)])
- | q61 : int(1..2)]))
- | q47 : int(1..2)])
- | q57 : int(1..2)]))
- \/
- !(and([q23 <= var1_PartitionOccurrence_NumParts ->
- or([var1_PartitionOccurrence_WhichPart[q27] = q23 /\ q27 = 1 | q27 : int(1..2)]) /\
- and([var1_PartitionOccurrence_WhichPart[q25] = q23 -> 1 = q25 | q25 : int(1..2)])
- | q23 : int(1..2)])
- /\
- or([q28 <= var1_PartitionOccurrence_NumParts /\
- (and([var1_PartitionOccurrence_WhichPart[q30] = q28 -> 1 = q30 | q30 : int(1..2)]) /\
- or([var1_PartitionOccurrence_WhichPart[q32] = q28 /\ q32 = 1 | q32 : int(1..2)]))
- | q28 : int(1..2)]))
- \/
- !(and([q81 <= var1_PartitionOccurrence_NumParts ->
- or([q91 <= var1_PartitionOccurrence_NumParts /\
- (and([var1_PartitionOccurrence_WhichPart[q93] = q91 ->
- or([var1_PartitionOccurrence_WhichPart[q84] = q81 /\ q84 = q93 | q84 : int(1..2)])
- | q93 : int(1..2)])
- /\
- and([var1_PartitionOccurrence_WhichPart[q85] = q81 ->
- or([var1_PartitionOccurrence_WhichPart[q95] = q91 /\ q95 = q85 | q95 : int(1..2)])
- | q85 : int(1..2)]))
- | q91 : int(1..2)])
- | q81 : int(1..2)])
- /\
- and([q96 <= var1_PartitionOccurrence_NumParts ->
- or([q86 <= var1_PartitionOccurrence_NumParts /\
- (and([var1_PartitionOccurrence_WhichPart[q88] = q86 ->
- or([var1_PartitionOccurrence_WhichPart[q99] = q96 /\ q99 = q88 | q99 : int(1..2)])
- | q88 : int(1..2)])
- /\
- and([var1_PartitionOccurrence_WhichPart[q100] = q96 ->
- or([var1_PartitionOccurrence_WhichPart[q90] = q86 /\ q90 = q100 | q90 : int(1..2)])
- | q100 : int(1..2)]))
- | q86 : int(1..2)])
- | q96 : int(1..2)])
- \/
- or([q101 <= var1_PartitionOccurrence_NumParts /\
- (and([var1_PartitionOccurrence_WhichPart[q103] = q101 -> 1 = q103 | q103 : int(1..2)]) /\
- or([var1_PartitionOccurrence_WhichPart[q105] = q101 /\ q105 = 1 | q105 : int(1..2)]))
- | q101 : int(1..2)])
- /\
- and([q106 <= var1_PartitionOccurrence_NumParts ->
- or([var1_PartitionOccurrence_WhichPart[q110] = q106 /\ q110 = 1 | q110 : int(1..2)]) /\
- and([var1_PartitionOccurrence_WhichPart[q108] = q106 -> 1 = q108 | q108 : int(1..2)])
- | q106 : int(1..2)])),
- and([q1 <= var1_PartitionOccurrence_NumParts -> var1_PartitionOccurrence_PartSizes[q1] <= 2 | q1 : int(1..2)]),
- and([q1 > var1_PartitionOccurrence_NumParts -> var1_PartitionOccurrence_PartSizes[q1] = 0 | q1 : int(1..2)]),
- var1_PartitionOccurrence_NumParts <= 2,
- var1_PartitionOccurrence_NumParts = max([var1_PartitionOccurrence_WhichPart[q4] | q4 : int(1..2)]),
- and([var1_PartitionOccurrence_PartSizes[q5] =
- sum([toInt(var1_PartitionOccurrence_WhichPart[q6] = q5) | q6 : int(1..2)])
- | q5 : int(1..2)]),
- and([q7 <= var1_PartitionOccurrence_NumParts ->
- and([var1_PartitionOccurrence_WhichPart[q8] = q7 -> var1_PartitionOccurrence_FirstIndex[q7] <= q8
- | q8 : int(1..2)])
- | q7 : int(1..2)]),
- and([q7 <= var1_PartitionOccurrence_NumParts ->
- or([var1_PartitionOccurrence_WhichPart[q8] = q7 /\ var1_PartitionOccurrence_FirstIndex[q7] = q8
- | q8 : int(1..2)])
- | q7 : int(1..2)]),
- and([q7 > var1_PartitionOccurrence_NumParts -> var1_PartitionOccurrence_FirstIndex[q7] = 1 | q7 : int(1..2)]),
- and([q9 <= var1_PartitionOccurrence_NumParts /\ q10 <= var1_PartitionOccurrence_NumParts ->
- (q9 < q10 <-> var1_PartitionOccurrence_FirstIndex[q9] < var1_PartitionOccurrence_FirstIndex[q10])
- | q9 : int(1..2), q10 : int(1..2)])
-
diff --git a/tests/exhaustive/autogen/gen14_2/expected/model_1-solution000001.solution b/tests/exhaustive/autogen/gen14_2/expected/model_1-solution000001.solution
new file mode 100644
index 0000000000..dc001498cc
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_2/expected/model_1-solution000001.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var1 be partition({1, 2})
+$ Visualisation for var1
+$ 1 2
+
diff --git a/tests/exhaustive/autogen/gen14_2/expected/model_1-solution000002.solution b/tests/exhaustive/autogen/gen14_2/expected/model_1-solution000002.solution
new file mode 100644
index 0000000000..d53bf91bd1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_2/expected/model_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var1 be partition({1}, {2})
+$ Visualisation for var1
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/autogen/gen14_2/expected/model_1.eprime b/tests/exhaustive/autogen/gen14_2/expected/model_1.eprime
new file mode 100644
index 0000000000..1f3c94bad0
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_2/expected/model_1.eprime
@@ -0,0 +1,38 @@
+language ESSENCE' 1.0
+
+find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker: int(0..2)
+find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
+branching on
+ [var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence]
+such that
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker = var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
+ and([and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q17, q19] =
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q17, q19]
+ | q19 : int(1..2)])
+ | q17 : int(1..2)]),
+ and([1 =
+ sum([toInt(q14 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q14, q1])
+ | q14 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([q15 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q15, q16]) | q16 : int(1..2)]) >=
+ 1 | q15 : int(1..2)]),
+ 2 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ [-toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[1, q9]) | q9 : int(1..2)] var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q5, q11] = false | q11 : int(1..2)])
+ | q5 : int(1..2)]),
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker <= 2,
+ and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q6, q7]) | q7 : int(1..2)]) <= 2
+ | q6 : int(1..2)]),
+ 2 =
+ sum([toInt(q12 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker) *
+ catchUndef(sum([toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q12, q13])
+ | q13 : int(1..2)]),
+ 0)
+ | q12 : int(1..2)])
+
diff --git a/tests/exhaustive/autogen/gen14_2/expected/model_2-solution000001.solution b/tests/exhaustive/autogen/gen14_2/expected/model_2-solution000001.solution
new file mode 100644
index 0000000000..dc001498cc
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_2/expected/model_2-solution000001.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var1 be partition({1, 2})
+$ Visualisation for var1
+$ 1 2
+
diff --git a/tests/exhaustive/autogen/gen14_2/expected/model_2-solution000002.solution b/tests/exhaustive/autogen/gen14_2/expected/model_2-solution000002.solution
new file mode 100644
index 0000000000..d53bf91bd1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_2/expected/model_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var1 be partition({1}, {2})
+$ Visualisation for var1
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/autogen/gen14_2/expected/model_2.eprime b/tests/exhaustive/autogen/gen14_2/expected/model_2.eprime
new file mode 100644
index 0000000000..0da1c335c9
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_2/expected/model_2.eprime
@@ -0,0 +1,58 @@
+language ESSENCE' 1.0
+
+find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker: int(0..2)
+find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..2), int(1..2)] of int(1..3)
+branching on
+ [var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy]
+such that
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker = var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
+ and([and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q18, q20] =
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q18, q20]
+ | q20 : int(1..2)])
+ | q18 : int(1..2)]),
+ alldifferent_except([toInt(q22 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q22, q23]
+ != 3)
+ *
+ catchUndef(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy
+ [q22, q23],
+ 0)
+ | q22 : int(1..2), q23 : int(1..2)],
+ 0),
+ and([q24 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q24, q26] != 3)
+ | q26 : int(1..2)])
+ >= 1
+ | q24 : int(1..2)]),
+ 2 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ [var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[1, q12] | q12 : int(1..2)] var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q5, q17] = 1
+ | q17 : int(1..2)])
+ | q5 : int(1..2)]),
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker <= 2,
+ and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, 1] <
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, 2]
+ \/ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, 1] = 3
+ | q6 : int(1..2)]),
+ and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ (var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, 1] = 3 ->
+ var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, 2] = 3)
+ | q6 : int(1..2)]),
+ and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q9] != 3)
+ | q9 : int(1..2)])
+ <= 2
+ | q6 : int(1..2)]),
+ 2 =
+ sum([toInt(q14 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker) *
+ catchUndef(sum([toInt(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q14, q16]
+ != 3)
+ | q16 : int(1..2)]),
+ 0)
+ | q14 : int(1..2)])
+
diff --git a/tests/exhaustive/autogen/gen14_2/expected/model_3-solution000001.solution b/tests/exhaustive/autogen/gen14_2/expected/model_3-solution000001.solution
new file mode 100644
index 0000000000..dc001498cc
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_2/expected/model_3-solution000001.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var1 be partition({1, 2})
+$ Visualisation for var1
+$ 1 2
+
diff --git a/tests/exhaustive/autogen/gen14_2/expected/model_3-solution000002.solution b/tests/exhaustive/autogen/gen14_2/expected/model_3-solution000002.solution
new file mode 100644
index 0000000000..d53bf91bd1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_2/expected/model_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var1 be partition({1}, {2})
+$ Visualisation for var1
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/autogen/gen14_2/expected/model_3.eprime.orig b/tests/exhaustive/autogen/gen14_2/expected/model_3.eprime.orig
deleted file mode 100644
index 7cec03b856..0000000000
--- a/tests/exhaustive/autogen/gen14_2/expected/model_3.eprime.orig
+++ /dev/null
@@ -1,67 +0,0 @@
-language ESSENCE' 1.0
-
-find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker: int(0..2)
-find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..2)] of int(0..2)
-find var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..2), int(1..2)] of int(1..2)
-branching on
- [var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker = var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q15] =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q15]
- | q15 : int(1..2)]),
- and([and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q17, q19] =
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q17, q19]
- | q19 : int(1..2)])
- | q17 : int(1..2)]),
- alldifferent_except([toInt(q21 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q22 <=
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker
- [q21])
- *
- catchUndef(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q21, q22],
- 0)
- | q21 : int(1..2), q22 : int(1..2)],
- 0),
- and([q23 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q23] >= 1
- | q23 : int(1..2)]),
- 2 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[1, q11]
- | q11 : int(1..2)];
- int(1..2)])
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q5] = 0 /\
- and([var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q5, q14] = 1
- | q14 : int(1..2)])
- | q5 : int(1..2)]),
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker <= 2,
- and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, 1] <
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, 2])
- | q6 : int(1..2)]),
- and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q8 > var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q8] = 1
- | q8 : int(1..2)])
- | q6 : int(1..2)]),
- and([q6 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] <= 2
- | q6 : int(1..2)]),
- 2 =
- sum([toInt(q13 <= var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker) *
- catchUndef(var1_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q13], 0)
- | q13 : int(1..2)])
-
diff --git a/tests/exhaustive/autogen/gen14_2/expected/model_4-solution000001.solution b/tests/exhaustive/autogen/gen14_2/expected/model_4-solution000001.solution
new file mode 100644
index 0000000000..dc001498cc
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_2/expected/model_4-solution000001.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting var1 be partition({1, 2})
+$ Visualisation for var1
+$ 1 2
+
diff --git a/tests/exhaustive/autogen/gen14_2/expected/model_4-solution000002.solution b/tests/exhaustive/autogen/gen14_2/expected/model_4-solution000002.solution
new file mode 100644
index 0000000000..d53bf91bd1
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_2/expected/model_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting var1 be partition({1}, {2})
+$ Visualisation for var1
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/autogen/gen14_2/expected/model_4.eprime b/tests/exhaustive/autogen/gen14_2/expected/model_4.eprime
new file mode 100644
index 0000000000..dadf615aea
--- /dev/null
+++ b/tests/exhaustive/autogen/gen14_2/expected/model_4.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+find var1_PartitionOccurrence_NumParts: int(1..2)
+find var1_PartitionOccurrence_WhichPart: matrix indexed by [int(1..2)] of int(1..2)
+find var1_PartitionOccurrence_PartSizes: matrix indexed by [int(1..2)] of int(0..2)
+find var1_PartitionOccurrence_FirstIndex: matrix indexed by [int(1..2)] of int(1..2)
+branching on
+ [var1_PartitionOccurrence_NumParts, var1_PartitionOccurrence_WhichPart, var1_PartitionOccurrence_PartSizes,
+ var1_PartitionOccurrence_FirstIndex]
+such that
+ var1_PartitionOccurrence_NumParts = var1_PartitionOccurrence_NumParts,
+ and([var1_PartitionOccurrence_WhichPart[q11] = var1_PartitionOccurrence_WhichPart[q11] | q11 : int(1..2)]),
+ and([var1_PartitionOccurrence_PartSizes[q13] = var1_PartitionOccurrence_PartSizes[q13] | q13 : int(1..2)]),
+ and([var1_PartitionOccurrence_FirstIndex[q15] = var1_PartitionOccurrence_FirstIndex[q15] | q15 : int(1..2)]),
+ and([q1 <= var1_PartitionOccurrence_NumParts -> var1_PartitionOccurrence_PartSizes[q1] <= 2 | q1 : int(1..2)]),
+ and([q1 > var1_PartitionOccurrence_NumParts -> var1_PartitionOccurrence_PartSizes[q1] = 0 | q1 : int(1..2)]),
+ var1_PartitionOccurrence_NumParts <= 2,
+ var1_PartitionOccurrence_NumParts = max([var1_PartitionOccurrence_WhichPart[q4] | q4 : int(1..2)]),
+ and([var1_PartitionOccurrence_PartSizes[q5] =
+ sum([toInt(var1_PartitionOccurrence_WhichPart[q6] = q5) | q6 : int(1..2)])
+ | q5 : int(1..2)]),
+ and([q7 <= var1_PartitionOccurrence_NumParts ->
+ and([var1_PartitionOccurrence_WhichPart[q8] = q7 -> var1_PartitionOccurrence_FirstIndex[q7] <= q8
+ | q8 : int(1..2)])
+ | q7 : int(1..2)]),
+ and([q7 <= var1_PartitionOccurrence_NumParts ->
+ or([var1_PartitionOccurrence_WhichPart[q8] = q7 /\ var1_PartitionOccurrence_FirstIndex[q7] = q8
+ | q8 : int(1..2)])
+ | q7 : int(1..2)]),
+ and([q7 > var1_PartitionOccurrence_NumParts -> var1_PartitionOccurrence_FirstIndex[q7] = 1 | q7 : int(1..2)]),
+ and([q9 <= var1_PartitionOccurrence_NumParts /\ q10 <= var1_PartitionOccurrence_NumParts ->
+ (q9 < q10 <-> var1_PartitionOccurrence_FirstIndex[q9] < var1_PartitionOccurrence_FirstIndex[q10])
+ | q9 : int(1..2), q10 : int(1..2)])
+
diff --git a/tests/exhaustive/autogen/gen17/expected/model_1.eprime b/tests/exhaustive/autogen/gen17/expected/model_1.eprime
index f2c7967cf9..b7c8b7620b 100644
--- a/tests/exhaustive/autogen/gen17/expected/model_1.eprime
+++ b/tests/exhaustive/autogen/gen17/expected/model_1.eprime
@@ -6,8 +6,7 @@ branching on [var1_ExplicitVarSizeWithMarker_Marker, var1_ExplicitVarSizeWithMar
such that
false,
2 <= var1_ExplicitVarSizeWithMarker_Marker ->
- [-toInt(var1_ExplicitVarSizeWithMarker_Values[1]); int(1)] var1_ExplicitVarSizeWithMarker_Marker -> var1_ExplicitVarSizeWithMarker_Values[q2] = false
| q2 : int(1..2)])
diff --git a/tests/exhaustive/autogen/gen17/expected/model_2.eprime b/tests/exhaustive/autogen/gen17/expected/model_2.eprime
index be44a8c757..b7d0c50001 100644
--- a/tests/exhaustive/autogen/gen17/expected/model_2.eprime
+++ b/tests/exhaustive/autogen/gen17/expected/model_2.eprime
@@ -6,8 +6,7 @@ branching on [var1_ExplicitVarSizeWithFlags_Flags, var1_ExplicitVarSizeWithFlags
such that
false,
var1_ExplicitVarSizeWithFlags_Flags[2] ->
- [-toInt(var1_ExplicitVarSizeWithFlags_Values[1]); int(1)] var1_ExplicitVarSizeWithFlags_Values[q2] = false
| q2 : int(1..2)]),
var1_ExplicitVarSizeWithFlags_Flags[2] -> var1_ExplicitVarSizeWithFlags_Flags[1]
diff --git a/tests/exhaustive/autogen/gen25/expected/model_1.eprime b/tests/exhaustive/autogen/gen25/expected/model_1.eprime
index 7a7abed767..b1b11d3b44 100644
--- a/tests/exhaustive/autogen/gen25/expected/model_1.eprime
+++ b/tests/exhaustive/autogen/gen25/expected/model_1.eprime
@@ -6,8 +6,7 @@ find var3_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..5)] of boo
branching on [var3_ExplicitVarSizeWithMarker_Marker, var3_ExplicitVarSizeWithMarker_Values]
such that
and([q1 + 1 <= var3_ExplicitVarSizeWithMarker_Marker ->
- [-toInt(var3_ExplicitVarSizeWithMarker_Values[q1]); int(1)] var3_ExplicitVarSizeWithMarker_Marker -> var3_ExplicitVarSizeWithMarker_Values[q2] = false
| q2 : int(1..5)]),
diff --git a/tests/exhaustive/autogen/gen25/expected/model_2.eprime b/tests/exhaustive/autogen/gen25/expected/model_2.eprime
index 2f3be37f18..daa108ae03 100644
--- a/tests/exhaustive/autogen/gen25/expected/model_2.eprime
+++ b/tests/exhaustive/autogen/gen25/expected/model_2.eprime
@@ -6,8 +6,7 @@ find var3_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..5)] of bool
branching on [var3_ExplicitVarSizeWithFlags_Flags, var3_ExplicitVarSizeWithFlags_Values]
such that
and([var3_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- [-toInt(var3_ExplicitVarSizeWithFlags_Values[q1]); int(1)] var3_ExplicitVarSizeWithFlags_Values[q2] = false
| q2 : int(1..5)]),
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_1_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_1_1.eprime
new file mode 100644
index 0000000000..2e44586da2
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_1_1.eprime
@@ -0,0 +1,9 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on [var2_Occurrence]
+such that
+ or([var2_Occurrence[q2] /\ !var2_Occurrence[q2] | q2 : int(-4..5, 2)]) \/
+ or([var2_Occurrence[q2] /\ !var2_Occurrence[q2] | q2 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_1_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_1_2.eprime
new file mode 100644
index 0000000000..5d9dfb9509
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_1_2.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on [var2_ExplicitVarSizeWithDummy, var2_Occurrence]
+such that
+ or([var2_Occurrence[q11] /\ !var2_Occurrence[q11] | q11 : int(-4..5, 2)]) \/
+ or([var2_Occurrence[q11] /\ !var2_Occurrence[q11] | q11 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] < var2_ExplicitVarSizeWithDummy[q2 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q3] = 6 -> var2_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q7] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q7]]
+ | q7 : int(1..11)]),
+ and([var2_Occurrence[q8] ->
+ or([var2_ExplicitVarSizeWithDummy[q10] != 6 /\ var2_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..11)])
+ | q8 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_1_3.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_1_3.eprime
new file mode 100644
index 0000000000..b7f0533fd6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_1_3.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values, var2_Occurrence]
+such that
+ or([var2_Occurrence[q10] /\ !var2_Occurrence[q10] | q10 : int(-4..5, 2)]) \/
+ or([var2_Occurrence[q10] /\ !var2_Occurrence[q10] | q10 : int(-4..5, 2)]),
+ and([q2 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q2] < var2_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..10)]),
+ and([q3 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q3] = -4
+ | q3 : int(1..11)]),
+ and([q6 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..11)]),
+ and([var2_Occurrence[q7] ->
+ or([q9 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q9] = q7
+ | q9 : int(1..11)])
+ | q7 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_1_4.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_1_4.eprime
new file mode 100644
index 0000000000..bd003c9167
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_1_4.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values, var2_Occurrence]
+such that
+ or([var2_Occurrence[q12] /\ !var2_Occurrence[q12] | q12 : int(-4..5, 2)]) \/
+ or([var2_Occurrence[q12] /\ !var2_Occurrence[q12] | q12 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q2] < var2_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3] = false -> var2_ExplicitVarSizeWithFlags_Values[q3] = -4
+ | q3 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q8] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q8]]
+ | q8 : int(1..11)]),
+ and([var2_Occurrence[q9] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q11] /\ var2_ExplicitVarSizeWithFlags_Values[q11] = q9
+ | q11 : int(1..11)])
+ | q9 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_2_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_2_1.eprime
new file mode 100644
index 0000000000..7ba618afa0
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_2_1.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on [var2_ExplicitVarSizeWithDummy, var2_Occurrence]
+such that
+ or([var2_Occurrence[q11] /\
+ !or([var2_ExplicitVarSizeWithDummy[q13] != 6 /\ var2_ExplicitVarSizeWithDummy[q13] = q11 | q13 : int(1..11)])
+ | q11 : int(-4..5, 2)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q14] != 6 /\ !var2_Occurrence[var2_ExplicitVarSizeWithDummy[q14]]
+ | q14 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] < var2_ExplicitVarSizeWithDummy[q2 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q3] = 6 -> var2_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q7] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q7]]
+ | q7 : int(1..11)]),
+ and([var2_Occurrence[q8] ->
+ or([var2_ExplicitVarSizeWithDummy[q10] != 6 /\ var2_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..11)])
+ | q8 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_2_3.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_2_3.eprime
new file mode 100644
index 0000000000..9722a2c244
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_2_3.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values, var2_Occurrence,
+ var2_ExplicitVarSizeWithDummy]
+such that
+ or([var2_Occurrence[q27] /\
+ !or([var2_ExplicitVarSizeWithDummy[q29] != 6 /\ var2_ExplicitVarSizeWithDummy[q29] = q27 | q29 : int(1..11)])
+ | q27 : int(-4..5, 2)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q30] != 6 /\ !var2_Occurrence[var2_ExplicitVarSizeWithDummy[q30]]
+ | q30 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] < var2_ExplicitVarSizeWithDummy[q2 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q3] = 6 -> var2_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q7] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q7]]
+ | q7 : int(1..11)]),
+ and([var2_Occurrence[q8] ->
+ or([var2_ExplicitVarSizeWithDummy[q10] != 6 /\ var2_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..11)])
+ | q8 : int(-4..5, 2)]),
+ and([q11 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q11] < var2_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..10)]),
+ and([q12 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q12] = -4
+ | q12 : int(1..11)]),
+ and([q15 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q15]]
+ | q15 : int(1..11)]),
+ and([var2_Occurrence[q16] ->
+ or([q18 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..11)])
+ | q16 : int(-4..5, 2)]),
+ and([q20 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q22] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q22] = var2_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..11)])
+ | q20 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q24] != 6 ->
+ or([q26 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q26] = var2_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..11)])
+ | q24 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_2_4.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_2_4.eprime
new file mode 100644
index 0000000000..8ea95c72c3
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_2_4.eprime
@@ -0,0 +1,49 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values, var2_Occurrence,
+ var2_ExplicitVarSizeWithDummy]
+such that
+ or([var2_Occurrence[q29] /\
+ !or([var2_ExplicitVarSizeWithDummy[q31] != 6 /\ var2_ExplicitVarSizeWithDummy[q31] = q29 | q31 : int(1..11)])
+ | q29 : int(-4..5, 2)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q32] != 6 /\ !var2_Occurrence[var2_ExplicitVarSizeWithDummy[q32]]
+ | q32 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] < var2_ExplicitVarSizeWithDummy[q2 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q3] = 6 -> var2_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q7] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q7]]
+ | q7 : int(1..11)]),
+ and([var2_Occurrence[q8] ->
+ or([var2_ExplicitVarSizeWithDummy[q10] != 6 /\ var2_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..11)])
+ | q8 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q11] < var2_ExplicitVarSizeWithFlags_Values[q11 + 1]
+ | q11 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q12] = false -> var2_ExplicitVarSizeWithFlags_Values[q12] = -4
+ | q12 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q17] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q17]]
+ | q17 : int(1..11)]),
+ and([var2_Occurrence[q18] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q20] /\ var2_ExplicitVarSizeWithFlags_Values[q20] = q18
+ | q20 : int(1..11)])
+ | q18 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([var2_ExplicitVarSizeWithDummy[q24] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q24] = var2_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q26] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q28] /\
+ var2_ExplicitVarSizeWithFlags_Values[q28] = var2_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..11)])
+ | q26 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_3_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_3_1.eprime
new file mode 100644
index 0000000000..f4bcfbc82e
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_3_1.eprime
@@ -0,0 +1,27 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values, var2_Occurrence]
+such that
+ or([var2_Occurrence[q10] /\
+ !or([q12 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q12] = q10
+ | q12 : int(1..11)])
+ | q10 : int(-4..5, 2)])
+ \/
+ or([q13 <= var2_ExplicitVarSizeWithMarker_Marker /\ !var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q13]]
+ | q13 : int(1..11)]),
+ and([q2 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q2] < var2_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..10)]),
+ and([q3 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q3] = -4
+ | q3 : int(1..11)]),
+ and([q6 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..11)]),
+ and([var2_Occurrence[q7] ->
+ or([q9 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q9] = q7
+ | q9 : int(1..11)])
+ | q7 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_3_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_3_2.eprime
new file mode 100644
index 0000000000..8612434ed5
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_3_2.eprime
@@ -0,0 +1,49 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on
+ [var2_ExplicitVarSizeWithDummy, var2_Occurrence, var2_ExplicitVarSizeWithMarker_Marker,
+ var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([var2_Occurrence[q27] /\
+ !or([q29 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q29] = q27
+ | q29 : int(1..11)])
+ | q27 : int(-4..5, 2)])
+ \/
+ or([q30 <= var2_ExplicitVarSizeWithMarker_Marker /\ !var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q30]]
+ | q30 : int(1..11)]),
+ and([q2 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q2] < var2_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..10)]),
+ and([q3 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q3] = -4
+ | q3 : int(1..11)]),
+ and([q6 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..11)]),
+ and([var2_Occurrence[q7] ->
+ or([q9 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q9] = q7
+ | q9 : int(1..11)])
+ | q7 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q10] < var2_ExplicitVarSizeWithDummy[q10 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q10] = 6
+ | q10 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q11] = 6 -> var2_ExplicitVarSizeWithDummy[q11 + 1] = 6 | q11 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q15] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q15]]
+ | q15 : int(1..11)]),
+ and([var2_Occurrence[q16] ->
+ or([var2_ExplicitVarSizeWithDummy[q18] != 6 /\ var2_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..11)])
+ | q16 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q20] != 6 ->
+ or([q22 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q22] = var2_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..11)])
+ | q20 : int(1..11)]),
+ and([q24 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q26] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q26] = var2_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..11)])
+ | q24 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_3_4.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_3_4.eprime
new file mode 100644
index 0000000000..ef83393629
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_3_4.eprime
@@ -0,0 +1,53 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values, var2_Occurrence,
+ var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([var2_Occurrence[q28] /\
+ !or([q30 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q30] = q28
+ | q30 : int(1..11)])
+ | q28 : int(-4..5, 2)])
+ \/
+ or([q31 <= var2_ExplicitVarSizeWithMarker_Marker /\ !var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q31]]
+ | q31 : int(1..11)]),
+ and([q2 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q2] < var2_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..10)]),
+ and([q3 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q3] = -4
+ | q3 : int(1..11)]),
+ and([q6 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..11)]),
+ and([var2_Occurrence[q7] ->
+ or([q9 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q9] = q7
+ | q9 : int(1..11)])
+ | q7 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q10] < var2_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q11] = false -> var2_ExplicitVarSizeWithFlags_Values[q11] = -4
+ | q11 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q16] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..11)]),
+ and([var2_Occurrence[q17] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q19] /\ var2_ExplicitVarSizeWithFlags_Values[q19] = q17
+ | q19 : int(1..11)])
+ | q17 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([q23 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q23] = var2_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..11)])
+ | q21 : int(1..11)]),
+ and([q25 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q27] /\
+ var2_ExplicitVarSizeWithFlags_Values[q27] = var2_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..11)])
+ | q25 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_4_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_4_1.eprime
new file mode 100644
index 0000000000..ac3a2f9711
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_4_1.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values, var2_Occurrence]
+such that
+ or([var2_Occurrence[q12] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q14] /\ var2_ExplicitVarSizeWithFlags_Values[q14] = q12
+ | q14 : int(1..11)])
+ | q12 : int(-4..5, 2)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q15] /\ !var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q15]]
+ | q15 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q2] < var2_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3] = false -> var2_ExplicitVarSizeWithFlags_Values[q3] = -4
+ | q3 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q8] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q8]]
+ | q8 : int(1..11)]),
+ and([var2_Occurrence[q9] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q11] /\ var2_ExplicitVarSizeWithFlags_Values[q11] = q9
+ | q11 : int(1..11)])
+ | q9 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_4_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_4_2.eprime
new file mode 100644
index 0000000000..ff6e8bf8e4
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_4_2.eprime
@@ -0,0 +1,50 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on
+ [var2_ExplicitVarSizeWithDummy, var2_Occurrence, var2_ExplicitVarSizeWithFlags_Flags,
+ var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_Occurrence[q29] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q31] /\ var2_ExplicitVarSizeWithFlags_Values[q31] = q29
+ | q31 : int(1..11)])
+ | q29 : int(-4..5, 2)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q32] /\ !var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q32]]
+ | q32 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q2] < var2_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3] = false -> var2_ExplicitVarSizeWithFlags_Values[q3] = -4
+ | q3 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q8] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q8]]
+ | q8 : int(1..11)]),
+ and([var2_Occurrence[q9] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q11] /\ var2_ExplicitVarSizeWithFlags_Values[q11] = q9
+ | q11 : int(1..11)])
+ | q9 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q12] < var2_ExplicitVarSizeWithDummy[q12 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q12] = 6
+ | q12 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q13] = 6 -> var2_ExplicitVarSizeWithDummy[q13 + 1] = 6 | q13 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q17] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q17]]
+ | q17 : int(1..11)]),
+ and([var2_Occurrence[q18] ->
+ or([var2_ExplicitVarSizeWithDummy[q20] != 6 /\ var2_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..11)])
+ | q18 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q22] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q24] /\
+ var2_ExplicitVarSizeWithFlags_Values[q24] = var2_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([var2_ExplicitVarSizeWithDummy[q28] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q28] = var2_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..11)])
+ | q26 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_1_4_3.eprime b/tests/exhaustive/autogen/gen32/expected/model_1_4_3.eprime
new file mode 100644
index 0000000000..74db93bcc4
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_1_4_3.eprime
@@ -0,0 +1,53 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values, var2_Occurrence,
+ var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_Occurrence[q28] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q30] /\ var2_ExplicitVarSizeWithFlags_Values[q30] = q28
+ | q30 : int(1..11)])
+ | q28 : int(-4..5, 2)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q31] /\ !var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q31]]
+ | q31 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q2] < var2_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3] = false -> var2_ExplicitVarSizeWithFlags_Values[q3] = -4
+ | q3 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q8] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q8]]
+ | q8 : int(1..11)]),
+ and([var2_Occurrence[q9] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q11] /\ var2_ExplicitVarSizeWithFlags_Values[q11] = q9
+ | q11 : int(1..11)])
+ | q9 : int(-4..5, 2)]),
+ and([q12 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q12] < var2_ExplicitVarSizeWithMarker_Values[q12 + 1]
+ | q12 : int(1..10)]),
+ and([q13 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q13] = -4
+ | q13 : int(1..11)]),
+ and([q16 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q16]]
+ | q16 : int(1..11)]),
+ and([var2_Occurrence[q17] ->
+ or([q19 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..11)])
+ | q17 : int(-4..5, 2)]),
+ and([q21 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q23] /\
+ var2_ExplicitVarSizeWithFlags_Values[q23] = var2_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..11)])
+ | q21 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q27] = var2_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..11)])
+ | q25 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_1_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_1_1.eprime
new file mode 100644
index 0000000000..cc87135b8c
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_1_1.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on [var2_Occurrence, var2_ExplicitVarSizeWithDummy]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q7] != 6 /\ !var2_Occurrence[var2_ExplicitVarSizeWithDummy[q7]]
+ | q7 : int(1..11)])
+ \/
+ or([var2_Occurrence[q6] /\
+ !or([var2_ExplicitVarSizeWithDummy[q9] != 6 /\ var2_ExplicitVarSizeWithDummy[q9] = q6 | q9 : int(1..11)])
+ | q6 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)]),
+ and([var2_Occurrence[q10] ->
+ or([var2_ExplicitVarSizeWithDummy[q12] != 6 /\ var2_ExplicitVarSizeWithDummy[q12] = q10 | q12 : int(1..11)])
+ | q10 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q14] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q14]]
+ | q14 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_1_3.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_1_3.eprime
new file mode 100644
index 0000000000..ff7949c852
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_1_3.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithDummy,
+ var2_Occurrence]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q23] != 6 /\ !var2_Occurrence[var2_ExplicitVarSizeWithDummy[q23]]
+ | q23 : int(1..11)])
+ \/
+ or([var2_Occurrence[q22] /\
+ !or([var2_ExplicitVarSizeWithDummy[q25] != 6 /\ var2_ExplicitVarSizeWithDummy[q25] = q22 | q25 : int(1..11)])
+ | q22 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)]),
+ and([var2_Occurrence[q26] ->
+ or([var2_ExplicitVarSizeWithDummy[q28] != 6 /\ var2_ExplicitVarSizeWithDummy[q28] = q26 | q28 : int(1..11)])
+ | q26 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q30] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q30]]
+ | q30 : int(1..11)]),
+ and([q6 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q6] < var2_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..10)]),
+ and([q7 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q7] = -4
+ | q7 : int(1..11)]),
+ and([q10 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q12] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q12] = var2_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..11)])
+ | q10 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([q16 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q16] = var2_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..11)])
+ | q14 : int(1..11)]),
+ and([q18 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q18]]
+ | q18 : int(1..11)]),
+ and([var2_Occurrence[q19] ->
+ or([q21 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q21] = q19
+ | q21 : int(1..11)])
+ | q19 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_1_4.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_1_4.eprime
new file mode 100644
index 0000000000..39bbf550cc
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_1_4.eprime
@@ -0,0 +1,49 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithDummy,
+ var2_Occurrence]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q25] != 6 /\ !var2_Occurrence[var2_ExplicitVarSizeWithDummy[q25]]
+ | q25 : int(1..11)])
+ \/
+ or([var2_Occurrence[q24] /\
+ !or([var2_ExplicitVarSizeWithDummy[q27] != 6 /\ var2_ExplicitVarSizeWithDummy[q27] = q24 | q27 : int(1..11)])
+ | q24 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)]),
+ and([var2_Occurrence[q28] ->
+ or([var2_ExplicitVarSizeWithDummy[q30] != 6 /\ var2_ExplicitVarSizeWithDummy[q30] = q28 | q30 : int(1..11)])
+ | q28 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q32] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q32]]
+ | q32 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q6] < var2_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q7] = false -> var2_ExplicitVarSizeWithFlags_Values[q7] = -4
+ | q7 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([var2_ExplicitVarSizeWithDummy[q14] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q14] = var2_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..11)])
+ | q12 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q18] /\
+ var2_ExplicitVarSizeWithFlags_Values[q18] = var2_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..11)])
+ | q16 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q20] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q20]]
+ | q20 : int(1..11)]),
+ and([var2_Occurrence[q21] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q23] /\ var2_ExplicitVarSizeWithFlags_Values[q23] = q21
+ | q23 : int(1..11)])
+ | q21 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_2_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_2_1.eprime
new file mode 100644
index 0000000000..c131688486
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_2_1.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on [var2_Occurrence, var2_ExplicitVarSizeWithDummy]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q7] != 6 /\
+ !or([var2_ExplicitVarSizeWithDummy[q9] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q9] = var2_ExplicitVarSizeWithDummy[q7]
+ | q9 : int(1..11)])
+ | q7 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q10] != 6 /\
+ !or([var2_ExplicitVarSizeWithDummy[q12] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q12] = var2_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..11)])
+ | q10 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)]),
+ and([var2_Occurrence[q13] ->
+ or([var2_ExplicitVarSizeWithDummy[q15] != 6 /\ var2_ExplicitVarSizeWithDummy[q15] = q13 | q15 : int(1..11)])
+ | q13 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q17] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q17]]
+ | q17 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_2_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_2_2.eprime
new file mode 100644
index 0000000000..c724673a10
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_2_2.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on [var2_ExplicitVarSizeWithDummy]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q6] != 6 /\
+ !or([var2_ExplicitVarSizeWithDummy[q8] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q8] = var2_ExplicitVarSizeWithDummy[q6]
+ | q8 : int(1..11)])
+ | q6 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q9] != 6 /\
+ !or([var2_ExplicitVarSizeWithDummy[q11] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q11] = var2_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..11)])
+ | q9 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_2_3.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_2_3.eprime
new file mode 100644
index 0000000000..a4c92861d6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_2_3.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithDummy]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q17] != 6 /\
+ !or([var2_ExplicitVarSizeWithDummy[q19] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q19] = var2_ExplicitVarSizeWithDummy[q17]
+ | q19 : int(1..11)])
+ | q17 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q20] != 6 /\
+ !or([var2_ExplicitVarSizeWithDummy[q22] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q22] = var2_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..11)])
+ | q20 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)]),
+ and([q5 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q5] < var2_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..10)]),
+ and([q6 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q6] = -4
+ | q6 : int(1..11)]),
+ and([q9 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q11] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q11] = var2_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..11)])
+ | q9 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q13] != 6 ->
+ or([q15 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q15] = var2_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..11)])
+ | q13 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_2_4.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_2_4.eprime
new file mode 100644
index 0000000000..4b33c5a6af
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_2_4.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithDummy]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q19] != 6 /\
+ !or([var2_ExplicitVarSizeWithDummy[q21] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q21] = var2_ExplicitVarSizeWithDummy[q19]
+ | q21 : int(1..11)])
+ | q19 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q22] != 6 /\
+ !or([var2_ExplicitVarSizeWithDummy[q24] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q24] = var2_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q5] < var2_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q6] = false -> var2_ExplicitVarSizeWithFlags_Values[q6] = -4
+ | q6 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([var2_ExplicitVarSizeWithDummy[q13] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q13] = var2_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..11)])
+ | q11 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q15] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q17] /\
+ var2_ExplicitVarSizeWithFlags_Values[q17] = var2_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..11)])
+ | q15 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_3_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_3_1.eprime
new file mode 100644
index 0000000000..9e87cee675
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_3_1.eprime
@@ -0,0 +1,53 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on
+ [var2_Occurrence, var2_ExplicitVarSizeWithDummy, var2_ExplicitVarSizeWithMarker_Marker,
+ var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q18] != 6 /\
+ !or([q20 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q20] = var2_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..11)])
+ | q18 : int(1..11)])
+ \/
+ or([q21 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([var2_ExplicitVarSizeWithDummy[q23] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q23] = var2_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..11)])
+ | q21 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)]),
+ and([q5 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q5] < var2_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..10)]),
+ and([q6 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q6] = -4
+ | q6 : int(1..11)]),
+ and([q9 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q11] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q11] = var2_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..11)])
+ | q9 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q13] != 6 ->
+ or([q15 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q15] = var2_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..11)])
+ | q13 : int(1..11)]),
+ and([var2_Occurrence[q24] ->
+ or([var2_ExplicitVarSizeWithDummy[q26] != 6 /\ var2_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..11)])
+ | q24 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q28] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q28]]
+ | q28 : int(1..11)]),
+ and([var2_Occurrence[q29] ->
+ or([q31 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q31] = q29
+ | q31 : int(1..11)])
+ | q29 : int(-4..5, 2)]),
+ and([q33 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q33]]
+ | q33 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_3_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_3_2.eprime
new file mode 100644
index 0000000000..9aea3cfc02
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_3_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithDummy]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q17] != 6 /\
+ !or([q19 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q19] = var2_ExplicitVarSizeWithDummy[q17]
+ | q19 : int(1..11)])
+ | q17 : int(1..11)])
+ \/
+ or([q20 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([var2_ExplicitVarSizeWithDummy[q22] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q22] = var2_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..11)])
+ | q20 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)]),
+ and([q5 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q5] < var2_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..10)]),
+ and([q6 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q6] = -4
+ | q6 : int(1..11)]),
+ and([q9 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q11] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q11] = var2_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..11)])
+ | q9 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q13] != 6 ->
+ or([q15 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q15] = var2_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..11)])
+ | q13 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_3_4.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_3_4.eprime
new file mode 100644
index 0000000000..8caf045469
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_3_4.eprime
@@ -0,0 +1,69 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithDummy,
+ var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q38] != 6 /\
+ !or([q40 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q40] = var2_ExplicitVarSizeWithDummy[q38]
+ | q40 : int(1..11)])
+ | q38 : int(1..11)])
+ \/
+ or([q41 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([var2_ExplicitVarSizeWithDummy[q43] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q43] = var2_ExplicitVarSizeWithMarker_Values[q41]
+ | q43 : int(1..11)])
+ | q41 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)]),
+ and([q5 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q5] < var2_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..10)]),
+ and([q6 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q6] = -4
+ | q6 : int(1..11)]),
+ and([q9 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q11] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q11] = var2_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..11)])
+ | q9 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q13] != 6 ->
+ or([q15 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q15] = var2_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..11)])
+ | q13 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q16] < var2_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q17] = false -> var2_ExplicitVarSizeWithFlags_Values[q17] = -4
+ | q17 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([var2_ExplicitVarSizeWithDummy[q24] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q24] = var2_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q26] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q28] /\
+ var2_ExplicitVarSizeWithFlags_Values[q28] = var2_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..11)])
+ | q26 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([q32 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q32] = var2_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..11)])
+ | q30 : int(1..11)]),
+ and([q34 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q36] /\
+ var2_ExplicitVarSizeWithFlags_Values[q36] = var2_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..11)])
+ | q34 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_4_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_4_1.eprime
new file mode 100644
index 0000000000..e1fcf174dd
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_4_1.eprime
@@ -0,0 +1,54 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on
+ [var2_Occurrence, var2_ExplicitVarSizeWithDummy, var2_ExplicitVarSizeWithFlags_Flags,
+ var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q20] != 6 /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q22] /\
+ var2_ExplicitVarSizeWithFlags_Values[q22] = var2_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..11)])
+ | q20 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q23] /\
+ !or([var2_ExplicitVarSizeWithDummy[q25] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q25] = var2_ExplicitVarSizeWithFlags_Values[q23]
+ | q25 : int(1..11)])
+ | q23 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q5] < var2_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q6] = false -> var2_ExplicitVarSizeWithFlags_Values[q6] = -4
+ | q6 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([var2_ExplicitVarSizeWithDummy[q13] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q13] = var2_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..11)])
+ | q11 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q15] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q17] /\
+ var2_ExplicitVarSizeWithFlags_Values[q17] = var2_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..11)])
+ | q15 : int(1..11)]),
+ and([var2_Occurrence[q26] ->
+ or([var2_ExplicitVarSizeWithDummy[q28] != 6 /\ var2_ExplicitVarSizeWithDummy[q28] = q26 | q28 : int(1..11)])
+ | q26 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q30] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q30]]
+ | q30 : int(1..11)]),
+ and([var2_Occurrence[q31] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q33] /\ var2_ExplicitVarSizeWithFlags_Values[q33] = q31
+ | q33 : int(1..11)])
+ | q31 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q35] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q35]]
+ | q35 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_4_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_4_2.eprime
new file mode 100644
index 0000000000..d3c3ed6086
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_4_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithDummy]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q19] != 6 /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q21] /\
+ var2_ExplicitVarSizeWithFlags_Values[q21] = var2_ExplicitVarSizeWithDummy[q19]
+ | q21 : int(1..11)])
+ | q19 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q22] /\
+ !or([var2_ExplicitVarSizeWithDummy[q24] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q24] = var2_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q5] < var2_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q6] = false -> var2_ExplicitVarSizeWithFlags_Values[q6] = -4
+ | q6 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([var2_ExplicitVarSizeWithDummy[q13] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q13] = var2_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..11)])
+ | q11 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q15] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q17] /\
+ var2_ExplicitVarSizeWithFlags_Values[q17] = var2_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..11)])
+ | q15 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_2_4_3.eprime b/tests/exhaustive/autogen/gen32/expected/model_2_4_3.eprime
new file mode 100644
index 0000000000..298bb93993
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_2_4_3.eprime
@@ -0,0 +1,69 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithDummy,
+ var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_ExplicitVarSizeWithDummy[q38] != 6 /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q40] /\
+ var2_ExplicitVarSizeWithFlags_Values[q40] = var2_ExplicitVarSizeWithDummy[q38]
+ | q40 : int(1..11)])
+ | q38 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q41] /\
+ !or([var2_ExplicitVarSizeWithDummy[q43] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q43] = var2_ExplicitVarSizeWithFlags_Values[q41]
+ | q43 : int(1..11)])
+ | q41 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q1] < var2_ExplicitVarSizeWithDummy[q1 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q2] = 6 -> var2_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q5] < var2_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q6] = false -> var2_ExplicitVarSizeWithFlags_Values[q6] = -4
+ | q6 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([var2_ExplicitVarSizeWithDummy[q13] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q13] = var2_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..11)])
+ | q11 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q15] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q17] /\
+ var2_ExplicitVarSizeWithFlags_Values[q17] = var2_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..11)])
+ | q15 : int(1..11)]),
+ and([q18 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q18] < var2_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..10)]),
+ and([q19 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q19] = -4
+ | q19 : int(1..11)]),
+ and([q22 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q24] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q24] = var2_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q26] != 6 ->
+ or([q28 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q28] = var2_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..11)])
+ | q26 : int(1..11)]),
+ and([q30 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q32] /\
+ var2_ExplicitVarSizeWithFlags_Values[q32] = var2_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..11)])
+ | q30 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([q36 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q36] = var2_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..11)])
+ | q34 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_1_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_1_1.eprime
new file mode 100644
index 0000000000..c841bbbe9f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_1_1.eprime
@@ -0,0 +1,27 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on [var2_Occurrence, var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q6 <= var2_ExplicitVarSizeWithMarker_Marker /\ !var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..11)])
+ \/
+ or([var2_Occurrence[q5] /\
+ !or([q8 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q8] = q5
+ | q8 : int(1..11)])
+ | q5 : int(-4..5, 2)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_Occurrence[q9] ->
+ or([q11 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q11] = q9
+ | q11 : int(1..11)])
+ | q9 : int(-4..5, 2)]),
+ and([q13 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q13]]
+ | q13 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_1_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_1_2.eprime
new file mode 100644
index 0000000000..7e7b9ddfa6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_1_2.eprime
@@ -0,0 +1,49 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on
+ [var2_ExplicitVarSizeWithDummy, var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values,
+ var2_Occurrence]
+such that
+ or([q23 <= var2_ExplicitVarSizeWithMarker_Marker /\ !var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q23]]
+ | q23 : int(1..11)])
+ \/
+ or([var2_Occurrence[q22] /\
+ !or([q25 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q25] = q22
+ | q25 : int(1..11)])
+ | q22 : int(-4..5, 2)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_Occurrence[q26] ->
+ or([q28 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q28] = q26
+ | q28 : int(1..11)])
+ | q26 : int(-4..5, 2)]),
+ and([q30 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q30]]
+ | q30 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q5] < var2_ExplicitVarSizeWithDummy[q5 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q6] = 6 -> var2_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q10] != 6 ->
+ or([q12 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q12] = var2_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..11)])
+ | q10 : int(1..11)]),
+ and([q14 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q16] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q16] = var2_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..11)])
+ | q14 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q18] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q18]]
+ | q18 : int(1..11)]),
+ and([var2_Occurrence[q19] ->
+ or([var2_ExplicitVarSizeWithDummy[q21] != 6 /\ var2_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..11)])
+ | q19 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_1_4.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_1_4.eprime
new file mode 100644
index 0000000000..a2676c1f31
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_1_4.eprime
@@ -0,0 +1,53 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithMarker_Marker,
+ var2_ExplicitVarSizeWithMarker_Values, var2_Occurrence]
+such that
+ or([q24 <= var2_ExplicitVarSizeWithMarker_Marker /\ !var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q24]]
+ | q24 : int(1..11)])
+ \/
+ or([var2_Occurrence[q23] /\
+ !or([q26 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q26] = q23
+ | q26 : int(1..11)])
+ | q23 : int(-4..5, 2)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_Occurrence[q27] ->
+ or([q29 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q29] = q27
+ | q29 : int(1..11)])
+ | q27 : int(-4..5, 2)]),
+ and([q31 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q31]]
+ | q31 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q5] < var2_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q6] = false -> var2_ExplicitVarSizeWithFlags_Values[q6] = -4
+ | q6 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q13] = var2_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..11)])
+ | q11 : int(1..11)]),
+ and([q15 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q17] /\
+ var2_ExplicitVarSizeWithFlags_Values[q17] = var2_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..11)])
+ | q15 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q19] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q19]]
+ | q19 : int(1..11)]),
+ and([var2_Occurrence[q20] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q22] /\ var2_ExplicitVarSizeWithFlags_Values[q22] = q20
+ | q22 : int(1..11)])
+ | q20 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_2_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_2_1.eprime
new file mode 100644
index 0000000000..86dbab6810
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_2_1.eprime
@@ -0,0 +1,53 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on
+ [var2_Occurrence, var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values,
+ var2_ExplicitVarSizeWithDummy]
+such that
+ or([q18 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([var2_ExplicitVarSizeWithDummy[q20] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q20] = var2_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..11)])
+ | q18 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q21] != 6 /\
+ !or([q23 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q23] = var2_ExplicitVarSizeWithDummy[q21]
+ | q23 : int(1..11)])
+ | q21 : int(1..11)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q4] < var2_ExplicitVarSizeWithDummy[q4 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q5] = 6 -> var2_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q9] != 6 ->
+ or([q11 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q11] = var2_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..11)])
+ | q9 : int(1..11)]),
+ and([q13 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q15] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q15] = var2_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..11)])
+ | q13 : int(1..11)]),
+ and([var2_Occurrence[q24] ->
+ or([q26 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q26] = q24
+ | q26 : int(1..11)])
+ | q24 : int(-4..5, 2)]),
+ and([q28 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q28]]
+ | q28 : int(1..11)]),
+ and([var2_Occurrence[q29] ->
+ or([var2_ExplicitVarSizeWithDummy[q31] != 6 /\ var2_ExplicitVarSizeWithDummy[q31] = q29 | q31 : int(1..11)])
+ | q29 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q33] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q33]]
+ | q33 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_2_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_2_2.eprime
new file mode 100644
index 0000000000..c9a6281665
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_2_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on
+ [var2_ExplicitVarSizeWithDummy, var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q17 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([var2_ExplicitVarSizeWithDummy[q19] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q19] = var2_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..11)])
+ | q17 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q20] != 6 /\
+ !or([q22 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q22] = var2_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..11)])
+ | q20 : int(1..11)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q4] < var2_ExplicitVarSizeWithDummy[q4 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q5] = 6 -> var2_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q9] != 6 ->
+ or([q11 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q11] = var2_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..11)])
+ | q9 : int(1..11)]),
+ and([q13 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q15] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q15] = var2_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..11)])
+ | q13 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_2_4.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_2_4.eprime
new file mode 100644
index 0000000000..0a6285920a
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_2_4.eprime
@@ -0,0 +1,69 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithMarker_Marker,
+ var2_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithDummy]
+such that
+ or([q38 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([var2_ExplicitVarSizeWithDummy[q40] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q40] = var2_ExplicitVarSizeWithMarker_Values[q38]
+ | q40 : int(1..11)])
+ | q38 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q41] != 6 /\
+ !or([q43 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q43] = var2_ExplicitVarSizeWithDummy[q41]
+ | q43 : int(1..11)])
+ | q41 : int(1..11)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q4] < var2_ExplicitVarSizeWithDummy[q4 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q5] = 6 -> var2_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q9] != 6 ->
+ or([q11 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q11] = var2_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..11)])
+ | q9 : int(1..11)]),
+ and([q13 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q15] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q15] = var2_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..11)])
+ | q13 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q16] < var2_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q17] = false -> var2_ExplicitVarSizeWithFlags_Values[q17] = -4
+ | q17 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([q24 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q24] = var2_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([q26 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q28] /\
+ var2_ExplicitVarSizeWithFlags_Values[q28] = var2_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..11)])
+ | q26 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([var2_ExplicitVarSizeWithDummy[q32] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q32] = var2_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..11)])
+ | q30 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q34] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q36] /\
+ var2_ExplicitVarSizeWithFlags_Values[q36] = var2_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..11)])
+ | q34 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_3_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_3_1.eprime
new file mode 100644
index 0000000000..da12cb2407
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_3_1.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on [var2_Occurrence, var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q6 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([q8 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q8] = var2_ExplicitVarSizeWithMarker_Values[q6]
+ | q8 : int(1..11)])
+ | q6 : int(1..11)])
+ \/
+ or([q9 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([q11 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q11] = var2_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..11)])
+ | q9 : int(1..11)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_Occurrence[q12] ->
+ or([q14 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q14] = q12
+ | q14 : int(1..11)])
+ | q12 : int(-4..5, 2)]),
+ and([q16 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q16]]
+ | q16 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_3_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_3_2.eprime
new file mode 100644
index 0000000000..4b5f1c3017
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_3_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on
+ [var2_ExplicitVarSizeWithDummy, var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q17 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([q19 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q19] = var2_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..11)])
+ | q17 : int(1..11)])
+ \/
+ or([q20 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([q22 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q22] = var2_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..11)])
+ | q20 : int(1..11)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q4] < var2_ExplicitVarSizeWithDummy[q4 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q5] = 6 -> var2_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q9] != 6 ->
+ or([q11 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q11] = var2_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..11)])
+ | q9 : int(1..11)]),
+ and([q13 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q15] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q15] = var2_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..11)])
+ | q13 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_3_3.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_3_3.eprime
new file mode 100644
index 0000000000..d30539480c
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_3_3.eprime
@@ -0,0 +1,24 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q5 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([q7 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q7] = var2_ExplicitVarSizeWithMarker_Values[q5]
+ | q7 : int(1..11)])
+ | q5 : int(1..11)])
+ \/
+ or([q8 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([q10 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q10] = var2_ExplicitVarSizeWithMarker_Values[q8]
+ | q10 : int(1..11)])
+ | q8 : int(1..11)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_3_4.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_3_4.eprime
new file mode 100644
index 0000000000..9cb3e7b96b
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_3_4.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithMarker_Marker,
+ var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q18 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([q20 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q20] = var2_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..11)])
+ | q18 : int(1..11)])
+ \/
+ or([q21 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([q23 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q23] = var2_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..11)])
+ | q21 : int(1..11)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q4] < var2_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q5] = false -> var2_ExplicitVarSizeWithFlags_Values[q5] = -4
+ | q5 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q12] = var2_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..11)])
+ | q10 : int(1..11)]),
+ and([q14 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q16] /\
+ var2_ExplicitVarSizeWithFlags_Values[q16] = var2_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..11)])
+ | q14 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_4_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_4_1.eprime
new file mode 100644
index 0000000000..4ec1f855f0
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_4_1.eprime
@@ -0,0 +1,57 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on
+ [var2_Occurrence, var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values,
+ var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q19 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q21] /\
+ var2_ExplicitVarSizeWithFlags_Values[q21] = var2_ExplicitVarSizeWithMarker_Values[q19]
+ | q21 : int(1..11)])
+ | q19 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q22] /\
+ !or([q24 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q24] = var2_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q4] < var2_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q5] = false -> var2_ExplicitVarSizeWithFlags_Values[q5] = -4
+ | q5 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q12] = var2_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..11)])
+ | q10 : int(1..11)]),
+ and([q14 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q16] /\
+ var2_ExplicitVarSizeWithFlags_Values[q16] = var2_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..11)])
+ | q14 : int(1..11)]),
+ and([var2_Occurrence[q25] ->
+ or([q27 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q27] = q25
+ | q27 : int(1..11)])
+ | q25 : int(-4..5, 2)]),
+ and([q29 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q29]]
+ | q29 : int(1..11)]),
+ and([var2_Occurrence[q30] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q32] /\ var2_ExplicitVarSizeWithFlags_Values[q32] = q30
+ | q32 : int(1..11)])
+ | q30 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q34] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q34]]
+ | q34 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_4_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_4_2.eprime
new file mode 100644
index 0000000000..df59cf3084
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_4_2.eprime
@@ -0,0 +1,69 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on
+ [var2_ExplicitVarSizeWithDummy, var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values,
+ var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q38 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q40] /\
+ var2_ExplicitVarSizeWithFlags_Values[q40] = var2_ExplicitVarSizeWithMarker_Values[q38]
+ | q40 : int(1..11)])
+ | q38 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q41] /\
+ !or([q43 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q43] = var2_ExplicitVarSizeWithFlags_Values[q41]
+ | q43 : int(1..11)])
+ | q41 : int(1..11)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q4] < var2_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q5] = false -> var2_ExplicitVarSizeWithFlags_Values[q5] = -4
+ | q5 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q12] = var2_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..11)])
+ | q10 : int(1..11)]),
+ and([q14 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q16] /\
+ var2_ExplicitVarSizeWithFlags_Values[q16] = var2_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..11)])
+ | q14 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q17] < var2_ExplicitVarSizeWithDummy[q17 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q17] = 6
+ | q17 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q18] = 6 -> var2_ExplicitVarSizeWithDummy[q18 + 1] = 6 | q18 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q22] != 6 ->
+ or([q24 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q24] = var2_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([q26 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q28] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q28] = var2_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..11)])
+ | q26 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q30] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q32] /\
+ var2_ExplicitVarSizeWithFlags_Values[q32] = var2_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..11)])
+ | q30 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([var2_ExplicitVarSizeWithDummy[q36] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q36] = var2_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..11)])
+ | q34 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_3_4_3.eprime b/tests/exhaustive/autogen/gen32/expected/model_3_4_3.eprime
new file mode 100644
index 0000000000..4785a0c0ec
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_3_4_3.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithMarker_Marker,
+ var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q18 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q20] /\
+ var2_ExplicitVarSizeWithFlags_Values[q20] = var2_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..11)])
+ | q18 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q21] /\
+ !or([q23 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q23] = var2_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..11)])
+ | q21 : int(1..11)]),
+ and([q1 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q1] < var2_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([q2 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q4] < var2_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q5] = false -> var2_ExplicitVarSizeWithFlags_Values[q5] = -4
+ | q5 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q12] = var2_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..11)])
+ | q10 : int(1..11)]),
+ and([q14 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q16] /\
+ var2_ExplicitVarSizeWithFlags_Values[q16] = var2_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..11)])
+ | q14 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_1_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_1_1.eprime
new file mode 100644
index 0000000000..5c6854637e
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_1_1.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on [var2_Occurrence, var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q8] /\ !var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q8]]
+ | q8 : int(1..11)])
+ \/
+ or([var2_Occurrence[q7] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q10] /\ var2_ExplicitVarSizeWithFlags_Values[q10] = q7
+ | q10 : int(1..11)])
+ | q7 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)]),
+ and([var2_Occurrence[q11] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q13] /\ var2_ExplicitVarSizeWithFlags_Values[q13] = q11
+ | q13 : int(1..11)])
+ | q11 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q15] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q15]]
+ | q15 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_1_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_1_2.eprime
new file mode 100644
index 0000000000..0f8965d6c5
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_1_2.eprime
@@ -0,0 +1,50 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on
+ [var2_ExplicitVarSizeWithDummy, var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values,
+ var2_Occurrence]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q25] /\ !var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q25]]
+ | q25 : int(1..11)])
+ \/
+ or([var2_Occurrence[q24] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q27] /\ var2_ExplicitVarSizeWithFlags_Values[q27] = q24
+ | q27 : int(1..11)])
+ | q24 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)]),
+ and([var2_Occurrence[q28] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q30] /\ var2_ExplicitVarSizeWithFlags_Values[q30] = q28
+ | q30 : int(1..11)])
+ | q28 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q32] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q32]]
+ | q32 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q7] < var2_ExplicitVarSizeWithDummy[q7 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q8] = 6 -> var2_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q12] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q14] /\
+ var2_ExplicitVarSizeWithFlags_Values[q14] = var2_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..11)])
+ | q12 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([var2_ExplicitVarSizeWithDummy[q18] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q18] = var2_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..11)])
+ | q16 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q20] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q20]]
+ | q20 : int(1..11)]),
+ and([var2_Occurrence[q21] ->
+ or([var2_ExplicitVarSizeWithDummy[q23] != 6 /\ var2_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..11)])
+ | q21 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_1_3.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_1_3.eprime
new file mode 100644
index 0000000000..6fff70a69f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_1_3.eprime
@@ -0,0 +1,53 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithFlags_Flags,
+ var2_ExplicitVarSizeWithFlags_Values, var2_Occurrence]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q24] /\ !var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q24]]
+ | q24 : int(1..11)])
+ \/
+ or([var2_Occurrence[q23] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q26] /\ var2_ExplicitVarSizeWithFlags_Values[q26] = q23
+ | q26 : int(1..11)])
+ | q23 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)]),
+ and([var2_Occurrence[q27] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q29] /\ var2_ExplicitVarSizeWithFlags_Values[q29] = q27
+ | q29 : int(1..11)])
+ | q27 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q31] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q31]]
+ | q31 : int(1..11)]),
+ and([q7 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q7] < var2_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..10)]),
+ and([q8 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q8] = -4
+ | q8 : int(1..11)]),
+ and([q11 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q13] /\
+ var2_ExplicitVarSizeWithFlags_Values[q13] = var2_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..11)])
+ | q11 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q17] = var2_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..11)])
+ | q15 : int(1..11)]),
+ and([q19 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q19]]
+ | q19 : int(1..11)]),
+ and([var2_Occurrence[q20] ->
+ or([q22 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..11)])
+ | q20 : int(-4..5, 2)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_2_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_2_1.eprime
new file mode 100644
index 0000000000..b7b3b2ad4a
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_2_1.eprime
@@ -0,0 +1,54 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on
+ [var2_Occurrence, var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values,
+ var2_ExplicitVarSizeWithDummy]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q20] /\
+ !or([var2_ExplicitVarSizeWithDummy[q22] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q22] = var2_ExplicitVarSizeWithFlags_Values[q20]
+ | q22 : int(1..11)])
+ | q20 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q23] != 6 /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q25] /\
+ var2_ExplicitVarSizeWithFlags_Values[q25] = var2_ExplicitVarSizeWithDummy[q23]
+ | q25 : int(1..11)])
+ | q23 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q6] < var2_ExplicitVarSizeWithDummy[q6 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q7] = 6 -> var2_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q11] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q13] /\
+ var2_ExplicitVarSizeWithFlags_Values[q13] = var2_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..11)])
+ | q11 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([var2_ExplicitVarSizeWithDummy[q17] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q17] = var2_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..11)])
+ | q15 : int(1..11)]),
+ and([var2_Occurrence[q26] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q28] /\ var2_ExplicitVarSizeWithFlags_Values[q28] = q26
+ | q28 : int(1..11)])
+ | q26 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q30] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q30]]
+ | q30 : int(1..11)]),
+ and([var2_Occurrence[q31] ->
+ or([var2_ExplicitVarSizeWithDummy[q33] != 6 /\ var2_ExplicitVarSizeWithDummy[q33] = q31 | q33 : int(1..11)])
+ | q31 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithDummy[q35] != 6 -> var2_Occurrence[var2_ExplicitVarSizeWithDummy[q35]]
+ | q35 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_2_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_2_2.eprime
new file mode 100644
index 0000000000..9a094995de
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_2_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on [var2_ExplicitVarSizeWithDummy, var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q19] /\
+ !or([var2_ExplicitVarSizeWithDummy[q21] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q21] = var2_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..11)])
+ | q19 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q22] != 6 /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q24] /\
+ var2_ExplicitVarSizeWithFlags_Values[q24] = var2_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q6] < var2_ExplicitVarSizeWithDummy[q6 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q7] = 6 -> var2_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q11] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q13] /\
+ var2_ExplicitVarSizeWithFlags_Values[q13] = var2_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..11)])
+ | q11 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([var2_ExplicitVarSizeWithDummy[q17] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q17] = var2_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..11)])
+ | q15 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_2_3.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_2_3.eprime
new file mode 100644
index 0000000000..ff001560cb
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_2_3.eprime
@@ -0,0 +1,69 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithFlags_Flags,
+ var2_ExplicitVarSizeWithFlags_Values, var2_ExplicitVarSizeWithDummy]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q38] /\
+ !or([var2_ExplicitVarSizeWithDummy[q40] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q40] = var2_ExplicitVarSizeWithFlags_Values[q38]
+ | q40 : int(1..11)])
+ | q38 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithDummy[q41] != 6 /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q43] /\
+ var2_ExplicitVarSizeWithFlags_Values[q43] = var2_ExplicitVarSizeWithDummy[q41]
+ | q43 : int(1..11)])
+ | q41 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q6] < var2_ExplicitVarSizeWithDummy[q6 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q7] = 6 -> var2_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q11] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q13] /\
+ var2_ExplicitVarSizeWithFlags_Values[q13] = var2_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..11)])
+ | q11 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([var2_ExplicitVarSizeWithDummy[q17] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q17] = var2_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..11)])
+ | q15 : int(1..11)]),
+ and([q18 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q18] < var2_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..10)]),
+ and([q19 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q19] = -4
+ | q19 : int(1..11)]),
+ and([q22 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q24] /\
+ var2_ExplicitVarSizeWithFlags_Values[q24] = var2_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([q28 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q28] = var2_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..11)])
+ | q26 : int(1..11)]),
+ and([q30 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q32] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q32] = var2_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..11)])
+ | q30 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q34] != 6 ->
+ or([q36 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q36] = var2_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..11)])
+ | q34 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_3_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_3_1.eprime
new file mode 100644
index 0000000000..eb41be6810
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_3_1.eprime
@@ -0,0 +1,57 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on
+ [var2_Occurrence, var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values,
+ var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q19] /\
+ !or([q21 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q21] = var2_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..11)])
+ | q19 : int(1..11)])
+ \/
+ or([q22 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q24] /\
+ var2_ExplicitVarSizeWithFlags_Values[q24] = var2_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)]),
+ and([q6 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q6] < var2_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..10)]),
+ and([q7 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q7] = -4
+ | q7 : int(1..11)]),
+ and([q10 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q12] /\
+ var2_ExplicitVarSizeWithFlags_Values[q12] = var2_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..11)])
+ | q10 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q16] = var2_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..11)])
+ | q14 : int(1..11)]),
+ and([var2_Occurrence[q25] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q27] /\ var2_ExplicitVarSizeWithFlags_Values[q27] = q25
+ | q27 : int(1..11)])
+ | q25 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q29] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q29]]
+ | q29 : int(1..11)]),
+ and([var2_Occurrence[q30] ->
+ or([q32 <= var2_ExplicitVarSizeWithMarker_Marker /\ var2_ExplicitVarSizeWithMarker_Values[q32] = q30
+ | q32 : int(1..11)])
+ | q30 : int(-4..5, 2)]),
+ and([q34 <= var2_ExplicitVarSizeWithMarker_Marker -> var2_Occurrence[var2_ExplicitVarSizeWithMarker_Values[q34]]
+ | q34 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_3_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_3_2.eprime
new file mode 100644
index 0000000000..8dcf88b159
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_3_2.eprime
@@ -0,0 +1,69 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on
+ [var2_ExplicitVarSizeWithDummy, var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values,
+ var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q38] /\
+ !or([q40 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q40] = var2_ExplicitVarSizeWithFlags_Values[q38]
+ | q40 : int(1..11)])
+ | q38 : int(1..11)])
+ \/
+ or([q41 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q43] /\
+ var2_ExplicitVarSizeWithFlags_Values[q43] = var2_ExplicitVarSizeWithMarker_Values[q41]
+ | q43 : int(1..11)])
+ | q41 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)]),
+ and([q6 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q6] < var2_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..10)]),
+ and([q7 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q7] = -4
+ | q7 : int(1..11)]),
+ and([q10 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q12] /\
+ var2_ExplicitVarSizeWithFlags_Values[q12] = var2_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..11)])
+ | q10 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q16] = var2_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..11)])
+ | q14 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q17] < var2_ExplicitVarSizeWithDummy[q17 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q17] = 6
+ | q17 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q18] = 6 -> var2_ExplicitVarSizeWithDummy[q18 + 1] = 6 | q18 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q22] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q24] /\
+ var2_ExplicitVarSizeWithFlags_Values[q24] = var2_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([var2_ExplicitVarSizeWithDummy[q28] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q28] = var2_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..11)])
+ | q26 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithDummy[q30] != 6 ->
+ or([q32 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q32] = var2_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..11)])
+ | q30 : int(1..11)]),
+ and([q34 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithDummy[q36] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q36] = var2_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..11)])
+ | q34 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_3_3.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_3_3.eprime
new file mode 100644
index 0000000000..d1c3ae501b
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_3_3.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithFlags_Flags,
+ var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q18] /\
+ !or([q20 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q20] = var2_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..11)])
+ | q18 : int(1..11)])
+ \/
+ or([q21 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q23] /\
+ var2_ExplicitVarSizeWithFlags_Values[q23] = var2_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..11)])
+ | q21 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)]),
+ and([q6 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q6] < var2_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..10)]),
+ and([q7 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q7] = -4
+ | q7 : int(1..11)]),
+ and([q10 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q12] /\
+ var2_ExplicitVarSizeWithFlags_Values[q12] = var2_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..11)])
+ | q10 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q16] = var2_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..11)])
+ | q14 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_4_1.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_4_1.eprime
new file mode 100644
index 0000000000..dc916012b6
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_4_1.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_Occurrence: matrix indexed by [int(-4..5, 2)] of bool
+branching on [var2_Occurrence, var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q8] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q10] /\
+ var2_ExplicitVarSizeWithFlags_Values[q10] = var2_ExplicitVarSizeWithFlags_Values[q8]
+ | q10 : int(1..11)])
+ | q8 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q11] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q13] /\
+ var2_ExplicitVarSizeWithFlags_Values[q13] = var2_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..11)])
+ | q11 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)]),
+ and([var2_Occurrence[q14] ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q16] /\ var2_ExplicitVarSizeWithFlags_Values[q16] = q14
+ | q16 : int(1..11)])
+ | q14 : int(-4..5, 2)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q18] -> var2_Occurrence[var2_ExplicitVarSizeWithFlags_Values[q18]]
+ | q18 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_4_2.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_4_2.eprime
new file mode 100644
index 0000000000..26e15ff1e8
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_4_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithDummy: matrix indexed by [int(1..11)] of int(-4..5, 2, 6)
+branching on [var2_ExplicitVarSizeWithDummy, var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q19] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q21] /\
+ var2_ExplicitVarSizeWithFlags_Values[q21] = var2_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..11)])
+ | q19 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q22] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q24] /\
+ var2_ExplicitVarSizeWithFlags_Values[q24] = var2_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..11)])
+ | q22 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q6] < var2_ExplicitVarSizeWithDummy[q6 + 1] \/
+ var2_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q7] = 6 -> var2_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithDummy[q11] != 6 ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q13] /\
+ var2_ExplicitVarSizeWithFlags_Values[q13] = var2_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..11)])
+ | q11 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([var2_ExplicitVarSizeWithDummy[q17] != 6 /\
+ var2_ExplicitVarSizeWithDummy[q17] = var2_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..11)])
+ | q15 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_4_3.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_4_3.eprime
new file mode 100644
index 0000000000..a9522bafc7
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_4_3.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+find var2_ExplicitVarSizeWithMarker_Marker: int(0..11)
+find var2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on
+ [var2_ExplicitVarSizeWithMarker_Marker, var2_ExplicitVarSizeWithMarker_Values, var2_ExplicitVarSizeWithFlags_Flags,
+ var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q18] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q20] /\
+ var2_ExplicitVarSizeWithFlags_Values[q20] = var2_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..11)])
+ | q18 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q21] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q23] /\
+ var2_ExplicitVarSizeWithFlags_Values[q23] = var2_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..11)])
+ | q21 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)]),
+ and([q6 + 1 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ var2_ExplicitVarSizeWithMarker_Values[q6] < var2_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..10)]),
+ and([q7 > var2_ExplicitVarSizeWithMarker_Marker -> var2_ExplicitVarSizeWithMarker_Values[q7] = -4
+ | q7 : int(1..11)]),
+ and([q10 <= var2_ExplicitVarSizeWithMarker_Marker ->
+ or([var2_ExplicitVarSizeWithFlags_Flags[q12] /\
+ var2_ExplicitVarSizeWithFlags_Values[q12] = var2_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..11)])
+ | q10 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= var2_ExplicitVarSizeWithMarker_Marker /\
+ var2_ExplicitVarSizeWithMarker_Values[q16] = var2_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..11)])
+ | q14 : int(1..11)])
+
diff --git a/tests/exhaustive/autogen/gen32/expected/model_4_4_4.eprime b/tests/exhaustive/autogen/gen32/expected/model_4_4_4.eprime
new file mode 100644
index 0000000000..ec2da87b64
--- /dev/null
+++ b/tests/exhaustive/autogen/gen32/expected/model_4_4_4.eprime
@@ -0,0 +1,25 @@
+language ESSENCE' 1.0
+
+letting let1 be -4
+find var2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..11)] of bool
+find var2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..11)] of int(-4..5, 2)
+branching on [var2_ExplicitVarSizeWithFlags_Flags, var2_ExplicitVarSizeWithFlags_Values]
+such that
+ or([var2_ExplicitVarSizeWithFlags_Flags[q7] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q9] /\
+ var2_ExplicitVarSizeWithFlags_Values[q9] = var2_ExplicitVarSizeWithFlags_Values[q7]
+ | q9 : int(1..11)])
+ | q7 : int(1..11)])
+ \/
+ or([var2_ExplicitVarSizeWithFlags_Flags[q10] /\
+ !or([var2_ExplicitVarSizeWithFlags_Flags[q12] /\
+ var2_ExplicitVarSizeWithFlags_Values[q12] = var2_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..11)])
+ | q10 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ var2_ExplicitVarSizeWithFlags_Values[q1] < var2_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..10)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q2] = false -> var2_ExplicitVarSizeWithFlags_Values[q2] = -4
+ | q2 : int(1..11)]),
+ and([var2_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> var2_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..10)])
+
diff --git a/tests/exhaustive/autogen/gen35/expected/model_1.eprime b/tests/exhaustive/autogen/gen35/expected/model_1.eprime
index 49af6c5f46..0a734c1835 100644
--- a/tests/exhaustive/autogen/gen35/expected/model_1.eprime
+++ b/tests/exhaustive/autogen/gen35/expected/model_1.eprime
@@ -13,43 +13,19 @@ branching on
var2_FunctionAsRelationR8R17_RelationAsSetR8R17_ExplicitVarSizeWithMarkerR8R17_Values_1_ExplicitWithFlags_Values,
var2_FunctionAsRelationR8R17_RelationAsSetR8R17_ExplicitVarSizeWithMarkerR8R17_Values_2_RelationAsMatrix]
such that
-<<<<<<< HEAD
- and([q1 + 1 <= var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Marker ->
-<<<<<<< HEAD
- flatten([flatten([]),
-=======
- flatten([([] : `matrix indexed by [int()] of int`),
->>>>>>> master
- flatten([[-toInt(var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Values_2_RelationAsMatrix
- [q1, q15, q16])
- | q16 : bool]
- | q15 : bool]);
-=======
and([q1 + 1 <= var2_FunctionAsRelationR8R17_RelationAsSetR8R17_ExplicitVarSizeWithMarkerR8R17_Marker ->
flatten([([] : `matrix indexed by [int()] of int`),
flatten([[-toInt(var2_FunctionAsRelationR8R17_RelationAsSetR8R17_ExplicitVarSizeWithMarkerR8R17_Values_2_RelationAsMatrix
[q1, q16, q17])
| q17 : bool]
| q16 : bool]);
->>>>>>> main
int(1..2)])
>>>>>> master
- flatten([[-toInt(var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Values_2_RelationAsMatrix
- [q1 + 1, q18, q19])
- | q19 : bool]
- | q18 : bool]);
-=======
flatten([[-toInt(var2_FunctionAsRelationR8R17_RelationAsSetR8R17_ExplicitVarSizeWithMarkerR8R17_Values_2_RelationAsMatrix
[q1 + 1, q19, q20])
| q20 : bool]
| q19 : bool]);
->>>>>>> main
int(1..2)])
| q1 : int(1..2)]),
and([q2 > var2_FunctionAsRelationR8R17_RelationAsSetR8R17_ExplicitVarSizeWithMarkerR8R17_Marker ->
diff --git a/tests/exhaustive/autogen/gen35/expected/model_1.eprime.orig b/tests/exhaustive/autogen/gen35/expected/model_1.eprime.orig
deleted file mode 100644
index 6d09f93a09..0000000000
--- a/tests/exhaustive/autogen/gen35/expected/model_1.eprime.orig
+++ /dev/null
@@ -1,57 +0,0 @@
-language ESSENCE' 1.0
-
-find var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Marker: int(0..3)
-find var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Values_1_ExplicitWithFlags_Flags:
- matrix indexed by [int(1..3), int(1..0)] of int(0)
-find var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Values_1_ExplicitWithFlags_Values:
- matrix indexed by [int(1..3), int(1..0)] of bool
-find var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Values_2_RelationAsMatrix:
- matrix indexed by [int(1..3), bool, bool] of bool
-branching on
- [var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Marker,
- var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Values_1_ExplicitWithFlags_Flags,
- var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Values_1_ExplicitWithFlags_Values,
- var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Values_2_RelationAsMatrix]
-such that
- and([q1 + 1 <= var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Marker ->
-<<<<<<< HEAD
- flatten([flatten([]),
-=======
- flatten([([] : `matrix indexed by [int()] of int`),
->>>>>>> master
- flatten([[-toInt(var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Values_2_RelationAsMatrix
- [q1, q15, q16])
- | q16 : bool]
- | q15 : bool]);
- int(1..2)])
- >>>>>> master
- flatten([[-toInt(var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Values_2_RelationAsMatrix
- [q1 + 1, q18, q19])
- | q19 : bool]
- | q18 : bool]);
- int(1..2)])
- | q1 : int(1..2)]),
- and([q2 > var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Marker ->
- and([and([var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Values_2_RelationAsMatrix
- [q2, q22, q23]
- = false
- | q23 : bool])
- | q22 : bool])
- | q2 : int(1..3)]),
- 0 <= var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Marker,
- var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Marker <= 3,
- and([q3 <= var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Marker -> false
- | q3 : int(1..3)]),
- and([q3 <= var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Marker ->
- 4 <=
- sum([sum([toInt(var2_FunctionAsRelationR8R16_RelationAsSetR8R16_ExplicitVarSizeWithMarkerR8R16_Values_2_RelationAsMatrix
- [q3, q10, q11])
- | q11 : bool])
- | q10 : bool])
- | q3 : int(1..3)])
-
diff --git a/tests/exhaustive/autogen/gen36/expected/model_1-solution000001.solution b/tests/exhaustive/autogen/gen36/expected/model_1-solution000001.solution
new file mode 100644
index 0000000000..78bab35d5f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen36/expected/model_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var6 be {}
diff --git a/tests/exhaustive/autogen/gen36/expected/model_2-solution000001.solution b/tests/exhaustive/autogen/gen36/expected/model_2-solution000001.solution
new file mode 100644
index 0000000000..78bab35d5f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen36/expected/model_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var6 be {}
diff --git a/tests/exhaustive/autogen/gen36/expected/model_3-solution000001.solution b/tests/exhaustive/autogen/gen36/expected/model_3-solution000001.solution
new file mode 100644
index 0000000000..78bab35d5f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen36/expected/model_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var6 be {}
diff --git a/tests/exhaustive/autogen/gen36/expected/model_3.eprime.orig b/tests/exhaustive/autogen/gen36/expected/model_3.eprime.orig
deleted file mode 100644
index a5be2eacf9..0000000000
--- a/tests/exhaustive/autogen/gen36/expected/model_3.eprime.orig
+++ /dev/null
@@ -1,94 +0,0 @@
-language ESSENCE' 1.0
-
-letting let1 be 2
-find var6_ExplicitVarSizeWithMarkerR19_Marker: int(0..2)
-find var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts: matrix indexed by [int(1..2)] of int(1..2)
-find var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_WhichPart:
- matrix indexed by [int(1..2), int(2, 5)] of int(1..2)
-find var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_PartSizes:
- matrix indexed by [int(1..2), int(1..2)] of int(0)
-find var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_FirstIndex:
- matrix indexed by [int(1..2), int(1..2)] of int(2, 5)
-branching on
- [var6_ExplicitVarSizeWithMarkerR19_Marker, var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts,
- var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_WhichPart,
- var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_PartSizes,
- var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_FirstIndex]
-such that
- 2 <= var6_ExplicitVarSizeWithMarkerR19_Marker ->
- flatten([[var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts[1]; int(1)],
- [var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_WhichPart[1, q14] | q14 : int(2, 5)],
- [var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_PartSizes[1, q15] | q15 : int(1..2)],
- [var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_FirstIndex[1, q16] | q16 : int(1..2)];
- int(1..4)])
- var6_ExplicitVarSizeWithMarkerR19_Marker ->
- and([var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts[q2] = 1,
- and([var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_WhichPart[q2, q20] = 1
- | q20 : int(2, 5)]),
- and([var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_PartSizes[q2, q21] = 0
- | q21 : int(1..2)]),
- and([var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_FirstIndex[q2, q22] = 2
- | q22 : int(1..2)]);
- int(1..4)])
- | q2 : int(1..2)]),
- and([q3 <= var6_ExplicitVarSizeWithMarkerR19_Marker ->
- and([q4 <= var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts[q3] ->
- 0 = var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_PartSizes[q3, q4]
- | q4 : int(1..2)])
- | q3 : int(1..2)]),
- and([q3 <= var6_ExplicitVarSizeWithMarkerR19_Marker ->
- and([q4 > var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts[q3] ->
- var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_PartSizes[q3, q4] = 0
- | q4 : int(1..2)])
- | q3 : int(1..2)]),
- and([q3 <= var6_ExplicitVarSizeWithMarkerR19_Marker ->
- 3 <= var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts[q3]
- | q3 : int(1..2)]),
- and([q3 <= var6_ExplicitVarSizeWithMarkerR19_Marker ->
- var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts[q3] <= 2
- | q3 : int(1..2)]),
- and([q3 <= var6_ExplicitVarSizeWithMarkerR19_Marker ->
- var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts[q3] =
- max([var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_WhichPart[q3, q7] | q7 : int(2, 5)])
- | q3 : int(1..2)]),
- and([q3 <= var6_ExplicitVarSizeWithMarkerR19_Marker ->
- and([var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_PartSizes[q3, q8] =
- sum([toInt(var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_WhichPart[q3, q9] = q8)
- | q9 : int(2, 5)])
- | q8 : int(1..2)])
- | q3 : int(1..2)]),
- and([q3 <= var6_ExplicitVarSizeWithMarkerR19_Marker ->
- and([q10 <= var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts[q3] ->
- and([var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_WhichPart[q3, q11] = q10 ->
- var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_FirstIndex[q3, q10] <= q11
- | q11 : int(2, 5)])
- | q10 : int(1..2)])
- | q3 : int(1..2)]),
- and([q3 <= var6_ExplicitVarSizeWithMarkerR19_Marker ->
- and([q10 <= var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts[q3] ->
- or([var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_WhichPart[q3, q11] = q10 /\
- var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_FirstIndex[q3, q10] = q11
- | q11 : int(2, 5)])
- | q10 : int(1..2)])
- | q3 : int(1..2)]),
- and([q3 <= var6_ExplicitVarSizeWithMarkerR19_Marker ->
- and([q10 > var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts[q3] ->
- var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_FirstIndex[q3, q10] = 2
- | q10 : int(1..2)])
- | q3 : int(1..2)]),
- and([q3 <= var6_ExplicitVarSizeWithMarkerR19_Marker ->
- and([q12 <= var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts[q3] /\
- q13 <= var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_NumParts[q3]
- ->
- (q12 < q13 <->
- var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_FirstIndex[q3, q12] <
- var6_ExplicitVarSizeWithMarkerR19_Values_PartitionOccurrence_FirstIndex[q3, q13])
- | q12 : int(1..2), q13 : int(1..2)])
- | q3 : int(1..2)])
-
diff --git a/tests/exhaustive/autogen/gen36/expected/model_4-solution000001.solution b/tests/exhaustive/autogen/gen36/expected/model_4-solution000001.solution
new file mode 100644
index 0000000000..78bab35d5f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen36/expected/model_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var6 be {}
diff --git a/tests/exhaustive/autogen/gen36/expected/model_5-solution000001.solution b/tests/exhaustive/autogen/gen36/expected/model_5-solution000001.solution
new file mode 100644
index 0000000000..78bab35d5f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen36/expected/model_5-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var6 be {}
diff --git a/tests/exhaustive/autogen/gen36/expected/model_6-solution000001.solution b/tests/exhaustive/autogen/gen36/expected/model_6-solution000001.solution
new file mode 100644
index 0000000000..78bab35d5f
--- /dev/null
+++ b/tests/exhaustive/autogen/gen36/expected/model_6-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting var6 be {}
diff --git a/tests/exhaustive/autogen/gen36/expected/model_6.eprime.orig b/tests/exhaustive/autogen/gen36/expected/model_6.eprime.orig
deleted file mode 100644
index c2d0633786..0000000000
--- a/tests/exhaustive/autogen/gen36/expected/model_6.eprime.orig
+++ /dev/null
@@ -1,95 +0,0 @@
-language ESSENCE' 1.0
-
-letting let1 be 2
-find var6_ExplicitVarSizeWithFlagsR19_Flags: matrix indexed by [int(1..2)] of bool
-find var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts: matrix indexed by [int(1..2)] of int(1..2)
-find var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_WhichPart:
- matrix indexed by [int(1..2), int(2, 5)] of int(1..2)
-find var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_PartSizes:
- matrix indexed by [int(1..2), int(1..2)] of int(0)
-find var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_FirstIndex:
- matrix indexed by [int(1..2), int(1..2)] of int(2, 5)
-branching on
- [var6_ExplicitVarSizeWithFlagsR19_Flags, var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts,
- var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_WhichPart,
- var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_PartSizes,
- var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_FirstIndex]
-such that
- var6_ExplicitVarSizeWithFlagsR19_Flags[2] ->
- flatten([[var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts[1]; int(1)],
- [var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_WhichPart[1, q16] | q16 : int(2, 5)],
- [var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_PartSizes[1, q17] | q17 : int(1..2)],
- [var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_FirstIndex[1, q18] | q18 : int(1..2)];
- int(1..4)])
-
- and([var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts[q2] = 1,
- and([var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_WhichPart[q2, q22] = 1
- | q22 : int(2, 5)]),
- and([var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_PartSizes[q2, q23] = 0
- | q23 : int(1..2)]),
- and([var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_FirstIndex[q2, q24] = 2
- | q24 : int(1..2)]);
- int(1..4)])
- | q2 : int(1..2)]),
- var6_ExplicitVarSizeWithFlagsR19_Flags[2] -> var6_ExplicitVarSizeWithFlagsR19_Flags[1],
- and([var6_ExplicitVarSizeWithFlagsR19_Flags[q5] ->
- and([q6 <= var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts[q5] ->
- 0 = var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_PartSizes[q5, q6]
- | q6 : int(1..2)])
- | q5 : int(1..2)]),
- and([var6_ExplicitVarSizeWithFlagsR19_Flags[q5] ->
- and([q6 > var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts[q5] ->
- var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_PartSizes[q5, q6] = 0
- | q6 : int(1..2)])
- | q5 : int(1..2)]),
- and([var6_ExplicitVarSizeWithFlagsR19_Flags[q5] ->
- 3 <= var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts[q5]
- | q5 : int(1..2)]),
- and([var6_ExplicitVarSizeWithFlagsR19_Flags[q5] ->
- var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts[q5] <= 2
- | q5 : int(1..2)]),
- and([var6_ExplicitVarSizeWithFlagsR19_Flags[q5] ->
- var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts[q5] =
- max([var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_WhichPart[q5, q9] | q9 : int(2, 5)])
- | q5 : int(1..2)]),
- and([var6_ExplicitVarSizeWithFlagsR19_Flags[q5] ->
- and([var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_PartSizes[q5, q10] =
- sum([toInt(var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_WhichPart[q5, q11] = q10)
- | q11 : int(2, 5)])
- | q10 : int(1..2)])
- | q5 : int(1..2)]),
- and([var6_ExplicitVarSizeWithFlagsR19_Flags[q5] ->
- and([q12 <= var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts[q5] ->
- and([var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_WhichPart[q5, q13] = q12 ->
- var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_FirstIndex[q5, q12] <= q13
- | q13 : int(2, 5)])
- | q12 : int(1..2)])
- | q5 : int(1..2)]),
- and([var6_ExplicitVarSizeWithFlagsR19_Flags[q5] ->
- and([q12 <= var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts[q5] ->
- or([var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_WhichPart[q5, q13] = q12 /\
- var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_FirstIndex[q5, q12] = q13
- | q13 : int(2, 5)])
- | q12 : int(1..2)])
- | q5 : int(1..2)]),
- and([var6_ExplicitVarSizeWithFlagsR19_Flags[q5] ->
- and([q12 > var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts[q5] ->
- var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_FirstIndex[q5, q12] = 2
- | q12 : int(1..2)])
- | q5 : int(1..2)]),
- and([var6_ExplicitVarSizeWithFlagsR19_Flags[q5] ->
- and([q14 <= var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts[q5] /\
- q15 <= var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_NumParts[q5]
- ->
- (q14 < q15 <->
- var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_FirstIndex[q5, q14] <
- var6_ExplicitVarSizeWithFlagsR19_Values_PartitionOccurrence_FirstIndex[q5, q15])
- | q14 : int(1..2), q15 : int(1..2)])
- | q5 : int(1..2)])
-
diff --git a/tests/exhaustive/autogen/gen37/expected/model_1.eprime b/tests/exhaustive/autogen/gen37/expected/model_1.eprime
index 335600f8a4..d9aff1a2af 100644
--- a/tests/exhaustive/autogen/gen37/expected/model_1.eprime
+++ b/tests/exhaustive/autogen/gen37/expected/model_1.eprime
@@ -16,32 +16,24 @@ such that
[-toInt(var1_RelationAsSetR5R8_ExplicitR5R8_1_ExplicitVarSizeWithMarker_Values[1, q13])
| q13 : int(1..2)];
int(1..2)]),
-<<<<<<< HEAD
- flatten([]);
-=======
flatten([flatten([[-var1_RelationAsSetR5R8_ExplicitR5R8_2_ExplicitWithFlags_Flags[1, q14]; int(1)],
[-toInt(var1_RelationAsSetR5R8_ExplicitR5R8_2_ExplicitWithFlags_Values[1, q14]); int(1)];
int(1..2)])
| q14 : int(1..2)]);
->>>>>>> main
int(1..2)])
>>>>>> main
int(1..2)]),
and([2 <= var1_RelationAsSetR5R8_ExplicitR5R8_1_ExplicitVarSizeWithMarker_Marker[q2] ->
- [-toInt(var1_RelationAsSetR5R8_ExplicitR5R8_1_ExplicitVarSizeWithMarker_Values[q2, 1]); int(1)] var1_RelationAsSetR5R8_ExplicitR5R8_1_ExplicitVarSizeWithMarker_Marker[q2] ->
var1_RelationAsSetR5R8_ExplicitR5R8_1_ExplicitVarSizeWithMarker_Values[q2, q4] = false
diff --git a/tests/exhaustive/autogen/gen37/expected/model_2.eprime b/tests/exhaustive/autogen/gen37/expected/model_2.eprime
index 47b06b745d..e7a984ee90 100644
--- a/tests/exhaustive/autogen/gen37/expected/model_2.eprime
+++ b/tests/exhaustive/autogen/gen37/expected/model_2.eprime
@@ -32,8 +32,8 @@ such that
int(1..2)]);
int(1..2)]),
and([2 <= var1_RelationAsSetR5R9_ExplicitR5R9_1_ExplicitVarSizeWithMarker_Marker[q2] ->
- [-toInt(var1_RelationAsSetR5R9_ExplicitR5R9_1_ExplicitVarSizeWithMarker_Values[q2, 1]); int(1)] var1_RelationAsSetR5R9_ExplicitR5R9_1_ExplicitVarSizeWithMarker_Marker[q2] ->
var1_RelationAsSetR5R9_ExplicitR5R9_1_ExplicitVarSizeWithMarker_Values[q2, q4] = false
diff --git a/tests/exhaustive/autogen/gen37/expected/model_3.eprime b/tests/exhaustive/autogen/gen37/expected/model_3.eprime
index 49469708bc..de9c2120e0 100644
--- a/tests/exhaustive/autogen/gen37/expected/model_3.eprime
+++ b/tests/exhaustive/autogen/gen37/expected/model_3.eprime
@@ -18,16 +18,11 @@ such that
[-toInt(var1_RelationAsSetR4R8_ExplicitR4R8_1_ExplicitVarSizeWithFlags_Values[1, q15]);
int(1)];
int(1..2)])
-<<<<<<< HEAD
- | q14 : int(1..2)]),
- flatten([]);
-=======
| q15 : int(1..2)]),
flatten([flatten([[-var1_RelationAsSetR4R8_ExplicitR4R8_2_ExplicitWithFlags_Flags[1, q16]; int(1)],
[-toInt(var1_RelationAsSetR4R8_ExplicitR4R8_2_ExplicitWithFlags_Values[1, q16]); int(1)];
int(1..2)])
| q16 : int(1..2)]);
->>>>>>> main
int(1..2)])
>>>>>> main
int(1..2)]),
and([var1_RelationAsSetR4R8_ExplicitR4R8_1_ExplicitVarSizeWithFlags_Flags[q2, 2] ->
- [-toInt(var1_RelationAsSetR4R8_ExplicitR4R8_1_ExplicitVarSizeWithFlags_Values[q2, 1]); int(1)]
var1_RelationAsSetR4R8_ExplicitR4R8_1_ExplicitVarSizeWithFlags_Values[q2, q4] = false
diff --git a/tests/exhaustive/autogen/gen37/expected/model_4.eprime b/tests/exhaustive/autogen/gen37/expected/model_4.eprime
index bd2dd0aec4..8477dbbc36 100644
--- a/tests/exhaustive/autogen/gen37/expected/model_4.eprime
+++ b/tests/exhaustive/autogen/gen37/expected/model_4.eprime
@@ -37,8 +37,8 @@ such that
int(1..2)]);
int(1..2)]),
and([var1_RelationAsSetR4R9_ExplicitR4R9_1_ExplicitVarSizeWithFlags_Flags[q2, 2] ->
- [-toInt(var1_RelationAsSetR4R9_ExplicitR4R9_1_ExplicitVarSizeWithFlags_Values[q2, 1]); int(1)]
var1_RelationAsSetR4R9_ExplicitR4R9_1_ExplicitVarSizeWithFlags_Values[q2, q4] = false
diff --git a/tests/exhaustive/basic/comprehension_01_2/expected/model.eprime b/tests/exhaustive/basic/comprehension_01_2/expected/model.eprime
index 8607f86a85..5928bc4873 100644
--- a/tests/exhaustive/basic/comprehension_01_2/expected/model.eprime
+++ b/tests/exhaustive/basic/comprehension_01_2/expected/model.eprime
@@ -6,6 +6,5 @@ branching on [x, y]
such that
x =
sum([toInt(or([i_Explicit[q4] = y | q4 : int(1..2)]))
- | i_Explicit : matrix indexed by [int(1..2)] of int(7..9),
- [i_Explicit[1]; int(1)] i_ExplicitVarSizeWithDummy[2] = 9,
1 <= sum([toInt(i_ExplicitVarSizeWithDummy[q3] != 9) | q3 : int(1..2)]),
sum([toInt(i_ExplicitVarSizeWithDummy[q3] != 9) | q3 : int(1..2)]) <= 2,
diff --git a/tests/exhaustive/basic/comprehension_03_2/expected/model.eprime b/tests/exhaustive/basic/comprehension_03_2/expected/model.eprime
index 71f6ae576f..52b5ee4f84 100644
--- a/tests/exhaustive/basic/comprehension_03_2/expected/model.eprime
+++ b/tests/exhaustive/basic/comprehension_03_2/expected/model.eprime
@@ -7,8 +7,7 @@ such that
x =
sum([toInt(or([i_ExplicitVarSizeWithDummy[q6] = y | q6 : int(1..2), i_ExplicitVarSizeWithDummy[q6] != 10]))
| i_ExplicitVarSizeWithDummy : matrix indexed by [int(1..2)] of int(7..10),
- [i_ExplicitVarSizeWithDummy[1]; int(1)] i_ExplicitVarSizeWithDummy[2] = 10,
1 <= sum([toInt(i_ExplicitVarSizeWithDummy[q3] != 10) | q3 : int(1..2)]),
sum([toInt(i_ExplicitVarSizeWithDummy[q3] != 10) | q3 : int(1..2)]) <= 2])
diff --git a/tests/exhaustive/basic/comprehension_04_2/expected/model-solution000001.solution b/tests/exhaustive/basic/comprehension_04_2/expected/model-solution000001.solution
new file mode 100644
index 0000000000..440e39fbc0
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_04_2/expected/model-solution000001.solution
@@ -0,0 +1,5 @@
+language Essence 1.3
+
+letting x be 6
+letting y be 7
+letting z be false
diff --git a/tests/exhaustive/basic/comprehension_04_2/expected/model-solution000002.solution b/tests/exhaustive/basic/comprehension_04_2/expected/model-solution000002.solution
new file mode 100644
index 0000000000..725a23fd95
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_04_2/expected/model-solution000002.solution
@@ -0,0 +1,5 @@
+language Essence 1.3
+
+letting x be 6
+letting y be 7
+letting z be true
diff --git a/tests/exhaustive/basic/comprehension_04_2/expected/model-solution000003.solution b/tests/exhaustive/basic/comprehension_04_2/expected/model-solution000003.solution
new file mode 100644
index 0000000000..d50b52fc2a
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_04_2/expected/model-solution000003.solution
@@ -0,0 +1,5 @@
+language Essence 1.3
+
+letting x be 6
+letting y be 8
+letting z be false
diff --git a/tests/exhaustive/basic/comprehension_04_2/expected/model-solution000004.solution b/tests/exhaustive/basic/comprehension_04_2/expected/model-solution000004.solution
new file mode 100644
index 0000000000..3b8775718d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_04_2/expected/model-solution000004.solution
@@ -0,0 +1,5 @@
+language Essence 1.3
+
+letting x be 6
+letting y be 8
+letting z be true
diff --git a/tests/exhaustive/basic/comprehension_04_2/expected/model.eprime b/tests/exhaustive/basic/comprehension_04_2/expected/model.eprime
new file mode 100644
index 0000000000..0463a7c0be
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_04_2/expected/model.eprime
@@ -0,0 +1,26 @@
+language ESSENCE' 1.0
+
+find x: int(0..1000)
+find y: int(7, 8)
+find z: bool
+branching on [x, y, z]
+such that
+ x =
+ sum([toInt(or([i_ExplicitVarSizeWithMarker_Values_1[q5] = y /\ i_ExplicitVarSizeWithMarker_Values_2[q5] = z
+ | q5 : int(1..2), q5 <= i_ExplicitVarSizeWithMarker_Marker]))
+ | i_ExplicitVarSizeWithMarker_Marker : int(0..2),
+ i_ExplicitVarSizeWithMarker_Values_1 : matrix indexed by [int(1..2)] of int(7..9),
+ i_ExplicitVarSizeWithMarker_Values_2 : matrix indexed by [int(1..2)] of bool,
+ 2 <= i_ExplicitVarSizeWithMarker_Marker ->
+ flatten([[i_ExplicitVarSizeWithMarker_Values_1[1]; int(1)],
+ [-toInt(i_ExplicitVarSizeWithMarker_Values_2[1]); int(1)];
+ int(1..2)])
+ i_ExplicitVarSizeWithMarker_Marker ->
+ i_ExplicitVarSizeWithMarker_Values_1[q2] = 7 /\ i_ExplicitVarSizeWithMarker_Values_2[q2] = false
+ | q2 : int(1..2)]),
+ 1 <= i_ExplicitVarSizeWithMarker_Marker, i_ExplicitVarSizeWithMarker_Marker <= 2])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1.eprime
new file mode 100644
index 0000000000..dd4a016cc8
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1.eprime
@@ -0,0 +1,25 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_Occurrence, x]
+such that
+ and([s_Occurrence[i] /\ s_Occurrence[j] -> min([i + j, i - j, i * j, i / j; int(1..4)]) <= conjure_aux1
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0]),
+ sum([toInt(s_Occurrence[i] /\ s_Occurrence[j])
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0])
+ > 0
+ ->
+ or([s_Occurrence[i] /\ s_Occurrence[j] /\ min([i + j, i - j, i * j, i / j; int(1..4)]) = conjure_aux1
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0]),
+ sum([toInt(s_Occurrence[i] /\ s_Occurrence[j])
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(s_Occurrence[i] /\ s_Occurrence[j])
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0])
+ > 0
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2.eprime
new file mode 100644
index 0000000000..e5a61b11a8
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2.eprime
@@ -0,0 +1,33 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_ExplicitVarSizeWithDummy, s_Occurrence, x]
+such that
+ and([s_Occurrence[i] /\ s_Occurrence[j] -> min([i + j, i - j, i * j, i / j; int(1..4)]) <= conjure_aux1
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0]),
+ sum([toInt(s_Occurrence[i] /\ s_Occurrence[j])
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0])
+ > 0
+ ->
+ or([s_Occurrence[i] /\ s_Occurrence[j] /\ min([i + j, i - j, i * j, i / j; int(1..4)]) = conjure_aux1
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0]),
+ sum([toInt(s_Occurrence[i] /\ s_Occurrence[j])
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(s_Occurrence[i] /\ s_Occurrence[j])
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q2] < s_ExplicitVarSizeWithDummy[q2 + 1] \/ s_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q3] = 5 -> s_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q7] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([s_Occurrence[q8] ->
+ or([s_ExplicitVarSizeWithDummy[q10] != 5 /\ s_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3.eprime
new file mode 100644
index 0000000000..dc118fd71c
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_Occurrence, x]
+such that
+ and([s_Occurrence[i] /\ s_Occurrence[j] -> min([i + j, i - j, i * j, i / j; int(1..4)]) <= conjure_aux1
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0]),
+ sum([toInt(s_Occurrence[i] /\ s_Occurrence[j])
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0])
+ > 0
+ ->
+ or([s_Occurrence[i] /\ s_Occurrence[j] /\ min([i + j, i - j, i * j, i / j; int(1..4)]) = conjure_aux1
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0]),
+ sum([toInt(s_Occurrence[i] /\ s_Occurrence[j])
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(s_Occurrence[i] /\ s_Occurrence[j])
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0])
+ > 0,
+ and([q2 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q2] < s_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ and([q6 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([s_Occurrence[q7] ->
+ or([q9 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4.eprime
new file mode 100644
index 0000000000..6c66694bc5
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_Occurrence, x]
+such that
+ and([s_Occurrence[i] /\ s_Occurrence[j] -> min([i + j, i - j, i * j, i / j; int(1..4)]) <= conjure_aux1
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0]),
+ sum([toInt(s_Occurrence[i] /\ s_Occurrence[j])
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0])
+ > 0
+ ->
+ or([s_Occurrence[i] /\ s_Occurrence[j] /\ min([i + j, i - j, i * j, i / j; int(1..4)]) = conjure_aux1
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0]),
+ sum([toInt(s_Occurrence[i] /\ s_Occurrence[j])
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(s_Occurrence[i] /\ s_Occurrence[j])
+ | i : int(1..4), j : int(1..4), i != j, allDiff([i + j, i * j, i / j; int(1..3)]), (i - j) % 2 = 0])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q2] < s_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3] = false -> s_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q8] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([s_Occurrence[q9] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q11] /\ s_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1.eprime
new file mode 100644
index 0000000000..8697c1dbd6
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1.eprime
@@ -0,0 +1,68 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..3)
+branching on [s_ExplicitVarSizeWithDummy, s_Occurrence, x]
+such that
+ and([and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q11] != 5, i != s_ExplicitVarSizeWithDummy[q11],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q11], i * s_ExplicitVarSizeWithDummy[q11],
+ i / s_ExplicitVarSizeWithDummy[q11];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q11]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([i + s_ExplicitVarSizeWithDummy[q11], i - s_ExplicitVarSizeWithDummy[q11],
+ i * s_ExplicitVarSizeWithDummy[q11], i / s_ExplicitVarSizeWithDummy[q11];
+ int(1..4)])
+ <= conjure_aux1
+ | i : int(1..4), q11 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q11] != 5, i != s_ExplicitVarSizeWithDummy[q11],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q11], i * s_ExplicitVarSizeWithDummy[q11],
+ i / s_ExplicitVarSizeWithDummy[q11];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q11]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q11 : int(1..4)])
+ > 0
+ ->
+ or([and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q11] != 5, i != s_ExplicitVarSizeWithDummy[q11],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q11], i * s_ExplicitVarSizeWithDummy[q11],
+ i / s_ExplicitVarSizeWithDummy[q11];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q11]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([i + s_ExplicitVarSizeWithDummy[q11], i - s_ExplicitVarSizeWithDummy[q11],
+ i * s_ExplicitVarSizeWithDummy[q11], i / s_ExplicitVarSizeWithDummy[q11];
+ int(1..4)])
+ = conjure_aux1
+ | i : int(1..4), q11 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q11] != 5, i != s_ExplicitVarSizeWithDummy[q11],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q11], i * s_ExplicitVarSizeWithDummy[q11],
+ i / s_ExplicitVarSizeWithDummy[q11];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q11]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q11 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q11] != 5, i != s_ExplicitVarSizeWithDummy[q11],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q11], i * s_ExplicitVarSizeWithDummy[q11],
+ i / s_ExplicitVarSizeWithDummy[q11];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q11]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q11 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q2] < s_ExplicitVarSizeWithDummy[q2 + 1] \/ s_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q3] = 5 -> s_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q7] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([s_Occurrence[q8] ->
+ or([s_ExplicitVarSizeWithDummy[q10] != 5 /\ s_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3.eprime
new file mode 100644
index 0000000000..a5ab41cb34
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3.eprime
@@ -0,0 +1,92 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..3)
+branching on
+ [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_Occurrence, s_ExplicitVarSizeWithDummy,
+ x]
+such that
+ and([and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q27] != 5, i != s_ExplicitVarSizeWithDummy[q27],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q27], i * s_ExplicitVarSizeWithDummy[q27],
+ i / s_ExplicitVarSizeWithDummy[q27];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q27]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([i + s_ExplicitVarSizeWithDummy[q27], i - s_ExplicitVarSizeWithDummy[q27],
+ i * s_ExplicitVarSizeWithDummy[q27], i / s_ExplicitVarSizeWithDummy[q27];
+ int(1..4)])
+ <= conjure_aux1
+ | i : int(1..4), q27 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q27] != 5, i != s_ExplicitVarSizeWithDummy[q27],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q27], i * s_ExplicitVarSizeWithDummy[q27],
+ i / s_ExplicitVarSizeWithDummy[q27];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q27]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q27 : int(1..4)])
+ > 0
+ ->
+ or([and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q27] != 5, i != s_ExplicitVarSizeWithDummy[q27],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q27], i * s_ExplicitVarSizeWithDummy[q27],
+ i / s_ExplicitVarSizeWithDummy[q27];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q27]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([i + s_ExplicitVarSizeWithDummy[q27], i - s_ExplicitVarSizeWithDummy[q27],
+ i * s_ExplicitVarSizeWithDummy[q27], i / s_ExplicitVarSizeWithDummy[q27];
+ int(1..4)])
+ = conjure_aux1
+ | i : int(1..4), q27 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q27] != 5, i != s_ExplicitVarSizeWithDummy[q27],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q27], i * s_ExplicitVarSizeWithDummy[q27],
+ i / s_ExplicitVarSizeWithDummy[q27];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q27]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q27 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q27] != 5, i != s_ExplicitVarSizeWithDummy[q27],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q27], i * s_ExplicitVarSizeWithDummy[q27],
+ i / s_ExplicitVarSizeWithDummy[q27];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q27]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q27 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q2] < s_ExplicitVarSizeWithDummy[q2 + 1] \/ s_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q3] = 5 -> s_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q7] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([s_Occurrence[q8] ->
+ or([s_ExplicitVarSizeWithDummy[q10] != 5 /\ s_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([q11 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q11] < s_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..4)]),
+ and([q15 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q15]]
+ | q15 : int(1..4)]),
+ and([s_Occurrence[q16] ->
+ or([q18 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([q20 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q22] != 5 /\
+ s_ExplicitVarSizeWithDummy[q22] = s_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q24] != 5 ->
+ or([q26 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q26] = s_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4.eprime
new file mode 100644
index 0000000000..264f061fe8
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4.eprime
@@ -0,0 +1,92 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..3)
+branching on
+ [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_Occurrence, s_ExplicitVarSizeWithDummy, x]
+such that
+ and([and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q29] != 5, i != s_ExplicitVarSizeWithDummy[q29],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q29], i * s_ExplicitVarSizeWithDummy[q29],
+ i / s_ExplicitVarSizeWithDummy[q29];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q29]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([i + s_ExplicitVarSizeWithDummy[q29], i - s_ExplicitVarSizeWithDummy[q29],
+ i * s_ExplicitVarSizeWithDummy[q29], i / s_ExplicitVarSizeWithDummy[q29];
+ int(1..4)])
+ <= conjure_aux1
+ | i : int(1..4), q29 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q29] != 5, i != s_ExplicitVarSizeWithDummy[q29],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q29], i * s_ExplicitVarSizeWithDummy[q29],
+ i / s_ExplicitVarSizeWithDummy[q29];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q29]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q29 : int(1..4)])
+ > 0
+ ->
+ or([and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q29] != 5, i != s_ExplicitVarSizeWithDummy[q29],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q29], i * s_ExplicitVarSizeWithDummy[q29],
+ i / s_ExplicitVarSizeWithDummy[q29];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q29]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([i + s_ExplicitVarSizeWithDummy[q29], i - s_ExplicitVarSizeWithDummy[q29],
+ i * s_ExplicitVarSizeWithDummy[q29], i / s_ExplicitVarSizeWithDummy[q29];
+ int(1..4)])
+ = conjure_aux1
+ | i : int(1..4), q29 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q29] != 5, i != s_ExplicitVarSizeWithDummy[q29],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q29], i * s_ExplicitVarSizeWithDummy[q29],
+ i / s_ExplicitVarSizeWithDummy[q29];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q29]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q29 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithDummy[q29] != 5, i != s_ExplicitVarSizeWithDummy[q29],
+ allDiff([i + s_ExplicitVarSizeWithDummy[q29], i * s_ExplicitVarSizeWithDummy[q29],
+ i / s_ExplicitVarSizeWithDummy[q29];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithDummy[q29]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q29 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q2] < s_ExplicitVarSizeWithDummy[q2 + 1] \/ s_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q3] = 5 -> s_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q7] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([s_Occurrence[q8] ->
+ or([s_ExplicitVarSizeWithDummy[q10] != 5 /\ s_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q11] < s_ExplicitVarSizeWithFlags_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q12] = false -> s_ExplicitVarSizeWithFlags_Values[q12] = 1
+ | q12 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q17] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q17]]
+ | q17 : int(1..4)]),
+ and([s_Occurrence[q18] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q20] /\ s_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([s_ExplicitVarSizeWithDummy[q24] != 5 /\
+ s_ExplicitVarSizeWithDummy[q24] = s_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q28] /\
+ s_ExplicitVarSizeWithFlags_Values[q28] = s_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1.eprime
new file mode 100644
index 0000000000..52358293ff
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1.eprime
@@ -0,0 +1,74 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_Occurrence, x]
+such that
+ and([and([s_Occurrence[i], q10 <= s_ExplicitVarSizeWithMarker_Marker, i != s_ExplicitVarSizeWithMarker_Values[q10],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q10], i * s_ExplicitVarSizeWithMarker_Values[q10],
+ i / s_ExplicitVarSizeWithMarker_Values[q10];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q10]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([i + s_ExplicitVarSizeWithMarker_Values[q10], i - s_ExplicitVarSizeWithMarker_Values[q10],
+ i * s_ExplicitVarSizeWithMarker_Values[q10], i / s_ExplicitVarSizeWithMarker_Values[q10];
+ int(1..4)])
+ <= conjure_aux1
+ | i : int(1..4), q10 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], q10 <= s_ExplicitVarSizeWithMarker_Marker,
+ i != s_ExplicitVarSizeWithMarker_Values[q10],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q10], i * s_ExplicitVarSizeWithMarker_Values[q10],
+ i / s_ExplicitVarSizeWithMarker_Values[q10];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q10]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q10 : int(1..4)])
+ > 0
+ ->
+ or([and([s_Occurrence[i], q10 <= s_ExplicitVarSizeWithMarker_Marker, i != s_ExplicitVarSizeWithMarker_Values[q10],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q10], i * s_ExplicitVarSizeWithMarker_Values[q10],
+ i / s_ExplicitVarSizeWithMarker_Values[q10];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q10]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([i + s_ExplicitVarSizeWithMarker_Values[q10], i - s_ExplicitVarSizeWithMarker_Values[q10],
+ i * s_ExplicitVarSizeWithMarker_Values[q10], i / s_ExplicitVarSizeWithMarker_Values[q10];
+ int(1..4)])
+ = conjure_aux1
+ | i : int(1..4), q10 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], q10 <= s_ExplicitVarSizeWithMarker_Marker,
+ i != s_ExplicitVarSizeWithMarker_Values[q10],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q10], i * s_ExplicitVarSizeWithMarker_Values[q10],
+ i / s_ExplicitVarSizeWithMarker_Values[q10];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q10]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q10 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_Occurrence[i], q10 <= s_ExplicitVarSizeWithMarker_Marker,
+ i != s_ExplicitVarSizeWithMarker_Values[q10],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q10], i * s_ExplicitVarSizeWithMarker_Values[q10],
+ i / s_ExplicitVarSizeWithMarker_Values[q10];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q10]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q10 : int(1..4)])
+ > 0,
+ and([q2 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q2] < s_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ and([q6 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([s_Occurrence[q7] ->
+ or([q9 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2.eprime
new file mode 100644
index 0000000000..8aedcdcc81
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2.eprime
@@ -0,0 +1,94 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithDummy, s_Occurrence, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values,
+ x]
+such that
+ and([and([s_Occurrence[i], q27 <= s_ExplicitVarSizeWithMarker_Marker, i != s_ExplicitVarSizeWithMarker_Values[q27],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q27], i * s_ExplicitVarSizeWithMarker_Values[q27],
+ i / s_ExplicitVarSizeWithMarker_Values[q27];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q27]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([i + s_ExplicitVarSizeWithMarker_Values[q27], i - s_ExplicitVarSizeWithMarker_Values[q27],
+ i * s_ExplicitVarSizeWithMarker_Values[q27], i / s_ExplicitVarSizeWithMarker_Values[q27];
+ int(1..4)])
+ <= conjure_aux1
+ | i : int(1..4), q27 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], q27 <= s_ExplicitVarSizeWithMarker_Marker,
+ i != s_ExplicitVarSizeWithMarker_Values[q27],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q27], i * s_ExplicitVarSizeWithMarker_Values[q27],
+ i / s_ExplicitVarSizeWithMarker_Values[q27];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q27]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q27 : int(1..4)])
+ > 0
+ ->
+ or([and([s_Occurrence[i], q27 <= s_ExplicitVarSizeWithMarker_Marker, i != s_ExplicitVarSizeWithMarker_Values[q27],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q27], i * s_ExplicitVarSizeWithMarker_Values[q27],
+ i / s_ExplicitVarSizeWithMarker_Values[q27];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q27]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([i + s_ExplicitVarSizeWithMarker_Values[q27], i - s_ExplicitVarSizeWithMarker_Values[q27],
+ i * s_ExplicitVarSizeWithMarker_Values[q27], i / s_ExplicitVarSizeWithMarker_Values[q27];
+ int(1..4)])
+ = conjure_aux1
+ | i : int(1..4), q27 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], q27 <= s_ExplicitVarSizeWithMarker_Marker,
+ i != s_ExplicitVarSizeWithMarker_Values[q27],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q27], i * s_ExplicitVarSizeWithMarker_Values[q27],
+ i / s_ExplicitVarSizeWithMarker_Values[q27];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q27]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q27 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_Occurrence[i], q27 <= s_ExplicitVarSizeWithMarker_Marker,
+ i != s_ExplicitVarSizeWithMarker_Values[q27],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q27], i * s_ExplicitVarSizeWithMarker_Values[q27],
+ i / s_ExplicitVarSizeWithMarker_Values[q27];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q27]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q27 : int(1..4)])
+ > 0,
+ and([q2 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q2] < s_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ and([q6 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([s_Occurrence[q7] ->
+ or([q9 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q10] < s_ExplicitVarSizeWithDummy[q10 + 1] \/ s_ExplicitVarSizeWithDummy[q10] = 5
+ | q10 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q11] = 5 -> s_ExplicitVarSizeWithDummy[q11 + 1] = 5 | q11 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q15] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..4)]),
+ and([s_Occurrence[q16] ->
+ or([s_ExplicitVarSizeWithDummy[q18] != 5 /\ s_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q20] != 5 ->
+ or([q22 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q22] = s_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q24 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q26] != 5 /\
+ s_ExplicitVarSizeWithDummy[q26] = s_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4.eprime
new file mode 100644
index 0000000000..986b4a8cc2
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4.eprime
@@ -0,0 +1,99 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_Occurrence,
+ s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, x]
+such that
+ and([and([s_Occurrence[i], q28 <= s_ExplicitVarSizeWithMarker_Marker, i != s_ExplicitVarSizeWithMarker_Values[q28],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q28], i * s_ExplicitVarSizeWithMarker_Values[q28],
+ i / s_ExplicitVarSizeWithMarker_Values[q28];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q28]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([i + s_ExplicitVarSizeWithMarker_Values[q28], i - s_ExplicitVarSizeWithMarker_Values[q28],
+ i * s_ExplicitVarSizeWithMarker_Values[q28], i / s_ExplicitVarSizeWithMarker_Values[q28];
+ int(1..4)])
+ <= conjure_aux1
+ | i : int(1..4), q28 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], q28 <= s_ExplicitVarSizeWithMarker_Marker,
+ i != s_ExplicitVarSizeWithMarker_Values[q28],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q28], i * s_ExplicitVarSizeWithMarker_Values[q28],
+ i / s_ExplicitVarSizeWithMarker_Values[q28];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q28]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q28 : int(1..4)])
+ > 0
+ ->
+ or([and([s_Occurrence[i], q28 <= s_ExplicitVarSizeWithMarker_Marker, i != s_ExplicitVarSizeWithMarker_Values[q28],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q28], i * s_ExplicitVarSizeWithMarker_Values[q28],
+ i / s_ExplicitVarSizeWithMarker_Values[q28];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q28]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([i + s_ExplicitVarSizeWithMarker_Values[q28], i - s_ExplicitVarSizeWithMarker_Values[q28],
+ i * s_ExplicitVarSizeWithMarker_Values[q28], i / s_ExplicitVarSizeWithMarker_Values[q28];
+ int(1..4)])
+ = conjure_aux1
+ | i : int(1..4), q28 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], q28 <= s_ExplicitVarSizeWithMarker_Marker,
+ i != s_ExplicitVarSizeWithMarker_Values[q28],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q28], i * s_ExplicitVarSizeWithMarker_Values[q28],
+ i / s_ExplicitVarSizeWithMarker_Values[q28];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q28]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q28 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_Occurrence[i], q28 <= s_ExplicitVarSizeWithMarker_Marker,
+ i != s_ExplicitVarSizeWithMarker_Values[q28],
+ allDiff([i + s_ExplicitVarSizeWithMarker_Values[q28], i * s_ExplicitVarSizeWithMarker_Values[q28],
+ i / s_ExplicitVarSizeWithMarker_Values[q28];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithMarker_Values[q28]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q28 : int(1..4)])
+ > 0,
+ and([q2 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q2] < s_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ and([q6 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([s_Occurrence[q7] ->
+ or([q9 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q10] < s_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q11] = false -> s_ExplicitVarSizeWithFlags_Values[q11] = 1
+ | q11 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q16] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..4)]),
+ and([s_Occurrence[q17] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q19] /\ s_ExplicitVarSizeWithFlags_Values[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([q23 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q23] = s_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([q25 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q27] /\
+ s_ExplicitVarSizeWithFlags_Values[q27] = s_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1.eprime
new file mode 100644
index 0000000000..2c748ac8af
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1.eprime
@@ -0,0 +1,71 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_Occurrence, x]
+such that
+ and([and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q12], i != s_ExplicitVarSizeWithFlags_Values[q12],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q12], i * s_ExplicitVarSizeWithFlags_Values[q12],
+ i / s_ExplicitVarSizeWithFlags_Values[q12];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q12]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([i + s_ExplicitVarSizeWithFlags_Values[q12], i - s_ExplicitVarSizeWithFlags_Values[q12],
+ i * s_ExplicitVarSizeWithFlags_Values[q12], i / s_ExplicitVarSizeWithFlags_Values[q12];
+ int(1..4)])
+ <= conjure_aux1
+ | i : int(1..4), q12 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q12], i != s_ExplicitVarSizeWithFlags_Values[q12],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q12], i * s_ExplicitVarSizeWithFlags_Values[q12],
+ i / s_ExplicitVarSizeWithFlags_Values[q12];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q12]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q12 : int(1..4)])
+ > 0
+ ->
+ or([and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q12], i != s_ExplicitVarSizeWithFlags_Values[q12],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q12], i * s_ExplicitVarSizeWithFlags_Values[q12],
+ i / s_ExplicitVarSizeWithFlags_Values[q12];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q12]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([i + s_ExplicitVarSizeWithFlags_Values[q12], i - s_ExplicitVarSizeWithFlags_Values[q12],
+ i * s_ExplicitVarSizeWithFlags_Values[q12], i / s_ExplicitVarSizeWithFlags_Values[q12];
+ int(1..4)])
+ = conjure_aux1
+ | i : int(1..4), q12 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q12], i != s_ExplicitVarSizeWithFlags_Values[q12],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q12], i * s_ExplicitVarSizeWithFlags_Values[q12],
+ i / s_ExplicitVarSizeWithFlags_Values[q12];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q12]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q12 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q12], i != s_ExplicitVarSizeWithFlags_Values[q12],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q12], i * s_ExplicitVarSizeWithFlags_Values[q12],
+ i / s_ExplicitVarSizeWithFlags_Values[q12];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q12]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q12 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q2] < s_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3] = false -> s_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q8] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([s_Occurrence[q9] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q11] /\ s_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2.eprime
new file mode 100644
index 0000000000..08c34a7a31
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2.eprime
@@ -0,0 +1,90 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithDummy, s_Occurrence, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q29], i != s_ExplicitVarSizeWithFlags_Values[q29],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q29], i * s_ExplicitVarSizeWithFlags_Values[q29],
+ i / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q29]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([i + s_ExplicitVarSizeWithFlags_Values[q29], i - s_ExplicitVarSizeWithFlags_Values[q29],
+ i * s_ExplicitVarSizeWithFlags_Values[q29], i / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..4)])
+ <= conjure_aux1
+ | i : int(1..4), q29 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q29], i != s_ExplicitVarSizeWithFlags_Values[q29],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q29], i * s_ExplicitVarSizeWithFlags_Values[q29],
+ i / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q29]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q29 : int(1..4)])
+ > 0
+ ->
+ or([and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q29], i != s_ExplicitVarSizeWithFlags_Values[q29],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q29], i * s_ExplicitVarSizeWithFlags_Values[q29],
+ i / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q29]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([i + s_ExplicitVarSizeWithFlags_Values[q29], i - s_ExplicitVarSizeWithFlags_Values[q29],
+ i * s_ExplicitVarSizeWithFlags_Values[q29], i / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..4)])
+ = conjure_aux1
+ | i : int(1..4), q29 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q29], i != s_ExplicitVarSizeWithFlags_Values[q29],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q29], i * s_ExplicitVarSizeWithFlags_Values[q29],
+ i / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q29]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q29 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q29], i != s_ExplicitVarSizeWithFlags_Values[q29],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q29], i * s_ExplicitVarSizeWithFlags_Values[q29],
+ i / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q29]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q29 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q2] < s_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3] = false -> s_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q8] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([s_Occurrence[q9] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q11] /\ s_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q12] < s_ExplicitVarSizeWithDummy[q12 + 1] \/ s_ExplicitVarSizeWithDummy[q12] = 5
+ | q12 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q13] = 5 -> s_ExplicitVarSizeWithDummy[q13 + 1] = 5 | q13 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q17] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q17]] | q17 : int(1..4)]),
+ and([s_Occurrence[q18] ->
+ or([s_ExplicitVarSizeWithDummy[q20] != 5 /\ s_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q24] /\
+ s_ExplicitVarSizeWithFlags_Values[q24] = s_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([s_ExplicitVarSizeWithDummy[q28] != 5 /\
+ s_ExplicitVarSizeWithDummy[q28] = s_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3.eprime
new file mode 100644
index 0000000000..c3e1894ef9
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3.eprime
@@ -0,0 +1,95 @@
+language ESSENCE' 1.0
+
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_Occurrence,
+ s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q28], i != s_ExplicitVarSizeWithFlags_Values[q28],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q28], i * s_ExplicitVarSizeWithFlags_Values[q28],
+ i / s_ExplicitVarSizeWithFlags_Values[q28];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q28]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([i + s_ExplicitVarSizeWithFlags_Values[q28], i - s_ExplicitVarSizeWithFlags_Values[q28],
+ i * s_ExplicitVarSizeWithFlags_Values[q28], i / s_ExplicitVarSizeWithFlags_Values[q28];
+ int(1..4)])
+ <= conjure_aux1
+ | i : int(1..4), q28 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q28], i != s_ExplicitVarSizeWithFlags_Values[q28],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q28], i * s_ExplicitVarSizeWithFlags_Values[q28],
+ i / s_ExplicitVarSizeWithFlags_Values[q28];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q28]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q28 : int(1..4)])
+ > 0
+ ->
+ or([and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q28], i != s_ExplicitVarSizeWithFlags_Values[q28],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q28], i * s_ExplicitVarSizeWithFlags_Values[q28],
+ i / s_ExplicitVarSizeWithFlags_Values[q28];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q28]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([i + s_ExplicitVarSizeWithFlags_Values[q28], i - s_ExplicitVarSizeWithFlags_Values[q28],
+ i * s_ExplicitVarSizeWithFlags_Values[q28], i / s_ExplicitVarSizeWithFlags_Values[q28];
+ int(1..4)])
+ = conjure_aux1
+ | i : int(1..4), q28 : int(1..4)]),
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q28], i != s_ExplicitVarSizeWithFlags_Values[q28],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q28], i * s_ExplicitVarSizeWithFlags_Values[q28],
+ i / s_ExplicitVarSizeWithFlags_Values[q28];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q28]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q28 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_Occurrence[i], s_ExplicitVarSizeWithFlags_Flags[q28], i != s_ExplicitVarSizeWithFlags_Values[q28],
+ allDiff([i + s_ExplicitVarSizeWithFlags_Values[q28], i * s_ExplicitVarSizeWithFlags_Values[q28],
+ i / s_ExplicitVarSizeWithFlags_Values[q28];
+ int(1..3)]),
+ (i - s_ExplicitVarSizeWithFlags_Values[q28]) % 2 = 0;
+ int(1..5)]))
+ | i : int(1..4), q28 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q2] < s_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3] = false -> s_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q8] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([s_Occurrence[q9] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q11] /\ s_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q12 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q12] < s_ExplicitVarSizeWithMarker_Values[q12 + 1]
+ | q12 : int(1..3)]),
+ and([q13 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q13] = 1 | q13 : int(1..4)]),
+ and([q16 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q16]]
+ | q16 : int(1..4)]),
+ and([s_Occurrence[q17] ->
+ or([q19 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q21 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q23] /\
+ s_ExplicitVarSizeWithFlags_Values[q23] = s_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q27] = s_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1.eprime
new file mode 100644
index 0000000000..acf6c8641f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1.eprime
@@ -0,0 +1,68 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..4)
+branching on [s_Occurrence, s_ExplicitVarSizeWithDummy, x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q6] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q6] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q6] + j, s_ExplicitVarSizeWithDummy[q6] * j,
+ s_ExplicitVarSizeWithDummy[q6] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q6] - j) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q6] + j, s_ExplicitVarSizeWithDummy[q6] - j,
+ s_ExplicitVarSizeWithDummy[q6] * j, s_ExplicitVarSizeWithDummy[q6] / j;
+ int(1..4)])
+ <= conjure_aux1
+ | q6 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q6] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q6] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q6] + j, s_ExplicitVarSizeWithDummy[q6] * j,
+ s_ExplicitVarSizeWithDummy[q6] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q6] - j) % 2 = 0;
+ int(1..5)]))
+ | q6 : int(1..4), j : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q6] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q6] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q6] + j, s_ExplicitVarSizeWithDummy[q6] * j,
+ s_ExplicitVarSizeWithDummy[q6] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q6] - j) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q6] + j, s_ExplicitVarSizeWithDummy[q6] - j, s_ExplicitVarSizeWithDummy[q6] * j,
+ s_ExplicitVarSizeWithDummy[q6] / j;
+ int(1..4)])
+ = conjure_aux1
+ | q6 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q6] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q6] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q6] + j, s_ExplicitVarSizeWithDummy[q6] * j,
+ s_ExplicitVarSizeWithDummy[q6] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q6] - j) % 2 = 0;
+ int(1..5)]))
+ | q6 : int(1..4), j : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q6] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q6] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q6] + j, s_ExplicitVarSizeWithDummy[q6] * j,
+ s_ExplicitVarSizeWithDummy[q6] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q6] - j) % 2 = 0;
+ int(1..5)]))
+ | q6 : int(1..4), j : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([s_Occurrence[q28] ->
+ or([s_ExplicitVarSizeWithDummy[q30] != 5 /\ s_ExplicitVarSizeWithDummy[q30] = q28 | q30 : int(1..4)])
+ | q28 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q32] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q32]] | q32 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3.eprime
new file mode 100644
index 0000000000..3f8f2d2249
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3.eprime
@@ -0,0 +1,92 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..4)
+branching on
+ [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_ExplicitVarSizeWithDummy, s_Occurrence,
+ x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q22] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q22] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q22] + j, s_ExplicitVarSizeWithDummy[q22] * j,
+ s_ExplicitVarSizeWithDummy[q22] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q22] - j) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q22] + j, s_ExplicitVarSizeWithDummy[q22] - j,
+ s_ExplicitVarSizeWithDummy[q22] * j, s_ExplicitVarSizeWithDummy[q22] / j;
+ int(1..4)])
+ <= conjure_aux1
+ | q22 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q22] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q22] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q22] + j, s_ExplicitVarSizeWithDummy[q22] * j,
+ s_ExplicitVarSizeWithDummy[q22] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q22] - j) % 2 = 0;
+ int(1..5)]))
+ | q22 : int(1..4), j : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q22] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q22] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q22] + j, s_ExplicitVarSizeWithDummy[q22] * j,
+ s_ExplicitVarSizeWithDummy[q22] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q22] - j) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q22] + j, s_ExplicitVarSizeWithDummy[q22] - j,
+ s_ExplicitVarSizeWithDummy[q22] * j, s_ExplicitVarSizeWithDummy[q22] / j;
+ int(1..4)])
+ = conjure_aux1
+ | q22 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q22] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q22] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q22] + j, s_ExplicitVarSizeWithDummy[q22] * j,
+ s_ExplicitVarSizeWithDummy[q22] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q22] - j) % 2 = 0;
+ int(1..5)]))
+ | q22 : int(1..4), j : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q22] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q22] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q22] + j, s_ExplicitVarSizeWithDummy[q22] * j,
+ s_ExplicitVarSizeWithDummy[q22] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q22] - j) % 2 = 0;
+ int(1..5)]))
+ | q22 : int(1..4), j : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([s_Occurrence[q44] ->
+ or([s_ExplicitVarSizeWithDummy[q46] != 5 /\ s_ExplicitVarSizeWithDummy[q46] = q44 | q46 : int(1..4)])
+ | q44 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q48] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q48]] | q48 : int(1..4)]),
+ and([q6 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q6] < s_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ and([q10 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q12] != 5 /\
+ s_ExplicitVarSizeWithDummy[q12] = s_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q14] != 5 ->
+ or([q16 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q16] = s_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q18]]
+ | q18 : int(1..4)]),
+ and([s_Occurrence[q19] ->
+ or([q21 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q21] = q19
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4.eprime
new file mode 100644
index 0000000000..a9a3e9cd12
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4.eprime
@@ -0,0 +1,91 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..4)
+branching on
+ [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_ExplicitVarSizeWithDummy, s_Occurrence, x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q24] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q24] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q24] + j, s_ExplicitVarSizeWithDummy[q24] * j,
+ s_ExplicitVarSizeWithDummy[q24] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q24] - j) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q24] + j, s_ExplicitVarSizeWithDummy[q24] - j,
+ s_ExplicitVarSizeWithDummy[q24] * j, s_ExplicitVarSizeWithDummy[q24] / j;
+ int(1..4)])
+ <= conjure_aux1
+ | q24 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q24] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q24] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q24] + j, s_ExplicitVarSizeWithDummy[q24] * j,
+ s_ExplicitVarSizeWithDummy[q24] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q24] - j) % 2 = 0;
+ int(1..5)]))
+ | q24 : int(1..4), j : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q24] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q24] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q24] + j, s_ExplicitVarSizeWithDummy[q24] * j,
+ s_ExplicitVarSizeWithDummy[q24] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q24] - j) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q24] + j, s_ExplicitVarSizeWithDummy[q24] - j,
+ s_ExplicitVarSizeWithDummy[q24] * j, s_ExplicitVarSizeWithDummy[q24] / j;
+ int(1..4)])
+ = conjure_aux1
+ | q24 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q24] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q24] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q24] + j, s_ExplicitVarSizeWithDummy[q24] * j,
+ s_ExplicitVarSizeWithDummy[q24] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q24] - j) % 2 = 0;
+ int(1..5)]))
+ | q24 : int(1..4), j : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q24] != 5, s_Occurrence[j], s_ExplicitVarSizeWithDummy[q24] != j,
+ allDiff([s_ExplicitVarSizeWithDummy[q24] + j, s_ExplicitVarSizeWithDummy[q24] * j,
+ s_ExplicitVarSizeWithDummy[q24] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q24] - j) % 2 = 0;
+ int(1..5)]))
+ | q24 : int(1..4), j : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([s_Occurrence[q46] ->
+ or([s_ExplicitVarSizeWithDummy[q48] != 5 /\ s_ExplicitVarSizeWithDummy[q48] = q46 | q48 : int(1..4)])
+ | q46 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q50] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q50]] | q50 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q6] < s_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q7] = false -> s_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([s_ExplicitVarSizeWithDummy[q14] != 5 /\
+ s_ExplicitVarSizeWithDummy[q14] = s_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q16] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q18] /\
+ s_ExplicitVarSizeWithFlags_Values[q18] = s_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q20] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q20]]
+ | q20 : int(1..4)]),
+ and([s_Occurrence[q21] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q23] /\ s_ExplicitVarSizeWithFlags_Values[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1.eprime
new file mode 100644
index 0000000000..5d253068bc
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1.eprime
@@ -0,0 +1,82 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-25..4)
+branching on [s_Occurrence, s_ExplicitVarSizeWithDummy, x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q6] != 5, s_ExplicitVarSizeWithDummy[q7] != 5,
+ s_ExplicitVarSizeWithDummy[q6] != s_ExplicitVarSizeWithDummy[q7],
+ allDiff([s_ExplicitVarSizeWithDummy[q6] + s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] * s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] / s_ExplicitVarSizeWithDummy[q7];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q6] - s_ExplicitVarSizeWithDummy[q7]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q6] + s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] - s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] * s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] / s_ExplicitVarSizeWithDummy[q7];
+ int(1..4)])
+ <= conjure_aux1
+ | q6 : int(1..4), q7 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q6] != 5, s_ExplicitVarSizeWithDummy[q7] != 5,
+ s_ExplicitVarSizeWithDummy[q6] != s_ExplicitVarSizeWithDummy[q7],
+ allDiff([s_ExplicitVarSizeWithDummy[q6] + s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] * s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] / s_ExplicitVarSizeWithDummy[q7];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q6] - s_ExplicitVarSizeWithDummy[q7]) % 2 = 0;
+ int(1..5)]))
+ | q6 : int(1..4), q7 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q6] != 5, s_ExplicitVarSizeWithDummy[q7] != 5,
+ s_ExplicitVarSizeWithDummy[q6] != s_ExplicitVarSizeWithDummy[q7],
+ allDiff([s_ExplicitVarSizeWithDummy[q6] + s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] * s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] / s_ExplicitVarSizeWithDummy[q7];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q6] - s_ExplicitVarSizeWithDummy[q7]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q6] + s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] - s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] * s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] / s_ExplicitVarSizeWithDummy[q7];
+ int(1..4)])
+ = conjure_aux1
+ | q6 : int(1..4), q7 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q6] != 5, s_ExplicitVarSizeWithDummy[q7] != 5,
+ s_ExplicitVarSizeWithDummy[q6] != s_ExplicitVarSizeWithDummy[q7],
+ allDiff([s_ExplicitVarSizeWithDummy[q6] + s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] * s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] / s_ExplicitVarSizeWithDummy[q7];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q6] - s_ExplicitVarSizeWithDummy[q7]) % 2 = 0;
+ int(1..5)]))
+ | q6 : int(1..4), q7 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -25,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q6] != 5, s_ExplicitVarSizeWithDummy[q7] != 5,
+ s_ExplicitVarSizeWithDummy[q6] != s_ExplicitVarSizeWithDummy[q7],
+ allDiff([s_ExplicitVarSizeWithDummy[q6] + s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] * s_ExplicitVarSizeWithDummy[q7],
+ s_ExplicitVarSizeWithDummy[q6] / s_ExplicitVarSizeWithDummy[q7];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q6] - s_ExplicitVarSizeWithDummy[q7]) % 2 = 0;
+ int(1..5)]))
+ | q6 : int(1..4), q7 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([s_Occurrence[q29] ->
+ or([s_ExplicitVarSizeWithDummy[q31] != 5 /\ s_ExplicitVarSizeWithDummy[q31] = q29 | q31 : int(1..4)])
+ | q29 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q33] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q33]] | q33 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2.eprime
new file mode 100644
index 0000000000..4e8c4bc4e7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-25..4)
+branching on [s_ExplicitVarSizeWithDummy, x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q5] != 5, s_ExplicitVarSizeWithDummy[q6] != 5,
+ s_ExplicitVarSizeWithDummy[q5] != s_ExplicitVarSizeWithDummy[q6],
+ allDiff([s_ExplicitVarSizeWithDummy[q5] + s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] * s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] / s_ExplicitVarSizeWithDummy[q6];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q5] - s_ExplicitVarSizeWithDummy[q6]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q5] + s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] - s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] * s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] / s_ExplicitVarSizeWithDummy[q6];
+ int(1..4)])
+ <= conjure_aux1
+ | q5 : int(1..4), q6 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q5] != 5, s_ExplicitVarSizeWithDummy[q6] != 5,
+ s_ExplicitVarSizeWithDummy[q5] != s_ExplicitVarSizeWithDummy[q6],
+ allDiff([s_ExplicitVarSizeWithDummy[q5] + s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] * s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] / s_ExplicitVarSizeWithDummy[q6];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q5] - s_ExplicitVarSizeWithDummy[q6]) % 2 = 0;
+ int(1..5)]))
+ | q5 : int(1..4), q6 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q5] != 5, s_ExplicitVarSizeWithDummy[q6] != 5,
+ s_ExplicitVarSizeWithDummy[q5] != s_ExplicitVarSizeWithDummy[q6],
+ allDiff([s_ExplicitVarSizeWithDummy[q5] + s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] * s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] / s_ExplicitVarSizeWithDummy[q6];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q5] - s_ExplicitVarSizeWithDummy[q6]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q5] + s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] - s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] * s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] / s_ExplicitVarSizeWithDummy[q6];
+ int(1..4)])
+ = conjure_aux1
+ | q5 : int(1..4), q6 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q5] != 5, s_ExplicitVarSizeWithDummy[q6] != 5,
+ s_ExplicitVarSizeWithDummy[q5] != s_ExplicitVarSizeWithDummy[q6],
+ allDiff([s_ExplicitVarSizeWithDummy[q5] + s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] * s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] / s_ExplicitVarSizeWithDummy[q6];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q5] - s_ExplicitVarSizeWithDummy[q6]) % 2 = 0;
+ int(1..5)]))
+ | q5 : int(1..4), q6 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -25,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q5] != 5, s_ExplicitVarSizeWithDummy[q6] != 5,
+ s_ExplicitVarSizeWithDummy[q5] != s_ExplicitVarSizeWithDummy[q6],
+ allDiff([s_ExplicitVarSizeWithDummy[q5] + s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] * s_ExplicitVarSizeWithDummy[q6],
+ s_ExplicitVarSizeWithDummy[q5] / s_ExplicitVarSizeWithDummy[q6];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q5] - s_ExplicitVarSizeWithDummy[q6]) % 2 = 0;
+ int(1..5)]))
+ | q5 : int(1..4), q6 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3.eprime
new file mode 100644
index 0000000000..6d91904813
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3.eprime
@@ -0,0 +1,93 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-25..4)
+branching on [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_ExplicitVarSizeWithDummy, x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q16] != 5, s_ExplicitVarSizeWithDummy[q17] != 5,
+ s_ExplicitVarSizeWithDummy[q16] != s_ExplicitVarSizeWithDummy[q17],
+ allDiff([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithDummy[q17]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..4)])
+ <= conjure_aux1
+ | q16 : int(1..4), q17 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q16] != 5, s_ExplicitVarSizeWithDummy[q17] != 5,
+ s_ExplicitVarSizeWithDummy[q16] != s_ExplicitVarSizeWithDummy[q17],
+ allDiff([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithDummy[q17]) % 2 = 0;
+ int(1..5)]))
+ | q16 : int(1..4), q17 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q16] != 5, s_ExplicitVarSizeWithDummy[q17] != 5,
+ s_ExplicitVarSizeWithDummy[q16] != s_ExplicitVarSizeWithDummy[q17],
+ allDiff([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithDummy[q17]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..4)])
+ = conjure_aux1
+ | q16 : int(1..4), q17 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q16] != 5, s_ExplicitVarSizeWithDummy[q17] != 5,
+ s_ExplicitVarSizeWithDummy[q16] != s_ExplicitVarSizeWithDummy[q17],
+ allDiff([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithDummy[q17]) % 2 = 0;
+ int(1..5)]))
+ | q16 : int(1..4), q17 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -25,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q16] != 5, s_ExplicitVarSizeWithDummy[q17] != 5,
+ s_ExplicitVarSizeWithDummy[q16] != s_ExplicitVarSizeWithDummy[q17],
+ allDiff([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithDummy[q17]) % 2 = 0;
+ int(1..5)]))
+ | q16 : int(1..4), q17 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([q5 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q5] < s_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ and([q9 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q11] != 5 /\
+ s_ExplicitVarSizeWithDummy[q11] = s_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q15] = s_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4.eprime
new file mode 100644
index 0000000000..3627386375
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4.eprime
@@ -0,0 +1,94 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-25..4)
+branching on [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_ExplicitVarSizeWithDummy, x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q18] != 5, s_ExplicitVarSizeWithDummy[q19] != 5,
+ s_ExplicitVarSizeWithDummy[q18] != s_ExplicitVarSizeWithDummy[q19],
+ allDiff([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithDummy[q19]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..4)])
+ <= conjure_aux1
+ | q18 : int(1..4), q19 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q18] != 5, s_ExplicitVarSizeWithDummy[q19] != 5,
+ s_ExplicitVarSizeWithDummy[q18] != s_ExplicitVarSizeWithDummy[q19],
+ allDiff([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithDummy[q19]) % 2 = 0;
+ int(1..5)]))
+ | q18 : int(1..4), q19 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q18] != 5, s_ExplicitVarSizeWithDummy[q19] != 5,
+ s_ExplicitVarSizeWithDummy[q18] != s_ExplicitVarSizeWithDummy[q19],
+ allDiff([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithDummy[q19]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..4)])
+ = conjure_aux1
+ | q18 : int(1..4), q19 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q18] != 5, s_ExplicitVarSizeWithDummy[q19] != 5,
+ s_ExplicitVarSizeWithDummy[q18] != s_ExplicitVarSizeWithDummy[q19],
+ allDiff([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithDummy[q19]) % 2 = 0;
+ int(1..5)]))
+ | q18 : int(1..4), q19 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -25,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q18] != 5, s_ExplicitVarSizeWithDummy[q19] != 5,
+ s_ExplicitVarSizeWithDummy[q18] != s_ExplicitVarSizeWithDummy[q19],
+ allDiff([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithDummy[q19]) % 2 = 0;
+ int(1..5)]))
+ | q18 : int(1..4), q19 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q5] < s_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q6] = false -> s_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([s_ExplicitVarSizeWithDummy[q13] != 5 /\
+ s_ExplicitVarSizeWithDummy[q13] = s_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q17] /\
+ s_ExplicitVarSizeWithFlags_Values[q17] = s_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1.eprime
new file mode 100644
index 0000000000..2b18a316f8
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1.eprime
@@ -0,0 +1,106 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..4)
+branching on
+ [s_Occurrence, s_ExplicitVarSizeWithDummy, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values,
+ x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q17] != 5, q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithDummy[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] - s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..4)])
+ <= conjure_aux1
+ | q17 : int(1..4), q18 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q17] != 5, q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithDummy[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q17] != 5, q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithDummy[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] - s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..4)])
+ = conjure_aux1
+ | q17 : int(1..4), q18 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q17] != 5, q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithDummy[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q17] != 5, q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithDummy[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithDummy[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([q5 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q5] < s_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ and([q9 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q11] != 5 /\
+ s_ExplicitVarSizeWithDummy[q11] = s_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q15] = s_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([s_Occurrence[q40] ->
+ or([s_ExplicitVarSizeWithDummy[q42] != 5 /\ s_ExplicitVarSizeWithDummy[q42] = q40 | q42 : int(1..4)])
+ | q40 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q44] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q44]] | q44 : int(1..4)]),
+ and([s_Occurrence[q45] ->
+ or([q47 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q47] = q45
+ | q47 : int(1..4)])
+ | q45 : int(1..4)]),
+ and([q49 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q49]]
+ | q49 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2.eprime
new file mode 100644
index 0000000000..6bede9f96d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2.eprime
@@ -0,0 +1,93 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..4)
+branching on [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_ExplicitVarSizeWithDummy, x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q16] != 5, q17 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q16] != s_ExplicitVarSizeWithMarker_Values[q17],
+ allDiff([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithMarker_Values[q17]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..4)])
+ <= conjure_aux1
+ | q16 : int(1..4), q17 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q16] != 5, q17 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q16] != s_ExplicitVarSizeWithMarker_Values[q17],
+ allDiff([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithMarker_Values[q17]) % 2 = 0;
+ int(1..5)]))
+ | q16 : int(1..4), q17 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q16] != 5, q17 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q16] != s_ExplicitVarSizeWithMarker_Values[q17],
+ allDiff([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithMarker_Values[q17]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..4)])
+ = conjure_aux1
+ | q16 : int(1..4), q17 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q16] != 5, q17 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q16] != s_ExplicitVarSizeWithMarker_Values[q17],
+ allDiff([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithMarker_Values[q17]) % 2 = 0;
+ int(1..5)]))
+ | q16 : int(1..4), q17 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q16] != 5, q17 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q16] != s_ExplicitVarSizeWithMarker_Values[q17],
+ allDiff([s_ExplicitVarSizeWithDummy[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithDummy[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q16] - s_ExplicitVarSizeWithMarker_Values[q17]) % 2 = 0;
+ int(1..5)]))
+ | q16 : int(1..4), q17 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([q5 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q5] < s_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ and([q9 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q11] != 5 /\
+ s_ExplicitVarSizeWithDummy[q11] = s_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q15] = s_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4.eprime
new file mode 100644
index 0000000000..bb0cb8b3e9
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4.eprime
@@ -0,0 +1,123 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..4)
+branching on
+ [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_ExplicitVarSizeWithDummy,
+ s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q37] != 5, q38 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q37] != s_ExplicitVarSizeWithMarker_Values[q38],
+ allDiff([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithMarker_Values[q38]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..4)])
+ <= conjure_aux1
+ | q37 : int(1..4), q38 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q37] != 5, q38 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q37] != s_ExplicitVarSizeWithMarker_Values[q38],
+ allDiff([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithMarker_Values[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q37] != 5, q38 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q37] != s_ExplicitVarSizeWithMarker_Values[q38],
+ allDiff([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithMarker_Values[q38]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..4)])
+ = conjure_aux1
+ | q37 : int(1..4), q38 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q37] != 5, q38 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q37] != s_ExplicitVarSizeWithMarker_Values[q38],
+ allDiff([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithMarker_Values[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q37] != 5, q38 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithDummy[q37] != s_ExplicitVarSizeWithMarker_Values[q38],
+ allDiff([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithMarker_Values[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([q5 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q5] < s_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ and([q9 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q11] != 5 /\
+ s_ExplicitVarSizeWithDummy[q11] = s_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q15] = s_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q16] < s_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q17] = false -> s_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([s_ExplicitVarSizeWithDummy[q24] != 5 /\
+ s_ExplicitVarSizeWithDummy[q24] = s_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q28] /\
+ s_ExplicitVarSizeWithFlags_Values[q28] = s_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([q32 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q32] = s_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q36] /\
+ s_ExplicitVarSizeWithFlags_Values[q36] = s_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1.eprime
new file mode 100644
index 0000000000..f8ee63e7f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1.eprime
@@ -0,0 +1,105 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..4)
+branching on
+ [s_Occurrence, s_ExplicitVarSizeWithDummy, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q29] != 5, s_ExplicitVarSizeWithFlags_Flags[q30],
+ s_ExplicitVarSizeWithDummy[q29] != s_ExplicitVarSizeWithFlags_Values[q30],
+ allDiff([s_ExplicitVarSizeWithDummy[q29] + s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] * s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] / s_ExplicitVarSizeWithFlags_Values[q30];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q29] - s_ExplicitVarSizeWithFlags_Values[q30]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q29] + s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] - s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] * s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] / s_ExplicitVarSizeWithFlags_Values[q30];
+ int(1..4)])
+ <= conjure_aux1
+ | q29 : int(1..4), q30 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q29] != 5, s_ExplicitVarSizeWithFlags_Flags[q30],
+ s_ExplicitVarSizeWithDummy[q29] != s_ExplicitVarSizeWithFlags_Values[q30],
+ allDiff([s_ExplicitVarSizeWithDummy[q29] + s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] * s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] / s_ExplicitVarSizeWithFlags_Values[q30];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q29] - s_ExplicitVarSizeWithFlags_Values[q30]) % 2 = 0;
+ int(1..5)]))
+ | q29 : int(1..4), q30 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q29] != 5, s_ExplicitVarSizeWithFlags_Flags[q30],
+ s_ExplicitVarSizeWithDummy[q29] != s_ExplicitVarSizeWithFlags_Values[q30],
+ allDiff([s_ExplicitVarSizeWithDummy[q29] + s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] * s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] / s_ExplicitVarSizeWithFlags_Values[q30];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q29] - s_ExplicitVarSizeWithFlags_Values[q30]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q29] + s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] - s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] * s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] / s_ExplicitVarSizeWithFlags_Values[q30];
+ int(1..4)])
+ = conjure_aux1
+ | q29 : int(1..4), q30 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q29] != 5, s_ExplicitVarSizeWithFlags_Flags[q30],
+ s_ExplicitVarSizeWithDummy[q29] != s_ExplicitVarSizeWithFlags_Values[q30],
+ allDiff([s_ExplicitVarSizeWithDummy[q29] + s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] * s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] / s_ExplicitVarSizeWithFlags_Values[q30];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q29] - s_ExplicitVarSizeWithFlags_Values[q30]) % 2 = 0;
+ int(1..5)]))
+ | q29 : int(1..4), q30 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q29] != 5, s_ExplicitVarSizeWithFlags_Flags[q30],
+ s_ExplicitVarSizeWithDummy[q29] != s_ExplicitVarSizeWithFlags_Values[q30],
+ allDiff([s_ExplicitVarSizeWithDummy[q29] + s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] * s_ExplicitVarSizeWithFlags_Values[q30],
+ s_ExplicitVarSizeWithDummy[q29] / s_ExplicitVarSizeWithFlags_Values[q30];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q29] - s_ExplicitVarSizeWithFlags_Values[q30]) % 2 = 0;
+ int(1..5)]))
+ | q29 : int(1..4), q30 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q5] < s_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q6] = false -> s_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([s_ExplicitVarSizeWithDummy[q13] != 5 /\
+ s_ExplicitVarSizeWithDummy[q13] = s_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q17] /\
+ s_ExplicitVarSizeWithFlags_Values[q17] = s_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([s_Occurrence[q19] ->
+ or([s_ExplicitVarSizeWithDummy[q21] != 5 /\ s_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q23] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q23]] | q23 : int(1..4)]),
+ and([s_Occurrence[q24] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q26] /\ s_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q28] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2.eprime
new file mode 100644
index 0000000000..fcc240b9e7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2.eprime
@@ -0,0 +1,94 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..4)
+branching on [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_ExplicitVarSizeWithDummy, x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q18] != 5, s_ExplicitVarSizeWithFlags_Flags[q19],
+ s_ExplicitVarSizeWithDummy[q18] != s_ExplicitVarSizeWithFlags_Values[q19],
+ allDiff([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithFlags_Values[q19]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..4)])
+ <= conjure_aux1
+ | q18 : int(1..4), q19 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q18] != 5, s_ExplicitVarSizeWithFlags_Flags[q19],
+ s_ExplicitVarSizeWithDummy[q18] != s_ExplicitVarSizeWithFlags_Values[q19],
+ allDiff([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithFlags_Values[q19]) % 2 = 0;
+ int(1..5)]))
+ | q18 : int(1..4), q19 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q18] != 5, s_ExplicitVarSizeWithFlags_Flags[q19],
+ s_ExplicitVarSizeWithDummy[q18] != s_ExplicitVarSizeWithFlags_Values[q19],
+ allDiff([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithFlags_Values[q19]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..4)])
+ = conjure_aux1
+ | q18 : int(1..4), q19 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q18] != 5, s_ExplicitVarSizeWithFlags_Flags[q19],
+ s_ExplicitVarSizeWithDummy[q18] != s_ExplicitVarSizeWithFlags_Values[q19],
+ allDiff([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithFlags_Values[q19]) % 2 = 0;
+ int(1..5)]))
+ | q18 : int(1..4), q19 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q18] != 5, s_ExplicitVarSizeWithFlags_Flags[q19],
+ s_ExplicitVarSizeWithDummy[q18] != s_ExplicitVarSizeWithFlags_Values[q19],
+ allDiff([s_ExplicitVarSizeWithDummy[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithDummy[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q18] - s_ExplicitVarSizeWithFlags_Values[q19]) % 2 = 0;
+ int(1..5)]))
+ | q18 : int(1..4), q19 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q5] < s_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q6] = false -> s_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([s_ExplicitVarSizeWithDummy[q13] != 5 /\
+ s_ExplicitVarSizeWithDummy[q13] = s_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q17] /\
+ s_ExplicitVarSizeWithFlags_Values[q17] = s_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3.eprime
new file mode 100644
index 0000000000..aa5a1b0079
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3.eprime
@@ -0,0 +1,122 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..4)
+branching on
+ [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_ExplicitVarSizeWithDummy,
+ s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([s_ExplicitVarSizeWithDummy[q37] != 5, s_ExplicitVarSizeWithFlags_Flags[q38],
+ s_ExplicitVarSizeWithDummy[q37] != s_ExplicitVarSizeWithFlags_Values[q38],
+ allDiff([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithFlags_Values[q38]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..4)])
+ <= conjure_aux1
+ | q37 : int(1..4), q38 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q37] != 5, s_ExplicitVarSizeWithFlags_Flags[q38],
+ s_ExplicitVarSizeWithDummy[q37] != s_ExplicitVarSizeWithFlags_Values[q38],
+ allDiff([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithFlags_Values[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithDummy[q37] != 5, s_ExplicitVarSizeWithFlags_Flags[q38],
+ s_ExplicitVarSizeWithDummy[q37] != s_ExplicitVarSizeWithFlags_Values[q38],
+ allDiff([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithFlags_Values[q38]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..4)])
+ = conjure_aux1
+ | q37 : int(1..4), q38 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q37] != 5, s_ExplicitVarSizeWithFlags_Flags[q38],
+ s_ExplicitVarSizeWithDummy[q37] != s_ExplicitVarSizeWithFlags_Values[q38],
+ allDiff([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithFlags_Values[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithDummy[q37] != 5, s_ExplicitVarSizeWithFlags_Flags[q38],
+ s_ExplicitVarSizeWithDummy[q37] != s_ExplicitVarSizeWithFlags_Values[q38],
+ allDiff([s_ExplicitVarSizeWithDummy[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithDummy[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithDummy[q37] - s_ExplicitVarSizeWithFlags_Values[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q5] < s_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q6] = false -> s_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([s_ExplicitVarSizeWithDummy[q13] != 5 /\
+ s_ExplicitVarSizeWithDummy[q13] = s_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q17] /\
+ s_ExplicitVarSizeWithFlags_Values[q17] = s_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q18] < s_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ and([q22 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q24] != 5 /\
+ s_ExplicitVarSizeWithDummy[q24] = s_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([q28 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q28] = s_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q32] /\
+ s_ExplicitVarSizeWithFlags_Values[q32] = s_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([q36 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q36] = s_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1.eprime
new file mode 100644
index 0000000000..73444ebdb1
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1.eprime
@@ -0,0 +1,75 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_Occurrence, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, x]
+such that
+ and([and([q5 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j], s_ExplicitVarSizeWithMarker_Values[q5] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q5] + j, s_ExplicitVarSizeWithMarker_Values[q5] * j,
+ s_ExplicitVarSizeWithMarker_Values[q5] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q5] - j) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q5] + j, s_ExplicitVarSizeWithMarker_Values[q5] - j,
+ s_ExplicitVarSizeWithMarker_Values[q5] * j, s_ExplicitVarSizeWithMarker_Values[q5] / j;
+ int(1..4)])
+ <= conjure_aux1
+ | q5 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([q5 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j],
+ s_ExplicitVarSizeWithMarker_Values[q5] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q5] + j, s_ExplicitVarSizeWithMarker_Values[q5] * j,
+ s_ExplicitVarSizeWithMarker_Values[q5] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q5] - j) % 2 = 0;
+ int(1..5)]))
+ | q5 : int(1..4), j : int(1..4)])
+ > 0
+ ->
+ or([and([q5 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j], s_ExplicitVarSizeWithMarker_Values[q5] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q5] + j, s_ExplicitVarSizeWithMarker_Values[q5] * j,
+ s_ExplicitVarSizeWithMarker_Values[q5] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q5] - j) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q5] + j, s_ExplicitVarSizeWithMarker_Values[q5] - j,
+ s_ExplicitVarSizeWithMarker_Values[q5] * j, s_ExplicitVarSizeWithMarker_Values[q5] / j;
+ int(1..4)])
+ = conjure_aux1
+ | q5 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([q5 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j],
+ s_ExplicitVarSizeWithMarker_Values[q5] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q5] + j, s_ExplicitVarSizeWithMarker_Values[q5] * j,
+ s_ExplicitVarSizeWithMarker_Values[q5] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q5] - j) % 2 = 0;
+ int(1..5)]))
+ | q5 : int(1..4), j : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([q5 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j],
+ s_ExplicitVarSizeWithMarker_Values[q5] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q5] + j, s_ExplicitVarSizeWithMarker_Values[q5] * j,
+ s_ExplicitVarSizeWithMarker_Values[q5] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q5] - j) % 2 = 0;
+ int(1..5)]))
+ | q5 : int(1..4), j : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_Occurrence[q27] ->
+ or([q29 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q29] = q27
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([q31 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q31]]
+ | q31 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2.eprime
new file mode 100644
index 0000000000..45efc09186
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2.eprime
@@ -0,0 +1,95 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithDummy, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_Occurrence,
+ x]
+such that
+ and([and([q22 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j], s_ExplicitVarSizeWithMarker_Values[q22] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q22] + j, s_ExplicitVarSizeWithMarker_Values[q22] * j,
+ s_ExplicitVarSizeWithMarker_Values[q22] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q22] - j) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q22] + j, s_ExplicitVarSizeWithMarker_Values[q22] - j,
+ s_ExplicitVarSizeWithMarker_Values[q22] * j, s_ExplicitVarSizeWithMarker_Values[q22] / j;
+ int(1..4)])
+ <= conjure_aux1
+ | q22 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([q22 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j],
+ s_ExplicitVarSizeWithMarker_Values[q22] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q22] + j, s_ExplicitVarSizeWithMarker_Values[q22] * j,
+ s_ExplicitVarSizeWithMarker_Values[q22] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q22] - j) % 2 = 0;
+ int(1..5)]))
+ | q22 : int(1..4), j : int(1..4)])
+ > 0
+ ->
+ or([and([q22 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j], s_ExplicitVarSizeWithMarker_Values[q22] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q22] + j, s_ExplicitVarSizeWithMarker_Values[q22] * j,
+ s_ExplicitVarSizeWithMarker_Values[q22] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q22] - j) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q22] + j, s_ExplicitVarSizeWithMarker_Values[q22] - j,
+ s_ExplicitVarSizeWithMarker_Values[q22] * j, s_ExplicitVarSizeWithMarker_Values[q22] / j;
+ int(1..4)])
+ = conjure_aux1
+ | q22 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([q22 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j],
+ s_ExplicitVarSizeWithMarker_Values[q22] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q22] + j, s_ExplicitVarSizeWithMarker_Values[q22] * j,
+ s_ExplicitVarSizeWithMarker_Values[q22] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q22] - j) % 2 = 0;
+ int(1..5)]))
+ | q22 : int(1..4), j : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([q22 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j],
+ s_ExplicitVarSizeWithMarker_Values[q22] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q22] + j, s_ExplicitVarSizeWithMarker_Values[q22] * j,
+ s_ExplicitVarSizeWithMarker_Values[q22] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q22] - j) % 2 = 0;
+ int(1..5)]))
+ | q22 : int(1..4), j : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_Occurrence[q44] ->
+ or([q46 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q46] = q44
+ | q46 : int(1..4)])
+ | q44 : int(1..4)]),
+ and([q48 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q48]]
+ | q48 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q5] < s_ExplicitVarSizeWithDummy[q5 + 1] \/ s_ExplicitVarSizeWithDummy[q5] = 5
+ | q5 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q6] = 5 -> s_ExplicitVarSizeWithDummy[q6 + 1] = 5 | q6 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q10] != 5 ->
+ or([q12 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q12] = s_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q16] != 5 /\
+ s_ExplicitVarSizeWithDummy[q16] = s_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q18] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q18]] | q18 : int(1..4)]),
+ and([s_Occurrence[q19] ->
+ or([s_ExplicitVarSizeWithDummy[q21] != 5 /\ s_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4.eprime
new file mode 100644
index 0000000000..d5db5a23e1
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4.eprime
@@ -0,0 +1,99 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values, s_Occurrence, x]
+such that
+ and([and([q23 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j], s_ExplicitVarSizeWithMarker_Values[q23] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q23] + j, s_ExplicitVarSizeWithMarker_Values[q23] * j,
+ s_ExplicitVarSizeWithMarker_Values[q23] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q23] - j) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q23] + j, s_ExplicitVarSizeWithMarker_Values[q23] - j,
+ s_ExplicitVarSizeWithMarker_Values[q23] * j, s_ExplicitVarSizeWithMarker_Values[q23] / j;
+ int(1..4)])
+ <= conjure_aux1
+ | q23 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([q23 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j],
+ s_ExplicitVarSizeWithMarker_Values[q23] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q23] + j, s_ExplicitVarSizeWithMarker_Values[q23] * j,
+ s_ExplicitVarSizeWithMarker_Values[q23] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q23] - j) % 2 = 0;
+ int(1..5)]))
+ | q23 : int(1..4), j : int(1..4)])
+ > 0
+ ->
+ or([and([q23 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j], s_ExplicitVarSizeWithMarker_Values[q23] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q23] + j, s_ExplicitVarSizeWithMarker_Values[q23] * j,
+ s_ExplicitVarSizeWithMarker_Values[q23] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q23] - j) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q23] + j, s_ExplicitVarSizeWithMarker_Values[q23] - j,
+ s_ExplicitVarSizeWithMarker_Values[q23] * j, s_ExplicitVarSizeWithMarker_Values[q23] / j;
+ int(1..4)])
+ = conjure_aux1
+ | q23 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([q23 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j],
+ s_ExplicitVarSizeWithMarker_Values[q23] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q23] + j, s_ExplicitVarSizeWithMarker_Values[q23] * j,
+ s_ExplicitVarSizeWithMarker_Values[q23] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q23] - j) % 2 = 0;
+ int(1..5)]))
+ | q23 : int(1..4), j : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([q23 <= s_ExplicitVarSizeWithMarker_Marker, s_Occurrence[j],
+ s_ExplicitVarSizeWithMarker_Values[q23] != j,
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q23] + j, s_ExplicitVarSizeWithMarker_Values[q23] * j,
+ s_ExplicitVarSizeWithMarker_Values[q23] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q23] - j) % 2 = 0;
+ int(1..5)]))
+ | q23 : int(1..4), j : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_Occurrence[q45] ->
+ or([q47 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q47] = q45
+ | q47 : int(1..4)])
+ | q45 : int(1..4)]),
+ and([q49 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q49]]
+ | q49 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q5] < s_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q6] = false -> s_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q13] = s_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q15 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q17] /\
+ s_ExplicitVarSizeWithFlags_Values[q17] = s_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q19] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q19]]
+ | q19 : int(1..4)]),
+ and([s_Occurrence[q20] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q22] /\ s_ExplicitVarSizeWithFlags_Values[q22] = q20 | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1.eprime
new file mode 100644
index 0000000000..b6f0c01a86
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1.eprime
@@ -0,0 +1,106 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..3)
+branching on
+ [s_Occurrence, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_ExplicitVarSizeWithDummy,
+ x]
+such that
+ and([and([q17 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q18] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithDummy[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithDummy[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithDummy[q18]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithDummy[q18];
+ int(1..4)])
+ <= conjure_aux1
+ | q17 : int(1..4), q18 : int(1..4)]),
+ sum([toInt(and([q17 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q18] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithDummy[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithDummy[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithDummy[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ > 0
+ ->
+ or([and([q17 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q18] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithDummy[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithDummy[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithDummy[q18]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithDummy[q18];
+ int(1..4)])
+ = conjure_aux1
+ | q17 : int(1..4), q18 : int(1..4)]),
+ sum([toInt(and([q17 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q18] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithDummy[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithDummy[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithDummy[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([q17 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q18] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithDummy[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithDummy[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithDummy[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithDummy[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q4] < s_ExplicitVarSizeWithDummy[q4 + 1] \/ s_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q5] = 5 -> s_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q11] = s_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q15] != 5 /\
+ s_ExplicitVarSizeWithDummy[q15] = s_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([s_Occurrence[q40] ->
+ or([q42 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q42] = q40
+ | q42 : int(1..4)])
+ | q40 : int(1..4)]),
+ and([q44 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q44]]
+ | q44 : int(1..4)]),
+ and([s_Occurrence[q45] ->
+ or([s_ExplicitVarSizeWithDummy[q47] != 5 /\ s_ExplicitVarSizeWithDummy[q47] = q45 | q47 : int(1..4)])
+ | q45 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q49] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q49]] | q49 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2.eprime
new file mode 100644
index 0000000000..4259b37168
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2.eprime
@@ -0,0 +1,93 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..3)
+branching on [s_ExplicitVarSizeWithDummy, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, x]
+such that
+ and([and([q16 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q17] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q16] != s_ExplicitVarSizeWithDummy[q17],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithDummy[q17]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..4)])
+ <= conjure_aux1
+ | q16 : int(1..4), q17 : int(1..4)]),
+ sum([toInt(and([q16 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q17] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q16] != s_ExplicitVarSizeWithDummy[q17],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithDummy[q17]) % 2 = 0;
+ int(1..5)]))
+ | q16 : int(1..4), q17 : int(1..4)])
+ > 0
+ ->
+ or([and([q16 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q17] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q16] != s_ExplicitVarSizeWithDummy[q17],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithDummy[q17]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..4)])
+ = conjure_aux1
+ | q16 : int(1..4), q17 : int(1..4)]),
+ sum([toInt(and([q16 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q17] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q16] != s_ExplicitVarSizeWithDummy[q17],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithDummy[q17]) % 2 = 0;
+ int(1..5)]))
+ | q16 : int(1..4), q17 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([q16 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q17] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q16] != s_ExplicitVarSizeWithDummy[q17],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithDummy[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithDummy[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithDummy[q17]) % 2 = 0;
+ int(1..5)]))
+ | q16 : int(1..4), q17 : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q4] < s_ExplicitVarSizeWithDummy[q4 + 1] \/ s_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q5] = 5 -> s_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q11] = s_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q15] != 5 /\
+ s_ExplicitVarSizeWithDummy[q15] = s_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4.eprime
new file mode 100644
index 0000000000..0d153c4cd7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4.eprime
@@ -0,0 +1,123 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..3)
+branching on
+ [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values, s_ExplicitVarSizeWithDummy, x]
+such that
+ and([and([q37 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q38] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q37] != s_ExplicitVarSizeWithDummy[q38],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithDummy[q38]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..4)])
+ <= conjure_aux1
+ | q37 : int(1..4), q38 : int(1..4)]),
+ sum([toInt(and([q37 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q38] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q37] != s_ExplicitVarSizeWithDummy[q38],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithDummy[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ > 0
+ ->
+ or([and([q37 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q38] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q37] != s_ExplicitVarSizeWithDummy[q38],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithDummy[q38]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..4)])
+ = conjure_aux1
+ | q37 : int(1..4), q38 : int(1..4)]),
+ sum([toInt(and([q37 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q38] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q37] != s_ExplicitVarSizeWithDummy[q38],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithDummy[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([q37 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithDummy[q38] != 5,
+ s_ExplicitVarSizeWithMarker_Values[q37] != s_ExplicitVarSizeWithDummy[q38],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithDummy[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q4] < s_ExplicitVarSizeWithDummy[q4 + 1] \/ s_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q5] = 5 -> s_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q11] = s_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q15] != 5 /\
+ s_ExplicitVarSizeWithDummy[q15] = s_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q16] < s_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q17] = false -> s_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([q24 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q24] = s_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q28] /\
+ s_ExplicitVarSizeWithFlags_Values[q28] = s_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([s_ExplicitVarSizeWithDummy[q32] != 5 /\
+ s_ExplicitVarSizeWithDummy[q32] = s_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q36] /\
+ s_ExplicitVarSizeWithFlags_Values[q36] = s_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1.eprime
new file mode 100644
index 0000000000..7c865a4def
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1.eprime
@@ -0,0 +1,86 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_Occurrence, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, x]
+such that
+ and([and([q5 <= s_ExplicitVarSizeWithMarker_Marker, q6 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q5] != s_ExplicitVarSizeWithMarker_Values[q6],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q5] + s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] * s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] / s_ExplicitVarSizeWithMarker_Values[q6];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q5] - s_ExplicitVarSizeWithMarker_Values[q6]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q5] + s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] - s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] * s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] / s_ExplicitVarSizeWithMarker_Values[q6];
+ int(1..4)])
+ <= conjure_aux1
+ | q5 : int(1..4), q6 : int(1..4)]),
+ sum([toInt(and([q5 <= s_ExplicitVarSizeWithMarker_Marker, q6 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q5] != s_ExplicitVarSizeWithMarker_Values[q6],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q5] + s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] * s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] / s_ExplicitVarSizeWithMarker_Values[q6];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q5] - s_ExplicitVarSizeWithMarker_Values[q6]) % 2 = 0;
+ int(1..5)]))
+ | q5 : int(1..4), q6 : int(1..4)])
+ > 0
+ ->
+ or([and([q5 <= s_ExplicitVarSizeWithMarker_Marker, q6 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q5] != s_ExplicitVarSizeWithMarker_Values[q6],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q5] + s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] * s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] / s_ExplicitVarSizeWithMarker_Values[q6];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q5] - s_ExplicitVarSizeWithMarker_Values[q6]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q5] + s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] - s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] * s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] / s_ExplicitVarSizeWithMarker_Values[q6];
+ int(1..4)])
+ = conjure_aux1
+ | q5 : int(1..4), q6 : int(1..4)]),
+ sum([toInt(and([q5 <= s_ExplicitVarSizeWithMarker_Marker, q6 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q5] != s_ExplicitVarSizeWithMarker_Values[q6],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q5] + s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] * s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] / s_ExplicitVarSizeWithMarker_Values[q6];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q5] - s_ExplicitVarSizeWithMarker_Values[q6]) % 2 = 0;
+ int(1..5)]))
+ | q5 : int(1..4), q6 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([q5 <= s_ExplicitVarSizeWithMarker_Marker, q6 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q5] != s_ExplicitVarSizeWithMarker_Values[q6],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q5] + s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] * s_ExplicitVarSizeWithMarker_Values[q6],
+ s_ExplicitVarSizeWithMarker_Values[q5] / s_ExplicitVarSizeWithMarker_Values[q6];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q5] - s_ExplicitVarSizeWithMarker_Values[q6]) % 2 = 0;
+ int(1..5)]))
+ | q5 : int(1..4), q6 : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_Occurrence[q28] ->
+ or([q30 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q30] = q28
+ | q30 : int(1..4)])
+ | q28 : int(1..4)]),
+ and([q32 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q32]]
+ | q32 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2.eprime
new file mode 100644
index 0000000000..28e3beabc3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2.eprime
@@ -0,0 +1,93 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_ExplicitVarSizeWithDummy, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, x]
+such that
+ and([and([q16 <= s_ExplicitVarSizeWithMarker_Marker, q17 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q16] != s_ExplicitVarSizeWithMarker_Values[q17],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithMarker_Values[q17]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..4)])
+ <= conjure_aux1
+ | q16 : int(1..4), q17 : int(1..4)]),
+ sum([toInt(and([q16 <= s_ExplicitVarSizeWithMarker_Marker, q17 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q16] != s_ExplicitVarSizeWithMarker_Values[q17],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithMarker_Values[q17]) % 2 = 0;
+ int(1..5)]))
+ | q16 : int(1..4), q17 : int(1..4)])
+ > 0
+ ->
+ or([and([q16 <= s_ExplicitVarSizeWithMarker_Marker, q17 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q16] != s_ExplicitVarSizeWithMarker_Values[q17],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithMarker_Values[q17]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..4)])
+ = conjure_aux1
+ | q16 : int(1..4), q17 : int(1..4)]),
+ sum([toInt(and([q16 <= s_ExplicitVarSizeWithMarker_Marker, q17 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q16] != s_ExplicitVarSizeWithMarker_Values[q17],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithMarker_Values[q17]) % 2 = 0;
+ int(1..5)]))
+ | q16 : int(1..4), q17 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([q16 <= s_ExplicitVarSizeWithMarker_Marker, q17 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q16] != s_ExplicitVarSizeWithMarker_Values[q17],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q16] + s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] * s_ExplicitVarSizeWithMarker_Values[q17],
+ s_ExplicitVarSizeWithMarker_Values[q16] / s_ExplicitVarSizeWithMarker_Values[q17];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q16] - s_ExplicitVarSizeWithMarker_Values[q17]) % 2 = 0;
+ int(1..5)]))
+ | q16 : int(1..4), q17 : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q4] < s_ExplicitVarSizeWithDummy[q4 + 1] \/ s_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q5] = 5 -> s_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q11] = s_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q15] != 5 /\
+ s_ExplicitVarSizeWithDummy[q15] = s_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3.eprime
new file mode 100644
index 0000000000..2395a6a64c
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3.eprime
@@ -0,0 +1,79 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, x]
+such that
+ and([and([q4 <= s_ExplicitVarSizeWithMarker_Marker, q5 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q4] != s_ExplicitVarSizeWithMarker_Values[q5],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q4] + s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] * s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] / s_ExplicitVarSizeWithMarker_Values[q5];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q4] - s_ExplicitVarSizeWithMarker_Values[q5]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q4] + s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] - s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] * s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] / s_ExplicitVarSizeWithMarker_Values[q5];
+ int(1..4)])
+ <= conjure_aux1
+ | q4 : int(1..4), q5 : int(1..4)]),
+ sum([toInt(and([q4 <= s_ExplicitVarSizeWithMarker_Marker, q5 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q4] != s_ExplicitVarSizeWithMarker_Values[q5],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q4] + s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] * s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] / s_ExplicitVarSizeWithMarker_Values[q5];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q4] - s_ExplicitVarSizeWithMarker_Values[q5]) % 2 = 0;
+ int(1..5)]))
+ | q4 : int(1..4), q5 : int(1..4)])
+ > 0
+ ->
+ or([and([q4 <= s_ExplicitVarSizeWithMarker_Marker, q5 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q4] != s_ExplicitVarSizeWithMarker_Values[q5],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q4] + s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] * s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] / s_ExplicitVarSizeWithMarker_Values[q5];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q4] - s_ExplicitVarSizeWithMarker_Values[q5]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q4] + s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] - s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] * s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] / s_ExplicitVarSizeWithMarker_Values[q5];
+ int(1..4)])
+ = conjure_aux1
+ | q4 : int(1..4), q5 : int(1..4)]),
+ sum([toInt(and([q4 <= s_ExplicitVarSizeWithMarker_Marker, q5 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q4] != s_ExplicitVarSizeWithMarker_Values[q5],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q4] + s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] * s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] / s_ExplicitVarSizeWithMarker_Values[q5];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q4] - s_ExplicitVarSizeWithMarker_Values[q5]) % 2 = 0;
+ int(1..5)]))
+ | q4 : int(1..4), q5 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([q4 <= s_ExplicitVarSizeWithMarker_Marker, q5 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q4] != s_ExplicitVarSizeWithMarker_Values[q5],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q4] + s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] * s_ExplicitVarSizeWithMarker_Values[q5],
+ s_ExplicitVarSizeWithMarker_Values[q4] / s_ExplicitVarSizeWithMarker_Values[q5];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q4] - s_ExplicitVarSizeWithMarker_Values[q5]) % 2 = 0;
+ int(1..5)]))
+ | q4 : int(1..4), q5 : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4.eprime
new file mode 100644
index 0000000000..04c74bb0a1
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4.eprime
@@ -0,0 +1,98 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values, x]
+such that
+ and([and([q17 <= s_ExplicitVarSizeWithMarker_Marker, q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..4)])
+ <= conjure_aux1
+ | q17 : int(1..4), q18 : int(1..4)]),
+ sum([toInt(and([q17 <= s_ExplicitVarSizeWithMarker_Marker, q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ > 0
+ ->
+ or([and([q17 <= s_ExplicitVarSizeWithMarker_Marker, q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..4)])
+ = conjure_aux1
+ | q17 : int(1..4), q18 : int(1..4)]),
+ sum([toInt(and([q17 <= s_ExplicitVarSizeWithMarker_Marker, q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([q17 <= s_ExplicitVarSizeWithMarker_Marker, q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q4] < s_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q5] = false -> s_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q12] = s_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q16] /\
+ s_ExplicitVarSizeWithFlags_Values[q16] = s_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1.eprime
new file mode 100644
index 0000000000..04d3b5c94a
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1.eprime
@@ -0,0 +1,110 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_Occurrence, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values,
+ s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([q28 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] != s_ExplicitVarSizeWithFlags_Values[q29],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q28] + s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] * s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q28] - s_ExplicitVarSizeWithFlags_Values[q29]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q28] + s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] - s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] * s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..4)])
+ <= conjure_aux1
+ | q28 : int(1..4), q29 : int(1..4)]),
+ sum([toInt(and([q28 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] != s_ExplicitVarSizeWithFlags_Values[q29],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q28] + s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] * s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q28] - s_ExplicitVarSizeWithFlags_Values[q29]) % 2 = 0;
+ int(1..5)]))
+ | q28 : int(1..4), q29 : int(1..4)])
+ > 0
+ ->
+ or([and([q28 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] != s_ExplicitVarSizeWithFlags_Values[q29],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q28] + s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] * s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q28] - s_ExplicitVarSizeWithFlags_Values[q29]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q28] + s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] - s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] * s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..4)])
+ = conjure_aux1
+ | q28 : int(1..4), q29 : int(1..4)]),
+ sum([toInt(and([q28 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] != s_ExplicitVarSizeWithFlags_Values[q29],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q28] + s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] * s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q28] - s_ExplicitVarSizeWithFlags_Values[q29]) % 2 = 0;
+ int(1..5)]))
+ | q28 : int(1..4), q29 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([q28 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] != s_ExplicitVarSizeWithFlags_Values[q29],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q28] + s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] * s_ExplicitVarSizeWithFlags_Values[q29],
+ s_ExplicitVarSizeWithMarker_Values[q28] / s_ExplicitVarSizeWithFlags_Values[q29];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q28] - s_ExplicitVarSizeWithFlags_Values[q29]) % 2 = 0;
+ int(1..5)]))
+ | q28 : int(1..4), q29 : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q4] < s_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q5] = false -> s_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q12] = s_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q16] /\
+ s_ExplicitVarSizeWithFlags_Values[q16] = s_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([s_Occurrence[q18] ->
+ or([q20 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q20] = q18
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([q22 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q22]]
+ | q22 : int(1..4)]),
+ and([s_Occurrence[q23] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q25] /\ s_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q27] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2.eprime
new file mode 100644
index 0000000000..cc4980db20
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2.eprime
@@ -0,0 +1,122 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithDummy, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values,
+ s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([q37 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] != s_ExplicitVarSizeWithFlags_Values[q38],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithFlags_Values[q38]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..4)])
+ <= conjure_aux1
+ | q37 : int(1..4), q38 : int(1..4)]),
+ sum([toInt(and([q37 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] != s_ExplicitVarSizeWithFlags_Values[q38],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithFlags_Values[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ > 0
+ ->
+ or([and([q37 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] != s_ExplicitVarSizeWithFlags_Values[q38],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithFlags_Values[q38]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..4)])
+ = conjure_aux1
+ | q37 : int(1..4), q38 : int(1..4)]),
+ sum([toInt(and([q37 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] != s_ExplicitVarSizeWithFlags_Values[q38],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithFlags_Values[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([q37 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] != s_ExplicitVarSizeWithFlags_Values[q38],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q37] + s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] * s_ExplicitVarSizeWithFlags_Values[q38],
+ s_ExplicitVarSizeWithMarker_Values[q37] / s_ExplicitVarSizeWithFlags_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q37] - s_ExplicitVarSizeWithFlags_Values[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q4] < s_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q5] = false -> s_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q12] = s_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q16] /\
+ s_ExplicitVarSizeWithFlags_Values[q16] = s_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q17] < s_ExplicitVarSizeWithDummy[q17 + 1] \/ s_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q18] = 5 -> s_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([q24 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q24] = s_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q28] != 5 /\
+ s_ExplicitVarSizeWithDummy[q28] = s_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q32] /\
+ s_ExplicitVarSizeWithFlags_Values[q32] = s_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([s_ExplicitVarSizeWithDummy[q36] != 5 /\
+ s_ExplicitVarSizeWithDummy[q36] = s_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3.eprime
new file mode 100644
index 0000000000..0a797c0a81
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3.eprime
@@ -0,0 +1,98 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithMarker_Values, x]
+such that
+ and([and([q17 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithFlags_Values[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..4)])
+ <= conjure_aux1
+ | q17 : int(1..4), q18 : int(1..4)]),
+ sum([toInt(and([q17 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithFlags_Values[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ > 0
+ ->
+ or([and([q17 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithFlags_Values[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..4)])
+ = conjure_aux1
+ | q17 : int(1..4), q18 : int(1..4)]),
+ sum([toInt(and([q17 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithFlags_Values[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([q17 <= s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithFlags_Flags[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] != s_ExplicitVarSizeWithFlags_Values[q18],
+ allDiff([s_ExplicitVarSizeWithMarker_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithMarker_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithMarker_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q4] < s_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q5] = false -> s_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q12] = s_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q16] /\
+ s_ExplicitVarSizeWithFlags_Values[q16] = s_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1.eprime
new file mode 100644
index 0000000000..adcf0207b3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1.eprime
@@ -0,0 +1,72 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_Occurrence, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q12], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q12] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q12] + j, s_ExplicitVarSizeWithFlags_Values[q12] * j,
+ s_ExplicitVarSizeWithFlags_Values[q12] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q12] - j) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q12] + j, s_ExplicitVarSizeWithFlags_Values[q12] - j,
+ s_ExplicitVarSizeWithFlags_Values[q12] * j, s_ExplicitVarSizeWithFlags_Values[q12] / j;
+ int(1..4)])
+ <= conjure_aux1
+ | q12 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q12], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q12] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q12] + j, s_ExplicitVarSizeWithFlags_Values[q12] * j,
+ s_ExplicitVarSizeWithFlags_Values[q12] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q12] - j) % 2 = 0;
+ int(1..5)]))
+ | q12 : int(1..4), j : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q12], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q12] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q12] + j, s_ExplicitVarSizeWithFlags_Values[q12] * j,
+ s_ExplicitVarSizeWithFlags_Values[q12] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q12] - j) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q12] + j, s_ExplicitVarSizeWithFlags_Values[q12] - j,
+ s_ExplicitVarSizeWithFlags_Values[q12] * j, s_ExplicitVarSizeWithFlags_Values[q12] / j;
+ int(1..4)])
+ = conjure_aux1
+ | q12 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q12], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q12] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q12] + j, s_ExplicitVarSizeWithFlags_Values[q12] * j,
+ s_ExplicitVarSizeWithFlags_Values[q12] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q12] - j) % 2 = 0;
+ int(1..5)]))
+ | q12 : int(1..4), j : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q12], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q12] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q12] + j, s_ExplicitVarSizeWithFlags_Values[q12] * j,
+ s_ExplicitVarSizeWithFlags_Values[q12] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q12] - j) % 2 = 0;
+ int(1..5)]))
+ | q12 : int(1..4), j : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([s_Occurrence[q7] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q9] /\ s_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q11] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2.eprime
new file mode 100644
index 0000000000..9f5ba038eb
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2.eprime
@@ -0,0 +1,91 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithDummy, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_Occurrence, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q29], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q29] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q29] + j, s_ExplicitVarSizeWithFlags_Values[q29] * j,
+ s_ExplicitVarSizeWithFlags_Values[q29] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q29] - j) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q29] + j, s_ExplicitVarSizeWithFlags_Values[q29] - j,
+ s_ExplicitVarSizeWithFlags_Values[q29] * j, s_ExplicitVarSizeWithFlags_Values[q29] / j;
+ int(1..4)])
+ <= conjure_aux1
+ | q29 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q29], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q29] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q29] + j, s_ExplicitVarSizeWithFlags_Values[q29] * j,
+ s_ExplicitVarSizeWithFlags_Values[q29] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q29] - j) % 2 = 0;
+ int(1..5)]))
+ | q29 : int(1..4), j : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q29], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q29] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q29] + j, s_ExplicitVarSizeWithFlags_Values[q29] * j,
+ s_ExplicitVarSizeWithFlags_Values[q29] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q29] - j) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q29] + j, s_ExplicitVarSizeWithFlags_Values[q29] - j,
+ s_ExplicitVarSizeWithFlags_Values[q29] * j, s_ExplicitVarSizeWithFlags_Values[q29] / j;
+ int(1..4)])
+ = conjure_aux1
+ | q29 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q29], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q29] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q29] + j, s_ExplicitVarSizeWithFlags_Values[q29] * j,
+ s_ExplicitVarSizeWithFlags_Values[q29] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q29] - j) % 2 = 0;
+ int(1..5)]))
+ | q29 : int(1..4), j : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q29], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q29] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q29] + j, s_ExplicitVarSizeWithFlags_Values[q29] * j,
+ s_ExplicitVarSizeWithFlags_Values[q29] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q29] - j) % 2 = 0;
+ int(1..5)]))
+ | q29 : int(1..4), j : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([s_Occurrence[q24] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q26] /\ s_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q28] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q7] < s_ExplicitVarSizeWithDummy[q7 + 1] \/ s_ExplicitVarSizeWithDummy[q7] = 5
+ | q7 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q8] = 5 -> s_ExplicitVarSizeWithDummy[q8 + 1] = 5 | q8 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q12] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q14] /\
+ s_ExplicitVarSizeWithFlags_Values[q14] = s_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([s_ExplicitVarSizeWithDummy[q18] != 5 /\
+ s_ExplicitVarSizeWithDummy[q18] = s_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q20] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q20]] | q20 : int(1..4)]),
+ and([s_Occurrence[q21] ->
+ or([s_ExplicitVarSizeWithDummy[q23] != 5 /\ s_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3.eprime
new file mode 100644
index 0000000000..d6762cf6f5
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3.eprime
@@ -0,0 +1,96 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_ExplicitVarSizeWithFlags_Flags,
+ s_ExplicitVarSizeWithFlags_Values, s_Occurrence, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q28], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q28] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q28] + j, s_ExplicitVarSizeWithFlags_Values[q28] * j,
+ s_ExplicitVarSizeWithFlags_Values[q28] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q28] - j) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q28] + j, s_ExplicitVarSizeWithFlags_Values[q28] - j,
+ s_ExplicitVarSizeWithFlags_Values[q28] * j, s_ExplicitVarSizeWithFlags_Values[q28] / j;
+ int(1..4)])
+ <= conjure_aux1
+ | q28 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q28], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q28] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q28] + j, s_ExplicitVarSizeWithFlags_Values[q28] * j,
+ s_ExplicitVarSizeWithFlags_Values[q28] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q28] - j) % 2 = 0;
+ int(1..5)]))
+ | q28 : int(1..4), j : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q28], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q28] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q28] + j, s_ExplicitVarSizeWithFlags_Values[q28] * j,
+ s_ExplicitVarSizeWithFlags_Values[q28] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q28] - j) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q28] + j, s_ExplicitVarSizeWithFlags_Values[q28] - j,
+ s_ExplicitVarSizeWithFlags_Values[q28] * j, s_ExplicitVarSizeWithFlags_Values[q28] / j;
+ int(1..4)])
+ = conjure_aux1
+ | q28 : int(1..4), j : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q28], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q28] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q28] + j, s_ExplicitVarSizeWithFlags_Values[q28] * j,
+ s_ExplicitVarSizeWithFlags_Values[q28] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q28] - j) % 2 = 0;
+ int(1..5)]))
+ | q28 : int(1..4), j : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q28], s_Occurrence[j], s_ExplicitVarSizeWithFlags_Values[q28] != j,
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q28] + j, s_ExplicitVarSizeWithFlags_Values[q28] * j,
+ s_ExplicitVarSizeWithFlags_Values[q28] / j;
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q28] - j) % 2 = 0;
+ int(1..5)]))
+ | q28 : int(1..4), j : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([s_Occurrence[q23] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q25] /\ s_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q27] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)]),
+ and([q7 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q7] < s_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q8] = 1 | q8 : int(1..4)]),
+ and([q11 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q13] /\
+ s_ExplicitVarSizeWithFlags_Values[q13] = s_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q17] = s_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q19]]
+ | q19 : int(1..4)]),
+ and([s_Occurrence[q20] ->
+ or([q22 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1.eprime
new file mode 100644
index 0000000000..30ab2bb7fb
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1.eprime
@@ -0,0 +1,105 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..3)
+branching on
+ [s_Occurrence, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_ExplicitVarSizeWithDummy, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q29], s_ExplicitVarSizeWithDummy[q30] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q29] != s_ExplicitVarSizeWithDummy[q30],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q29] + s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] * s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] / s_ExplicitVarSizeWithDummy[q30];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q29] - s_ExplicitVarSizeWithDummy[q30]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q29] + s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] - s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] * s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] / s_ExplicitVarSizeWithDummy[q30];
+ int(1..4)])
+ <= conjure_aux1
+ | q29 : int(1..4), q30 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q29], s_ExplicitVarSizeWithDummy[q30] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q29] != s_ExplicitVarSizeWithDummy[q30],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q29] + s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] * s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] / s_ExplicitVarSizeWithDummy[q30];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q29] - s_ExplicitVarSizeWithDummy[q30]) % 2 = 0;
+ int(1..5)]))
+ | q29 : int(1..4), q30 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q29], s_ExplicitVarSizeWithDummy[q30] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q29] != s_ExplicitVarSizeWithDummy[q30],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q29] + s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] * s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] / s_ExplicitVarSizeWithDummy[q30];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q29] - s_ExplicitVarSizeWithDummy[q30]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q29] + s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] - s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] * s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] / s_ExplicitVarSizeWithDummy[q30];
+ int(1..4)])
+ = conjure_aux1
+ | q29 : int(1..4), q30 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q29], s_ExplicitVarSizeWithDummy[q30] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q29] != s_ExplicitVarSizeWithDummy[q30],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q29] + s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] * s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] / s_ExplicitVarSizeWithDummy[q30];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q29] - s_ExplicitVarSizeWithDummy[q30]) % 2 = 0;
+ int(1..5)]))
+ | q29 : int(1..4), q30 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q29], s_ExplicitVarSizeWithDummy[q30] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q29] != s_ExplicitVarSizeWithDummy[q30],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q29] + s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] * s_ExplicitVarSizeWithDummy[q30],
+ s_ExplicitVarSizeWithFlags_Values[q29] / s_ExplicitVarSizeWithDummy[q30];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q29] - s_ExplicitVarSizeWithDummy[q30]) % 2 = 0;
+ int(1..5)]))
+ | q29 : int(1..4), q30 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q6] < s_ExplicitVarSizeWithDummy[q6 + 1] \/ s_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q7] = 5 -> s_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q13] /\
+ s_ExplicitVarSizeWithFlags_Values[q13] = s_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([s_ExplicitVarSizeWithDummy[q17] != 5 /\
+ s_ExplicitVarSizeWithDummy[q17] = s_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([s_Occurrence[q19] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q21] /\ s_ExplicitVarSizeWithFlags_Values[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q23] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q23]]
+ | q23 : int(1..4)]),
+ and([s_Occurrence[q24] ->
+ or([s_ExplicitVarSizeWithDummy[q26] != 5 /\ s_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q28] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2.eprime
new file mode 100644
index 0000000000..7d168cbf12
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2.eprime
@@ -0,0 +1,94 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..3)
+branching on [s_ExplicitVarSizeWithDummy, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q18], s_ExplicitVarSizeWithDummy[q19] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q18] != s_ExplicitVarSizeWithDummy[q19],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithDummy[q19]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..4)])
+ <= conjure_aux1
+ | q18 : int(1..4), q19 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q18], s_ExplicitVarSizeWithDummy[q19] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q18] != s_ExplicitVarSizeWithDummy[q19],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithDummy[q19]) % 2 = 0;
+ int(1..5)]))
+ | q18 : int(1..4), q19 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q18], s_ExplicitVarSizeWithDummy[q19] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q18] != s_ExplicitVarSizeWithDummy[q19],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithDummy[q19]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..4)])
+ = conjure_aux1
+ | q18 : int(1..4), q19 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q18], s_ExplicitVarSizeWithDummy[q19] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q18] != s_ExplicitVarSizeWithDummy[q19],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithDummy[q19]) % 2 = 0;
+ int(1..5)]))
+ | q18 : int(1..4), q19 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q18], s_ExplicitVarSizeWithDummy[q19] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q18] != s_ExplicitVarSizeWithDummy[q19],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithDummy[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithDummy[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithDummy[q19]) % 2 = 0;
+ int(1..5)]))
+ | q18 : int(1..4), q19 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q6] < s_ExplicitVarSizeWithDummy[q6 + 1] \/ s_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q7] = 5 -> s_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q13] /\
+ s_ExplicitVarSizeWithFlags_Values[q13] = s_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([s_ExplicitVarSizeWithDummy[q17] != 5 /\
+ s_ExplicitVarSizeWithDummy[q17] = s_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3.eprime
new file mode 100644
index 0000000000..ba3742175a
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3.eprime
@@ -0,0 +1,122 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-20..3)
+branching on
+ [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_ExplicitVarSizeWithFlags_Flags,
+ s_ExplicitVarSizeWithFlags_Values, s_ExplicitVarSizeWithDummy, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q37], s_ExplicitVarSizeWithDummy[q38] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q37] != s_ExplicitVarSizeWithDummy[q38],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithDummy[q38]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..4)])
+ <= conjure_aux1
+ | q37 : int(1..4), q38 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q37], s_ExplicitVarSizeWithDummy[q38] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q37] != s_ExplicitVarSizeWithDummy[q38],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithDummy[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q37], s_ExplicitVarSizeWithDummy[q38] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q37] != s_ExplicitVarSizeWithDummy[q38],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithDummy[q38]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..4)])
+ = conjure_aux1
+ | q37 : int(1..4), q38 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q37], s_ExplicitVarSizeWithDummy[q38] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q37] != s_ExplicitVarSizeWithDummy[q38],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithDummy[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -20,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q37], s_ExplicitVarSizeWithDummy[q38] != 5,
+ s_ExplicitVarSizeWithFlags_Values[q37] != s_ExplicitVarSizeWithDummy[q38],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithDummy[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithDummy[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithDummy[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q6] < s_ExplicitVarSizeWithDummy[q6 + 1] \/ s_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q7] = 5 -> s_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q13] /\
+ s_ExplicitVarSizeWithFlags_Values[q13] = s_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([s_ExplicitVarSizeWithDummy[q17] != 5 /\
+ s_ExplicitVarSizeWithDummy[q17] = s_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q18] < s_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ and([q22 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q24] /\
+ s_ExplicitVarSizeWithFlags_Values[q24] = s_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([q28 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q28] = s_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q32] != 5 /\
+ s_ExplicitVarSizeWithDummy[q32] = s_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([q36 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q36] = s_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1.eprime
new file mode 100644
index 0000000000..5e74dde769
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1.eprime
@@ -0,0 +1,110 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_Occurrence, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values,
+ s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q28], q29 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q28] != s_ExplicitVarSizeWithMarker_Values[q29],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q28] + s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] * s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] / s_ExplicitVarSizeWithMarker_Values[q29];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q28] - s_ExplicitVarSizeWithMarker_Values[q29]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q28] + s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] - s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] * s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] / s_ExplicitVarSizeWithMarker_Values[q29];
+ int(1..4)])
+ <= conjure_aux1
+ | q28 : int(1..4), q29 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q28], q29 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q28] != s_ExplicitVarSizeWithMarker_Values[q29],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q28] + s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] * s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] / s_ExplicitVarSizeWithMarker_Values[q29];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q28] - s_ExplicitVarSizeWithMarker_Values[q29]) % 2 = 0;
+ int(1..5)]))
+ | q28 : int(1..4), q29 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q28], q29 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q28] != s_ExplicitVarSizeWithMarker_Values[q29],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q28] + s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] * s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] / s_ExplicitVarSizeWithMarker_Values[q29];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q28] - s_ExplicitVarSizeWithMarker_Values[q29]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q28] + s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] - s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] * s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] / s_ExplicitVarSizeWithMarker_Values[q29];
+ int(1..4)])
+ = conjure_aux1
+ | q28 : int(1..4), q29 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q28], q29 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q28] != s_ExplicitVarSizeWithMarker_Values[q29],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q28] + s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] * s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] / s_ExplicitVarSizeWithMarker_Values[q29];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q28] - s_ExplicitVarSizeWithMarker_Values[q29]) % 2 = 0;
+ int(1..5)]))
+ | q28 : int(1..4), q29 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q28], q29 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q28] != s_ExplicitVarSizeWithMarker_Values[q29],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q28] + s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] * s_ExplicitVarSizeWithMarker_Values[q29],
+ s_ExplicitVarSizeWithFlags_Values[q28] / s_ExplicitVarSizeWithMarker_Values[q29];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q28] - s_ExplicitVarSizeWithMarker_Values[q29]) % 2 = 0;
+ int(1..5)]))
+ | q28 : int(1..4), q29 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([q6 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q6] < s_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ and([q10 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q12] /\
+ s_ExplicitVarSizeWithFlags_Values[q12] = s_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q16] = s_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([s_Occurrence[q18] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q20] /\ s_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q22] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q22]]
+ | q22 : int(1..4)]),
+ and([s_Occurrence[q23] ->
+ or([q25 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([q27 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2.eprime
new file mode 100644
index 0000000000..80a6ca3fbf
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2.eprime
@@ -0,0 +1,122 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithDummy, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values,
+ s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q37], q38 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q37] != s_ExplicitVarSizeWithMarker_Values[q38],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithMarker_Values[q38]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..4)])
+ <= conjure_aux1
+ | q37 : int(1..4), q38 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q37], q38 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q37] != s_ExplicitVarSizeWithMarker_Values[q38],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithMarker_Values[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q37], q38 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q37] != s_ExplicitVarSizeWithMarker_Values[q38],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithMarker_Values[q38]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..4)])
+ = conjure_aux1
+ | q37 : int(1..4), q38 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q37], q38 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q37] != s_ExplicitVarSizeWithMarker_Values[q38],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithMarker_Values[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q37], q38 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q37] != s_ExplicitVarSizeWithMarker_Values[q38],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q37] + s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] * s_ExplicitVarSizeWithMarker_Values[q38],
+ s_ExplicitVarSizeWithFlags_Values[q37] / s_ExplicitVarSizeWithMarker_Values[q38];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q37] - s_ExplicitVarSizeWithMarker_Values[q38]) % 2 = 0;
+ int(1..5)]))
+ | q37 : int(1..4), q38 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([q6 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q6] < s_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ and([q10 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q12] /\
+ s_ExplicitVarSizeWithFlags_Values[q12] = s_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q16] = s_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q17] < s_ExplicitVarSizeWithDummy[q17 + 1] \/ s_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q18] = 5 -> s_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q24] /\
+ s_ExplicitVarSizeWithFlags_Values[q24] = s_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([s_ExplicitVarSizeWithDummy[q28] != 5 /\
+ s_ExplicitVarSizeWithDummy[q28] = s_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([q32 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q32] = s_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q36] != 5 /\
+ s_ExplicitVarSizeWithDummy[q36] = s_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3.eprime
new file mode 100644
index 0000000000..0a99214fbe
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3.eprime
@@ -0,0 +1,98 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_ExplicitVarSizeWithFlags_Flags,
+ s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q17], q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..4)])
+ <= conjure_aux1
+ | q17 : int(1..4), q18 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q17], q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q17], q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..4)])
+ = conjure_aux1
+ | q17 : int(1..4), q18 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q17], q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q17], q18 <= s_ExplicitVarSizeWithMarker_Marker,
+ s_ExplicitVarSizeWithFlags_Values[q17] != s_ExplicitVarSizeWithMarker_Values[q18],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithMarker_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithMarker_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithMarker_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([q6 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q6] < s_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ and([q10 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q12] /\
+ s_ExplicitVarSizeWithFlags_Values[q12] = s_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q16] = s_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000002.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000003.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000005.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000006.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1.eprime
new file mode 100644
index 0000000000..f39e4e0ee6
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1.eprime
@@ -0,0 +1,86 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_Occurrence, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q12], s_ExplicitVarSizeWithFlags_Flags[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] != s_ExplicitVarSizeWithFlags_Values[q13],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q12] + s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] * s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] / s_ExplicitVarSizeWithFlags_Values[q13];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q12] - s_ExplicitVarSizeWithFlags_Values[q13]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q12] + s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] - s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] * s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] / s_ExplicitVarSizeWithFlags_Values[q13];
+ int(1..4)])
+ <= conjure_aux1
+ | q12 : int(1..4), q13 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q12], s_ExplicitVarSizeWithFlags_Flags[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] != s_ExplicitVarSizeWithFlags_Values[q13],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q12] + s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] * s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] / s_ExplicitVarSizeWithFlags_Values[q13];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q12] - s_ExplicitVarSizeWithFlags_Values[q13]) % 2 = 0;
+ int(1..5)]))
+ | q12 : int(1..4), q13 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q12], s_ExplicitVarSizeWithFlags_Flags[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] != s_ExplicitVarSizeWithFlags_Values[q13],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q12] + s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] * s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] / s_ExplicitVarSizeWithFlags_Values[q13];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q12] - s_ExplicitVarSizeWithFlags_Values[q13]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q12] + s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] - s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] * s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] / s_ExplicitVarSizeWithFlags_Values[q13];
+ int(1..4)])
+ = conjure_aux1
+ | q12 : int(1..4), q13 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q12], s_ExplicitVarSizeWithFlags_Flags[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] != s_ExplicitVarSizeWithFlags_Values[q13],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q12] + s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] * s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] / s_ExplicitVarSizeWithFlags_Values[q13];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q12] - s_ExplicitVarSizeWithFlags_Values[q13]) % 2 = 0;
+ int(1..5)]))
+ | q12 : int(1..4), q13 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q12], s_ExplicitVarSizeWithFlags_Flags[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] != s_ExplicitVarSizeWithFlags_Values[q13],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q12] + s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] * s_ExplicitVarSizeWithFlags_Values[q13],
+ s_ExplicitVarSizeWithFlags_Values[q12] / s_ExplicitVarSizeWithFlags_Values[q13];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q12] - s_ExplicitVarSizeWithFlags_Values[q13]) % 2 = 0;
+ int(1..5)]))
+ | q12 : int(1..4), q13 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([s_Occurrence[q7] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q9] /\ s_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q11] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000002.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000003.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000004.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000005.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000007.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2.eprime
new file mode 100644
index 0000000000..7af3076aa8
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2.eprime
@@ -0,0 +1,94 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_ExplicitVarSizeWithDummy, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q18], s_ExplicitVarSizeWithFlags_Flags[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] != s_ExplicitVarSizeWithFlags_Values[q19],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithFlags_Values[q19]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..4)])
+ <= conjure_aux1
+ | q18 : int(1..4), q19 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q18], s_ExplicitVarSizeWithFlags_Flags[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] != s_ExplicitVarSizeWithFlags_Values[q19],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithFlags_Values[q19]) % 2 = 0;
+ int(1..5)]))
+ | q18 : int(1..4), q19 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q18], s_ExplicitVarSizeWithFlags_Flags[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] != s_ExplicitVarSizeWithFlags_Values[q19],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithFlags_Values[q19]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..4)])
+ = conjure_aux1
+ | q18 : int(1..4), q19 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q18], s_ExplicitVarSizeWithFlags_Flags[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] != s_ExplicitVarSizeWithFlags_Values[q19],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithFlags_Values[q19]) % 2 = 0;
+ int(1..5)]))
+ | q18 : int(1..4), q19 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q18], s_ExplicitVarSizeWithFlags_Flags[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] != s_ExplicitVarSizeWithFlags_Values[q19],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q18] + s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] * s_ExplicitVarSizeWithFlags_Values[q19],
+ s_ExplicitVarSizeWithFlags_Values[q18] / s_ExplicitVarSizeWithFlags_Values[q19];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q18] - s_ExplicitVarSizeWithFlags_Values[q19]) % 2 = 0;
+ int(1..5)]))
+ | q18 : int(1..4), q19 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q6] < s_ExplicitVarSizeWithDummy[q6 + 1] \/ s_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q7] = 5 -> s_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q13] /\
+ s_ExplicitVarSizeWithFlags_Values[q13] = s_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([s_ExplicitVarSizeWithDummy[q17] != 5 /\
+ s_ExplicitVarSizeWithDummy[q17] = s_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3.eprime
new file mode 100644
index 0000000000..5854a1dbb6
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3.eprime
@@ -0,0 +1,98 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on
+ [s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_ExplicitVarSizeWithFlags_Flags,
+ s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q17], s_ExplicitVarSizeWithFlags_Flags[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] != s_ExplicitVarSizeWithFlags_Values[q18],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..4)])
+ <= conjure_aux1
+ | q17 : int(1..4), q18 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q17], s_ExplicitVarSizeWithFlags_Flags[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] != s_ExplicitVarSizeWithFlags_Values[q18],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q17], s_ExplicitVarSizeWithFlags_Flags[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] != s_ExplicitVarSizeWithFlags_Values[q18],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..4)])
+ = conjure_aux1
+ | q17 : int(1..4), q18 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q17], s_ExplicitVarSizeWithFlags_Flags[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] != s_ExplicitVarSizeWithFlags_Values[q18],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q17], s_ExplicitVarSizeWithFlags_Flags[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] != s_ExplicitVarSizeWithFlags_Values[q18],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q17] + s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] * s_ExplicitVarSizeWithFlags_Values[q18],
+ s_ExplicitVarSizeWithFlags_Values[q17] / s_ExplicitVarSizeWithFlags_Values[q18];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q17] - s_ExplicitVarSizeWithFlags_Values[q18]) % 2 = 0;
+ int(1..5)]))
+ | q17 : int(1..4), q18 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([q6 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q6] < s_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ and([q10 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q12] /\
+ s_ExplicitVarSizeWithFlags_Values[q12] = s_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q16] = s_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000001.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000001.solution
new file mode 100644
index 0000000000..8b4ecbb66d
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000002.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000002.solution
new file mode 100644
index 0000000000..159a613983
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000003.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000003.solution
new file mode 100644
index 0000000000..5963aac565
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000003.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000004.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000004.solution
new file mode 100644
index 0000000000..6eeacc9727
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000004.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000005.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000005.solution
new file mode 100644
index 0000000000..560dd0f2f7
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000005.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 3, 4}
+letting x be -2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000006.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000006.solution
new file mode 100644
index 0000000000..40f3fd5c8f
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000006.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000007.solution b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000007.solution
new file mode 100644
index 0000000000..bd956f44e3
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000007.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting s be {1, 2, 3, 4}
+letting x be 2
diff --git a/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4.eprime b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4.eprime
new file mode 100644
index 0000000000..bf58b8c524
--- /dev/null
+++ b/tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4.eprime
@@ -0,0 +1,80 @@
+language ESSENCE' 1.0
+
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+letting let1 be -100
+find x: int(-100..100)
+find conjure_aux1: int(-16..3)
+branching on [s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, x]
+such that
+ and([and([s_ExplicitVarSizeWithFlags_Flags[q6], s_ExplicitVarSizeWithFlags_Flags[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] != s_ExplicitVarSizeWithFlags_Values[q7],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q6] + s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] * s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] / s_ExplicitVarSizeWithFlags_Values[q7];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q6] - s_ExplicitVarSizeWithFlags_Values[q7]) % 2 = 0;
+ int(1..5)])
+ ->
+ min([s_ExplicitVarSizeWithFlags_Values[q6] + s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] - s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] * s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] / s_ExplicitVarSizeWithFlags_Values[q7];
+ int(1..4)])
+ <= conjure_aux1
+ | q6 : int(1..4), q7 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q6], s_ExplicitVarSizeWithFlags_Flags[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] != s_ExplicitVarSizeWithFlags_Values[q7],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q6] + s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] * s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] / s_ExplicitVarSizeWithFlags_Values[q7];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q6] - s_ExplicitVarSizeWithFlags_Values[q7]) % 2 = 0;
+ int(1..5)]))
+ | q6 : int(1..4), q7 : int(1..4)])
+ > 0
+ ->
+ or([and([s_ExplicitVarSizeWithFlags_Flags[q6], s_ExplicitVarSizeWithFlags_Flags[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] != s_ExplicitVarSizeWithFlags_Values[q7],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q6] + s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] * s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] / s_ExplicitVarSizeWithFlags_Values[q7];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q6] - s_ExplicitVarSizeWithFlags_Values[q7]) % 2 = 0;
+ int(1..5)])
+ /\
+ min([s_ExplicitVarSizeWithFlags_Values[q6] + s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] - s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] * s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] / s_ExplicitVarSizeWithFlags_Values[q7];
+ int(1..4)])
+ = conjure_aux1
+ | q6 : int(1..4), q7 : int(1..4)]),
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q6], s_ExplicitVarSizeWithFlags_Flags[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] != s_ExplicitVarSizeWithFlags_Values[q7],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q6] + s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] * s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] / s_ExplicitVarSizeWithFlags_Values[q7];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q6] - s_ExplicitVarSizeWithFlags_Values[q7]) % 2 = 0;
+ int(1..5)]))
+ | q6 : int(1..4), q7 : int(1..4)])
+ = 0
+ -> conjure_aux1 = -16,
+ x = conjure_aux1,
+ sum([toInt(and([s_ExplicitVarSizeWithFlags_Flags[q6], s_ExplicitVarSizeWithFlags_Flags[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] != s_ExplicitVarSizeWithFlags_Values[q7],
+ allDiff([s_ExplicitVarSizeWithFlags_Values[q6] + s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] * s_ExplicitVarSizeWithFlags_Values[q7],
+ s_ExplicitVarSizeWithFlags_Values[q6] / s_ExplicitVarSizeWithFlags_Values[q7];
+ int(1..3)]),
+ (s_ExplicitVarSizeWithFlags_Values[q6] - s_ExplicitVarSizeWithFlags_Values[q7]) % 2 = 0;
+ int(1..5)]))
+ | q6 : int(1..4), q7 : int(1..4)])
+ > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/cut_01_off/expected/model_2.eprime b/tests/exhaustive/basic/cut_01_off/expected/model_2.eprime
index 37164ea2c4..3d1fd14c52 100644
--- a/tests/exhaustive/basic/cut_01_off/expected/model_2.eprime
+++ b/tests/exhaustive/basic/cut_01_off/expected/model_2.eprime
@@ -3,8 +3,7 @@ language ESSENCE' 1.0
find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
branching on [x_ExplicitVarSizeWithDummy]
such that
- and([[x_ExplicitVarSizeWithDummy[q1]; int(1)] x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)])
diff --git a/tests/exhaustive/basic/cut_01_off/expected/model_3.eprime b/tests/exhaustive/basic/cut_01_off/expected/model_3.eprime
index 2450f96648..d729b76811 100644
--- a/tests/exhaustive/basic/cut_01_off/expected/model_3.eprime
+++ b/tests/exhaustive/basic/cut_01_off/expected/model_3.eprime
@@ -5,7 +5,7 @@ find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1.
branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
such that
and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- [x_ExplicitVarSizeWithMarker_Values[q1]; int(1)] x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)])
diff --git a/tests/exhaustive/basic/cut_01_off/expected/model_4.eprime b/tests/exhaustive/basic/cut_01_off/expected/model_4.eprime
index d0b0cedea3..1f10b1c798 100644
--- a/tests/exhaustive/basic/cut_01_off/expected/model_4.eprime
+++ b/tests/exhaustive/basic/cut_01_off/expected/model_4.eprime
@@ -5,7 +5,7 @@ find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..
branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
such that
and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- [x_ExplicitVarSizeWithFlags_Values[q1]; int(1)] x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)])
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1.eprime b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1.eprime
new file mode 100644
index 0000000000..bc8f37139a
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_1.eprime
@@ -0,0 +1,10 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find cut1: bool
+find cut2: bool
+branching on [cut1, cut2, x_Occurrence]
+such that
+ !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
+ !cut2 <-> x_Occurrence[1]
+
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2.eprime b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2.eprime
new file mode 100644
index 0000000000..8a8719673a
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_2.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find cut1: bool
+find cut2: bool
+branching on [cut1, cut2, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
+ !cut2 <-> x_Occurrence[1],
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 4
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 4 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 4 | q3 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q7] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 4 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
+ | q8 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3.eprime b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3.eprime
new file mode 100644
index 0000000000..5406286e79
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_3.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find cut1: bool
+find cut2: bool
+branching on [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
+ !cut2 <-> x_Occurrence[1],
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..3)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4.eprime b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4.eprime
new file mode 100644
index 0000000000..97272a9274
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_1_4.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find cut1: bool
+find cut2: bool
+branching on [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
+ !cut2 <-> x_Occurrence[1],
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
+ | q9 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1.eprime.orig
deleted file mode 100644
index bdba13c665..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_1.eprime.orig
+++ /dev/null
@@ -1,18 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_ExplicitVarSizeWithDummy, x_Occurrence]
-such that
- !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q13] != 4 /\ x_ExplicitVarSizeWithDummy[q13] = 1 | q13 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 4
- | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q3] = 4 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 4 | q3 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q7] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
- and([x_Occurrence[q8] ->
- or([x_ExplicitVarSizeWithDummy[q10] != 4 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
- | q8 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_2.eprime.orig
deleted file mode 100644
index bdba13c665..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_2.eprime.orig
+++ /dev/null
@@ -1,18 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_ExplicitVarSizeWithDummy, x_Occurrence]
-such that
- !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q13] != 4 /\ x_ExplicitVarSizeWithDummy[q13] = 1 | q13 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 4
- | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q3] = 4 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 4 | q3 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q7] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
- and([x_Occurrence[q8] ->
- or([x_ExplicitVarSizeWithDummy[q10] != 4 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
- | q8 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3.eprime.orig
deleted file mode 100644
index ae3d5b6397..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_3.eprime.orig
+++ /dev/null
@@ -1,42 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
- x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q29] != 4 /\ x_ExplicitVarSizeWithDummy[q29] = 1 | q29 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 4
- | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q3] = 4 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 4 | q3 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q7] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
- and([x_Occurrence[q8] ->
- or([x_ExplicitVarSizeWithDummy[q10] != 4 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
- | q8 : int(1..3)]),
- and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
- | q11 : int(1..2)]),
- and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..3)]),
- and([q15 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q15]]
- | q15 : int(1..3)]),
- and([x_Occurrence[q16] ->
- or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q16
- | q18 : int(1..3)])
- | q16 : int(1..3)]),
- and([q20 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q22] != 4 /\
- x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithMarker_Values[q20]
- | q22 : int(1..3)])
- | q20 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q24] != 4 ->
- or([q26 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q26] = x_ExplicitVarSizeWithDummy[q24]
- | q26 : int(1..3)])
- | q24 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4.eprime.orig
deleted file mode 100644
index 51db4a59f6..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_1_2_4.eprime.orig
+++ /dev/null
@@ -1,43 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
- x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q31] != 4 /\ x_ExplicitVarSizeWithDummy[q31] = 1 | q31 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 4
- | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q3] = 4 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 4 | q3 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q7] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
- and([x_Occurrence[q8] ->
- or([x_ExplicitVarSizeWithDummy[q10] != 4 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
- | q8 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q11] < x_ExplicitVarSizeWithFlags_Values[q11 + 1]
- | q11 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q12] = false -> x_ExplicitVarSizeWithFlags_Values[q12] = 1
- | q12 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q17] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q17]]
- | q17 : int(1..3)]),
- and([x_Occurrence[q18] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..3)])
- | q18 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
- or([x_ExplicitVarSizeWithDummy[q24] != 4 /\
- x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
- | q24 : int(1..3)])
- | q22 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q26] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
- x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
- | q28 : int(1..3)])
- | q26 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1.eprime.orig
deleted file mode 100644
index e0ba9b28e5..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_1.eprime.orig
+++ /dev/null
@@ -1,22 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
-such that
- !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
- !cut2 <->
- or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..3)]),
- and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
- | q2 : int(1..2)]),
- and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
- and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
- | q6 : int(1..3)]),
- and([x_Occurrence[q7] ->
- or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
- | q7 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2.eprime.orig
deleted file mode 100644
index 73bccb6f90..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_2.eprime.orig
+++ /dev/null
@@ -1,42 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker,
- x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
- !cut2 <->
- or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 1 | q29 : int(1..3)]),
- and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
- | q2 : int(1..2)]),
- and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
- and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
- | q6 : int(1..3)]),
- and([x_Occurrence[q7] ->
- or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
- | q7 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 4
- | q10 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q11] = 4 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 4 | q11 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q15] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..3)]),
- and([x_Occurrence[q16] ->
- or([x_ExplicitVarSizeWithDummy[q18] != 4 /\ x_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..3)])
- | q16 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q20] != 4 ->
- or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
- | q22 : int(1..3)])
- | q20 : int(1..3)]),
- and([q24 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q26] != 4 /\
- x_ExplicitVarSizeWithDummy[q26] = x_ExplicitVarSizeWithMarker_Values[q24]
- | q26 : int(1..3)])
- | q24 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_3.eprime.orig
deleted file mode 100644
index e0ba9b28e5..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_3.eprime.orig
+++ /dev/null
@@ -1,22 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
-such that
- !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
- !cut2 <->
- or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..3)]),
- and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
- | q2 : int(1..2)]),
- and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
- and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
- | q6 : int(1..3)]),
- and([x_Occurrence[q7] ->
- or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
- | q7 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4.eprime.orig
deleted file mode 100644
index 3b9d9c1c5b..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_1_3_4.eprime.orig
+++ /dev/null
@@ -1,47 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
- x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
- !cut2 <->
- or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 1 | q30 : int(1..3)]),
- and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
- | q2 : int(1..2)]),
- and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
- and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
- | q6 : int(1..3)]),
- and([x_Occurrence[q7] ->
- or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
- | q7 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
- | q10 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 1
- | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q16] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q16]]
- | q16 : int(1..3)]),
- and([x_Occurrence[q17] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = q17 | q19 : int(1..3)])
- | q17 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q21] ->
- or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q23] = x_ExplicitVarSizeWithFlags_Values[q21]
- | q23 : int(1..3)])
- | q21 : int(1..3)]),
- and([q25 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q27] /\
- x_ExplicitVarSizeWithFlags_Values[q27] = x_ExplicitVarSizeWithMarker_Values[q25]
- | q27 : int(1..3)])
- | q25 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1.eprime.orig
deleted file mode 100644
index 59c07401b5..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_1.eprime.orig
+++ /dev/null
@@ -1,22 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
-such that
- !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q14] /\ x_ExplicitVarSizeWithFlags_Values[q14] = 1 | q14 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
- | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
- and([x_Occurrence[q9] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
- | q9 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2.eprime.orig
deleted file mode 100644
index cc5451afda..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_2.eprime.orig
+++ /dev/null
@@ -1,42 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags,
- x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 1 | q31 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
- | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
- and([x_Occurrence[q9] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
- | q9 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q12] < x_ExplicitVarSizeWithDummy[q12 + 1] \/ x_ExplicitVarSizeWithDummy[q12] = 4
- | q12 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q13] = 4 -> x_ExplicitVarSizeWithDummy[q13 + 1] = 4 | q13 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q17] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q17]] | q17 : int(1..3)]),
- and([x_Occurrence[q18] ->
- or([x_ExplicitVarSizeWithDummy[q20] != 4 /\ x_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..3)])
- | q18 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q22] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
- x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
- | q24 : int(1..3)])
- | q22 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
- or([x_ExplicitVarSizeWithDummy[q28] != 4 /\
- x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
- | q28 : int(1..3)])
- | q26 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3.eprime.orig
deleted file mode 100644
index ff3bcc9dc1..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_3.eprime.orig
+++ /dev/null
@@ -1,46 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
- x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
- | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
- and([x_Occurrence[q9] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
- | q9 : int(1..3)]),
- and([q12 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q12] < x_ExplicitVarSizeWithMarker_Values[q12 + 1]
- | q12 : int(1..2)]),
- and([q13 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q13] = 1 | q13 : int(1..3)]),
- and([q16 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q16]]
- | q16 : int(1..3)]),
- and([x_Occurrence[q17] ->
- or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
- | q19 : int(1..3)])
- | q17 : int(1..3)]),
- and([q21 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q23] /\
- x_ExplicitVarSizeWithFlags_Values[q23] = x_ExplicitVarSizeWithMarker_Values[q21]
- | q23 : int(1..3)])
- | q21 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q25] ->
- or([q27 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q27] = x_ExplicitVarSizeWithFlags_Values[q25]
- | q27 : int(1..3)])
- | q25 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_1_4_4.eprime.orig
deleted file mode 100644
index 59c07401b5..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_1_4_4.eprime.orig
+++ /dev/null
@@ -1,22 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
-such that
- !cut1 <-> x_Occurrence[1] /\ x_Occurrence[2],
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q14] /\ x_ExplicitVarSizeWithFlags_Values[q14] = 1 | q14 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
- | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
- and([x_Occurrence[q9] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
- | q9 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1.eprime.orig
deleted file mode 100644
index f6a1975870..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_1.eprime.orig
+++ /dev/null
@@ -1,20 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q13] != 4 /\ x_ExplicitVarSizeWithDummy[q13] = 1 | q13 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q15] != 4 /\ x_ExplicitVarSizeWithDummy[q15] = 2 | q15 : int(1..3)]),
- !cut2 <-> x_Occurrence[1],
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([x_Occurrence[q6] ->
- or([x_ExplicitVarSizeWithDummy[q8] != 4 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..3)])
- | q6 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q10] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_2.eprime.orig
deleted file mode 100644
index f6a1975870..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_2.eprime.orig
+++ /dev/null
@@ -1,20 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q13] != 4 /\ x_ExplicitVarSizeWithDummy[q13] = 1 | q13 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q15] != 4 /\ x_ExplicitVarSizeWithDummy[q15] = 2 | q15 : int(1..3)]),
- !cut2 <-> x_Occurrence[1],
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([x_Occurrence[q6] ->
- or([x_ExplicitVarSizeWithDummy[q8] != 4 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..3)])
- | q6 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q10] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3.eprime.orig
deleted file mode 100644
index 97d66e8808..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_3.eprime.orig
+++ /dev/null
@@ -1,44 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
- x_Occurrence]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q29] != 4 /\ x_ExplicitVarSizeWithDummy[q29] = 1 | q29 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q31] != 4 /\ x_ExplicitVarSizeWithDummy[q31] = 2 | q31 : int(1..3)]),
- !cut2 <-> x_Occurrence[1],
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([x_Occurrence[q22] ->
- or([x_ExplicitVarSizeWithDummy[q24] != 4 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..3)])
- | q22 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q26] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..3)]),
- and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
- | q6 : int(1..2)]),
- and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
- and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q12] != 4 /\
- x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
- | q12 : int(1..3)])
- | q10 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q14] != 4 ->
- or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
- | q16 : int(1..3)])
- | q14 : int(1..3)]),
- and([q18 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q18]]
- | q18 : int(1..3)]),
- and([x_Occurrence[q19] ->
- or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = q19
- | q21 : int(1..3)])
- | q19 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4.eprime.orig
deleted file mode 100644
index 3a9b95e862..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_1_4.eprime.orig
+++ /dev/null
@@ -1,44 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
- x_Occurrence]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q31] != 4 /\ x_ExplicitVarSizeWithDummy[q31] = 1 | q31 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q33] != 4 /\ x_ExplicitVarSizeWithDummy[q33] = 2 | q33 : int(1..3)]),
- !cut2 <-> x_Occurrence[1],
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([x_Occurrence[q24] ->
- or([x_ExplicitVarSizeWithDummy[q26] != 4 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..3)])
- | q24 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q28] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
- | q6 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
- or([x_ExplicitVarSizeWithDummy[q14] != 4 /\
- x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
- | q14 : int(1..3)])
- | q12 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q16] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
- x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
- | q18 : int(1..3)])
- | q16 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q20] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q20]]
- | q20 : int(1..3)]),
- and([x_Occurrence[q21] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = q21 | q23 : int(1..3)])
- | q21 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1.eprime.orig
deleted file mode 100644
index 8c2f20a49b..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_1.eprime.orig
+++ /dev/null
@@ -1,20 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q8] != 4 /\ x_ExplicitVarSizeWithDummy[q8] = 1 | q8 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q10] != 4 /\ x_ExplicitVarSizeWithDummy[q10] = 2 | q10 : int(1..3)]),
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q12] != 4 /\ x_ExplicitVarSizeWithDummy[q12] = 1 | q12 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([x_Occurrence[q13] ->
- or([x_ExplicitVarSizeWithDummy[q15] != 4 /\ x_ExplicitVarSizeWithDummy[q15] = q13 | q15 : int(1..3)])
- | q13 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q17] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q17]] | q17 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2.eprime.orig
deleted file mode 100644
index 1ab97aa764..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_2.eprime.orig
+++ /dev/null
@@ -1,15 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q7] != 4 /\ x_ExplicitVarSizeWithDummy[q7] = 1 | q7 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q9] != 4 /\ x_ExplicitVarSizeWithDummy[q9] = 2 | q9 : int(1..3)]),
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q11] != 4 /\ x_ExplicitVarSizeWithDummy[q11] = 1 | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3.eprime.orig
deleted file mode 100644
index ef5020a88a..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_3.eprime.orig
+++ /dev/null
@@ -1,32 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q18] != 4 /\ x_ExplicitVarSizeWithDummy[q18] = 1 | q18 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q20] != 4 /\ x_ExplicitVarSizeWithDummy[q20] = 2 | q20 : int(1..3)]),
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q22] != 4 /\ x_ExplicitVarSizeWithDummy[q22] = 1 | q22 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
- | q5 : int(1..2)]),
- and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
- and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q11] != 4 /\
- x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
- | q11 : int(1..3)])
- | q9 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q13] != 4 ->
- or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
- | q15 : int(1..3)])
- | q13 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4.eprime.orig
deleted file mode 100644
index 02cfe37098..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_2_4.eprime.orig
+++ /dev/null
@@ -1,33 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q20] != 4 /\ x_ExplicitVarSizeWithDummy[q20] = 1 | q20 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q22] != 4 /\ x_ExplicitVarSizeWithDummy[q22] = 2 | q22 : int(1..3)]),
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q24] != 4 /\ x_ExplicitVarSizeWithDummy[q24] = 1 | q24 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
- | q5 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
- or([x_ExplicitVarSizeWithDummy[q13] != 4 /\
- x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
- | q13 : int(1..3)])
- | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q15] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
- x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
- | q17 : int(1..3)])
- | q15 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1.eprime.orig
deleted file mode 100644
index b19839d2f0..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_1.eprime.orig
+++ /dev/null
@@ -1,45 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker,
- x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q19] != 4 /\ x_ExplicitVarSizeWithDummy[q19] = 1 | q19 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q21] != 4 /\ x_ExplicitVarSizeWithDummy[q21] = 2 | q21 : int(1..3)]),
- !cut2 <->
- or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q23] = 1 | q23 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
- | q5 : int(1..2)]),
- and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
- and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q11] != 4 /\
- x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
- | q11 : int(1..3)])
- | q9 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q13] != 4 ->
- or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
- | q15 : int(1..3)])
- | q13 : int(1..3)]),
- and([x_Occurrence[q24] ->
- or([x_ExplicitVarSizeWithDummy[q26] != 4 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..3)])
- | q24 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q28] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..3)]),
- and([x_Occurrence[q29] ->
- or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = q29
- | q31 : int(1..3)])
- | q29 : int(1..3)]),
- and([q33 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q33]]
- | q33 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2.eprime.orig
deleted file mode 100644
index 841093014c..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_2.eprime.orig
+++ /dev/null
@@ -1,33 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q18] != 4 /\ x_ExplicitVarSizeWithDummy[q18] = 1 | q18 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q20] != 4 /\ x_ExplicitVarSizeWithDummy[q20] = 2 | q20 : int(1..3)]),
- !cut2 <->
- or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = 1 | q22 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
- | q5 : int(1..2)]),
- and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
- and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q11] != 4 /\
- x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
- | q11 : int(1..3)])
- | q9 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q13] != 4 ->
- or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
- | q15 : int(1..3)])
- | q13 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_3.eprime.orig
deleted file mode 100644
index 841093014c..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_3.eprime.orig
+++ /dev/null
@@ -1,33 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q18] != 4 /\ x_ExplicitVarSizeWithDummy[q18] = 1 | q18 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q20] != 4 /\ x_ExplicitVarSizeWithDummy[q20] = 2 | q20 : int(1..3)]),
- !cut2 <->
- or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = 1 | q22 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
- | q5 : int(1..2)]),
- and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
- and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q11] != 4 /\
- x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
- | q11 : int(1..3)])
- | q9 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q13] != 4 ->
- or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
- | q15 : int(1..3)])
- | q13 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4.eprime.orig
deleted file mode 100644
index 85ebb942bb..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_3_4.eprime.orig
+++ /dev/null
@@ -1,62 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
- x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q39] != 4 /\ x_ExplicitVarSizeWithDummy[q39] = 1 | q39 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q41] != 4 /\ x_ExplicitVarSizeWithDummy[q41] = 2 | q41 : int(1..3)]),
- !cut2 <->
- or([q43 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q43] = 1 | q43 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
- | q5 : int(1..2)]),
- and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
- and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q11] != 4 /\
- x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
- | q11 : int(1..3)])
- | q9 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q13] != 4 ->
- or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
- | q15 : int(1..3)])
- | q13 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
- | q16 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
- | q17 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
- or([x_ExplicitVarSizeWithDummy[q24] != 4 /\
- x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
- | q24 : int(1..3)])
- | q22 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q26] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
- x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
- | q28 : int(1..3)])
- | q26 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
- or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
- | q32 : int(1..3)])
- | q30 : int(1..3)]),
- and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
- x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
- | q36 : int(1..3)])
- | q34 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1.eprime.orig
deleted file mode 100644
index f6983c9c0e..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_1.eprime.orig
+++ /dev/null
@@ -1,45 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags,
- x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q31] != 4 /\ x_ExplicitVarSizeWithDummy[q31] = 1 | q31 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q33] != 4 /\ x_ExplicitVarSizeWithDummy[q33] = 2 | q33 : int(1..3)]),
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q35] /\ x_ExplicitVarSizeWithFlags_Values[q35] = 1 | q35 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
- | q5 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
- or([x_ExplicitVarSizeWithDummy[q13] != 4 /\
- x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
- | q13 : int(1..3)])
- | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q15] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
- x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
- | q17 : int(1..3)])
- | q15 : int(1..3)]),
- and([x_Occurrence[q19] ->
- or([x_ExplicitVarSizeWithDummy[q21] != 4 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..3)])
- | q19 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q23] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q23]] | q23 : int(1..3)]),
- and([x_Occurrence[q24] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..3)])
- | q24 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
- | q28 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2.eprime.orig
deleted file mode 100644
index 31db1d1a15..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_2.eprime.orig
+++ /dev/null
@@ -1,34 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q20] != 4 /\ x_ExplicitVarSizeWithDummy[q20] = 1 | q20 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q22] != 4 /\ x_ExplicitVarSizeWithDummy[q22] = 2 | q22 : int(1..3)]),
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q24] /\ x_ExplicitVarSizeWithFlags_Values[q24] = 1 | q24 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
- | q5 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
- or([x_ExplicitVarSizeWithDummy[q13] != 4 /\
- x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
- | q13 : int(1..3)])
- | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q15] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
- x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
- | q17 : int(1..3)])
- | q15 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3.eprime.orig
deleted file mode 100644
index afe6f3dbbb..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_3.eprime.orig
+++ /dev/null
@@ -1,61 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
- x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q39] != 4 /\ x_ExplicitVarSizeWithDummy[q39] = 1 | q39 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q41] != 4 /\ x_ExplicitVarSizeWithDummy[q41] = 2 | q41 : int(1..3)]),
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q43] /\ x_ExplicitVarSizeWithFlags_Values[q43] = 1 | q43 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
- | q5 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
- or([x_ExplicitVarSizeWithDummy[q13] != 4 /\
- x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
- | q13 : int(1..3)])
- | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q15] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
- x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
- | q17 : int(1..3)])
- | q15 : int(1..3)]),
- and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
- | q18 : int(1..2)]),
- and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..3)]),
- and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q24] != 4 /\
- x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
- | q24 : int(1..3)])
- | q22 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q26] != 4 ->
- or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
- | q28 : int(1..3)])
- | q26 : int(1..3)]),
- and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
- x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
- | q32 : int(1..3)])
- | q30 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
- or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
- | q36 : int(1..3)])
- | q34 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_2_4_4.eprime.orig
deleted file mode 100644
index 31db1d1a15..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_2_4_4.eprime.orig
+++ /dev/null
@@ -1,34 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithDummy[q20] != 4 /\ x_ExplicitVarSizeWithDummy[q20] = 1 | q20 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithDummy[q22] != 4 /\ x_ExplicitVarSizeWithDummy[q22] = 2 | q22 : int(1..3)]),
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q24] /\ x_ExplicitVarSizeWithFlags_Values[q24] = 1 | q24 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
- | q5 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
- or([x_ExplicitVarSizeWithDummy[q13] != 4 /\
- x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
- | q13 : int(1..3)])
- | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q15] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
- x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
- | q17 : int(1..3)])
- | q15 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1.eprime.orig
deleted file mode 100644
index a48a84aee7..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_1.eprime.orig
+++ /dev/null
@@ -1,23 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..3)]) /\
- or([q14 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q14] = 2 | q14 : int(1..3)]),
- !cut2 <-> x_Occurrence[1],
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_Occurrence[q5] ->
- or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5 | q7 : int(1..3)])
- | q5 : int(1..3)]),
- and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
- | q9 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2.eprime.orig
deleted file mode 100644
index 02751a648d..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_2.eprime.orig
+++ /dev/null
@@ -1,44 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
- x_Occurrence]
-such that
- !cut1 <->
- or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 1 | q29 : int(1..3)]) /\
- or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = 2 | q31 : int(1..3)]),
- !cut2 <-> x_Occurrence[1],
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_Occurrence[q22] ->
- or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
- | q24 : int(1..3)])
- | q22 : int(1..3)]),
- and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
- | q26 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 4
- | q5 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q6] = 4 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 4 | q6 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q10] != 4 ->
- or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
- | q12 : int(1..3)])
- | q10 : int(1..3)]),
- and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q16] != 4 /\
- x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
- | q16 : int(1..3)])
- | q14 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q18] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q18]] | q18 : int(1..3)]),
- and([x_Occurrence[q19] ->
- or([x_ExplicitVarSizeWithDummy[q21] != 4 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..3)])
- | q19 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_3.eprime.orig
deleted file mode 100644
index a48a84aee7..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_3.eprime.orig
+++ /dev/null
@@ -1,23 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..3)]) /\
- or([q14 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q14] = 2 | q14 : int(1..3)]),
- !cut2 <-> x_Occurrence[1],
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_Occurrence[q5] ->
- or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5 | q7 : int(1..3)])
- | q5 : int(1..3)]),
- and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
- | q9 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4.eprime.orig
deleted file mode 100644
index b63ab0aee3..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_1_4.eprime.orig
+++ /dev/null
@@ -1,48 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
- x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
-such that
- !cut1 <->
- or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 1 | q30 : int(1..3)]) /\
- or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q32] = 2 | q32 : int(1..3)]),
- !cut2 <-> x_Occurrence[1],
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_Occurrence[q23] ->
- or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
- | q25 : int(1..3)])
- | q23 : int(1..3)]),
- and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
- | q27 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
- | q5 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
- or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
- | q13 : int(1..3)])
- | q11 : int(1..3)]),
- and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
- x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
- | q17 : int(1..3)])
- | q15 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q19] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q19]]
- | q19 : int(1..3)]),
- and([x_Occurrence[q20] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = q20 | q22 : int(1..3)])
- | q20 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1.eprime.orig
deleted file mode 100644
index d412332f03..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_1.eprime.orig
+++ /dev/null
@@ -1,44 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
- x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..3)]) /\
- or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = 2 | q21 : int(1..3)]),
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q23] != 4 /\ x_ExplicitVarSizeWithDummy[q23] = 1 | q23 : int(1..3)]),
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 4
- | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q5] = 4 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 4 | q5 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q9] != 4 ->
- or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
- | q11 : int(1..3)])
- | q9 : int(1..3)]),
- and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q15] != 4 /\
- x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
- | q15 : int(1..3)])
- | q13 : int(1..3)]),
- and([x_Occurrence[q24] ->
- or([q26 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q26] = q24
- | q26 : int(1..3)])
- | q24 : int(1..3)]),
- and([q28 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q28]]
- | q28 : int(1..3)]),
- and([x_Occurrence[q29] ->
- or([x_ExplicitVarSizeWithDummy[q31] != 4 /\ x_ExplicitVarSizeWithDummy[q31] = q29 | q31 : int(1..3)])
- | q29 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q33] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q33]] | q33 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2.eprime.orig
deleted file mode 100644
index afa2877b97..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_2.eprime.orig
+++ /dev/null
@@ -1,32 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..3)]) /\
- or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..3)]),
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q22] != 4 /\ x_ExplicitVarSizeWithDummy[q22] = 1 | q22 : int(1..3)]),
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 4
- | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q5] = 4 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 4 | q5 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q9] != 4 ->
- or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
- | q11 : int(1..3)])
- | q9 : int(1..3)]),
- and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q15] != 4 /\
- x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
- | q15 : int(1..3)])
- | q13 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_3.eprime.orig
deleted file mode 100644
index afa2877b97..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_3.eprime.orig
+++ /dev/null
@@ -1,32 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..3)]) /\
- or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..3)]),
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q22] != 4 /\ x_ExplicitVarSizeWithDummy[q22] = 1 | q22 : int(1..3)]),
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 4
- | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q5] = 4 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 4 | q5 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q9] != 4 ->
- or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
- | q11 : int(1..3)])
- | q9 : int(1..3)]),
- and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q15] != 4 /\
- x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
- | q15 : int(1..3)])
- | q13 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4.eprime.orig
deleted file mode 100644
index c1b1de927b..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_2_4.eprime.orig
+++ /dev/null
@@ -1,61 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
- x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([q39 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q39] = 1 | q39 : int(1..3)]) /\
- or([q41 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q41] = 2 | q41 : int(1..3)]),
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q43] != 4 /\ x_ExplicitVarSizeWithDummy[q43] = 1 | q43 : int(1..3)]),
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 4
- | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q5] = 4 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 4 | q5 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q9] != 4 ->
- or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
- | q11 : int(1..3)])
- | q9 : int(1..3)]),
- and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q15] != 4 /\
- x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
- | q15 : int(1..3)])
- | q13 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
- | q16 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
- | q17 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
- or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
- | q24 : int(1..3)])
- | q22 : int(1..3)]),
- and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
- x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
- | q28 : int(1..3)])
- | q26 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
- or([x_ExplicitVarSizeWithDummy[q32] != 4 /\
- x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
- | q32 : int(1..3)])
- | q30 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q34] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
- x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
- | q36 : int(1..3)])
- | q34 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1.eprime.orig
deleted file mode 100644
index efb86f3a6f..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_1.eprime.orig
+++ /dev/null
@@ -1,25 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]) /\
- or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = 2 | q9 : int(1..3)]),
- !cut2 <->
- or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 1 | q11 : int(1..3)]),
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_Occurrence[q12] ->
- or([q14 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q14] = q12
- | q14 : int(1..3)])
- | q12 : int(1..3)]),
- and([q16 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q16]]
- | q16 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2.eprime.orig
deleted file mode 100644
index 342b5ec1dc..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_2.eprime.orig
+++ /dev/null
@@ -1,33 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..3)]) /\
- or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..3)]),
- !cut2 <->
- or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = 1 | q22 : int(1..3)]),
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 4
- | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q5] = 4 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 4 | q5 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q9] != 4 ->
- or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
- | q11 : int(1..3)])
- | q9 : int(1..3)]),
- and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q15] != 4 /\
- x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
- | q15 : int(1..3)])
- | q13 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3.eprime.orig
deleted file mode 100644
index 989c9efdd0..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_3.eprime.orig
+++ /dev/null
@@ -1,18 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([q6 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]) /\
- or([q8 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q8] = 2 | q8 : int(1..3)]),
- !cut2 <->
- or([q10 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q10] = 1 | q10 : int(1..3)]),
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4.eprime.orig
deleted file mode 100644
index adccf8a668..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_3_4.eprime.orig
+++ /dev/null
@@ -1,37 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
- x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..3)]) /\
- or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = 2 | q21 : int(1..3)]),
- !cut2 <->
- or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q23] = 1 | q23 : int(1..3)]),
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
- | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
- or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
- | q12 : int(1..3)])
- | q10 : int(1..3)]),
- and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
- x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
- | q16 : int(1..3)])
- | q14 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1.eprime.orig
deleted file mode 100644
index 5941707e6f..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_1.eprime.orig
+++ /dev/null
@@ -1,49 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
- x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 1 | q30 : int(1..3)]) /\
- or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q32] = 2 | q32 : int(1..3)]),
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q34] /\ x_ExplicitVarSizeWithFlags_Values[q34] = 1 | q34 : int(1..3)]),
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
- | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
- or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
- | q12 : int(1..3)])
- | q10 : int(1..3)]),
- and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
- x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
- | q16 : int(1..3)])
- | q14 : int(1..3)]),
- and([x_Occurrence[q18] ->
- or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = q18
- | q20 : int(1..3)])
- | q18 : int(1..3)]),
- and([q22 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q22]]
- | q22 : int(1..3)]),
- and([x_Occurrence[q23] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..3)])
- | q23 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
- | q27 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2.eprime.orig
deleted file mode 100644
index acf89d418d..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_2.eprime.orig
+++ /dev/null
@@ -1,61 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
- x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([q39 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q39] = 1 | q39 : int(1..3)]) /\
- or([q41 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q41] = 2 | q41 : int(1..3)]),
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q43] /\ x_ExplicitVarSizeWithFlags_Values[q43] = 1 | q43 : int(1..3)]),
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
- | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
- or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
- | q12 : int(1..3)])
- | q10 : int(1..3)]),
- and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
- x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
- | q16 : int(1..3)])
- | q14 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 4
- | q17 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q18] = 4 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 4 | q18 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q22] != 4 ->
- or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
- | q24 : int(1..3)])
- | q22 : int(1..3)]),
- and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q28] != 4 /\
- x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
- | q28 : int(1..3)])
- | q26 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q30] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
- x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
- | q32 : int(1..3)])
- | q30 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
- or([x_ExplicitVarSizeWithDummy[q36] != 4 /\
- x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
- | q36 : int(1..3)])
- | q34 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3.eprime.orig
deleted file mode 100644
index 04a3b8e694..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_3.eprime.orig
+++ /dev/null
@@ -1,37 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
- x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..3)]) /\
- or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = 2 | q21 : int(1..3)]),
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = 1 | q23 : int(1..3)]),
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
- | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
- or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
- | q12 : int(1..3)])
- | q10 : int(1..3)]),
- and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
- x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
- | q16 : int(1..3)])
- | q14 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_3_4_4.eprime.orig
deleted file mode 100644
index 04a3b8e694..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_3_4_4.eprime.orig
+++ /dev/null
@@ -1,37 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
- x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..3)]) /\
- or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = 2 | q21 : int(1..3)]),
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = 1 | q23 : int(1..3)]),
- and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
- | q4 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
- or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
- | q12 : int(1..3)])
- | q10 : int(1..3)]),
- and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
- x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
- | q16 : int(1..3)])
- | q14 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1.eprime.orig
deleted file mode 100644
index 5d7a188800..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_1.eprime.orig
+++ /dev/null
@@ -1,24 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q14] /\ x_ExplicitVarSizeWithFlags_Values[q14] = 1 | q14 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q16] /\ x_ExplicitVarSizeWithFlags_Values[q16] = 2 | q16 : int(1..3)]),
- !cut2 <-> x_Occurrence[1],
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([x_Occurrence[q7] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..3)])
- | q7 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
- | q11 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2.eprime.orig
deleted file mode 100644
index 07bbb3554a..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_2.eprime.orig
+++ /dev/null
@@ -1,44 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
- x_Occurrence]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 1 | q31 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q33] /\ x_ExplicitVarSizeWithFlags_Values[q33] = 2 | q33 : int(1..3)]),
- !cut2 <-> x_Occurrence[1],
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([x_Occurrence[q24] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..3)])
- | q24 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
- | q28 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 4
- | q7 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q8] = 4 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 4 | q8 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q12] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
- x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
- | q14 : int(1..3)])
- | q12 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
- or([x_ExplicitVarSizeWithDummy[q18] != 4 /\
- x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
- | q18 : int(1..3)])
- | q16 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q20] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q20]] | q20 : int(1..3)]),
- and([x_Occurrence[q21] ->
- or([x_ExplicitVarSizeWithDummy[q23] != 4 /\ x_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..3)])
- | q21 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3.eprime.orig
deleted file mode 100644
index 0fe7e57c62..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_3.eprime.orig
+++ /dev/null
@@ -1,48 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
- x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 2 | q32 : int(1..3)]),
- !cut2 <-> x_Occurrence[1],
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([x_Occurrence[q23] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..3)])
- | q23 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
- | q27 : int(1..3)]),
- and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
- | q7 : int(1..2)]),
- and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 1 | q8 : int(1..3)]),
- and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
- x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
- | q13 : int(1..3)])
- | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
- or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
- | q17 : int(1..3)])
- | q15 : int(1..3)]),
- and([q19 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q19]]
- | q19 : int(1..3)]),
- and([x_Occurrence[q20] ->
- or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = q20
- | q22 : int(1..3)])
- | q20 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_1_4.eprime.orig
deleted file mode 100644
index 5d7a188800..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_1_4.eprime.orig
+++ /dev/null
@@ -1,24 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q14] /\ x_ExplicitVarSizeWithFlags_Values[q14] = 1 | q14 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q16] /\ x_ExplicitVarSizeWithFlags_Values[q16] = 2 | q16 : int(1..3)]),
- !cut2 <-> x_Occurrence[1],
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([x_Occurrence[q7] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..3)])
- | q7 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
- | q11 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1.eprime.orig
deleted file mode 100644
index 34ffb66fa4..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_1.eprime.orig
+++ /dev/null
@@ -1,44 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
- x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 1 | q31 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q33] /\ x_ExplicitVarSizeWithFlags_Values[q33] = 2 | q33 : int(1..3)]),
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q35] != 4 /\ x_ExplicitVarSizeWithDummy[q35] = 1 | q35 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 4
- | q6 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q7] = 4 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 4 | q7 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q11] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
- x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
- | q13 : int(1..3)])
- | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
- or([x_ExplicitVarSizeWithDummy[q17] != 4 /\
- x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
- | q17 : int(1..3)])
- | q15 : int(1..3)]),
- and([x_Occurrence[q19] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = q19 | q21 : int(1..3)])
- | q19 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q23] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q23]]
- | q23 : int(1..3)]),
- and([x_Occurrence[q24] ->
- or([x_ExplicitVarSizeWithDummy[q26] != 4 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..3)])
- | q24 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q28] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2.eprime.orig
deleted file mode 100644
index 8c3544f807..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_2.eprime.orig
+++ /dev/null
@@ -1,33 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = 1 | q20 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = 2 | q22 : int(1..3)]),
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q24] != 4 /\ x_ExplicitVarSizeWithDummy[q24] = 1 | q24 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 4
- | q6 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q7] = 4 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 4 | q7 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q11] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
- x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
- | q13 : int(1..3)])
- | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
- or([x_ExplicitVarSizeWithDummy[q17] != 4 /\
- x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
- | q17 : int(1..3)])
- | q15 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3.eprime.orig
deleted file mode 100644
index eb547110ba..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_3.eprime.orig
+++ /dev/null
@@ -1,60 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
- x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q39] /\ x_ExplicitVarSizeWithFlags_Values[q39] = 1 | q39 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q41] /\ x_ExplicitVarSizeWithFlags_Values[q41] = 2 | q41 : int(1..3)]),
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q43] != 4 /\ x_ExplicitVarSizeWithDummy[q43] = 1 | q43 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 4
- | q6 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q7] = 4 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 4 | q7 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q11] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
- x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
- | q13 : int(1..3)])
- | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
- or([x_ExplicitVarSizeWithDummy[q17] != 4 /\
- x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
- | q17 : int(1..3)])
- | q15 : int(1..3)]),
- and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
- | q18 : int(1..2)]),
- and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..3)]),
- and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
- x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
- | q24 : int(1..3)])
- | q22 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
- or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
- | q28 : int(1..3)])
- | q26 : int(1..3)]),
- and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q32] != 4 /\
- x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
- | q32 : int(1..3)])
- | q30 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q34] != 4 ->
- or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
- | q36 : int(1..3)])
- | q34 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_2_4.eprime.orig
deleted file mode 100644
index 8c3544f807..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_2_4.eprime.orig
+++ /dev/null
@@ -1,33 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = 1 | q20 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = 2 | q22 : int(1..3)]),
- !cut2 <-> or([x_ExplicitVarSizeWithDummy[q24] != 4 /\ x_ExplicitVarSizeWithDummy[q24] = 1 | q24 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 4
- | q6 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q7] = 4 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 4 | q7 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q11] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
- x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
- | q13 : int(1..3)])
- | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
- or([x_ExplicitVarSizeWithDummy[q17] != 4 /\
- x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
- | q17 : int(1..3)])
- | q15 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1.eprime.orig
deleted file mode 100644
index b8aa2bdc4b..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_1.eprime.orig
+++ /dev/null
@@ -1,49 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
- x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 2 | q32 : int(1..3)]),
- !cut2 <->
- or([q34 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q34] = 1 | q34 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
- | q6 : int(1..2)]),
- and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
- and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
- x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
- | q12 : int(1..3)])
- | q10 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
- or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
- | q16 : int(1..3)])
- | q14 : int(1..3)]),
- and([x_Occurrence[q18] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..3)])
- | q18 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q22] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q22]]
- | q22 : int(1..3)]),
- and([x_Occurrence[q23] ->
- or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
- | q25 : int(1..3)])
- | q23 : int(1..3)]),
- and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
- | q27 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2.eprime.orig
deleted file mode 100644
index 511d1b6814..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_2.eprime.orig
+++ /dev/null
@@ -1,61 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
- x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q39] /\ x_ExplicitVarSizeWithFlags_Values[q39] = 1 | q39 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q41] /\ x_ExplicitVarSizeWithFlags_Values[q41] = 2 | q41 : int(1..3)]),
- !cut2 <->
- or([q43 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q43] = 1 | q43 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
- | q6 : int(1..2)]),
- and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
- and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
- x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
- | q12 : int(1..3)])
- | q10 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
- or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
- | q16 : int(1..3)])
- | q14 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 4
- | q17 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q18] = 4 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 4 | q18 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q22] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
- x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
- | q24 : int(1..3)])
- | q22 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
- or([x_ExplicitVarSizeWithDummy[q28] != 4 /\
- x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
- | q28 : int(1..3)])
- | q26 : int(1..3)]),
- and([x_ExplicitVarSizeWithDummy[q30] != 4 ->
- or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
- | q32 : int(1..3)])
- | q30 : int(1..3)]),
- and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithDummy[q36] != 4 /\
- x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
- | q36 : int(1..3)])
- | q34 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3.eprime.orig
deleted file mode 100644
index 3f66e92dd5..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_3.eprime.orig
+++ /dev/null
@@ -1,37 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
- x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = 2 | q21 : int(1..3)]),
- !cut2 <->
- or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q23] = 1 | q23 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
- | q6 : int(1..2)]),
- and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
- and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
- x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
- | q12 : int(1..3)])
- | q10 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
- or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
- | q16 : int(1..3)])
- | q14 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_3_4.eprime.orig
deleted file mode 100644
index 3f66e92dd5..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_3_4.eprime.orig
+++ /dev/null
@@ -1,37 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
- x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = 2 | q21 : int(1..3)]),
- !cut2 <->
- or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q23] = 1 | q23 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
- | q6 : int(1..2)]),
- and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
- and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
- x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
- | q12 : int(1..3)])
- | q10 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
- or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
- | q16 : int(1..3)])
- | q14 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000006.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000007.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1.eprime.orig
deleted file mode 100644
index a5e320a159..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_1.eprime.orig
+++ /dev/null
@@ -1,25 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_Occurrence: matrix indexed by [int(1..3)] of bool
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q14] /\ x_ExplicitVarSizeWithFlags_Values[q14] = 1 | q14 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q16] /\ x_ExplicitVarSizeWithFlags_Values[q16] = 2 | q16 : int(1..3)]),
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = 1 | q18 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([x_Occurrence[q7] ->
- or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..3)])
- | q7 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
- | q11 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000004.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000008.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2.eprime.orig
deleted file mode 100644
index 51f2077d26..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_2.eprime.orig
+++ /dev/null
@@ -1,34 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = 1 | q20 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = 2 | q22 : int(1..3)]),
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q24] /\ x_ExplicitVarSizeWithFlags_Values[q24] = 1 | q24 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 4
- | q6 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q7] = 4 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 4 | q7 : int(1..2)]),
- and([x_ExplicitVarSizeWithDummy[q11] != 4 ->
- or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
- x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
- | q13 : int(1..3)])
- | q11 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
- or([x_ExplicitVarSizeWithDummy[q17] != 4 /\
- x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
- | q17 : int(1..3)])
- | q15 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3.eprime.orig
deleted file mode 100644
index 9f0674828c..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_3.eprime.orig
+++ /dev/null
@@ -1,37 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
-find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on
- [cut1, cut2, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
- x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = 2 | q21 : int(1..3)]),
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = 1 | q23 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
- and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
- x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
- | q6 : int(1..2)]),
- and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
- and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
- or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
- x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
- | q12 : int(1..3)])
- | q10 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
- or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
- x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
- | q16 : int(1..3)])
- | q14 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000001.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000002.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000003.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000003.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000004.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000005.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000005.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000006.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000006.solution
new file mode 100644
index 0000000000..76bc8cdc32
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000007.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000007.solution
new file mode 100644
index 0000000000..86a85825b3
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000007.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000008.solution b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000008.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000008.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4.eprime.orig b/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4.eprime.orig
deleted file mode 100644
index 17be20c392..0000000000
--- a/tests/exhaustive/basic/cut_01_on/expected/model_4_4_4.eprime.orig
+++ /dev/null
@@ -1,19 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
-find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
-find cut1: bool
-find cut2: bool
-branching on [cut1, cut2, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
-such that
- !cut1 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q8] /\ x_ExplicitVarSizeWithFlags_Values[q8] = 1 | q8 : int(1..3)]) /\
- or([x_ExplicitVarSizeWithFlags_Flags[q10] /\ x_ExplicitVarSizeWithFlags_Values[q10] = 2 | q10 : int(1..3)]),
- !cut2 <->
- or([x_ExplicitVarSizeWithFlags_Flags[q12] /\ x_ExplicitVarSizeWithFlags_Values[q12] = 1 | q12 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
- x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
- | q1 : int(1..2)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_2.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_2.eprime
index 5e1ac67e4f..3c466a4bfb 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_2.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_2.eprime
@@ -5,8 +5,7 @@ find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2)] of int(1..3)
branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
such that
x_Occurrence[1],
- [x_ExplicitVarSizeWithDummy[1]; int(1)] x_ExplicitVarSizeWithDummy[2] = 3,
and([x_ExplicitVarSizeWithDummy[q7] != 3 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..2)]),
and([x_Occurrence[q8] ->
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_3.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_3.eprime
index 1c517b2f64..caa450f69d 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_3.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_3.eprime
@@ -7,7 +7,7 @@ branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Va
such that
x_Occurrence[1],
2 <= x_ExplicitVarSizeWithMarker_Marker ->
- [x_ExplicitVarSizeWithMarker_Values[1]; int(1)] x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..2)]),
and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
| q6 : int(1..2)]),
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_4.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_4.eprime
index b0a108ce36..65b54149be 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_4.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_4.eprime
@@ -6,8 +6,7 @@ find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(1..
branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
such that
x_Occurrence[1],
- x_ExplicitVarSizeWithFlags_Flags[2] ->
- [x_ExplicitVarSizeWithFlags_Values[1]; int(1)] x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..2)]),
x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..2)]),
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_1.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_1.eprime
index 19b55ab58a..06dba1716a 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_1.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_1.eprime
@@ -5,8 +5,7 @@ find x_Occurrence: matrix indexed by [int(1..2)] of bool
branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
such that
or([x_ExplicitVarSizeWithDummy[q7] != 3 /\ x_ExplicitVarSizeWithDummy[q7] = 1 | q7 : int(1..2)]),
- [x_ExplicitVarSizeWithDummy[1]; int(1)] x_ExplicitVarSizeWithDummy[2] = 3,
and([x_Occurrence[q8] ->
or([x_ExplicitVarSizeWithDummy[q10] != 3 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..2)])
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_2.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_2.eprime
index 3cd005c946..3cbe9f04b3 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_2.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_2.eprime
@@ -4,7 +4,6 @@ find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2)] of int(1..3)
branching on [x_ExplicitVarSizeWithDummy]
such that
or([x_ExplicitVarSizeWithDummy[q6] != 3 /\ x_ExplicitVarSizeWithDummy[q6] = 1 | q6 : int(1..2)]),
- [x_ExplicitVarSizeWithDummy[1]; int(1)] x_ExplicitVarSizeWithDummy[2] = 3
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_3.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_3.eprime
index affa05405a..15b24ddce9 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_3.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_3.eprime
@@ -6,11 +6,10 @@ find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(1.
branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
such that
or([x_ExplicitVarSizeWithDummy[q17] != 3 /\ x_ExplicitVarSizeWithDummy[q17] = 1 | q17 : int(1..2)]),
- [x_ExplicitVarSizeWithDummy[1]; int(1)] x_ExplicitVarSizeWithDummy[2] = 3,
2 <= x_ExplicitVarSizeWithMarker_Marker ->
- [x_ExplicitVarSizeWithMarker_Values[1]; int(1)] x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..2)]),
and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
or([x_ExplicitVarSizeWithDummy[q11] != 3 /\
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_4.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_4.eprime
index 20ee576a7b..e6286e36dc 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_4.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_4.eprime
@@ -6,11 +6,9 @@ find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(1..
branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
such that
or([x_ExplicitVarSizeWithDummy[q19] != 3 /\ x_ExplicitVarSizeWithDummy[q19] = 1 | q19 : int(1..2)]),
- [x_ExplicitVarSizeWithDummy[1]; int(1)] x_ExplicitVarSizeWithDummy[2] = 3,
- x_ExplicitVarSizeWithFlags_Flags[2] ->
- [x_ExplicitVarSizeWithFlags_Values[1]; int(1)] x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..2)]),
x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_1.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_1.eprime
index 305e95e154..53b78284b9 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_1.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_1.eprime
@@ -7,7 +7,7 @@ branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSiz
such that
or([q6 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..2)]),
2 <= x_ExplicitVarSizeWithMarker_Marker ->
- [x_ExplicitVarSizeWithMarker_Values[1]; int(1)] x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..2)]),
and([x_Occurrence[q7] ->
or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..2)])
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_2.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_2.eprime
index 289392ed4b..9955c46684 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_2.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_2.eprime
@@ -7,10 +7,9 @@ branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_
such that
or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = 1 | q17 : int(1..2)]),
2 <= x_ExplicitVarSizeWithMarker_Marker ->
- [x_ExplicitVarSizeWithMarker_Values[1]; int(1)] x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..2)]),
- [x_ExplicitVarSizeWithDummy[1]; int(1)] x_ExplicitVarSizeWithDummy[2] = 3,
and([x_ExplicitVarSizeWithDummy[q9] != 3 ->
or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_3.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_3.eprime
index cafd3e03b9..6bf0fbc245 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_3.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_3.eprime
@@ -6,6 +6,6 @@ branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Va
such that
or([q5 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q5] = 1 | q5 : int(1..2)]),
2 <= x_ExplicitVarSizeWithMarker_Marker ->
- [x_ExplicitVarSizeWithMarker_Values[1]; int(1)] x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..2)])
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_4.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_4.eprime
index e0e163e423..30b752c34b 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_4.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_4.eprime
@@ -10,10 +10,9 @@ branching on
such that
or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..2)]),
2 <= x_ExplicitVarSizeWithMarker_Marker ->
- [x_ExplicitVarSizeWithMarker_Values[1]; int(1)] x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..2)]),
- x_ExplicitVarSizeWithFlags_Flags[2] ->
- [x_ExplicitVarSizeWithFlags_Values[1]; int(1)] x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..2)]),
x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_1.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_1.eprime
index 8d42b90c9e..d357287c6d 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_1.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_1.eprime
@@ -6,8 +6,7 @@ find x_Occurrence: matrix indexed by [int(1..2)] of bool
branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
such that
or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 1 | q13 : int(1..2)]),
- x_ExplicitVarSizeWithFlags_Flags[2] ->
- [x_ExplicitVarSizeWithFlags_Values[1]; int(1)] x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..2)]),
x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
and([x_Occurrence[q7] ->
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_2.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_2.eprime
index fa7a9b3cfb..7845f87b0a 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_2.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_2.eprime
@@ -6,12 +6,10 @@ find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2)] of int(1..3)
branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
such that
or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..2)]),
- x_ExplicitVarSizeWithFlags_Flags[2] ->
- [x_ExplicitVarSizeWithFlags_Values[1]; int(1)] x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..2)]),
x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
- [x_ExplicitVarSizeWithDummy[1]; int(1)] x_ExplicitVarSizeWithDummy[2] = 3,
and([x_ExplicitVarSizeWithDummy[q11] != 3 ->
or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_3.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_3.eprime
index 9339754f19..681490ebe2 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_3.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_3.eprime
@@ -9,12 +9,11 @@ branching on
x_ExplicitVarSizeWithFlags_Values]
such that
or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = 1 | q18 : int(1..2)]),
- x_ExplicitVarSizeWithFlags_Flags[2] ->
- [x_ExplicitVarSizeWithFlags_Values[1]; int(1)] x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..2)]),
x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
2 <= x_ExplicitVarSizeWithMarker_Marker ->
- [x_ExplicitVarSizeWithMarker_Values[1]; int(1)] x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..2)]),
and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
diff --git a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_4.eprime b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_4.eprime
index 4488d3c825..5045c01422 100644
--- a/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_4.eprime
+++ b/tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_4.eprime
@@ -5,8 +5,7 @@ find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(1..
branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
such that
or([x_ExplicitVarSizeWithFlags_Flags[q7] /\ x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..2)]),
- x_ExplicitVarSizeWithFlags_Flags[2] ->
- [x_ExplicitVarSizeWithFlags_Values[1]; int(1)] x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..2)]),
x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1]
diff --git a/tests/exhaustive/basic/enum05-unnamed/expected/model_2.eprime b/tests/exhaustive/basic/enum05-unnamed/expected/model_2.eprime
index 32c39e4747..dd1644147e 100644
--- a/tests/exhaustive/basic/enum05-unnamed/expected/model_2.eprime
+++ b/tests/exhaustive/basic/enum05-unnamed/expected/model_2.eprime
@@ -3,7 +3,6 @@ language ESSENCE' 1.0
find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2)] of int(1..3)
branching on [x_ExplicitVarSizeWithDummy]
such that
- [x_ExplicitVarSizeWithDummy[1]; int(1)] x_ExplicitVarSizeWithDummy[2] = 3
diff --git a/tests/exhaustive/basic/enum05-unnamed/expected/model_3.eprime b/tests/exhaustive/basic/enum05-unnamed/expected/model_3.eprime
index 4846bb6513..9baf5521b0 100644
--- a/tests/exhaustive/basic/enum05-unnamed/expected/model_3.eprime
+++ b/tests/exhaustive/basic/enum05-unnamed/expected/model_3.eprime
@@ -5,6 +5,6 @@ find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(1.
branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
such that
2 <= x_ExplicitVarSizeWithMarker_Marker ->
- [x_ExplicitVarSizeWithMarker_Values[1]; int(1)] x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..2)])
diff --git a/tests/exhaustive/basic/enum05-unnamed/expected/model_4.eprime b/tests/exhaustive/basic/enum05-unnamed/expected/model_4.eprime
index b922e0b97b..8c652122fc 100644
--- a/tests/exhaustive/basic/enum05-unnamed/expected/model_4.eprime
+++ b/tests/exhaustive/basic/enum05-unnamed/expected/model_4.eprime
@@ -4,8 +4,7 @@ find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of bool
find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(1..2)
branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
such that
- x_ExplicitVarSizeWithFlags_Flags[2] ->
- [x_ExplicitVarSizeWithFlags_Values[1]; int(1)] x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..2)]),
x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1]
diff --git a/tests/exhaustive/basic/enum06/expected/model_1_1.eprime b/tests/exhaustive/basic/enum06/expected/model_1_1.eprime
index f03a6b45df..986fa491a6 100644
--- a/tests/exhaustive/basic/enum06/expected/model_1_1.eprime
+++ b/tests/exhaustive/basic/enum06/expected/model_1_1.eprime
@@ -4,14 +4,8 @@ find x_ExplicitWithFlags_Flags: matrix indexed by [int(1..4)] of int(0..4)
find x_ExplicitWithFlags_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithFlags_Flags, x_ExplicitWithFlags_Values]
such that
-<<<<<<< HEAD
- or([x_ExplicitWithFlags_Flags[q8] > 0 /\ x_ExplicitWithFlags_Values[q8] = 1 | q8 : int(1..4)]),
- and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q1]; int(1)] 0 /\ x_ExplicitWithFlags_Values[q9] = 1 | q9 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 -> x_ExplicitWithFlags_Values[q1] < x_ExplicitWithFlags_Values[q1 + 1]
->>>>>>> main
| q1 : int(1..3)]),
and([x_ExplicitWithFlags_Flags[q2] = 0 -> x_ExplicitWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q3 + 1] > 0 -> x_ExplicitWithFlags_Flags[q3] > 0 | q3 : int(1..3)]),
diff --git a/tests/exhaustive/basic/enum06/expected/model_1_2.eprime b/tests/exhaustive/basic/enum06/expected/model_1_2.eprime
index 8ca42b5521..5db82561f7 100644
--- a/tests/exhaustive/basic/enum06/expected/model_1_2.eprime
+++ b/tests/exhaustive/basic/enum06/expected/model_1_2.eprime
@@ -8,19 +8,6 @@ branching on
[x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values, x_ExplicitWithFlags_Flags,
x_ExplicitWithFlags_Values]
such that
-<<<<<<< HEAD
- or([x_ExplicitWithFlags_Flags[q22] > 0 /\ x_ExplicitWithFlags_Values[q22] = 1 | q22 : int(1..4)]),
- and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q1]; int(1)] x_ExplicitWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
- and([x_ExplicitWithFlags_Flags[q3 + 1] > 0 -> x_ExplicitWithFlags_Flags[q3] > 0 | q3 : int(1..3)]),
- sum([x_ExplicitWithFlags_Flags[q5] | q5 : int(1..4)]) <= 4,
- and([q7 + 1 <= x_ExplicitWithRepetition_Flag ->
- [x_ExplicitWithRepetition_Values[q7]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q7 + 1]; int(1)]
- | q7 : int(1..3)]),
- and([q8 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q8] = 1 | q8 : int(1..4)]),
-=======
or([x_ExplicitWithFlags_Flags[q23] > 0 /\ x_ExplicitWithFlags_Values[q23] = 1 | q23 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 -> x_ExplicitWithFlags_Values[q1] < x_ExplicitWithFlags_Values[q1 + 1]
| q1 : int(1..3)]),
@@ -31,7 +18,6 @@ such that
x_ExplicitWithRepetition_Values[q8] <= x_ExplicitWithRepetition_Values[q8 + 1]
| q8 : int(1..3)]),
and([q9 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q9] = 1 | q9 : int(1..4)]),
->>>>>>> main
x_ExplicitWithRepetition_Flag <= 4,
and([q14 <= x_ExplicitWithRepetition_Flag ->
sum([toInt(q17 <= x_ExplicitWithRepetition_Flag) *
diff --git a/tests/exhaustive/basic/enum06/expected/model_1_3.eprime b/tests/exhaustive/basic/enum06/expected/model_1_3.eprime
index 0dd7c6aa16..c2852c2ff8 100644
--- a/tests/exhaustive/basic/enum06/expected/model_1_3.eprime
+++ b/tests/exhaustive/basic/enum06/expected/model_1_3.eprime
@@ -5,14 +5,8 @@ find x_ExplicitWithFlags_Values: matrix indexed by [int(1..4)] of int(1..2)
find x_MOccurrence: matrix indexed by [int(1..2)] of int(0..4)
branching on [x_MOccurrence, x_ExplicitWithFlags_Flags, x_ExplicitWithFlags_Values]
such that
-<<<<<<< HEAD
- or([x_ExplicitWithFlags_Flags[q14] > 0 /\ x_ExplicitWithFlags_Values[q14] = 1 | q14 : int(1..4)]),
- and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q1]; int(1)] 0 /\ x_ExplicitWithFlags_Values[q15] = 1 | q15 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 -> x_ExplicitWithFlags_Values[q1] < x_ExplicitWithFlags_Values[q1 + 1]
->>>>>>> main
| q1 : int(1..3)]),
and([x_ExplicitWithFlags_Flags[q2] = 0 -> x_ExplicitWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q3 + 1] > 0 -> x_ExplicitWithFlags_Flags[q3] > 0 | q3 : int(1..3)]),
diff --git a/tests/exhaustive/basic/enum06/expected/model_2_1.eprime b/tests/exhaustive/basic/enum06/expected/model_2_1.eprime
index ed7d0baf22..cee7612061 100644
--- a/tests/exhaustive/basic/enum06/expected/model_2_1.eprime
+++ b/tests/exhaustive/basic/enum06/expected/model_2_1.eprime
@@ -10,12 +10,11 @@ branching on
such that
or([q23 <= x_ExplicitWithRepetition_Flag /\ x_ExplicitWithRepetition_Values[q23] = 1 | q23 : int(1..4)]),
and([q1 + 1 <= x_ExplicitWithRepetition_Flag ->
- [x_ExplicitWithRepetition_Values[q1]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q1 + 1]; int(1)]
+ x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1]
| q1 : int(1..3)]),
and([q2 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q2] = 1 | q2 : int(1..4)]),
x_ExplicitWithRepetition_Flag <= 4,
- and([x_ExplicitWithFlags_Flags[q6 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q6]; int(1)] 0 -> x_ExplicitWithFlags_Values[q6] < x_ExplicitWithFlags_Values[q6 + 1]
| q6 : int(1..3)]),
and([x_ExplicitWithFlags_Flags[q7] = 0 -> x_ExplicitWithFlags_Values[q7] = 1 | q7 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q8 + 1] > 0 -> x_ExplicitWithFlags_Flags[q8] > 0 | q8 : int(1..3)]),
diff --git a/tests/exhaustive/basic/enum06/expected/model_2_2.eprime b/tests/exhaustive/basic/enum06/expected/model_2_2.eprime
index ae8798327d..83a4f59f8c 100644
--- a/tests/exhaustive/basic/enum06/expected/model_2_2.eprime
+++ b/tests/exhaustive/basic/enum06/expected/model_2_2.eprime
@@ -6,7 +6,7 @@ branching on [x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values]
such that
or([q7 <= x_ExplicitWithRepetition_Flag /\ x_ExplicitWithRepetition_Values[q7] = 1 | q7 : int(1..4)]),
and([q1 + 1 <= x_ExplicitWithRepetition_Flag ->
- [x_ExplicitWithRepetition_Values[q1]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q1 + 1]; int(1)]
+ x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1]
| q1 : int(1..3)]),
and([q2 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q2] = 1 | q2 : int(1..4)]),
x_ExplicitWithRepetition_Flag <= 4
diff --git a/tests/exhaustive/basic/enum06/expected/model_2_3.eprime b/tests/exhaustive/basic/enum06/expected/model_2_3.eprime
index c53f6a7689..14637dd1da 100644
--- a/tests/exhaustive/basic/enum06/expected/model_2_3.eprime
+++ b/tests/exhaustive/basic/enum06/expected/model_2_3.eprime
@@ -7,7 +7,7 @@ branching on [x_MOccurrence, x_ExplicitWithRepetition_Flag, x_ExplicitWithRepeti
such that
or([q15 <= x_ExplicitWithRepetition_Flag /\ x_ExplicitWithRepetition_Values[q15] = 1 | q15 : int(1..4)]),
and([q1 + 1 <= x_ExplicitWithRepetition_Flag ->
- [x_ExplicitWithRepetition_Values[q1]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q1 + 1]; int(1)]
+ x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1]
| q1 : int(1..3)]),
and([q2 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q2] = 1 | q2 : int(1..4)]),
x_ExplicitWithRepetition_Flag <= 4,
diff --git a/tests/exhaustive/basic/enum06/expected/model_3_1.eprime b/tests/exhaustive/basic/enum06/expected/model_3_1.eprime
index 32770953a8..2ec0ae5b09 100644
--- a/tests/exhaustive/basic/enum06/expected/model_3_1.eprime
+++ b/tests/exhaustive/basic/enum06/expected/model_3_1.eprime
@@ -7,8 +7,7 @@ branching on [x_ExplicitWithFlags_Flags, x_ExplicitWithFlags_Values, x_MOccurren
such that
or([x_MOccurrence[q15] > 0 /\ q15 = 1 | q15 : int(1..2)]),
sum([x_MOccurrence[q1] | q1 : int(1..2)]) <= 4,
- and([x_ExplicitWithFlags_Flags[q2 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q2]; int(1)] 0 -> x_ExplicitWithFlags_Values[q2] < x_ExplicitWithFlags_Values[q2 + 1]
| q2 : int(1..3)]),
and([x_ExplicitWithFlags_Flags[q3] = 0 -> x_ExplicitWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q4 + 1] > 0 -> x_ExplicitWithFlags_Flags[q4] > 0 | q4 : int(1..3)]),
diff --git a/tests/exhaustive/basic/enum06/expected/model_3_2.eprime b/tests/exhaustive/basic/enum06/expected/model_3_2.eprime
index ec9ac25a79..4309aabff6 100644
--- a/tests/exhaustive/basic/enum06/expected/model_3_2.eprime
+++ b/tests/exhaustive/basic/enum06/expected/model_3_2.eprime
@@ -8,7 +8,7 @@ such that
or([x_MOccurrence[q15] > 0 /\ q15 = 1 | q15 : int(1..2)]),
sum([x_MOccurrence[q1] | q1 : int(1..2)]) <= 4,
and([q2 + 1 <= x_ExplicitWithRepetition_Flag ->
- [x_ExplicitWithRepetition_Values[q2]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q2 + 1]; int(1)]
+ x_ExplicitWithRepetition_Values[q2] <= x_ExplicitWithRepetition_Values[q2 + 1]
| q2 : int(1..3)]),
and([q3 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q3] = 1 | q3 : int(1..4)]),
x_ExplicitWithRepetition_Flag <= 4,
diff --git a/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000001.solution b/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000001.solution
new file mode 100644
index 0000000000..2e109b6d40
--- /dev/null
+++ b/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be function({(7, false)} --> 17, {(7, true)} --> 13)
diff --git a/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000002.solution b/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000002.solution
new file mode 100644
index 0000000000..626dde8770
--- /dev/null
+++ b/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be function({(7, false)} --> 13, {(7, true)} --> 17)
diff --git a/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000003.solution b/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000003.solution
new file mode 100644
index 0000000000..5ebd8e1209
--- /dev/null
+++ b/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be function({(7, false)} --> 13, {(7, false), (7, true)} --> 17)
diff --git a/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000004.solution b/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000004.solution
new file mode 100644
index 0000000000..ee811eb7ab
--- /dev/null
+++ b/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be function({(7, false)} --> 17, {(7, false), (7, true)} --> 13)
diff --git a/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000005.solution b/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000005.solution
new file mode 100644
index 0000000000..30b06b719d
--- /dev/null
+++ b/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be function({(7, false), (7, true)} --> 17, {(7, true)} --> 13)
diff --git a/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000006.solution b/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000006.solution
new file mode 100644
index 0000000000..65f731a60d
--- /dev/null
+++ b/tests/exhaustive/basic/function_complex_01/expected/model_1-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be function({(7, false), (7, true)} --> 13, {(7, true)} --> 17)
diff --git a/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000001.solution b/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000001.solution
new file mode 100644
index 0000000000..2e109b6d40
--- /dev/null
+++ b/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be function({(7, false)} --> 17, {(7, true)} --> 13)
diff --git a/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000002.solution b/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000002.solution
new file mode 100644
index 0000000000..626dde8770
--- /dev/null
+++ b/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be function({(7, false)} --> 13, {(7, true)} --> 17)
diff --git a/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000003.solution b/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000003.solution
new file mode 100644
index 0000000000..ee811eb7ab
--- /dev/null
+++ b/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be function({(7, false)} --> 17, {(7, false), (7, true)} --> 13)
diff --git a/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000004.solution b/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000004.solution
new file mode 100644
index 0000000000..5ebd8e1209
--- /dev/null
+++ b/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be function({(7, false)} --> 13, {(7, false), (7, true)} --> 17)
diff --git a/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000005.solution b/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000005.solution
new file mode 100644
index 0000000000..65f731a60d
--- /dev/null
+++ b/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be function({(7, false), (7, true)} --> 13, {(7, true)} --> 17)
diff --git a/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000006.solution b/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000006.solution
new file mode 100644
index 0000000000..30b06b719d
--- /dev/null
+++ b/tests/exhaustive/basic/function_complex_01/expected/model_2-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be function({(7, false), (7, true)} --> 17, {(7, true)} --> 13)
diff --git a/tests/exhaustive/basic/function_range/expected/model.eprime.orig b/tests/exhaustive/basic/function_range/expected/model.eprime.orig
deleted file mode 100644
index b47b2da335..0000000000
--- a/tests/exhaustive/basic/function_range/expected/model.eprime.orig
+++ /dev/null
@@ -1,12 +0,0 @@
-language ESSENCE' 1.0
-
-find x_Function1DPartial_Flags: matrix indexed by [int(1..3)] of bool
-find x_Function1DPartial_Values: matrix indexed by [int(1..3)] of int(1..3)
-branching on [x_Function1DPartial_Flags, x_Function1DPartial_Values]
-such that
- or([x_Function1DPartial_Flags[q7] /\ x_Function1DPartial_Values[q7] = 1 | q7 : int(1..3)]),
- or([x_Function1DPartial_Flags[q10] /\ x_Function1DPartial_Values[q10] = 2 | q10 : int(1..3)]),
- and([x_Function1DPartial_Flags[q13] -> 1 = x_Function1DPartial_Values[q13] \/ 2 = x_Function1DPartial_Values[q13]
- | q13 : int(1..3)]),
- and([x_Function1DPartial_Flags[q1] = false -> x_Function1DPartial_Values[q1] = 1 | q1 : int(1..3)])
-
diff --git a/tests/exhaustive/basic/function_total_int_set_01/expected/model_1.eprime b/tests/exhaustive/basic/function_total_int_set_01/expected/model_1.eprime
index d338177dd2..4de8f61bbe 100644
--- a/tests/exhaustive/basic/function_total_int_set_01/expected/model_1.eprime
+++ b/tests/exhaustive/basic/function_total_int_set_01/expected/model_1.eprime
@@ -3,15 +3,9 @@ language ESSENCE' 1.0
find f_Function1DR3_Explicit: matrix indexed by [int(1..3), int(1..2)] of int(1..3)
branching on [f_Function1DR3_Explicit]
such that
-<<<<<<< HEAD
- and([[q1; int(1)]
- or([f_Function1DR2_Occurrence[q1, q5] != f_Function1DR2_Occurrence[q2, q5] | q5 : int(1..3)]) \/
- or([f_Function1DR2_Occurrence[q1, q5] != f_Function1DR2_Occurrence[q2, q5] | q5 : int(1..3)])
-=======
and([q1 < q2 ->
or([f_Function1DR3_Explicit[q1, q6] != f_Function1DR3_Explicit[q2, q6] | q6 : int(1..2)]) \/
or([f_Function1DR3_Explicit[q1, q6] != f_Function1DR3_Explicit[q2, q6] | q6 : int(1..2)])
->>>>>>> main
| q1 : int(1..3), q2 : int(1..3)]),
and([f_Function1DR3_Explicit[q3, 1] < f_Function1DR3_Explicit[q3, 2] | q3 : int(1..3)])
diff --git a/tests/exhaustive/basic/function_total_int_set_01/expected/model_2.eprime b/tests/exhaustive/basic/function_total_int_set_01/expected/model_2.eprime
index 7c34c38b98..ee147a457c 100644
--- a/tests/exhaustive/basic/function_total_int_set_01/expected/model_2.eprime
+++ b/tests/exhaustive/basic/function_total_int_set_01/expected/model_2.eprime
@@ -3,17 +3,9 @@ language ESSENCE' 1.0
find f_Function1DR2_Occurrence: matrix indexed by [int(1..3), int(1..3)] of bool
branching on [f_Function1DR2_Occurrence]
such that
-<<<<<<< HEAD
- and([[q1; int(1)]
- or([f_Function1DR3_Explicit[q1, q6] != f_Function1DR3_Explicit[q2, q6] | q6 : int(1..2)]) \/
- or([f_Function1DR3_Explicit[q1, q6] != f_Function1DR3_Explicit[q2, q6] | q6 : int(1..2)])
- | q1 : int(1..3), q2 : int(1..3)]),
- and([[f_Function1DR3_Explicit[q3, 1]; int(1)]
or([f_Function1DR2_Occurrence[q1, q5] != f_Function1DR2_Occurrence[q2, q5] | q5 : int(1..3)]) \/
or([f_Function1DR2_Occurrence[q1, q5] != f_Function1DR2_Occurrence[q2, q5] | q5 : int(1..3)])
| q1 : int(1..3), q2 : int(1..3)]),
and([2 = sum([toInt(f_Function1DR2_Occurrence[q3, q4]) | q4 : int(1..3)]) | q3 : int(1..3)])
->>>>>>> main
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000001.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000002.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000003.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000004.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1.eprime
new file mode 100644
index 0000000000..7986231579
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1.eprime
@@ -0,0 +1,6 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3)] of bool
+branching on [x_Occurrence]
+such that and([x_Occurrence[j, i] -> i % 2 = 0 | j : int(1..2), i : int(1..3)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000001.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000002.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000003.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000004.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2.eprime
new file mode 100644
index 0000000000..c5f1aed665
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ and([x_Occurrence[j, i] -> i % 2 = 0 | j : int(1..2), i : int(1..3)]),
+ and([and([x_ExplicitVarSizeWithDummy[q3, q4] < x_ExplicitVarSizeWithDummy[q3, q4 + 1] \/
+ x_ExplicitVarSizeWithDummy[q3, q4] = 4
+ | q4 : int(1..2)])
+ | q3 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithDummy[q3, q5] = 4 -> x_ExplicitVarSizeWithDummy[q3, q5 + 1] = 4 | q5 : int(1..2)])
+ | q3 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithDummy[q8, q11] != 4 -> x_Occurrence[q8, x_ExplicitVarSizeWithDummy[q8, q11]]
+ | q11 : int(1..3)])
+ /\
+ and([x_Occurrence[q8, q12] ->
+ or([x_ExplicitVarSizeWithDummy[q8, q14] != 4 /\ x_ExplicitVarSizeWithDummy[q8, q14] = q12
+ | q14 : int(1..3)])
+ | q12 : int(1..3)])
+ | q8 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000001.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000002.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000003.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000004.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3.eprime
new file mode 100644
index 0000000000..d5a7d54f0f
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3.eprime
@@ -0,0 +1,25 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ and([x_Occurrence[j, i] -> i % 2 = 0 | j : int(1..2), i : int(1..3)]),
+ and([and([q4 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q3] ->
+ x_ExplicitVarSizeWithMarker_Values[q3, q4] < x_ExplicitVarSizeWithMarker_Values[q3, q4 + 1]
+ | q4 : int(1..2)])
+ | q3 : int(1..2)]),
+ and([and([q5 > x_ExplicitVarSizeWithMarker_Marker[q3] -> x_ExplicitVarSizeWithMarker_Values[q3, q5] = 1
+ | q5 : int(1..3)])
+ | q3 : int(1..2)]),
+ and([and([q10 <= x_ExplicitVarSizeWithMarker_Marker[q7] ->
+ x_Occurrence[q7, x_ExplicitVarSizeWithMarker_Values[q7, q10]]
+ | q10 : int(1..3)])
+ /\
+ and([x_Occurrence[q7, q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker[q7] /\ x_ExplicitVarSizeWithMarker_Values[q7, q13] = q11
+ | q13 : int(1..3)])
+ | q11 : int(1..3)])
+ | q7 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000001.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000002.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000003.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000004.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4.eprime
new file mode 100644
index 0000000000..b02ce75e70
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4.eprime
@@ -0,0 +1,27 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ and([x_Occurrence[j, i] -> i % 2 = 0 | j : int(1..2), i : int(1..3)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q3, q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q3, q4] < x_ExplicitVarSizeWithFlags_Values[q3, q4 + 1]
+ | q4 : int(1..2)])
+ | q3 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q3, q5] = false -> x_ExplicitVarSizeWithFlags_Values[q3, q5] = 1
+ | q5 : int(1..3)])
+ | q3 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q3, q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3, q6]
+ | q6 : int(1..2)])
+ | q3 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q9, q12] -> x_Occurrence[q9, x_ExplicitVarSizeWithFlags_Values[q9, q12]]
+ | q12 : int(1..3)])
+ /\
+ and([x_Occurrence[q9, q13] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9, q15] /\ x_ExplicitVarSizeWithFlags_Values[q9, q15] = q13
+ | q15 : int(1..3)])
+ | q13 : int(1..3)])
+ | q9 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000001.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000003.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000004.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1.eprime
new file mode 100644
index 0000000000..0bd5a5d8b6
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[j, q8] != 4 -> x_ExplicitVarSizeWithDummy[j, q8] % 2 = 0
+ | j : int(1..2), q8 : int(1..3)]),
+ and([and([x_ExplicitVarSizeWithDummy[q1, q2] < x_ExplicitVarSizeWithDummy[q1, q2 + 1] \/
+ x_ExplicitVarSizeWithDummy[q1, q2] = 4
+ | q2 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithDummy[q1, q3] = 4 -> x_ExplicitVarSizeWithDummy[q1, q3 + 1] = 4 | q3 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([x_Occurrence[q9, q11] ->
+ or([x_ExplicitVarSizeWithDummy[q9, q13] != 4 /\ x_ExplicitVarSizeWithDummy[q9, q13] = q11
+ | q13 : int(1..3)])
+ | q11 : int(1..3)])
+ /\
+ and([x_ExplicitVarSizeWithDummy[q9, q15] != 4 -> x_Occurrence[q9, x_ExplicitVarSizeWithDummy[q9, q15]]
+ | q15 : int(1..3)])
+ | q9 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000001.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000002.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000003.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000004.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2.eprime
new file mode 100644
index 0000000000..fea6c8a28f
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2.eprime
@@ -0,0 +1,14 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[j, q6] != 4 -> x_ExplicitVarSizeWithDummy[j, q6] % 2 = 0
+ | j : int(1..2), q6 : int(1..3)]),
+ and([and([x_ExplicitVarSizeWithDummy[q1, q2] < x_ExplicitVarSizeWithDummy[q1, q2 + 1] \/
+ x_ExplicitVarSizeWithDummy[q1, q2] = 4
+ | q2 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithDummy[q1, q3] = 4 -> x_ExplicitVarSizeWithDummy[q1, q3 + 1] = 4 | q3 : int(1..2)])
+ | q1 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000001.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000003.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000004.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3.eprime
new file mode 100644
index 0000000000..7612f7e6db
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[j, q20] != 4 -> x_ExplicitVarSizeWithDummy[j, q20] % 2 = 0
+ | j : int(1..2), q20 : int(1..3)]),
+ and([and([x_ExplicitVarSizeWithDummy[q1, q2] < x_ExplicitVarSizeWithDummy[q1, q2 + 1] \/
+ x_ExplicitVarSizeWithDummy[q1, q2] = 4
+ | q2 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithDummy[q1, q3] = 4 -> x_ExplicitVarSizeWithDummy[q1, q3 + 1] = 4 | q3 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q6] ->
+ x_ExplicitVarSizeWithMarker_Values[q6, q7] < x_ExplicitVarSizeWithMarker_Values[q6, q7 + 1]
+ | q7 : int(1..2)])
+ | q6 : int(1..2)]),
+ and([and([q8 > x_ExplicitVarSizeWithMarker_Marker[q6] -> x_ExplicitVarSizeWithMarker_Values[q6, q8] = 1
+ | q8 : int(1..3)])
+ | q6 : int(1..2)]),
+ and([and([q13 <= x_ExplicitVarSizeWithMarker_Marker[q10] ->
+ or([x_ExplicitVarSizeWithDummy[q10, q15] != 4 /\
+ x_ExplicitVarSizeWithDummy[q10, q15] = x_ExplicitVarSizeWithMarker_Values[q10, q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)])
+ /\
+ and([x_ExplicitVarSizeWithDummy[q10, q17] != 4 ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker[q10] /\
+ x_ExplicitVarSizeWithMarker_Values[q10, q19] = x_ExplicitVarSizeWithDummy[q10, q17]
+ | q19 : int(1..3)])
+ | q17 : int(1..3)])
+ | q10 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000001.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000003.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000004.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4.eprime
new file mode 100644
index 0000000000..65e0448bbd
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4.eprime
@@ -0,0 +1,38 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[j, q22] != 4 -> x_ExplicitVarSizeWithDummy[j, q22] % 2 = 0
+ | j : int(1..2), q22 : int(1..3)]),
+ and([and([x_ExplicitVarSizeWithDummy[q1, q2] < x_ExplicitVarSizeWithDummy[q1, q2 + 1] \/
+ x_ExplicitVarSizeWithDummy[q1, q2] = 4
+ | q2 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithDummy[q1, q3] = 4 -> x_ExplicitVarSizeWithDummy[q1, q3 + 1] = 4 | q3 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q6, q7 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6, q7] < x_ExplicitVarSizeWithFlags_Values[q6, q7 + 1]
+ | q7 : int(1..2)])
+ | q6 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q6, q8] = false -> x_ExplicitVarSizeWithFlags_Values[q6, q8] = 1
+ | q8 : int(1..3)])
+ | q6 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q6, q9 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6, q9]
+ | q9 : int(1..2)])
+ | q6 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q12, q15] ->
+ or([x_ExplicitVarSizeWithDummy[q12, q17] != 4 /\
+ x_ExplicitVarSizeWithDummy[q12, q17] = x_ExplicitVarSizeWithFlags_Values[q12, q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)])
+ /\
+ and([x_ExplicitVarSizeWithDummy[q12, q19] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12, q21] /\
+ x_ExplicitVarSizeWithFlags_Values[q12, q21] = x_ExplicitVarSizeWithDummy[q12, q19]
+ | q21 : int(1..3)])
+ | q19 : int(1..3)])
+ | q12 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000001.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000003.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000004.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1.eprime
new file mode 100644
index 0000000000..ea86dd3c32
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1.eprime
@@ -0,0 +1,26 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q7 <= x_ExplicitVarSizeWithMarker_Marker[j] -> x_ExplicitVarSizeWithMarker_Values[j, q7] % 2 = 0
+ | j : int(1..2), q7 : int(1..3)]),
+ and([and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q1] ->
+ x_ExplicitVarSizeWithMarker_Values[q1, q2] < x_ExplicitVarSizeWithMarker_Values[q1, q2 + 1]
+ | q2 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([q3 > x_ExplicitVarSizeWithMarker_Marker[q1] -> x_ExplicitVarSizeWithMarker_Values[q1, q3] = 1
+ | q3 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([x_Occurrence[q8, q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker[q8] /\ x_ExplicitVarSizeWithMarker_Values[q8, q12] = q10
+ | q12 : int(1..3)])
+ | q10 : int(1..3)])
+ /\
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker[q8] ->
+ x_Occurrence[q8, x_ExplicitVarSizeWithMarker_Values[q8, q14]]
+ | q14 : int(1..3)])
+ | q8 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000001.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000002.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000003.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000004.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2.eprime
new file mode 100644
index 0000000000..d2dad6cd2c
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker[j] -> x_ExplicitVarSizeWithMarker_Values[j, q20] % 2 = 0
+ | j : int(1..2), q20 : int(1..3)]),
+ and([and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q1] ->
+ x_ExplicitVarSizeWithMarker_Values[q1, q2] < x_ExplicitVarSizeWithMarker_Values[q1, q2 + 1]
+ | q2 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([q3 > x_ExplicitVarSizeWithMarker_Marker[q1] -> x_ExplicitVarSizeWithMarker_Values[q1, q3] = 1
+ | q3 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithDummy[q5, q6] < x_ExplicitVarSizeWithDummy[q5, q6 + 1] \/
+ x_ExplicitVarSizeWithDummy[q5, q6] = 4
+ | q6 : int(1..2)])
+ | q5 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithDummy[q5, q7] = 4 -> x_ExplicitVarSizeWithDummy[q5, q7 + 1] = 4 | q7 : int(1..2)])
+ | q5 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithDummy[q10, q13] != 4 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker[q10] /\
+ x_ExplicitVarSizeWithMarker_Values[q10, q15] = x_ExplicitVarSizeWithDummy[q10, q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)])
+ /\
+ and([q17 <= x_ExplicitVarSizeWithMarker_Marker[q10] ->
+ or([x_ExplicitVarSizeWithDummy[q10, q19] != 4 /\
+ x_ExplicitVarSizeWithDummy[q10, q19] = x_ExplicitVarSizeWithMarker_Values[q10, q17]
+ | q19 : int(1..3)])
+ | q17 : int(1..3)])
+ | q10 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000001.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000003.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000004.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3.eprime
new file mode 100644
index 0000000000..8fc98162b2
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3.eprime
@@ -0,0 +1,16 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q5 <= x_ExplicitVarSizeWithMarker_Marker[j] -> x_ExplicitVarSizeWithMarker_Values[j, q5] % 2 = 0
+ | j : int(1..2), q5 : int(1..3)]),
+ and([and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q1] ->
+ x_ExplicitVarSizeWithMarker_Values[q1, q2] < x_ExplicitVarSizeWithMarker_Values[q1, q2 + 1]
+ | q2 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([q3 > x_ExplicitVarSizeWithMarker_Marker[q1] -> x_ExplicitVarSizeWithMarker_Values[q1, q3] = 1
+ | q3 : int(1..3)])
+ | q1 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000001.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000003.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000004.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4.eprime
new file mode 100644
index 0000000000..ad169aef90
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker[j] -> x_ExplicitVarSizeWithMarker_Values[j, q21] % 2 = 0
+ | j : int(1..2), q21 : int(1..3)]),
+ and([and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q1] ->
+ x_ExplicitVarSizeWithMarker_Values[q1, q2] < x_ExplicitVarSizeWithMarker_Values[q1, q2 + 1]
+ | q2 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([q3 > x_ExplicitVarSizeWithMarker_Marker[q1] -> x_ExplicitVarSizeWithMarker_Values[q1, q3] = 1
+ | q3 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q5, q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5, q6] < x_ExplicitVarSizeWithFlags_Values[q5, q6 + 1]
+ | q6 : int(1..2)])
+ | q5 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q5, q7] = false -> x_ExplicitVarSizeWithFlags_Values[q5, q7] = 1
+ | q7 : int(1..3)])
+ | q5 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q5, q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q5, q8]
+ | q8 : int(1..2)])
+ | q5 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q11, q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker[q11] /\
+ x_ExplicitVarSizeWithMarker_Values[q11, q16] = x_ExplicitVarSizeWithFlags_Values[q11, q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)])
+ /\
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker[q11] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11, q20] /\
+ x_ExplicitVarSizeWithFlags_Values[q11, q20] = x_ExplicitVarSizeWithMarker_Values[q11, q18]
+ | q20 : int(1..3)])
+ | q18 : int(1..3)])
+ | q11 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000001.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000003.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000004.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1.eprime
new file mode 100644
index 0000000000..7b010d3180
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[j, q16] -> x_ExplicitVarSizeWithFlags_Values[j, q16] % 2 = 0
+ | j : int(1..2), q16 : int(1..3)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1, q2] < x_ExplicitVarSizeWithFlags_Values[q1, q2 + 1]
+ | q2 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q3] = false -> x_ExplicitVarSizeWithFlags_Values[q1, q3] = 1
+ | q3 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q1, q4]
+ | q4 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([x_Occurrence[q9, q11] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9, q13] /\ x_ExplicitVarSizeWithFlags_Values[q9, q13] = q11
+ | q13 : int(1..3)])
+ | q11 : int(1..3)])
+ /\
+ and([x_ExplicitVarSizeWithFlags_Flags[q9, q15] -> x_Occurrence[q9, x_ExplicitVarSizeWithFlags_Values[q9, q15]]
+ | q15 : int(1..3)])
+ | q9 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000001.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000002.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000003.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000004.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2.eprime
new file mode 100644
index 0000000000..39f8e990fe
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2.eprime
@@ -0,0 +1,38 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[j, q22] -> x_ExplicitVarSizeWithFlags_Values[j, q22] % 2 = 0
+ | j : int(1..2), q22 : int(1..3)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1, q2] < x_ExplicitVarSizeWithFlags_Values[q1, q2 + 1]
+ | q2 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q3] = false -> x_ExplicitVarSizeWithFlags_Values[q1, q3] = 1
+ | q3 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q1, q4]
+ | q4 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithDummy[q7, q8] < x_ExplicitVarSizeWithDummy[q7, q8 + 1] \/
+ x_ExplicitVarSizeWithDummy[q7, q8] = 4
+ | q8 : int(1..2)])
+ | q7 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithDummy[q7, q9] = 4 -> x_ExplicitVarSizeWithDummy[q7, q9 + 1] = 4 | q9 : int(1..2)])
+ | q7 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithDummy[q12, q15] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12, q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q12, q17] = x_ExplicitVarSizeWithDummy[q12, q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)])
+ /\
+ and([x_ExplicitVarSizeWithFlags_Flags[q12, q19] ->
+ or([x_ExplicitVarSizeWithDummy[q12, q21] != 4 /\
+ x_ExplicitVarSizeWithDummy[q12, q21] = x_ExplicitVarSizeWithFlags_Values[q12, q19]
+ | q21 : int(1..3)])
+ | q19 : int(1..3)])
+ | q12 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000001.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000003.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000004.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3.eprime
new file mode 100644
index 0000000000..a67d88de35
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[j, q21] -> x_ExplicitVarSizeWithFlags_Values[j, q21] % 2 = 0
+ | j : int(1..2), q21 : int(1..3)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1, q2] < x_ExplicitVarSizeWithFlags_Values[q1, q2 + 1]
+ | q2 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q3] = false -> x_ExplicitVarSizeWithFlags_Values[q1, q3] = 1
+ | q3 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q1, q4]
+ | q4 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([q8 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q7] ->
+ x_ExplicitVarSizeWithMarker_Values[q7, q8] < x_ExplicitVarSizeWithMarker_Values[q7, q8 + 1]
+ | q8 : int(1..2)])
+ | q7 : int(1..2)]),
+ and([and([q9 > x_ExplicitVarSizeWithMarker_Marker[q7] -> x_ExplicitVarSizeWithMarker_Values[q7, q9] = 1
+ | q9 : int(1..3)])
+ | q7 : int(1..2)]),
+ and([and([q14 <= x_ExplicitVarSizeWithMarker_Marker[q11] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11, q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q11, q16] = x_ExplicitVarSizeWithMarker_Values[q11, q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)])
+ /\
+ and([x_ExplicitVarSizeWithFlags_Flags[q11, q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker[q11] /\
+ x_ExplicitVarSizeWithMarker_Values[q11, q20] = x_ExplicitVarSizeWithFlags_Values[q11, q18]
+ | q20 : int(1..3)])
+ | q18 : int(1..3)])
+ | q11 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000001.solution
new file mode 100644
index 0000000000..af7c1da5d8
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be [{}, {}; int(1..2)]
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000002.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b1f00f1a5
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{}, {2}; int(1..2)]
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000003.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000003.solution
new file mode 100644
index 0000000000..cbfa586d38
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {}; int(1..2)]
+$ Visualisation for x
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000004.solution b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000004.solution
new file mode 100644
index 0000000000..a392d5bbea
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be [{2}, {2}; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+
diff --git a/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4.eprime b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4.eprime
new file mode 100644
index 0000000000..641fab2f7f
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[j, q7] -> x_ExplicitVarSizeWithFlags_Values[j, q7] % 2 = 0
+ | j : int(1..2), q7 : int(1..3)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1, q2] < x_ExplicitVarSizeWithFlags_Values[q1, q2 + 1]
+ | q2 : int(1..2)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q3] = false -> x_ExplicitVarSizeWithFlags_Values[q1, q3] = 1
+ | q3 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q1, q4]
+ | q4 : int(1..2)])
+ | q1 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_1-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_1-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_1.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_1.eprime
new file mode 100644
index 0000000000..93e46c5fc0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_1.eprime
@@ -0,0 +1,8 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+branching on [x_Occurrence]
+such that
+ and([x_Occurrence[j1, j2, i] -> i % 2 = 0 | j1 : int(1..2), j2 : int(1..3), i : int(1..3)]),
+ and([and([1 <= sum([toInt(x_Occurrence[q1, q2, q3]) | q3 : int(1..3)]) | q2 : int(1..3)]) | q1 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_2-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_2-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_2.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_2.eprime
new file mode 100644
index 0000000000..d190146044
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ and([x_Occurrence[j1, j2, i] -> i % 2 = 0 | j1 : int(1..2), j2 : int(1..3), i : int(1..3)]),
+ and([and([1 <= sum([toInt(x_Occurrence[q1, q2, q3]) | q3 : int(1..3)]) | q2 : int(1..3)]) | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q4, q5, q6] < x_ExplicitVarSizeWithDummy[q4, q5, q6 + 1] \/
+ x_ExplicitVarSizeWithDummy[q4, q5, q6] = 4
+ | q6 : int(1..2)])
+ | q5 : int(1..3)])
+ | q4 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q4, q5, q7] = 4 -> x_ExplicitVarSizeWithDummy[q4, q5, q7 + 1] = 4
+ | q7 : int(1..2)])
+ | q5 : int(1..3)])
+ | q4 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q4, q5, q8] != 4) | q8 : int(1..3)]) | q5 : int(1..3)])
+ | q4 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q10, q12, q15] != 4 ->
+ x_Occurrence[q10, q12, x_ExplicitVarSizeWithDummy[q10, q12, q15]]
+ | q15 : int(1..3)])
+ /\
+ and([x_Occurrence[q10, q12, q16] ->
+ or([x_ExplicitVarSizeWithDummy[q10, q12, q18] != 4 /\ x_ExplicitVarSizeWithDummy[q10, q12, q18] = q16
+ | q18 : int(1..3)])
+ | q16 : int(1..3)])
+ | q12 : int(1..3)])
+ | q10 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_3-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_3-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_3-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_3.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_3.eprime
new file mode 100644
index 0000000000..bf9afdb1e3
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_3.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2), int(1..3)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ and([x_Occurrence[j1, j2, i] -> i % 2 = 0 | j1 : int(1..2), j2 : int(1..3), i : int(1..3)]),
+ and([and([1 <= sum([toInt(x_Occurrence[q1, q2, q3]) | q3 : int(1..3)]) | q2 : int(1..3)]) | q1 : int(1..2)]),
+ and([and([and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q4, q5] ->
+ x_ExplicitVarSizeWithMarker_Values[q4, q5, q6] < x_ExplicitVarSizeWithMarker_Values[q4, q5, q6 + 1]
+ | q6 : int(1..2)])
+ | q5 : int(1..3)])
+ | q4 : int(1..2)]),
+ and([and([and([q7 > x_ExplicitVarSizeWithMarker_Marker[q4, q5] -> x_ExplicitVarSizeWithMarker_Values[q4, q5, q7] = 1
+ | q7 : int(1..3)])
+ | q5 : int(1..3)])
+ | q4 : int(1..2)]),
+ and([and([1 <= x_ExplicitVarSizeWithMarker_Marker[q4, q5] | q5 : int(1..3)]) | q4 : int(1..2)]),
+ and([and([and([q14 <= x_ExplicitVarSizeWithMarker_Marker[q9, q11] ->
+ x_Occurrence[q9, q11, x_ExplicitVarSizeWithMarker_Values[q9, q11, q14]]
+ | q14 : int(1..3)])
+ /\
+ and([x_Occurrence[q9, q11, q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker[q9, q11] /\
+ x_ExplicitVarSizeWithMarker_Values[q9, q11, q17] = q15
+ | q17 : int(1..3)])
+ | q15 : int(1..3)])
+ | q11 : int(1..3)])
+ | q9 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_4-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_4-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_4-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_4.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_4.eprime
new file mode 100644
index 0000000000..39b0762f3c
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_4.eprime
@@ -0,0 +1,37 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ and([x_Occurrence[j1, j2, i] -> i % 2 = 0 | j1 : int(1..2), j2 : int(1..3), i : int(1..3)]),
+ and([and([1 <= sum([toInt(x_Occurrence[q1, q2, q3]) | q3 : int(1..3)]) | q2 : int(1..3)]) | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q4, q5, q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4, q5, q6] < x_ExplicitVarSizeWithFlags_Values[q4, q5, q6 + 1]
+ | q6 : int(1..2)])
+ | q5 : int(1..3)])
+ | q4 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q4, q5, q7] = false ->
+ x_ExplicitVarSizeWithFlags_Values[q4, q5, q7] = 1
+ | q7 : int(1..3)])
+ | q5 : int(1..3)])
+ | q4 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q4, q5, q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4, q5, q8]
+ | q8 : int(1..2)])
+ | q5 : int(1..3)])
+ | q4 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4, q5, q9]) | q9 : int(1..3)]) | q5 : int(1..3)])
+ | q4 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q11, q13, q16] ->
+ x_Occurrence[q11, q13, x_ExplicitVarSizeWithFlags_Values[q11, q13, q16]]
+ | q16 : int(1..3)])
+ /\
+ and([x_Occurrence[q11, q13, q17] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11, q13, q19] /\
+ x_ExplicitVarSizeWithFlags_Values[q11, q13, q19] = q17
+ | q19 : int(1..3)])
+ | q17 : int(1..3)])
+ | q13 : int(1..3)])
+ | q11 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_1-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_1-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_1.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_1.eprime
new file mode 100644
index 0000000000..930a9b9b07
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_1.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[j1, j2, q19] != 4 -> x_ExplicitVarSizeWithDummy[j1, j2, q19] % 2 = 0
+ | j1 : int(1..2), j2 : int(1..3), q19 : int(1..3)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q1, q2, q3] < x_ExplicitVarSizeWithDummy[q1, q2, q3 + 1] \/
+ x_ExplicitVarSizeWithDummy[q1, q2, q3] = 4
+ | q3 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q1, q2, q4] = 4 -> x_ExplicitVarSizeWithDummy[q1, q2, q4 + 1] = 4
+ | q4 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q1, q2, q5] != 4) | q5 : int(1..3)]) | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_Occurrence[q7, q8, q9]) | q9 : int(1..3)]) | q8 : int(1..3)]) | q7 : int(1..2)]),
+ and([and([and([x_Occurrence[q10, q12, q14] ->
+ or([x_ExplicitVarSizeWithDummy[q10, q12, q16] != 4 /\ x_ExplicitVarSizeWithDummy[q10, q12, q16] = q14
+ | q16 : int(1..3)])
+ | q14 : int(1..3)])
+ /\
+ and([x_ExplicitVarSizeWithDummy[q10, q12, q18] != 4 ->
+ x_Occurrence[q10, q12, x_ExplicitVarSizeWithDummy[q10, q12, q18]]
+ | q18 : int(1..3)])
+ | q12 : int(1..3)])
+ | q10 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_2-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_2-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_2.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_2.eprime
new file mode 100644
index 0000000000..e236ad9239
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_2.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[j1, j2, q7] != 4 -> x_ExplicitVarSizeWithDummy[j1, j2, q7] % 2 = 0
+ | j1 : int(1..2), j2 : int(1..3), q7 : int(1..3)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q1, q2, q3] < x_ExplicitVarSizeWithDummy[q1, q2, q3 + 1] \/
+ x_ExplicitVarSizeWithDummy[q1, q2, q3] = 4
+ | q3 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q1, q2, q4] = 4 -> x_ExplicitVarSizeWithDummy[q1, q2, q4 + 1] = 4
+ | q4 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q1, q2, q5] != 4) | q5 : int(1..3)]) | q2 : int(1..3)])
+ | q1 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_3-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_3-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_3-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_3.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_3.eprime
new file mode 100644
index 0000000000..7920954488
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_3.eprime
@@ -0,0 +1,45 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2), int(1..3)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[j1, j2, q24] != 4 -> x_ExplicitVarSizeWithDummy[j1, j2, q24] % 2 = 0
+ | j1 : int(1..2), j2 : int(1..3), q24 : int(1..3)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q1, q2, q3] < x_ExplicitVarSizeWithDummy[q1, q2, q3 + 1] \/
+ x_ExplicitVarSizeWithDummy[q1, q2, q3] = 4
+ | q3 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q1, q2, q4] = 4 -> x_ExplicitVarSizeWithDummy[q1, q2, q4 + 1] = 4
+ | q4 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q1, q2, q5] != 4) | q5 : int(1..3)]) | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([q9 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q7, q8] ->
+ x_ExplicitVarSizeWithMarker_Values[q7, q8, q9] < x_ExplicitVarSizeWithMarker_Values[q7, q8, q9 + 1]
+ | q9 : int(1..2)])
+ | q8 : int(1..3)])
+ | q7 : int(1..2)]),
+ and([and([and([q10 > x_ExplicitVarSizeWithMarker_Marker[q7, q8] ->
+ x_ExplicitVarSizeWithMarker_Values[q7, q8, q10] = 1
+ | q10 : int(1..3)])
+ | q8 : int(1..3)])
+ | q7 : int(1..2)]),
+ and([and([1 <= x_ExplicitVarSizeWithMarker_Marker[q7, q8] | q8 : int(1..3)]) | q7 : int(1..2)]),
+ and([and([and([q17 <= x_ExplicitVarSizeWithMarker_Marker[q12, q14] ->
+ or([x_ExplicitVarSizeWithDummy[q12, q14, q19] != 4 /\
+ x_ExplicitVarSizeWithDummy[q12, q14, q19] = x_ExplicitVarSizeWithMarker_Values[q12, q14, q17]
+ | q19 : int(1..3)])
+ | q17 : int(1..3)])
+ /\
+ and([x_ExplicitVarSizeWithDummy[q12, q14, q21] != 4 ->
+ or([q23 <= x_ExplicitVarSizeWithMarker_Marker[q12, q14] /\
+ x_ExplicitVarSizeWithMarker_Values[q12, q14, q23] = x_ExplicitVarSizeWithDummy[q12, q14, q21]
+ | q23 : int(1..3)])
+ | q21 : int(1..3)])
+ | q14 : int(1..3)])
+ | q12 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_4-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_4-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_4-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_4.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_4.eprime
new file mode 100644
index 0000000000..7ea793896c
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_4.eprime
@@ -0,0 +1,50 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[j1, j2, q26] != 4 -> x_ExplicitVarSizeWithDummy[j1, j2, q26] % 2 = 0
+ | j1 : int(1..2), j2 : int(1..3), q26 : int(1..3)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q1, q2, q3] < x_ExplicitVarSizeWithDummy[q1, q2, q3 + 1] \/
+ x_ExplicitVarSizeWithDummy[q1, q2, q3] = 4
+ | q3 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q1, q2, q4] = 4 -> x_ExplicitVarSizeWithDummy[q1, q2, q4 + 1] = 4
+ | q4 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q1, q2, q5] != 4) | q5 : int(1..3)]) | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q7, q8, q9 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q7, q8, q9] < x_ExplicitVarSizeWithFlags_Values[q7, q8, q9 + 1]
+ | q9 : int(1..2)])
+ | q8 : int(1..3)])
+ | q7 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q7, q8, q10] = false ->
+ x_ExplicitVarSizeWithFlags_Values[q7, q8, q10] = 1
+ | q10 : int(1..3)])
+ | q8 : int(1..3)])
+ | q7 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q7, q8, q11 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7, q8, q11]
+ | q11 : int(1..2)])
+ | q8 : int(1..3)])
+ | q7 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7, q8, q12]) | q12 : int(1..3)]) | q8 : int(1..3)])
+ | q7 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q14, q16, q19] ->
+ or([x_ExplicitVarSizeWithDummy[q14, q16, q21] != 4 /\
+ x_ExplicitVarSizeWithDummy[q14, q16, q21] = x_ExplicitVarSizeWithFlags_Values[q14, q16, q19]
+ | q21 : int(1..3)])
+ | q19 : int(1..3)])
+ /\
+ and([x_ExplicitVarSizeWithDummy[q14, q16, q23] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14, q16, q25] /\
+ x_ExplicitVarSizeWithFlags_Values[q14, q16, q25] = x_ExplicitVarSizeWithDummy[q14, q16, q23]
+ | q25 : int(1..3)])
+ | q23 : int(1..3)])
+ | q16 : int(1..3)])
+ | q14 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_1-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_1-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_1.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_1.eprime
new file mode 100644
index 0000000000..8512304454
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_1.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2), int(1..3)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker[j1, j2] -> x_ExplicitVarSizeWithMarker_Values[j1, j2, q18] % 2 = 0
+ | j1 : int(1..2), j2 : int(1..3), q18 : int(1..3)]),
+ and([and([and([q3 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q1, q2] ->
+ x_ExplicitVarSizeWithMarker_Values[q1, q2, q3] < x_ExplicitVarSizeWithMarker_Values[q1, q2, q3 + 1]
+ | q3 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([q4 > x_ExplicitVarSizeWithMarker_Marker[q1, q2] -> x_ExplicitVarSizeWithMarker_Values[q1, q2, q4] = 1
+ | q4 : int(1..3)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= x_ExplicitVarSizeWithMarker_Marker[q1, q2] | q2 : int(1..3)]) | q1 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_Occurrence[q6, q7, q8]) | q8 : int(1..3)]) | q7 : int(1..3)]) | q6 : int(1..2)]),
+ and([and([and([x_Occurrence[q9, q11, q13] ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker[q9, q11] /\
+ x_ExplicitVarSizeWithMarker_Values[q9, q11, q15] = q13
+ | q15 : int(1..3)])
+ | q13 : int(1..3)])
+ /\
+ and([q17 <= x_ExplicitVarSizeWithMarker_Marker[q9, q11] ->
+ x_Occurrence[q9, q11, x_ExplicitVarSizeWithMarker_Values[q9, q11, q17]]
+ | q17 : int(1..3)])
+ | q11 : int(1..3)])
+ | q9 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_2-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_2-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_2.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_2.eprime
new file mode 100644
index 0000000000..1d07948b63
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_2.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2), int(1..3)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q24 <= x_ExplicitVarSizeWithMarker_Marker[j1, j2] -> x_ExplicitVarSizeWithMarker_Values[j1, j2, q24] % 2 = 0
+ | j1 : int(1..2), j2 : int(1..3), q24 : int(1..3)]),
+ and([and([and([q3 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q1, q2] ->
+ x_ExplicitVarSizeWithMarker_Values[q1, q2, q3] < x_ExplicitVarSizeWithMarker_Values[q1, q2, q3 + 1]
+ | q3 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([q4 > x_ExplicitVarSizeWithMarker_Marker[q1, q2] -> x_ExplicitVarSizeWithMarker_Values[q1, q2, q4] = 1
+ | q4 : int(1..3)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= x_ExplicitVarSizeWithMarker_Marker[q1, q2] | q2 : int(1..3)]) | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q6, q7, q8] < x_ExplicitVarSizeWithDummy[q6, q7, q8 + 1] \/
+ x_ExplicitVarSizeWithDummy[q6, q7, q8] = 4
+ | q8 : int(1..2)])
+ | q7 : int(1..3)])
+ | q6 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q6, q7, q9] = 4 -> x_ExplicitVarSizeWithDummy[q6, q7, q9 + 1] = 4
+ | q9 : int(1..2)])
+ | q7 : int(1..3)])
+ | q6 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q6, q7, q10] != 4) | q10 : int(1..3)]) | q7 : int(1..3)])
+ | q6 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q12, q14, q17] != 4 ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker[q12, q14] /\
+ x_ExplicitVarSizeWithMarker_Values[q12, q14, q19] = x_ExplicitVarSizeWithDummy[q12, q14, q17]
+ | q19 : int(1..3)])
+ | q17 : int(1..3)])
+ /\
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker[q12, q14] ->
+ or([x_ExplicitVarSizeWithDummy[q12, q14, q23] != 4 /\
+ x_ExplicitVarSizeWithDummy[q12, q14, q23] = x_ExplicitVarSizeWithMarker_Values[q12, q14, q21]
+ | q23 : int(1..3)])
+ | q21 : int(1..3)])
+ | q14 : int(1..3)])
+ | q12 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_3-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_3-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_3-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_3.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_3.eprime
new file mode 100644
index 0000000000..470bd34100
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_3.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2), int(1..3)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker[j1, j2] -> x_ExplicitVarSizeWithMarker_Values[j1, j2, q6] % 2 = 0
+ | j1 : int(1..2), j2 : int(1..3), q6 : int(1..3)]),
+ and([and([and([q3 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q1, q2] ->
+ x_ExplicitVarSizeWithMarker_Values[q1, q2, q3] < x_ExplicitVarSizeWithMarker_Values[q1, q2, q3 + 1]
+ | q3 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([q4 > x_ExplicitVarSizeWithMarker_Marker[q1, q2] -> x_ExplicitVarSizeWithMarker_Values[q1, q2, q4] = 1
+ | q4 : int(1..3)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= x_ExplicitVarSizeWithMarker_Marker[q1, q2] | q2 : int(1..3)]) | q1 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_4-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_4-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_4-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_4.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_4.eprime
new file mode 100644
index 0000000000..3685e9f034
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_4.eprime
@@ -0,0 +1,54 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2), int(1..3)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker[j1, j2] -> x_ExplicitVarSizeWithMarker_Values[j1, j2, q25] % 2 = 0
+ | j1 : int(1..2), j2 : int(1..3), q25 : int(1..3)]),
+ and([and([and([q3 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q1, q2] ->
+ x_ExplicitVarSizeWithMarker_Values[q1, q2, q3] < x_ExplicitVarSizeWithMarker_Values[q1, q2, q3 + 1]
+ | q3 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([q4 > x_ExplicitVarSizeWithMarker_Marker[q1, q2] -> x_ExplicitVarSizeWithMarker_Values[q1, q2, q4] = 1
+ | q4 : int(1..3)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= x_ExplicitVarSizeWithMarker_Marker[q1, q2] | q2 : int(1..3)]) | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q6, q7, q8 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6, q7, q8] < x_ExplicitVarSizeWithFlags_Values[q6, q7, q8 + 1]
+ | q8 : int(1..2)])
+ | q7 : int(1..3)])
+ | q6 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q6, q7, q9] = false ->
+ x_ExplicitVarSizeWithFlags_Values[q6, q7, q9] = 1
+ | q9 : int(1..3)])
+ | q7 : int(1..3)])
+ | q6 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q6, q7, q10 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6, q7, q10]
+ | q10 : int(1..2)])
+ | q7 : int(1..3)])
+ | q6 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q6, q7, q11]) | q11 : int(1..3)]) | q7 : int(1..3)])
+ | q6 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q13, q15, q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker[q13, q15] /\
+ x_ExplicitVarSizeWithMarker_Values[q13, q15, q20] =
+ x_ExplicitVarSizeWithFlags_Values[q13, q15, q18]
+ | q20 : int(1..3)])
+ | q18 : int(1..3)])
+ /\
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker[q13, q15] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13, q15, q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q13, q15, q24] =
+ x_ExplicitVarSizeWithMarker_Values[q13, q15, q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)])
+ | q15 : int(1..3)])
+ | q13 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_1-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_1-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_1.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_1.eprime
new file mode 100644
index 0000000000..af1e5066df
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_1.eprime
@@ -0,0 +1,38 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[j1, j2, q20] -> x_ExplicitVarSizeWithFlags_Values[j1, j2, q20] % 2 = 0
+ | j1 : int(1..2), j2 : int(1..3), q20 : int(1..3)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2, q3 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1, q2, q3] < x_ExplicitVarSizeWithFlags_Values[q1, q2, q3 + 1]
+ | q3 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2, q4] = false ->
+ x_ExplicitVarSizeWithFlags_Values[q1, q2, q4] = 1
+ | q4 : int(1..3)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2, q5 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q1, q2, q5]
+ | q5 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q1, q2, q6]) | q6 : int(1..3)]) | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_Occurrence[q8, q9, q10]) | q10 : int(1..3)]) | q9 : int(1..3)]) | q8 : int(1..2)]),
+ and([and([and([x_Occurrence[q11, q13, q15] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11, q13, q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q11, q13, q17] = q15
+ | q17 : int(1..3)])
+ | q15 : int(1..3)])
+ /\
+ and([x_ExplicitVarSizeWithFlags_Flags[q11, q13, q19] ->
+ x_Occurrence[q11, q13, x_ExplicitVarSizeWithFlags_Values[q11, q13, q19]]
+ | q19 : int(1..3)])
+ | q13 : int(1..3)])
+ | q11 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_2-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_2-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_2.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_2.eprime
new file mode 100644
index 0000000000..18fd6c5c2f
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_2.eprime
@@ -0,0 +1,50 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[j1, j2, q26] -> x_ExplicitVarSizeWithFlags_Values[j1, j2, q26] % 2 = 0
+ | j1 : int(1..2), j2 : int(1..3), q26 : int(1..3)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2, q3 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1, q2, q3] < x_ExplicitVarSizeWithFlags_Values[q1, q2, q3 + 1]
+ | q3 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2, q4] = false ->
+ x_ExplicitVarSizeWithFlags_Values[q1, q2, q4] = 1
+ | q4 : int(1..3)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2, q5 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q1, q2, q5]
+ | q5 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q1, q2, q6]) | q6 : int(1..3)]) | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q8, q9, q10] < x_ExplicitVarSizeWithDummy[q8, q9, q10 + 1] \/
+ x_ExplicitVarSizeWithDummy[q8, q9, q10] = 4
+ | q10 : int(1..2)])
+ | q9 : int(1..3)])
+ | q8 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q8, q9, q11] = 4 -> x_ExplicitVarSizeWithDummy[q8, q9, q11 + 1] = 4
+ | q11 : int(1..2)])
+ | q9 : int(1..3)])
+ | q8 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q8, q9, q12] != 4) | q12 : int(1..3)]) | q9 : int(1..3)])
+ | q8 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithDummy[q14, q16, q19] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14, q16, q21] /\
+ x_ExplicitVarSizeWithFlags_Values[q14, q16, q21] = x_ExplicitVarSizeWithDummy[q14, q16, q19]
+ | q21 : int(1..3)])
+ | q19 : int(1..3)])
+ /\
+ and([x_ExplicitVarSizeWithFlags_Flags[q14, q16, q23] ->
+ or([x_ExplicitVarSizeWithDummy[q14, q16, q25] != 4 /\
+ x_ExplicitVarSizeWithDummy[q14, q16, q25] = x_ExplicitVarSizeWithFlags_Values[q14, q16, q23]
+ | q25 : int(1..3)])
+ | q23 : int(1..3)])
+ | q16 : int(1..3)])
+ | q14 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_3-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_3-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_3-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_3.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_3.eprime
new file mode 100644
index 0000000000..0716f2019d
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_3.eprime
@@ -0,0 +1,55 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2), int(1..3)] of int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[j1, j2, q25] -> x_ExplicitVarSizeWithFlags_Values[j1, j2, q25] % 2 = 0
+ | j1 : int(1..2), j2 : int(1..3), q25 : int(1..3)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2, q3 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1, q2, q3] < x_ExplicitVarSizeWithFlags_Values[q1, q2, q3 + 1]
+ | q3 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2, q4] = false ->
+ x_ExplicitVarSizeWithFlags_Values[q1, q2, q4] = 1
+ | q4 : int(1..3)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2, q5 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q1, q2, q5]
+ | q5 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q1, q2, q6]) | q6 : int(1..3)]) | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([q10 + 1 <= x_ExplicitVarSizeWithMarker_Marker[q8, q9] ->
+ x_ExplicitVarSizeWithMarker_Values[q8, q9, q10] < x_ExplicitVarSizeWithMarker_Values[q8, q9, q10 + 1]
+ | q10 : int(1..2)])
+ | q9 : int(1..3)])
+ | q8 : int(1..2)]),
+ and([and([and([q11 > x_ExplicitVarSizeWithMarker_Marker[q8, q9] ->
+ x_ExplicitVarSizeWithMarker_Values[q8, q9, q11] = 1
+ | q11 : int(1..3)])
+ | q9 : int(1..3)])
+ | q8 : int(1..2)]),
+ and([and([1 <= x_ExplicitVarSizeWithMarker_Marker[q8, q9] | q9 : int(1..3)]) | q8 : int(1..2)]),
+ and([and([and([q18 <= x_ExplicitVarSizeWithMarker_Marker[q13, q15] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13, q15, q20] /\
+ x_ExplicitVarSizeWithFlags_Values[q13, q15, q20] =
+ x_ExplicitVarSizeWithMarker_Values[q13, q15, q18]
+ | q20 : int(1..3)])
+ | q18 : int(1..3)])
+ /\
+ and([x_ExplicitVarSizeWithFlags_Flags[q13, q15, q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker[q13, q15] /\
+ x_ExplicitVarSizeWithMarker_Values[q13, q15, q24] =
+ x_ExplicitVarSizeWithFlags_Values[q13, q15, q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)])
+ | q15 : int(1..3)])
+ | q13 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_4-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_4-solution000001.solution
new file mode 100644
index 0000000000..88e783b8b0
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_4-solution000001.solution
@@ -0,0 +1,13 @@
+language Essence 1.3
+
+letting x be [[{2}, {2}, {2}; int(1..3)], [{2}, {2}, {2}; int(1..3)]; int(1..2)]
+$ Visualisation for x
+$ 2
+$ 2
+$ 2
+$
+$ 2
+$ 2
+$ 2
+$
+
diff --git a/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_4.eprime b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_4.eprime
new file mode 100644
index 0000000000..a9f5c660d9
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_4.eprime
@@ -0,0 +1,25 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3), int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3), int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[j1, j2, q8] -> x_ExplicitVarSizeWithFlags_Values[j1, j2, q8] % 2 = 0
+ | j1 : int(1..2), j2 : int(1..3), q8 : int(1..3)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2, q3 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1, q2, q3] < x_ExplicitVarSizeWithFlags_Values[q1, q2, q3 + 1]
+ | q3 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2, q4] = false ->
+ x_ExplicitVarSizeWithFlags_Values[q1, q2, q4] = 1
+ | q4 : int(1..3)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([and([x_ExplicitVarSizeWithFlags_Flags[q1, q2, q5 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q1, q2, q5]
+ | q5 : int(1..2)])
+ | q2 : int(1..3)])
+ | q1 : int(1..2)]),
+ and([and([1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q1, q2, q6]) | q6 : int(1..3)]) | q2 : int(1..3)])
+ | q1 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_1.eprime.orig b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_1.eprime.orig
deleted file mode 100644
index 0779c860d2..0000000000
--- a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_1.eprime.orig
+++ /dev/null
@@ -1,28 +0,0 @@
-language ESSENCE' 1.0
-
-find a_Occurrence: matrix indexed by [int(1..3)] of bool
-find a_Explicit: matrix indexed by [int(1)] of int(1..3)
-find b_Occurrence: matrix indexed by [int(1..3)] of bool
-find b_Explicit: matrix indexed by [int(1)] of int(1..3)
-branching on [a_Explicit, a_Occurrence, b_Explicit, b_Occurrence]
-such that
-<<<<<<< HEAD:tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_1.eprime.orig
- a_Explicit[1] % 2 = 0,
- b_Explicit[1] % 2 = 0,
- 1 = sum([toInt(a_Occurrence[q5]) | q5 : int(1..3)]),
- and([a_Occurrence[q14] -> a_Explicit[1] = q14 | q14 : int(1..3)]),
- a_Occurrence[a_Explicit[1]],
- 1 = sum([toInt(b_Occurrence[q6]) | q6 : int(1..3)]),
- and([b_Occurrence[q7] -> b_Explicit[1] = q7 | q7 : int(1..3)]),
- b_Occurrence[b_Explicit[1]]
-=======
- and([a_Occurrence[i] -> i % 2 = 0 | j1 : int(1..2), j2 : int(1..3), i : int(1..3), 2 = j2, 1 = j1]),
- and([b_Occurrence[i] -> i % 2 = 0 | j1 : int(1..2), j2 : int(1..3), i : int(1..3), 3 = j2, 2 = j1]),
- 1 = sum([toInt(a_Occurrence[q1]) | q1 : int(1..3)]),
- 1 = sum([toInt(b_Occurrence[q2]) | q2 : int(1..3)]),
- a_Occurrence[a_Explicit[1]],
- and([a_Occurrence[q7] -> a_Explicit[1] = q7 | q7 : int(1..3)]),
- b_Occurrence[b_Explicit[1]],
- and([b_Occurrence[q14] -> b_Explicit[1] = q14 | q14 : int(1..3)])
->>>>>>> main:tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_1.eprime
-
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_1.eprime b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_1.eprime
new file mode 100644
index 0000000000..ffecec8aba
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_1.eprime
@@ -0,0 +1,17 @@
+language ESSENCE' 1.0
+
+find a_Occurrence: matrix indexed by [int(1..3)] of bool
+find a_Explicit: matrix indexed by [int(1)] of int(1..3)
+find b_Occurrence: matrix indexed by [int(1..3)] of bool
+find b_Explicit: matrix indexed by [int(1)] of int(1..3)
+branching on [a_Explicit, a_Occurrence, b_Explicit, b_Occurrence]
+such that
+ and([a_Occurrence[i] -> i % 2 = 0 | j1 : int(1..2), j2 : int(1..3), i : int(1..3), 2 = j2, 1 = j1]),
+ and([b_Occurrence[i] -> i % 2 = 0 | j1 : int(1..2), j2 : int(1..3), i : int(1..3), 3 = j2, 2 = j1]),
+ 1 = sum([toInt(a_Occurrence[q1]) | q1 : int(1..3)]),
+ 1 = sum([toInt(b_Occurrence[q2]) | q2 : int(1..3)]),
+ a_Occurrence[a_Explicit[1]],
+ and([a_Occurrence[q7] -> a_Explicit[1] = q7 | q7 : int(1..3)]),
+ b_Occurrence[b_Explicit[1]],
+ and([b_Occurrence[q14] -> b_Explicit[1] = q14 | q14 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_1-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_2-solution000001.solution b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..908faf0601
--- /dev/null
+++ b/tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting a be {2}
+letting b be {2}
diff --git a/tests/exhaustive/basic/mset01_find/expected/model_1.eprime b/tests/exhaustive/basic/mset01_find/expected/model_1.eprime
index 9116445f09..3794f0e9f2 100644
--- a/tests/exhaustive/basic/mset01_find/expected/model_1.eprime
+++ b/tests/exhaustive/basic/mset01_find/expected/model_1.eprime
@@ -4,8 +4,7 @@ find x_ExplicitWithFlags_Flags: matrix indexed by [int(1..4)] of int(0..2)
find x_ExplicitWithFlags_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithFlags_Flags, x_ExplicitWithFlags_Values]
such that
- and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q1]; int(1)] 0 -> x_ExplicitWithFlags_Values[q1] < x_ExplicitWithFlags_Values[q1 + 1]
| q1 : int(1..3)]),
and([x_ExplicitWithFlags_Flags[q2] = 0 -> x_ExplicitWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q3 + 1] > 0 -> x_ExplicitWithFlags_Flags[q3] > 0 | q3 : int(1..3)]),
diff --git a/tests/exhaustive/basic/mset01_find/expected/model_2.eprime b/tests/exhaustive/basic/mset01_find/expected/model_2.eprime
index 49768a43b8..622b9c2da2 100644
--- a/tests/exhaustive/basic/mset01_find/expected/model_2.eprime
+++ b/tests/exhaustive/basic/mset01_find/expected/model_2.eprime
@@ -5,7 +5,7 @@ find x_ExplicitWithRepetition_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values]
such that
and([q1 + 1 <= x_ExplicitWithRepetition_Flag ->
- [x_ExplicitWithRepetition_Values[q1]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q1 + 1]; int(1)]
+ x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1]
| q1 : int(1..3)]),
and([q2 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q2] = 1 | q2 : int(1..4)]),
and([q4 <= x_ExplicitWithRepetition_Flag ->
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_1-param1-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_1_1-param1-solution000001.solution
new file mode 100644
index 0000000000..3fc3fafe52
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_1-param1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset()
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_1-param1.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_1_1-param1.eprime-param
new file mode 100644
index 0000000000..62e729a0fe
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_1-param1.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be ([] : `matrix indexed by [int()] of bool`)
+letting g_ExplicitWithFlags_Values be ([] : `matrix indexed by [int()] of int`)
+letting fin1 be 0
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_1-param4-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_1_1-param4-solution000001.solution
new file mode 100644
index 0000000000..43c40d1c6b
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_1-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(1, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_1-param4.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_1_1-param4.eprime-param
new file mode 100644
index 0000000000..f1da505f58
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_1-param4.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [1, 1; int(1..2)]
+letting g_ExplicitWithFlags_Values be [1, 2; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_1-param7-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_1_1-param7-solution000001.solution
new file mode 100644
index 0000000000..06be1e3b32
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_1-param7-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(2, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_1-param7.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_1_1-param7.eprime-param
new file mode 100644
index 0000000000..468cfba281
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_1-param7.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [2, 0; int(1..2)]
+letting g_ExplicitWithFlags_Values be [2, 1; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_2-param1-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_1_2-param1-solution000001.solution
new file mode 100644
index 0000000000..3fc3fafe52
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_2-param1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset()
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_2-param1.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_1_2-param1.eprime-param
new file mode 100644
index 0000000000..62e729a0fe
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_2-param1.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be ([] : `matrix indexed by [int()] of bool`)
+letting g_ExplicitWithFlags_Values be ([] : `matrix indexed by [int()] of int`)
+letting fin1 be 0
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_2-param4-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_1_2-param4-solution000001.solution
new file mode 100644
index 0000000000..43c40d1c6b
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_2-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(1, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_2-param4.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_1_2-param4.eprime-param
new file mode 100644
index 0000000000..f1da505f58
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_2-param4.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [1, 1; int(1..2)]
+letting g_ExplicitWithFlags_Values be [1, 2; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_2-param7-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_1_2-param7-solution000001.solution
new file mode 100644
index 0000000000..06be1e3b32
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_2-param7-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(2, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_2-param7.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_1_2-param7.eprime-param
new file mode 100644
index 0000000000..468cfba281
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_2-param7.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [2, 0; int(1..2)]
+letting g_ExplicitWithFlags_Values be [2, 1; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_3-param1-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_1_3-param1-solution000001.solution
new file mode 100644
index 0000000000..3fc3fafe52
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_3-param1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset()
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_3-param1.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_1_3-param1.eprime-param
new file mode 100644
index 0000000000..62e729a0fe
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_3-param1.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be ([] : `matrix indexed by [int()] of bool`)
+letting g_ExplicitWithFlags_Values be ([] : `matrix indexed by [int()] of int`)
+letting fin1 be 0
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_3-param4-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_1_3-param4-solution000001.solution
new file mode 100644
index 0000000000..43c40d1c6b
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_3-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(1, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_3-param4.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_1_3-param4.eprime-param
new file mode 100644
index 0000000000..f1da505f58
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_3-param4.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [1, 1; int(1..2)]
+letting g_ExplicitWithFlags_Values be [1, 2; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_3-param7-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_1_3-param7-solution000001.solution
new file mode 100644
index 0000000000..06be1e3b32
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_3-param7-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(2, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_1_3-param7.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_1_3-param7.eprime-param
new file mode 100644
index 0000000000..468cfba281
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_1_3-param7.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [2, 0; int(1..2)]
+letting g_ExplicitWithFlags_Values be [2, 1; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_1-param1-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_2_1-param1-solution000001.solution
new file mode 100644
index 0000000000..3fc3fafe52
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_1-param1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset()
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_1-param1.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_2_1-param1.eprime-param
new file mode 100644
index 0000000000..62e729a0fe
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_1-param1.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be ([] : `matrix indexed by [int()] of bool`)
+letting g_ExplicitWithFlags_Values be ([] : `matrix indexed by [int()] of int`)
+letting fin1 be 0
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_1-param4-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_2_1-param4-solution000001.solution
new file mode 100644
index 0000000000..43c40d1c6b
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_1-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(1, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_1-param4.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_2_1-param4.eprime-param
new file mode 100644
index 0000000000..f1da505f58
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_1-param4.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [1, 1; int(1..2)]
+letting g_ExplicitWithFlags_Values be [1, 2; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_1-param7-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_2_1-param7-solution000001.solution
new file mode 100644
index 0000000000..06be1e3b32
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_1-param7-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(2, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_1-param7.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_2_1-param7.eprime-param
new file mode 100644
index 0000000000..468cfba281
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_1-param7.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [2, 0; int(1..2)]
+letting g_ExplicitWithFlags_Values be [2, 1; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_2-param1-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_2_2-param1-solution000001.solution
new file mode 100644
index 0000000000..3fc3fafe52
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_2-param1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset()
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_2-param1.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_2_2-param1.eprime-param
new file mode 100644
index 0000000000..62e729a0fe
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_2-param1.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be ([] : `matrix indexed by [int()] of bool`)
+letting g_ExplicitWithFlags_Values be ([] : `matrix indexed by [int()] of int`)
+letting fin1 be 0
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_2-param4-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_2_2-param4-solution000001.solution
new file mode 100644
index 0000000000..43c40d1c6b
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_2-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(1, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_2-param4.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_2_2-param4.eprime-param
new file mode 100644
index 0000000000..f1da505f58
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_2-param4.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [1, 1; int(1..2)]
+letting g_ExplicitWithFlags_Values be [1, 2; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_2-param7-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_2_2-param7-solution000001.solution
new file mode 100644
index 0000000000..06be1e3b32
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_2-param7-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(2, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_2-param7.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_2_2-param7.eprime-param
new file mode 100644
index 0000000000..468cfba281
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_2-param7.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [2, 0; int(1..2)]
+letting g_ExplicitWithFlags_Values be [2, 1; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_2.eprime b/tests/exhaustive/basic/mset01_param/expected/model_2_2.eprime
new file mode 100644
index 0000000000..a7170a2566
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_2.eprime
@@ -0,0 +1,37 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given g_ExplicitWithFlags_Flags: matrix indexed by [int(1..fin1)] of int(0..2)
+given g_ExplicitWithFlags_Values: matrix indexed by [int(1..fin1)] of int(1..2)
+find x_ExplicitWithRepetition_Flag: int(0..4)
+find x_ExplicitWithRepetition_Values: matrix indexed by [int(1..4)] of int(1..2)
+branching on [x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values]
+such that
+ and([sum([g_ExplicitWithFlags_Flags[q10]
+ | q10 : int(1..fin1), g_ExplicitWithFlags_Values[q10] = g_ExplicitWithFlags_Values[q9]])
+ =
+ sum([toInt(q12 <= x_ExplicitWithRepetition_Flag) *
+ catchUndef(toInt(x_ExplicitWithRepetition_Values[q12] = g_ExplicitWithFlags_Values[q9]), 0)
+ | q12 : int(1..4)])
+ | q9 : int(1..fin1), g_ExplicitWithFlags_Flags[q9] > 0]),
+ and([q13 <= x_ExplicitWithRepetition_Flag ->
+ sum([toInt(g_ExplicitWithFlags_Values[q14] = x_ExplicitWithRepetition_Values[q13]) *
+ catchUndef(g_ExplicitWithFlags_Flags[q14], 0)
+ | q14 : int(1..fin1)])
+ =
+ sum([toInt(q16 <= x_ExplicitWithRepetition_Flag) *
+ catchUndef(toInt(x_ExplicitWithRepetition_Values[q16] = x_ExplicitWithRepetition_Values[q13]), 0)
+ | q16 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitWithRepetition_Flag ->
+ x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q2] = 1 | q2 : int(1..4)]),
+ and([q4 <= x_ExplicitWithRepetition_Flag ->
+ sum([toInt(q7 <= x_ExplicitWithRepetition_Flag) *
+ catchUndef(toInt(x_ExplicitWithRepetition_Values[q7] = x_ExplicitWithRepetition_Values[q4]), 0)
+ | q7 : int(1..4)])
+ <= 2
+ | q4 : int(1..4)]),
+ x_ExplicitWithRepetition_Flag <= 4
+
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_3-param1-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_2_3-param1-solution000001.solution
new file mode 100644
index 0000000000..3fc3fafe52
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_3-param1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset()
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_3-param1.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_2_3-param1.eprime-param
new file mode 100644
index 0000000000..62e729a0fe
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_3-param1.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be ([] : `matrix indexed by [int()] of bool`)
+letting g_ExplicitWithFlags_Values be ([] : `matrix indexed by [int()] of int`)
+letting fin1 be 0
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_3-param4-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_2_3-param4-solution000001.solution
new file mode 100644
index 0000000000..43c40d1c6b
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_3-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(1, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_3-param4.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_2_3-param4.eprime-param
new file mode 100644
index 0000000000..f1da505f58
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_3-param4.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [1, 1; int(1..2)]
+letting g_ExplicitWithFlags_Values be [1, 2; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_3-param7-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_2_3-param7-solution000001.solution
new file mode 100644
index 0000000000..06be1e3b32
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_3-param7-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(2, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_3-param7.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_2_3-param7.eprime-param
new file mode 100644
index 0000000000..468cfba281
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_3-param7.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [2, 0; int(1..2)]
+letting g_ExplicitWithFlags_Values be [2, 1; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_2_3.eprime b/tests/exhaustive/basic/mset01_param/expected/model_2_3.eprime
new file mode 100644
index 0000000000..333e369e13
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_2_3.eprime
@@ -0,0 +1,51 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given g_ExplicitWithFlags_Flags: matrix indexed by [int(1..fin1)] of int(0..2)
+given g_ExplicitWithFlags_Values: matrix indexed by [int(1..fin1)] of int(1..2)
+find x_ExplicitWithRepetition_Flag: int(0..4)
+find x_ExplicitWithRepetition_Values: matrix indexed by [int(1..4)] of int(1..2)
+find x_MOccurrence: matrix indexed by [int(1..2)] of int(0..2)
+branching on [x_MOccurrence, x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values]
+such that
+ and([sum([g_ExplicitWithFlags_Flags[q18]
+ | q18 : int(1..fin1), g_ExplicitWithFlags_Values[q18] = g_ExplicitWithFlags_Values[q17]])
+ =
+ sum([toInt(q20 <= x_ExplicitWithRepetition_Flag) *
+ catchUndef(toInt(x_ExplicitWithRepetition_Values[q20] = g_ExplicitWithFlags_Values[q17]), 0)
+ | q20 : int(1..4)])
+ | q17 : int(1..fin1), g_ExplicitWithFlags_Flags[q17] > 0]),
+ and([q21 <= x_ExplicitWithRepetition_Flag ->
+ sum([toInt(g_ExplicitWithFlags_Values[q22] = x_ExplicitWithRepetition_Values[q21]) *
+ catchUndef(g_ExplicitWithFlags_Flags[q22], 0)
+ | q22 : int(1..fin1)])
+ =
+ sum([toInt(q24 <= x_ExplicitWithRepetition_Flag) *
+ catchUndef(toInt(x_ExplicitWithRepetition_Values[q24] = x_ExplicitWithRepetition_Values[q21]), 0)
+ | q24 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitWithRepetition_Flag ->
+ x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q2] = 1 | q2 : int(1..4)]),
+ and([q4 <= x_ExplicitWithRepetition_Flag ->
+ sum([toInt(q7 <= x_ExplicitWithRepetition_Flag) *
+ catchUndef(toInt(x_ExplicitWithRepetition_Values[q7] = x_ExplicitWithRepetition_Values[q4]), 0)
+ | q7 : int(1..4)])
+ <= 2
+ | q4 : int(1..4)]),
+ x_ExplicitWithRepetition_Flag <= 4,
+ sum([x_MOccurrence[q8] | q8 : int(1..2)]) <= 4,
+ and([x_MOccurrence[q10] > 0 ->
+ x_MOccurrence[q10] =
+ sum([toInt(q12 <= x_ExplicitWithRepetition_Flag) *
+ catchUndef(toInt(x_ExplicitWithRepetition_Values[q12] = q10), 0)
+ | q12 : int(1..4)])
+ | q10 : int(1..2)]),
+ and([q13 <= x_ExplicitWithRepetition_Flag ->
+ x_MOccurrence[x_ExplicitWithRepetition_Values[q13]] =
+ sum([toInt(q15 <= x_ExplicitWithRepetition_Flag) *
+ catchUndef(toInt(x_ExplicitWithRepetition_Values[q15] = x_ExplicitWithRepetition_Values[q13]), 0)
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_1-param1-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_3_1-param1-solution000001.solution
new file mode 100644
index 0000000000..3fc3fafe52
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_1-param1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset()
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_1-param1.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_3_1-param1.eprime-param
new file mode 100644
index 0000000000..62e729a0fe
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_1-param1.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be ([] : `matrix indexed by [int()] of bool`)
+letting g_ExplicitWithFlags_Values be ([] : `matrix indexed by [int()] of int`)
+letting fin1 be 0
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_1-param4-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_3_1-param4-solution000001.solution
new file mode 100644
index 0000000000..43c40d1c6b
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_1-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(1, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_1-param4.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_3_1-param4.eprime-param
new file mode 100644
index 0000000000..f1da505f58
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_1-param4.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [1, 1; int(1..2)]
+letting g_ExplicitWithFlags_Values be [1, 2; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_1-param7-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_3_1-param7-solution000001.solution
new file mode 100644
index 0000000000..06be1e3b32
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_1-param7-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(2, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_1-param7.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_3_1-param7.eprime-param
new file mode 100644
index 0000000000..468cfba281
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_1-param7.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [2, 0; int(1..2)]
+letting g_ExplicitWithFlags_Values be [2, 1; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_2-param1-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_3_2-param1-solution000001.solution
new file mode 100644
index 0000000000..3fc3fafe52
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_2-param1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset()
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_2-param1.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_3_2-param1.eprime-param
new file mode 100644
index 0000000000..62e729a0fe
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_2-param1.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be ([] : `matrix indexed by [int()] of bool`)
+letting g_ExplicitWithFlags_Values be ([] : `matrix indexed by [int()] of int`)
+letting fin1 be 0
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_2-param4-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_3_2-param4-solution000001.solution
new file mode 100644
index 0000000000..43c40d1c6b
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_2-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(1, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_2-param4.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_3_2-param4.eprime-param
new file mode 100644
index 0000000000..f1da505f58
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_2-param4.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [1, 1; int(1..2)]
+letting g_ExplicitWithFlags_Values be [1, 2; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_2-param7-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_3_2-param7-solution000001.solution
new file mode 100644
index 0000000000..06be1e3b32
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_2-param7-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(2, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_2-param7.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_3_2-param7.eprime-param
new file mode 100644
index 0000000000..468cfba281
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_2-param7.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [2, 0; int(1..2)]
+letting g_ExplicitWithFlags_Values be [2, 1; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_2.eprime b/tests/exhaustive/basic/mset01_param/expected/model_3_2.eprime
new file mode 100644
index 0000000000..40b69ccf3d
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_2.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given g_ExplicitWithFlags_Flags: matrix indexed by [int(1..fin1)] of int(0..2)
+given g_ExplicitWithFlags_Values: matrix indexed by [int(1..fin1)] of int(1..2)
+find x_MOccurrence: matrix indexed by [int(1..2)] of int(0..2)
+find x_ExplicitWithRepetition_Flag: int(0..4)
+find x_ExplicitWithRepetition_Values: matrix indexed by [int(1..4)] of int(1..2)
+branching on [x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values, x_MOccurrence]
+such that
+ and([sum([g_ExplicitWithFlags_Flags[q18]
+ | q18 : int(1..fin1), g_ExplicitWithFlags_Values[q18] = g_ExplicitWithFlags_Values[q17]])
+ = x_MOccurrence[g_ExplicitWithFlags_Values[q17]]
+ | q17 : int(1..fin1), g_ExplicitWithFlags_Flags[q17] > 0]),
+ and([x_MOccurrence[q19] > 0 ->
+ sum([g_ExplicitWithFlags_Flags[q20] | q20 : int(1..fin1), g_ExplicitWithFlags_Values[q20] = q19]) =
+ x_MOccurrence[q19]
+ | q19 : int(1..2)]),
+ sum([x_MOccurrence[q1] | q1 : int(1..2)]) <= 4,
+ and([q2 + 1 <= x_ExplicitWithRepetition_Flag ->
+ x_ExplicitWithRepetition_Values[q2] <= x_ExplicitWithRepetition_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q3] = 1 | q3 : int(1..4)]),
+ and([q5 <= x_ExplicitWithRepetition_Flag ->
+ sum([toInt(q8 <= x_ExplicitWithRepetition_Flag) *
+ catchUndef(toInt(x_ExplicitWithRepetition_Values[q8] = x_ExplicitWithRepetition_Values[q5]), 0)
+ | q8 : int(1..4)])
+ <= 2
+ | q5 : int(1..4)]),
+ x_ExplicitWithRepetition_Flag <= 4,
+ and([q10 <= x_ExplicitWithRepetition_Flag ->
+ sum([toInt(q12 <= x_ExplicitWithRepetition_Flag) *
+ catchUndef(toInt(x_ExplicitWithRepetition_Values[q12] = x_ExplicitWithRepetition_Values[q10]), 0)
+ | q12 : int(1..4)])
+ = x_MOccurrence[x_ExplicitWithRepetition_Values[q10]]
+ | q10 : int(1..4)]),
+ and([x_MOccurrence[q13] > 0 ->
+ sum([toInt(q15 <= x_ExplicitWithRepetition_Flag) *
+ catchUndef(toInt(x_ExplicitWithRepetition_Values[q15] = q13), 0)
+ | q15 : int(1..4)])
+ = x_MOccurrence[q13]
+ | q13 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_3-param1-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_3_3-param1-solution000001.solution
new file mode 100644
index 0000000000..3fc3fafe52
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_3-param1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset()
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_3-param1.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_3_3-param1.eprime-param
new file mode 100644
index 0000000000..62e729a0fe
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_3-param1.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be ([] : `matrix indexed by [int()] of bool`)
+letting g_ExplicitWithFlags_Values be ([] : `matrix indexed by [int()] of int`)
+letting fin1 be 0
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_3-param4-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_3_3-param4-solution000001.solution
new file mode 100644
index 0000000000..43c40d1c6b
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_3-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(1, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_3-param4.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_3_3-param4.eprime-param
new file mode 100644
index 0000000000..f1da505f58
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_3-param4.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [1, 1; int(1..2)]
+letting g_ExplicitWithFlags_Values be [1, 2; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_3-param7-solution000001.solution b/tests/exhaustive/basic/mset01_param/expected/model_3_3-param7-solution000001.solution
new file mode 100644
index 0000000000..06be1e3b32
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_3-param7-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be mset(2, 2)
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_3-param7.eprime-param b/tests/exhaustive/basic/mset01_param/expected/model_3_3-param7.eprime-param
new file mode 100644
index 0000000000..468cfba281
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_3-param7.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting g_ExplicitWithFlags_Flags be [2, 0; int(1..2)]
+letting g_ExplicitWithFlags_Values be [2, 1; int(1..2)]
+letting fin1 be 2
diff --git a/tests/exhaustive/basic/mset01_param/expected/model_3_3.eprime b/tests/exhaustive/basic/mset01_param/expected/model_3_3.eprime
new file mode 100644
index 0000000000..c7c31d20ea
--- /dev/null
+++ b/tests/exhaustive/basic/mset01_param/expected/model_3_3.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given g_ExplicitWithFlags_Flags: matrix indexed by [int(1..fin1)] of int(0..2)
+given g_ExplicitWithFlags_Values: matrix indexed by [int(1..fin1)] of int(1..2)
+find x_MOccurrence: matrix indexed by [int(1..2)] of int(0..2)
+branching on [x_MOccurrence]
+such that
+ and([sum([g_ExplicitWithFlags_Flags[q4]
+ | q4 : int(1..fin1), g_ExplicitWithFlags_Values[q4] = g_ExplicitWithFlags_Values[q3]])
+ = x_MOccurrence[g_ExplicitWithFlags_Values[q3]]
+ | q3 : int(1..fin1), g_ExplicitWithFlags_Flags[q3] > 0]),
+ and([x_MOccurrence[q5] > 0 ->
+ sum([g_ExplicitWithFlags_Flags[q6] | q6 : int(1..fin1), g_ExplicitWithFlags_Values[q6] = q5]) =
+ x_MOccurrence[q5]
+ | q5 : int(1..2)]),
+ sum([x_MOccurrence[q1] | q1 : int(1..2)]) <= 4
+
diff --git a/tests/exhaustive/basic/mset02/expected/model_1.eprime b/tests/exhaustive/basic/mset02/expected/model_1.eprime
index 39f9ff47d1..ff48e4e65b 100644
--- a/tests/exhaustive/basic/mset02/expected/model_1.eprime
+++ b/tests/exhaustive/basic/mset02/expected/model_1.eprime
@@ -4,8 +4,7 @@ find x_ExplicitWithFlags_Flags: matrix indexed by [int(1..4)] of int(0..4)
find x_ExplicitWithFlags_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithFlags_Flags, x_ExplicitWithFlags_Values]
such that
- and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q1]; int(1)] 0 -> x_ExplicitWithFlags_Values[q1] < x_ExplicitWithFlags_Values[q1 + 1]
| q1 : int(1..3)]),
and([x_ExplicitWithFlags_Flags[q2] = 0 -> x_ExplicitWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q3 + 1] > 0 -> x_ExplicitWithFlags_Flags[q3] > 0 | q3 : int(1..3)]),
diff --git a/tests/exhaustive/basic/mset02/expected/model_2.eprime b/tests/exhaustive/basic/mset02/expected/model_2.eprime
index 239b853358..cc0afc5588 100644
--- a/tests/exhaustive/basic/mset02/expected/model_2.eprime
+++ b/tests/exhaustive/basic/mset02/expected/model_2.eprime
@@ -5,7 +5,7 @@ find x_ExplicitWithRepetition_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values]
such that
and([q1 + 1 <= x_ExplicitWithRepetition_Flag ->
- [x_ExplicitWithRepetition_Values[q1]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q1 + 1]; int(1)]
+ x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1]
| q1 : int(1..3)]),
and([q2 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q2] = 1 | q2 : int(1..4)]),
x_ExplicitWithRepetition_Flag <= 4
diff --git a/tests/exhaustive/basic/mset03_1/expected/model_1.eprime b/tests/exhaustive/basic/mset03_1/expected/model_1.eprime
index 4c87dce0a5..c1f542f07a 100644
--- a/tests/exhaustive/basic/mset03_1/expected/model_1.eprime
+++ b/tests/exhaustive/basic/mset03_1/expected/model_1.eprime
@@ -4,8 +4,7 @@ find x_ExplicitWithFlags_Flags: matrix indexed by [int(1..4)] of int(0..2)
find x_ExplicitWithFlags_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithFlags_Flags, x_ExplicitWithFlags_Values]
such that
- and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q1]; int(1)] 0 -> x_ExplicitWithFlags_Values[q1] < x_ExplicitWithFlags_Values[q1 + 1]
| q1 : int(1..3)]),
and([x_ExplicitWithFlags_Flags[q2] = 0 -> x_ExplicitWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q3 + 1] > 0 -> x_ExplicitWithFlags_Flags[q3] > 0 | q3 : int(1..3)])
diff --git a/tests/exhaustive/basic/mset03_1/expected/model_2.eprime b/tests/exhaustive/basic/mset03_1/expected/model_2.eprime
index 31ae843509..44cf254dca 100644
--- a/tests/exhaustive/basic/mset03_1/expected/model_2.eprime
+++ b/tests/exhaustive/basic/mset03_1/expected/model_2.eprime
@@ -5,7 +5,7 @@ find x_ExplicitWithRepetition_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values]
such that
and([q1 + 1 <= x_ExplicitWithRepetition_Flag ->
- [x_ExplicitWithRepetition_Values[q1]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q1 + 1]; int(1)]
+ x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1]
| q1 : int(1..3)]),
and([q2 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q2] = 1 | q2 : int(1..4)]),
and([q4 <= x_ExplicitWithRepetition_Flag ->
diff --git a/tests/exhaustive/basic/mset03_2/expected/model_1.eprime b/tests/exhaustive/basic/mset03_2/expected/model_1.eprime
index 246464053e..53f85ab769 100644
--- a/tests/exhaustive/basic/mset03_2/expected/model_1.eprime
+++ b/tests/exhaustive/basic/mset03_2/expected/model_1.eprime
@@ -4,8 +4,7 @@ find x_ExplicitWithFlags_Flags: matrix indexed by [int(1..6)] of int(0..2)
find x_ExplicitWithFlags_Values: matrix indexed by [int(1..6)] of int(1..3)
branching on [x_ExplicitWithFlags_Flags, x_ExplicitWithFlags_Values]
such that
- and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q1]; int(1)] 0 -> x_ExplicitWithFlags_Values[q1] < x_ExplicitWithFlags_Values[q1 + 1]
| q1 : int(1..5)]),
and([x_ExplicitWithFlags_Flags[q2] = 0 -> x_ExplicitWithFlags_Values[q2] = 1 | q2 : int(1..6)]),
and([x_ExplicitWithFlags_Flags[q3 + 1] > 0 -> x_ExplicitWithFlags_Flags[q3] > 0 | q3 : int(1..5)])
diff --git a/tests/exhaustive/basic/mset03_2/expected/model_2.eprime b/tests/exhaustive/basic/mset03_2/expected/model_2.eprime
index bc7fd246d0..55d05e3479 100644
--- a/tests/exhaustive/basic/mset03_2/expected/model_2.eprime
+++ b/tests/exhaustive/basic/mset03_2/expected/model_2.eprime
@@ -5,7 +5,7 @@ find x_ExplicitWithRepetition_Values: matrix indexed by [int(1..6)] of int(1..3)
branching on [x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values]
such that
and([q1 + 1 <= x_ExplicitWithRepetition_Flag ->
- [x_ExplicitWithRepetition_Values[q1]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q1 + 1]; int(1)]
+ x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1]
| q1 : int(1..5)]),
and([q2 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q2] = 1 | q2 : int(1..6)]),
and([q4 <= x_ExplicitWithRepetition_Flag ->
diff --git a/tests/exhaustive/basic/mset04/expected/model_1.eprime b/tests/exhaustive/basic/mset04/expected/model_1.eprime
index 20b79160e3..d76b344480 100644
--- a/tests/exhaustive/basic/mset04/expected/model_1.eprime
+++ b/tests/exhaustive/basic/mset04/expected/model_1.eprime
@@ -4,8 +4,7 @@ find x_ExplicitWithFlags_Flags: matrix indexed by [int(1..4)] of int(0..2)
find x_ExplicitWithFlags_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithFlags_Flags, x_ExplicitWithFlags_Values]
such that
- and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q1]; int(1)] 0 -> x_ExplicitWithFlags_Values[q1] < x_ExplicitWithFlags_Values[q1 + 1]
| q1 : int(1..3)]),
and([x_ExplicitWithFlags_Flags[q2] = 0 -> x_ExplicitWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q3 + 1] > 0 -> x_ExplicitWithFlags_Flags[q3] > 0 | q3 : int(1..3)]),
diff --git a/tests/exhaustive/basic/mset04/expected/model_2.eprime b/tests/exhaustive/basic/mset04/expected/model_2.eprime
index bd0c3f362b..3c59a6b6a4 100644
--- a/tests/exhaustive/basic/mset04/expected/model_2.eprime
+++ b/tests/exhaustive/basic/mset04/expected/model_2.eprime
@@ -4,8 +4,7 @@ find x_ExplicitWithRepetition_Flag: int(4)
find x_ExplicitWithRepetition_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values]
such that
- and([[x_ExplicitWithRepetition_Values[q1]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q1 + 1]; int(1)]
- | q1 : int(1..3), q1 + 1 <= 4]),
+ and([x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1] | q1 : int(1..3), q1 + 1 <= 4]),
and([sum([toInt(x_ExplicitWithRepetition_Values[q7] = x_ExplicitWithRepetition_Values[q4])
| q7 : int(1..4), q7 <= 4])
<= 2
diff --git a/tests/exhaustive/basic/mset05/expected/model_1.eprime b/tests/exhaustive/basic/mset05/expected/model_1.eprime
index 2f37ebea0e..3b3d46b40e 100644
--- a/tests/exhaustive/basic/mset05/expected/model_1.eprime
+++ b/tests/exhaustive/basic/mset05/expected/model_1.eprime
@@ -4,8 +4,7 @@ find x_ExplicitWithFlags_Flags: matrix indexed by [int(1..4)] of int(0..2)
find x_ExplicitWithFlags_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithFlags_Flags, x_ExplicitWithFlags_Values]
such that
- and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q1]; int(1)] 0 -> x_ExplicitWithFlags_Values[q1] < x_ExplicitWithFlags_Values[q1 + 1]
| q1 : int(1..3)]),
and([x_ExplicitWithFlags_Flags[q2] = 0 -> x_ExplicitWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q3 + 1] > 0 -> x_ExplicitWithFlags_Flags[q3] > 0 | q3 : int(1..3)]),
diff --git a/tests/exhaustive/basic/mset05/expected/model_2.eprime b/tests/exhaustive/basic/mset05/expected/model_2.eprime
index 1ecab17108..f1a0aec2a6 100644
--- a/tests/exhaustive/basic/mset05/expected/model_2.eprime
+++ b/tests/exhaustive/basic/mset05/expected/model_2.eprime
@@ -5,7 +5,7 @@ find x_ExplicitWithRepetition_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values]
such that
and([q1 + 1 <= x_ExplicitWithRepetition_Flag ->
- [x_ExplicitWithRepetition_Values[q1]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q1 + 1]; int(1)]
+ x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1]
| q1 : int(1..3)]),
and([q2 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q2] = 1 | q2 : int(1..4)]),
and([q4 <= x_ExplicitWithRepetition_Flag ->
diff --git a/tests/exhaustive/basic/mset06_1/expected/model_1.eprime b/tests/exhaustive/basic/mset06_1/expected/model_1.eprime
index 28efae43f7..a7ddaa7601 100644
--- a/tests/exhaustive/basic/mset06_1/expected/model_1.eprime
+++ b/tests/exhaustive/basic/mset06_1/expected/model_1.eprime
@@ -4,8 +4,7 @@ find x_ExplicitWithFlags_Flags: matrix indexed by [int(1..4)] of int(0..2)
find x_ExplicitWithFlags_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithFlags_Flags, x_ExplicitWithFlags_Values]
such that
- and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q1]; int(1)] 0 -> x_ExplicitWithFlags_Values[q1] < x_ExplicitWithFlags_Values[q1 + 1]
| q1 : int(1..3)]),
and([x_ExplicitWithFlags_Flags[q2] = 0 -> x_ExplicitWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
and([x_ExplicitWithFlags_Flags[q3 + 1] > 0 -> x_ExplicitWithFlags_Flags[q3] > 0 | q3 : int(1..3)]),
diff --git a/tests/exhaustive/basic/mset06_1/expected/model_2.eprime b/tests/exhaustive/basic/mset06_1/expected/model_2.eprime
index ab84402fe5..9cb4a4bdb7 100644
--- a/tests/exhaustive/basic/mset06_1/expected/model_2.eprime
+++ b/tests/exhaustive/basic/mset06_1/expected/model_2.eprime
@@ -5,7 +5,7 @@ find x_ExplicitWithRepetition_Values: matrix indexed by [int(1..4)] of int(1..2)
branching on [x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values]
such that
and([q1 + 1 <= x_ExplicitWithRepetition_Flag ->
- [x_ExplicitWithRepetition_Values[q1]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q1 + 1]; int(1)]
+ x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1]
| q1 : int(1..3)]),
and([q2 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q2] = 1 | q2 : int(1..4)]),
and([sum([toInt(q9 <= x_ExplicitWithRepetition_Flag) *
diff --git a/tests/exhaustive/basic/mset06_2/expected/model_1.eprime b/tests/exhaustive/basic/mset06_2/expected/model_1.eprime
index 6cfb201e7a..6490528eb8 100644
--- a/tests/exhaustive/basic/mset06_2/expected/model_1.eprime
+++ b/tests/exhaustive/basic/mset06_2/expected/model_1.eprime
@@ -4,8 +4,7 @@ find x_ExplicitWithFlags_Flags: matrix indexed by [int(1..12)] of int(0..3)
find x_ExplicitWithFlags_Values: matrix indexed by [int(1..12)] of int(1..4)
branching on [x_ExplicitWithFlags_Flags, x_ExplicitWithFlags_Values]
such that
- and([x_ExplicitWithFlags_Flags[q1 + 1] > 0 ->
- [x_ExplicitWithFlags_Values[q1]; int(1)] 0 -> x_ExplicitWithFlags_Values[q1] < x_ExplicitWithFlags_Values[q1 + 1]
| q1 : int(1..11)]),
and([x_ExplicitWithFlags_Flags[q2] = 0 -> x_ExplicitWithFlags_Values[q2] = 1 | q2 : int(1..12)]),
and([x_ExplicitWithFlags_Flags[q3 + 1] > 0 -> x_ExplicitWithFlags_Flags[q3] > 0 | q3 : int(1..11)]),
diff --git a/tests/exhaustive/basic/mset06_2/expected/model_2.eprime b/tests/exhaustive/basic/mset06_2/expected/model_2.eprime
index ecf21db30b..1f852a8511 100644
--- a/tests/exhaustive/basic/mset06_2/expected/model_2.eprime
+++ b/tests/exhaustive/basic/mset06_2/expected/model_2.eprime
@@ -5,7 +5,7 @@ find x_ExplicitWithRepetition_Values: matrix indexed by [int(1..12)] of int(1..4
branching on [x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values]
such that
and([q1 + 1 <= x_ExplicitWithRepetition_Flag ->
- [x_ExplicitWithRepetition_Values[q1]; int(1)] <=lex [x_ExplicitWithRepetition_Values[q1 + 1]; int(1)]
+ x_ExplicitWithRepetition_Values[q1] <= x_ExplicitWithRepetition_Values[q1 + 1]
| q1 : int(1..11)]),
and([q2 > x_ExplicitWithRepetition_Flag -> x_ExplicitWithRepetition_Values[q2] = 1 | q2 : int(1..12)]),
and([sum([toInt(q9 <= x_ExplicitWithRepetition_Flag) *
diff --git a/tests/exhaustive/basic/mset07/expected/model_1.eprime b/tests/exhaustive/basic/mset07/expected/model_1.eprime
index e625813276..74dbb62a4a 100644
--- a/tests/exhaustive/basic/mset07/expected/model_1.eprime
+++ b/tests/exhaustive/basic/mset07/expected/model_1.eprime
@@ -5,8 +5,7 @@ find x_ExplicitWithFlags_Flags: matrix indexed by [int(1..2)] of int(0..2)
find x_ExplicitWithFlags_Values: matrix indexed by [int(1..2)] of int(1..a)
branching on [x_ExplicitWithFlags_Flags, x_ExplicitWithFlags_Values]
such that
- x_ExplicitWithFlags_Flags[2] > 0 ->
- [x_ExplicitWithFlags_Values[1]; int(1)] 0 -> x_ExplicitWithFlags_Values[1] < x_ExplicitWithFlags_Values[2],
and([x_ExplicitWithFlags_Flags[q2] = 0 -> x_ExplicitWithFlags_Values[q2] = 1 | q2 : int(1..2)]),
x_ExplicitWithFlags_Flags[2] > 0 -> x_ExplicitWithFlags_Flags[1] > 0,
2 = sum([x_ExplicitWithFlags_Flags[q6] | q6 : int(1..2)])
diff --git a/tests/exhaustive/basic/mset07/expected/model_2.eprime b/tests/exhaustive/basic/mset07/expected/model_2.eprime
index c2b0c8db50..0c20d756ee 100644
--- a/tests/exhaustive/basic/mset07/expected/model_2.eprime
+++ b/tests/exhaustive/basic/mset07/expected/model_2.eprime
@@ -4,5 +4,5 @@ given a: int
find x_ExplicitWithRepetition_Flag: int(2)
find x_ExplicitWithRepetition_Values: matrix indexed by [int(1..2)] of int(1..a)
branching on [x_ExplicitWithRepetition_Flag, x_ExplicitWithRepetition_Values]
-such that [x_ExplicitWithRepetition_Values[1]; int(1)] <=lex [x_ExplicitWithRepetition_Values[2]; int(1)]
+such that x_ExplicitWithRepetition_Values[1] <= x_ExplicitWithRepetition_Values[2]
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_1_1-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_1_1-solution000001.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_1_1-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_1_1-solution000002.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_1_1.eprime b/tests/exhaustive/basic/name-reuse/expected/model_1_1.eprime
new file mode 100644
index 0000000000..225fffebc9
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_1_1.eprime
@@ -0,0 +1,13 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find conjure_aux2: int(1..4)
+branching on [conjure_aux1, s_Occurrence]
+such that
+ and([s_Occurrence[q2] -> q2 >= conjure_aux2 | q2 : int(1..4)]),
+ sum([toInt(s_Occurrence[q2]) | q2 : int(1..4)]) > 0 -> or([s_Occurrence[q2] /\ q2 = conjure_aux2 | q2 : int(1..4)]),
+ sum([toInt(s_Occurrence[q2]) | q2 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(s_Occurrence[q2]) | q2 : int(1..4)]) > 0
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_1_2-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_1_2-solution000001.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_1_2-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_1_2-solution000002.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_1_2.eprime b/tests/exhaustive/basic/name-reuse/expected/model_1_2.eprime
new file mode 100644
index 0000000000..1aaa5e2e02
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_1_2.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find conjure_aux2: int(1..4)
+branching on [conjure_aux1, s_ExplicitVarSizeWithDummy, s_Occurrence]
+such that
+ and([s_Occurrence[q11] -> q11 >= conjure_aux2 | q11 : int(1..4)]),
+ sum([toInt(s_Occurrence[q11]) | q11 : int(1..4)]) > 0 ->
+ or([s_Occurrence[q11] /\ q11 = conjure_aux2 | q11 : int(1..4)]),
+ sum([toInt(s_Occurrence[q11]) | q11 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(s_Occurrence[q11]) | q11 : int(1..4)]) > 0,
+ and([s_ExplicitVarSizeWithDummy[q2] < s_ExplicitVarSizeWithDummy[q2 + 1] \/ s_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q3] = 5 -> s_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q7] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([s_Occurrence[q8] ->
+ or([s_ExplicitVarSizeWithDummy[q10] != 5 /\ s_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_1_3-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_1_3-solution000001.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_1_3-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_1_3-solution000002.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_1_3.eprime b/tests/exhaustive/basic/name-reuse/expected/model_1_3.eprime
new file mode 100644
index 0000000000..90ed8b70f3
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_1_3.eprime
@@ -0,0 +1,25 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find conjure_aux2: int(1..4)
+branching on [conjure_aux1, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_Occurrence]
+such that
+ and([s_Occurrence[q10] -> q10 >= conjure_aux2 | q10 : int(1..4)]),
+ sum([toInt(s_Occurrence[q10]) | q10 : int(1..4)]) > 0 ->
+ or([s_Occurrence[q10] /\ q10 = conjure_aux2 | q10 : int(1..4)]),
+ sum([toInt(s_Occurrence[q10]) | q10 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(s_Occurrence[q10]) | q10 : int(1..4)]) > 0,
+ and([q2 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q2] < s_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ and([q6 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([s_Occurrence[q7] ->
+ or([q9 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_1_4-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_1_4-solution000001.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_1_4-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_1_4-solution000002.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_1_4.eprime b/tests/exhaustive/basic/name-reuse/expected/model_1_4.eprime
new file mode 100644
index 0000000000..f0a2271016
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_1_4.eprime
@@ -0,0 +1,25 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find conjure_aux2: int(1..4)
+branching on [conjure_aux1, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_Occurrence]
+such that
+ and([s_Occurrence[q12] -> q12 >= conjure_aux2 | q12 : int(1..4)]),
+ sum([toInt(s_Occurrence[q12]) | q12 : int(1..4)]) > 0 ->
+ or([s_Occurrence[q12] /\ q12 = conjure_aux2 | q12 : int(1..4)]),
+ sum([toInt(s_Occurrence[q12]) | q12 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(s_Occurrence[q12]) | q12 : int(1..4)]) > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q2] < s_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3] = false -> s_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q8] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([s_Occurrence[q9] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q11] /\ s_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_2_1-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_2_1-solution000001.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_2_1-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_2_1-solution000002.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_2_1.eprime b/tests/exhaustive/basic/name-reuse/expected/model_2_1.eprime
new file mode 100644
index 0000000000..7abd51269f
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_2_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find conjure_aux2: int(1..5)
+branching on [conjure_aux1, s_Occurrence, s_ExplicitVarSizeWithDummy]
+such that
+ and([s_ExplicitVarSizeWithDummy[q7] != 5 -> s_ExplicitVarSizeWithDummy[q7] >= conjure_aux2 | q7 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithDummy[q7] != 5) | q7 : int(1..4)]) > 0 ->
+ or([s_ExplicitVarSizeWithDummy[q7] != 5 /\ s_ExplicitVarSizeWithDummy[q7] = conjure_aux2 | q7 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithDummy[q7] != 5) | q7 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(s_ExplicitVarSizeWithDummy[q7] != 5) | q7 : int(1..4)]) > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([s_Occurrence[q8] ->
+ or([s_ExplicitVarSizeWithDummy[q10] != 5 /\ s_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q12] != 5 -> s_Occurrence[s_ExplicitVarSizeWithDummy[q12]] | q12 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_2_2-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_2_2-solution000001.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_2_2-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_2_2-solution000002.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_2_2.eprime b/tests/exhaustive/basic/name-reuse/expected/model_2_2.eprime
new file mode 100644
index 0000000000..706b338fed
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_2_2.eprime
@@ -0,0 +1,17 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find conjure_aux2: int(1..5)
+branching on [conjure_aux1, s_ExplicitVarSizeWithDummy]
+such that
+ and([s_ExplicitVarSizeWithDummy[q6] != 5 -> s_ExplicitVarSizeWithDummy[q6] >= conjure_aux2 | q6 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) > 0 ->
+ or([s_ExplicitVarSizeWithDummy[q6] != 5 /\ s_ExplicitVarSizeWithDummy[q6] = conjure_aux2 | q6 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(s_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_2_3-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_2_3-solution000001.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_2_3-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_2_3-solution000002.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_2_3.eprime b/tests/exhaustive/basic/name-reuse/expected/model_2_3.eprime
new file mode 100644
index 0000000000..91c6277604
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_2_3.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find conjure_aux2: int(1..5)
+branching on
+ [conjure_aux1, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values, s_ExplicitVarSizeWithDummy]
+such that
+ and([s_ExplicitVarSizeWithDummy[q17] != 5 -> s_ExplicitVarSizeWithDummy[q17] >= conjure_aux2 | q17 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithDummy[q17] != 5) | q17 : int(1..4)]) > 0 ->
+ or([s_ExplicitVarSizeWithDummy[q17] != 5 /\ s_ExplicitVarSizeWithDummy[q17] = conjure_aux2 | q17 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithDummy[q17] != 5) | q17 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(s_ExplicitVarSizeWithDummy[q17] != 5) | q17 : int(1..4)]) > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([q5 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q5] < s_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ and([q9 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q11] != 5 /\
+ s_ExplicitVarSizeWithDummy[q11] = s_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q15] = s_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_2_4-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_2_4-solution000001.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_2_4-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_2_4-solution000002.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_2_4.eprime b/tests/exhaustive/basic/name-reuse/expected/model_2_4.eprime
new file mode 100644
index 0000000000..a42a0dabce
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_2_4.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find conjure_aux2: int(1..5)
+branching on
+ [conjure_aux1, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values, s_ExplicitVarSizeWithDummy]
+such that
+ and([s_ExplicitVarSizeWithDummy[q19] != 5 -> s_ExplicitVarSizeWithDummy[q19] >= conjure_aux2 | q19 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) > 0 ->
+ or([s_ExplicitVarSizeWithDummy[q19] != 5 /\ s_ExplicitVarSizeWithDummy[q19] = conjure_aux2 | q19 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(s_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) > 0,
+ and([s_ExplicitVarSizeWithDummy[q1] < s_ExplicitVarSizeWithDummy[q1 + 1] \/ s_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q2] = 5 -> s_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q5] < s_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q6] = false -> s_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([s_ExplicitVarSizeWithDummy[q13] != 5 /\
+ s_ExplicitVarSizeWithDummy[q13] = s_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q17] /\
+ s_ExplicitVarSizeWithFlags_Values[q17] = s_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_3_1-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_3_1-solution000001.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_3_1-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_3_1-solution000002.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_3_1.eprime b/tests/exhaustive/basic/name-reuse/expected/model_3_1.eprime
new file mode 100644
index 0000000000..0f6a2844e2
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_3_1.eprime
@@ -0,0 +1,27 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find conjure_aux2: int(1..4)
+branching on [conjure_aux1, s_Occurrence, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q6 <= s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q6] >= conjure_aux2
+ | q6 : int(1..4)]),
+ sum([toInt(q6 <= s_ExplicitVarSizeWithMarker_Marker) | q6 : int(1..4)]) > 0 ->
+ or([q6 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q6] = conjure_aux2
+ | q6 : int(1..4)]),
+ sum([toInt(q6 <= s_ExplicitVarSizeWithMarker_Marker) | q6 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(q6 <= s_ExplicitVarSizeWithMarker_Marker) | q6 : int(1..4)]) > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_Occurrence[q7] ->
+ or([q9 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([q11 <= s_ExplicitVarSizeWithMarker_Marker -> s_Occurrence[s_ExplicitVarSizeWithMarker_Values[q11]]
+ | q11 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_3_2-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_3_2-solution000001.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_3_2-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_3_2-solution000002.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_3_2.eprime b/tests/exhaustive/basic/name-reuse/expected/model_3_2.eprime
new file mode 100644
index 0000000000..ae3b9a8a9d
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_3_2.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find conjure_aux2: int(1..4)
+branching on
+ [conjure_aux1, s_ExplicitVarSizeWithDummy, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q17 <= s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q17] >= conjure_aux2
+ | q17 : int(1..4)]),
+ sum([toInt(q17 <= s_ExplicitVarSizeWithMarker_Marker) | q17 : int(1..4)]) > 0 ->
+ or([q17 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q17] = conjure_aux2
+ | q17 : int(1..4)]),
+ sum([toInt(q17 <= s_ExplicitVarSizeWithMarker_Marker) | q17 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(q17 <= s_ExplicitVarSizeWithMarker_Marker) | q17 : int(1..4)]) > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithDummy[q4] < s_ExplicitVarSizeWithDummy[q4 + 1] \/ s_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q5] = 5 -> s_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q11] = s_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithDummy[q15] != 5 /\
+ s_ExplicitVarSizeWithDummy[q15] = s_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_3_3-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_3_3-solution000001.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_3_3-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_3_3-solution000002.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_3_3.eprime b/tests/exhaustive/basic/name-reuse/expected/model_3_3.eprime
new file mode 100644
index 0000000000..ce6a4c6421
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_3_3.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find conjure_aux2: int(1..4)
+branching on [conjure_aux1, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q5 <= s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q5] >= conjure_aux2
+ | q5 : int(1..4)]),
+ sum([toInt(q5 <= s_ExplicitVarSizeWithMarker_Marker) | q5 : int(1..4)]) > 0 ->
+ or([q5 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q5] = conjure_aux2
+ | q5 : int(1..4)]),
+ sum([toInt(q5 <= s_ExplicitVarSizeWithMarker_Marker) | q5 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(q5 <= s_ExplicitVarSizeWithMarker_Marker) | q5 : int(1..4)]) > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_3_4-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_3_4-solution000001.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_3_4-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_3_4-solution000002.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_3_4.eprime b/tests/exhaustive/basic/name-reuse/expected/model_3_4.eprime
new file mode 100644
index 0000000000..a98bd89235
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_3_4.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find conjure_aux2: int(1..4)
+branching on
+ [conjure_aux1, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values,
+ s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q18 <= s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q18] >= conjure_aux2
+ | q18 : int(1..4)]),
+ sum([toInt(q18 <= s_ExplicitVarSizeWithMarker_Marker) | q18 : int(1..4)]) > 0 ->
+ or([q18 <= s_ExplicitVarSizeWithMarker_Marker /\ s_ExplicitVarSizeWithMarker_Values[q18] = conjure_aux2
+ | q18 : int(1..4)]),
+ sum([toInt(q18 <= s_ExplicitVarSizeWithMarker_Marker) | q18 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(q18 <= s_ExplicitVarSizeWithMarker_Marker) | q18 : int(1..4)]) > 0,
+ and([q1 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q1] < s_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q4] < s_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q5] = false -> s_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q12] = s_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q16] /\
+ s_ExplicitVarSizeWithFlags_Values[q16] = s_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_4_1-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_4_1-solution000001.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_4_1-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_4_1-solution000002.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_4_1.eprime b/tests/exhaustive/basic/name-reuse/expected/model_4_1.eprime
new file mode 100644
index 0000000000..598929e0aa
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_4_1.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_Occurrence: matrix indexed by [int(1..4)] of bool
+find conjure_aux2: int(1..4)
+branching on [conjure_aux1, s_Occurrence, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values]
+such that
+ and([s_ExplicitVarSizeWithFlags_Flags[q13] -> s_ExplicitVarSizeWithFlags_Values[q13] >= conjure_aux2
+ | q13 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]) > 0 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q13] /\ s_ExplicitVarSizeWithFlags_Values[q13] = conjure_aux2
+ | q13 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(s_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]) > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([s_Occurrence[q7] ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q9] /\ s_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q11] -> s_Occurrence[s_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_4_2-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_4_2-solution000001.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_4_2-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_4_2-solution000002.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_4_2.eprime b/tests/exhaustive/basic/name-reuse/expected/model_4_2.eprime
new file mode 100644
index 0000000000..41f3fb08cd
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_4_2.eprime
@@ -0,0 +1,37 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find conjure_aux2: int(1..4)
+branching on
+ [conjure_aux1, s_ExplicitVarSizeWithDummy, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values]
+such that
+ and([s_ExplicitVarSizeWithFlags_Flags[q19] -> s_ExplicitVarSizeWithFlags_Values[q19] >= conjure_aux2
+ | q19 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) > 0 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q19] /\ s_ExplicitVarSizeWithFlags_Values[q19] = conjure_aux2
+ | q19 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(s_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q6] < s_ExplicitVarSizeWithDummy[q6 + 1] \/ s_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q7] = 5 -> s_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ and([s_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q13] /\
+ s_ExplicitVarSizeWithFlags_Values[q13] = s_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([s_ExplicitVarSizeWithDummy[q17] != 5 /\
+ s_ExplicitVarSizeWithDummy[q17] = s_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_4_3-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_4_3-solution000001.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_4_3-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_4_3-solution000002.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_4_3.eprime b/tests/exhaustive/basic/name-reuse/expected/model_4_3.eprime
new file mode 100644
index 0000000000..36aeadc30e
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_4_3.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find s_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find s_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find conjure_aux2: int(1..4)
+branching on
+ [conjure_aux1, s_ExplicitVarSizeWithMarker_Marker, s_ExplicitVarSizeWithMarker_Values,
+ s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values]
+such that
+ and([s_ExplicitVarSizeWithFlags_Flags[q18] -> s_ExplicitVarSizeWithFlags_Values[q18] >= conjure_aux2
+ | q18 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithFlags_Flags[q18]) | q18 : int(1..4)]) > 0 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q18] /\ s_ExplicitVarSizeWithFlags_Values[q18] = conjure_aux2
+ | q18 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithFlags_Flags[q18]) | q18 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(s_ExplicitVarSizeWithFlags_Flags[q18]) | q18 : int(1..4)]) > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([q6 + 1 <= s_ExplicitVarSizeWithMarker_Marker ->
+ s_ExplicitVarSizeWithMarker_Values[q6] < s_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > s_ExplicitVarSizeWithMarker_Marker -> s_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ and([q10 <= s_ExplicitVarSizeWithMarker_Marker ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q12] /\
+ s_ExplicitVarSizeWithFlags_Values[q12] = s_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= s_ExplicitVarSizeWithMarker_Marker /\
+ s_ExplicitVarSizeWithMarker_Values[q16] = s_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_4_4-solution000001.solution b/tests/exhaustive/basic/name-reuse/expected/model_4_4-solution000001.solution
new file mode 100644
index 0000000000..d4f1477569
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_4_4-solution000002.solution b/tests/exhaustive/basic/name-reuse/expected/model_4_4-solution000002.solution
new file mode 100644
index 0000000000..ab91f42e83
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting conjure_aux1 be 1
+letting s be {3, 4}
diff --git a/tests/exhaustive/basic/name-reuse/expected/model_4_4.eprime b/tests/exhaustive/basic/name-reuse/expected/model_4_4.eprime
new file mode 100644
index 0000000000..1347ac40de
--- /dev/null
+++ b/tests/exhaustive/basic/name-reuse/expected/model_4_4.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find conjure_aux1: int(1)
+find s_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find s_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find conjure_aux2: int(1..4)
+branching on [conjure_aux1, s_ExplicitVarSizeWithFlags_Flags, s_ExplicitVarSizeWithFlags_Values]
+such that
+ and([s_ExplicitVarSizeWithFlags_Flags[q7] -> s_ExplicitVarSizeWithFlags_Values[q7] >= conjure_aux2
+ | q7 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) > 0 ->
+ or([s_ExplicitVarSizeWithFlags_Flags[q7] /\ s_ExplicitVarSizeWithFlags_Values[q7] = conjure_aux2 | q7 : int(1..4)]),
+ sum([toInt(s_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) = 0 -> conjure_aux2 = 1,
+ conjure_aux2 = 3,
+ sum([toInt(s_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) > 0,
+ and([s_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ s_ExplicitVarSizeWithFlags_Values[q1] < s_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q2] = false -> s_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([s_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> s_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/partition_01/expected/model_2.eprime b/tests/exhaustive/basic/partition_01/expected/model_2.eprime
index 950eec8576..b893233802 100644
--- a/tests/exhaustive/basic/partition_01/expected/model_2.eprime
+++ b/tests/exhaustive/basic/partition_01/expected/model_2.eprime
@@ -3,22 +3,8 @@ language ESSENCE' 1.0
find x_PartitionAsSet_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(3..8)] of bool
branching on [x_PartitionAsSet_ExplicitR2_Occurrence]
such that
-<<<<<<< HEAD
- allDiff([x_PartitionAsSet_ExplicitR3_Explicit[q12, q13] | q12 : int(1..2), q13 : int(1..3)]),
- [x_PartitionAsSet_ExplicitR3_Explicit[1, q9] | q9 : int(1..3)] >>>>>> master
- | q6 : int(1..2)])
- | q5 : int(1..2)])
-=======
and([1 = sum([toInt(x_PartitionAsSet_ExplicitR2_Occurrence[q11, q1]) | q11 : int(1..2)]) | q1 : int(3..8)]),
[-toInt(x_PartitionAsSet_ExplicitR2_Occurrence[1, q8]) | q8 : int(3..8)] >>>>>> main
diff --git a/tests/exhaustive/basic/partition_01/expected/model_2.eprime.orig b/tests/exhaustive/basic/partition_01/expected/model_2.eprime.orig
deleted file mode 100644
index 829c1f84a8..0000000000
--- a/tests/exhaustive/basic/partition_01/expected/model_2.eprime.orig
+++ /dev/null
@@ -1,17 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitR3_Explicit: matrix indexed by [int(1..2), int(1..3)] of int(3..8)
-branching on [x_PartitionAsSet_ExplicitR3_Explicit]
-such that
- allDiff([x_PartitionAsSet_ExplicitR3_Explicit[q12, q13] | q12 : int(1..2), q13 : int(1..3)]),
- [x_PartitionAsSet_ExplicitR3_Explicit[1, q9] | q9 : int(1..3)] >>>>>> master
- | q6 : int(1..2)])
- | q5 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/partition_02/expected/model_2.eprime b/tests/exhaustive/basic/partition_02/expected/model_2.eprime
index 121146805d..61cba91532 100644
--- a/tests/exhaustive/basic/partition_02/expected/model_2.eprime
+++ b/tests/exhaustive/basic/partition_02/expected/model_2.eprime
@@ -14,8 +14,8 @@ such that
| q26 : int(1..2)]),
[x_PartitionAsSet_ExplicitR6_ExplicitVarSizeWithDummy[1, q13] | q13 : int(1..6)]
- [x_PartitionAsSet_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q8]; int(1)] x_PartitionAsSet_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q7] ->
diff --git a/tests/exhaustive/basic/partition_03/expected/model_2.eprime b/tests/exhaustive/basic/partition_03/expected/model_2.eprime
index 5bf41d80ca..44120a17bf 100644
--- a/tests/exhaustive/basic/partition_03/expected/model_2.eprime
+++ b/tests/exhaustive/basic/partition_03/expected/model_2.eprime
@@ -18,17 +18,9 @@ such that
and([q5 > x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q5, q11] = false | q11 : int(1..6)])
| q5 : int(1..6)]),
-<<<<<<< HEAD
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR3_Marker <= 6,
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR3_Marker ->
- and([[x_PartitionAsSet_ExplicitVarSizeWithMarkerR3_Values_Explicit[q6, q7]; int(1)]
3 = sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q6, q7]) | q7 : int(1..6)])
->>>>>>> main
| q6 : int(1..6)]),
6 = sum([toInt(q12 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker) * 3 | q12 : int(1..6)])
diff --git a/tests/exhaustive/basic/partition_05_1/expected/model_1-solution000001.solution b/tests/exhaustive/basic/partition_05_1/expected/model_1-solution000001.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_05_1/expected/model_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_05_1/expected/model_1.eprime.orig b/tests/exhaustive/basic/partition_05_1/expected/model_1.eprime.orig
deleted file mode 100644
index ca7650b80c..0000000000
--- a/tests/exhaustive/basic/partition_05_1/expected/model_1.eprime.orig
+++ /dev/null
@@ -1,48 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence: matrix indexed by [int(1..4), int(1..4)] of bool
-branching on
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence]
-such that
- or([q27 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- (x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q27, 1] /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q27, 3])
- | q27 : int(1..4)]),
- and([q33 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- !(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q33, 1] /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q33, 2])
- | q33 : int(1..4)]),
- and([1 =
- sum([toInt(q16 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q16, q1])
- | q16 : int(1..4)])
- | q1 : int(1..4)]),
- and([q17 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- q18 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker
- ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q17, q19]) | q19 : int(1..4)]) =
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q18, q20]) | q20 : int(1..4)])
- | q17 : int(1..4), q18 : int(1..4)]),
- and([q21 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q21, q22]) | q22 : int(1..4)]) >= 1
- | q21 : int(1..4)]),
- and([q6 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- [-toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q6, q11]) | q11 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q7, q13] = false | q13 : int(1..4)])
- | q7 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker <= 4,
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q8, q9]) | q9 : int(1..4)]) <= 4
- | q8 : int(1..4)]),
- 4 =
- sum([toInt(q14 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker) *
- catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q14, q15])
- | q15 : int(1..4)]),
- 0)
- | q14 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_05_1/expected/model_2-solution000001.solution b/tests/exhaustive/basic/partition_05_1/expected/model_2-solution000001.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_05_1/expected/model_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_05_1/expected/model_2.eprime.orig b/tests/exhaustive/basic/partition_05_1/expected/model_2.eprime.orig
deleted file mode 100644
index ede6ceb3a9..0000000000
--- a/tests/exhaustive/basic/partition_05_1/expected/model_2.eprime.orig
+++ /dev/null
@@ -1,83 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..4), int(1..4)] of int(1..5)
-branching on
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy]
-such that
- or([q35 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- (or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q38] != 5 /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q38] = 1
- | q38 : int(1..4)])
- /\
- or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q40] != 5 /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q40] = 3
- | q40 : int(1..4)]))
- | q35 : int(1..4)]),
- and([q45 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- !(or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q45, q48] != 5 /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q45, q48] = 1
- | q48 : int(1..4)])
- /\
- or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q45, q50] != 5 /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q45, q50] = 2
- | q50 : int(1..4)]))
- | q45 : int(1..4)]),
- alldifferent_except([toInt(q20 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q20, q21] !=
- 5)
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy
- [q20, q21],
- 0)
- | q20 : int(1..4), q21 : int(1..4)],
- 0),
- and([q22 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- q23 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker
- ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q22, q25] != 5)
- | q25 : int(1..4)])
- =
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q23, q27] != 5)
- | q27 : int(1..4)])
- | q22 : int(1..4), q23 : int(1..4)]),
- and([q28 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q28, q30] != 5)
- | q30 : int(1..4)])
- >= 1
- | q28 : int(1..4)]),
- and([q6 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q14] | q14 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q7, q19] = 1
- | q19 : int(1..4)])
- | q7 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker <= 4,
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q8, q9] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q8, q9 + 1]
- \/ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q8, q9] = 5
- | q9 : int(1..3)])
- | q8 : int(1..4)]),
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q8, q10] = 5 ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q8, q10 + 1] = 5
- | q10 : int(1..3)])
- | q8 : int(1..4)]),
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q8, q11] != 5)
- | q11 : int(1..4)])
- <= 4
- | q8 : int(1..4)]),
- 4 =
- sum([toInt(q16 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker) *
- catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q16, q18] !=
- 5)
- | q18 : int(1..4)]),
- 0)
- | q16 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_05_1/expected/model_3-solution000001.solution b/tests/exhaustive/basic/partition_05_1/expected/model_3-solution000001.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_05_1/expected/model_3-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_05_1/expected/model_3.eprime.orig b/tests/exhaustive/basic/partition_05_1/expected/model_3.eprime.orig
deleted file mode 100644
index c6e82e3987..0000000000
--- a/tests/exhaustive/basic/partition_05_1/expected/model_3.eprime.orig
+++ /dev/null
@@ -1,86 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..4)] of int(1..4)
-branching on
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- or([q26 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (or([q29 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q26] /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q26, q29] = 1
- | q29 : int(1..4)])
- /\
- or([q31 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q26] /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q26, q31] = 3
- | q31 : int(1..4)]))
- | q26 : int(1..4)]),
- and([q36 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- !(or([q39 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q36] /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q36, q39] = 1
- | q39 : int(1..4)])
- /\
- or([q41 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q36] /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q36, q41] = 2
- | q41 : int(1..4)]))
- | q36 : int(1..4)]),
- alldifferent_except([toInt(q17 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q18 <=
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker
- [q17])
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q17, q18],
- 0)
- | q17 : int(1..4), q18 : int(1..4)],
- 0),
- and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q20 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker
- ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q19] =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q20]
- | q19 : int(1..4), q20 : int(1..4)]),
- and([q21 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q21] >= 1
- | q21 : int(1..4)]),
- and([q6 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6]; int(1)],
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q13]
- | q13 : int(1..4)];
- int(1..2)])
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q7] = 0 /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q7, q16] = 1
- | q16 : int(1..4)])
- | q7 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker <= 4,
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q9 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q8] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q8, q9] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q8, q9 + 1]
- | q9 : int(1..3)])
- | q8 : int(1..4)]),
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q10 > x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q8] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q8, q10] = 1
- | q10 : int(1..4)])
- | q8 : int(1..4)]),
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q8] <= 4
- | q8 : int(1..4)]),
- 4 =
- sum([toInt(q15 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker) *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q15], 0)
- | q15 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_05_1/expected/model_4-solution000001.solution b/tests/exhaustive/basic/partition_05_1/expected/model_4-solution000001.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_05_1/expected/model_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_05_1/expected/model_4.eprime.orig b/tests/exhaustive/basic/partition_05_1/expected/model_4.eprime.orig
deleted file mode 100644
index 667deed4b3..0000000000
--- a/tests/exhaustive/basic/partition_05_1/expected/model_4.eprime.orig
+++ /dev/null
@@ -1,40 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionOccurrence_NumParts: int(1..4)
-find x_PartitionOccurrence_WhichPart: matrix indexed by [int(1..4)] of int(1..4)
-find x_PartitionOccurrence_PartSizes: matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionOccurrence_FirstIndex: matrix indexed by [int(1..4)] of int(1..4)
-branching on
- [x_PartitionOccurrence_NumParts, x_PartitionOccurrence_WhichPart, x_PartitionOccurrence_PartSizes,
- x_PartitionOccurrence_FirstIndex]
-such that
- or([q15 <= x_PartitionOccurrence_NumParts /\
- (or([x_PartitionOccurrence_WhichPart[q19] = q15 /\ q19 = 1 | q19 : int(1..4)]) /\
- or([x_PartitionOccurrence_WhichPart[q21] = q15 /\ q21 = 3 | q21 : int(1..4)]))
- | q15 : int(1..4)]),
- and([q25 <= x_PartitionOccurrence_NumParts ->
- !(or([x_PartitionOccurrence_WhichPart[q29] = q25 /\ q29 = 1 | q29 : int(1..4)]) /\
- or([x_PartitionOccurrence_WhichPart[q31] = q25 /\ q31 = 2 | q31 : int(1..4)]))
- | q25 : int(1..4)]),
- and([q1 <= x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q1] <= 4 | q1 : int(1..4)]),
- and([q1 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q1] = 0 | q1 : int(1..4)]),
- x_PartitionOccurrence_NumParts <= 4,
- and([q2 <= x_PartitionOccurrence_NumParts -> or([x_PartitionOccurrence_WhichPart[q3] = q2 | q3 : int(1..4)])
- | q2 : int(3..4)]),
- and([q4 <= x_PartitionOccurrence_NumParts ->
- x_PartitionOccurrence_PartSizes[q4 - 1] = x_PartitionOccurrence_PartSizes[q4]
- | q4 : int(2..4)]),
- x_PartitionOccurrence_NumParts = max([x_PartitionOccurrence_WhichPart[q5] | q5 : int(1..4)]),
- and([x_PartitionOccurrence_PartSizes[q6] = sum([toInt(x_PartitionOccurrence_WhichPart[q7] = q6) | q7 : int(1..4)])
- | q6 : int(1..4)]),
- and([q8 <= x_PartitionOccurrence_NumParts ->
- and([x_PartitionOccurrence_WhichPart[q9] = q8 -> x_PartitionOccurrence_FirstIndex[q8] <= q9 | q9 : int(1..4)])
- | q8 : int(1..4)]),
- and([q8 <= x_PartitionOccurrence_NumParts ->
- or([x_PartitionOccurrence_WhichPart[q9] = q8 /\ x_PartitionOccurrence_FirstIndex[q8] = q9 | q9 : int(1..4)])
- | q8 : int(1..4)]),
- and([q8 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_FirstIndex[q8] = 1 | q8 : int(1..4)]),
- and([q10 <= x_PartitionOccurrence_NumParts /\ q11 <= x_PartitionOccurrence_NumParts ->
- (q10 < q11 <-> x_PartitionOccurrence_FirstIndex[q10] < x_PartitionOccurrence_FirstIndex[q11])
- | q10 : int(1..4), q11 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_05_2/expected/model_1-solution000001.solution b/tests/exhaustive/basic/partition_05_2/expected/model_1-solution000001.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_05_2/expected/model_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_05_2/expected/model_1.eprime.orig b/tests/exhaustive/basic/partition_05_2/expected/model_1.eprime.orig
deleted file mode 100644
index 6265b3fc3d..0000000000
--- a/tests/exhaustive/basic/partition_05_2/expected/model_1.eprime.orig
+++ /dev/null
@@ -1,78 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence: matrix indexed by [int(1..4), int(1..4)] of bool
-branching on
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence]
-such that
- and([and([q27 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q27, 2],
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q27, q25];
- int(1..3)])
- -> 4 = q25 \/ 2 = q25
- | q27 : int(1..4), q25 : int(1..4)]),
- or([and([q34 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q34, 2],
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q34, q32];
- int(1..3)])
- /\ q32 = 4
- | q34 : int(1..4), q32 : int(1..4)]),
- or([and([q39 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q39, 2],
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q39, q37];
- int(1..3)])
- /\ q37 = 2
- | q39 : int(1..4), q37 : int(1..4)]),
- and([q44 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q44, q42]
- -> or([1 = q42, 2 = q42, 3 = q42, 4 = q42; int(1..4)])
- | q44 : int(1..4), q42 : int(1..4)]),
- or([q51 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q51, q49]
- /\ q49 = 1
- | q51 : int(1..4), q49 : int(1..4)]),
- or([q56 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q56, q54]
- /\ q54 = 2
- | q56 : int(1..4), q54 : int(1..4)]),
- or([q61 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q61, q59]
- /\ q59 = 3
- | q61 : int(1..4), q59 : int(1..4)]),
- or([q66 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q66, q64]
- /\ q64 = 4
- | q66 : int(1..4), q64 : int(1..4)]),
- and([1 =
- sum([toInt(q16 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q16, q1])
- | q16 : int(1..4)])
- | q1 : int(1..4)]),
- and([q17 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- q18 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker
- ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q17, q19]) | q19 : int(1..4)]) =
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q18, q20]) | q20 : int(1..4)])
- | q17 : int(1..4), q18 : int(1..4)]),
- and([q21 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q21, q22]) | q22 : int(1..4)]) >= 1
- | q21 : int(1..4)]),
- and([q6 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- [-toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q6, q11]) | q11 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q7, q13] = false | q13 : int(1..4)])
- | q7 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker <= 4,
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q8, q9]) | q9 : int(1..4)]) <= 4
- | q8 : int(1..4)]),
- 4 =
- sum([toInt(q14 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker) *
- catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q14, q15])
- | q15 : int(1..4)]),
- 0)
- | q14 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_05_2/expected/model_2-solution000001.solution b/tests/exhaustive/basic/partition_05_2/expected/model_2-solution000001.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_05_2/expected/model_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_05_2/expected/model_2.eprime.orig b/tests/exhaustive/basic/partition_05_2/expected/model_2.eprime.orig
deleted file mode 100644
index 559aefda7e..0000000000
--- a/tests/exhaustive/basic/partition_05_2/expected/model_2.eprime.orig
+++ /dev/null
@@ -1,116 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..4), int(1..4)] of int(1..5)
-branching on
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy]
-such that
- and([and([q35 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
- or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q39] != 5 /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q39] = 2
- | q39 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q36] != 5;
- int(1..3)])
- ->
- 4 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q36] \/
- 2 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q36]
- | q35 : int(1..4), q36 : int(1..4)]),
- or([and([q45 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
- or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q45, q48] != 5 /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q45, q48] = 2
- | q48 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q45, q46] != 5;
- int(1..3)])
- /\ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q45, q46] = 4
- | q45 : int(1..4), q46 : int(1..4)]),
- or([and([q53 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
- or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q53, q56] != 5 /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q53, q56] = 2
- | q56 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q53, q54] != 5;
- int(1..3)])
- /\ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q53, q54] = 2
- | q53 : int(1..4), q54 : int(1..4)]),
- and([q61 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q61, q62] != 5
- ->
- or([1 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q61, q62],
- 2 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q61, q62],
- 3 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q61, q62],
- 4 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q61, q62];
- int(1..4)])
- | q61 : int(1..4), q62 : int(1..4)]),
- or([q69 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q69, q70] != 5
- /\ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q69, q70] = 1
- | q69 : int(1..4), q70 : int(1..4)]),
- or([q75 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q75, q76] != 5
- /\ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q75, q76] = 2
- | q75 : int(1..4), q76 : int(1..4)]),
- or([q81 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q81, q82] != 5
- /\ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q81, q82] = 3
- | q81 : int(1..4), q82 : int(1..4)]),
- or([q87 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q87, q88] != 5
- /\ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q87, q88] = 4
- | q87 : int(1..4), q88 : int(1..4)]),
- alldifferent_except([toInt(q20 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q20, q21] !=
- 5)
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy
- [q20, q21],
- 0)
- | q20 : int(1..4), q21 : int(1..4)],
- 0),
- and([q22 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- q23 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker
- ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q22, q25] != 5)
- | q25 : int(1..4)])
- =
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q23, q27] != 5)
- | q27 : int(1..4)])
- | q22 : int(1..4), q23 : int(1..4)]),
- and([q28 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q28, q30] != 5)
- | q30 : int(1..4)])
- >= 1
- | q28 : int(1..4)]),
- and([q6 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q14] | q14 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q7, q19] = 1
- | q19 : int(1..4)])
- | q7 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker <= 4,
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q8, q9] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q8, q9 + 1]
- \/ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q8, q9] = 5
- | q9 : int(1..3)])
- | q8 : int(1..4)]),
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q8, q10] = 5 ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q8, q10 + 1] = 5
- | q10 : int(1..3)])
- | q8 : int(1..4)]),
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q8, q11] != 5)
- | q11 : int(1..4)])
- <= 4
- | q8 : int(1..4)]),
- 4 =
- sum([toInt(q16 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker) *
- catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q16, q18] !=
- 5)
- | q18 : int(1..4)]),
- 0)
- | q16 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_05_2/expected/model_3-solution000001.solution b/tests/exhaustive/basic/partition_05_2/expected/model_3-solution000001.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_05_2/expected/model_3-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_05_2/expected/model_3.eprime.orig b/tests/exhaustive/basic/partition_05_2/expected/model_3.eprime.orig
deleted file mode 100644
index 263daeb090..0000000000
--- a/tests/exhaustive/basic/partition_05_2/expected/model_3.eprime.orig
+++ /dev/null
@@ -1,119 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..4)] of int(1..4)
-branching on
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- and([and([q26 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- or([q30 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q26] /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q26, q30] = 2
- | q30 : int(1..4)]),
- q27 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q26];
- int(1..3)])
- ->
- 4 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q26, q27] \/
- 2 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q26, q27]
- | q26 : int(1..4), q27 : int(1..4)]),
- or([and([q36 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- or([q39 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q36] /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q36, q39] = 2
- | q39 : int(1..4)]),
- q37 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q36];
- int(1..3)])
- /\ x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q36, q37] = 4
- | q36 : int(1..4), q37 : int(1..4)]),
- or([and([q44 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- or([q47 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q44] /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q44, q47] = 2
- | q47 : int(1..4)]),
- q45 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q44];
- int(1..3)])
- /\ x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q44, q45] = 2
- | q44 : int(1..4), q45 : int(1..4)]),
- and([q52 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q53 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q52]
- ->
- or([1 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q52, q53],
- 2 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q52, q53],
- 3 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q52, q53],
- 4 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q52, q53];
- int(1..4)])
- | q52 : int(1..4), q53 : int(1..4)]),
- or([q60 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q61 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q60]
- /\ x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q60, q61] = 1
- | q60 : int(1..4), q61 : int(1..4)]),
- or([q66 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q67 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q66]
- /\ x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q66, q67] = 2
- | q66 : int(1..4), q67 : int(1..4)]),
- or([q72 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q73 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q72]
- /\ x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q72, q73] = 3
- | q72 : int(1..4), q73 : int(1..4)]),
- or([q78 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q79 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q78]
- /\ x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q78, q79] = 4
- | q78 : int(1..4), q79 : int(1..4)]),
- alldifferent_except([toInt(q17 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q18 <=
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker
- [q17])
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q17, q18],
- 0)
- | q17 : int(1..4), q18 : int(1..4)],
- 0),
- and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q20 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker
- ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q19] =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q20]
- | q19 : int(1..4), q20 : int(1..4)]),
- and([q21 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q21] >= 1
- | q21 : int(1..4)]),
- and([q6 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6]; int(1)],
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q13]
- | q13 : int(1..4)];
- int(1..2)])
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q7] = 0 /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q7, q16] = 1
- | q16 : int(1..4)])
- | q7 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker <= 4,
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q9 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q8] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q8, q9] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q8, q9 + 1]
- | q9 : int(1..3)])
- | q8 : int(1..4)]),
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q10 > x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q8] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q8, q10] = 1
- | q10 : int(1..4)])
- | q8 : int(1..4)]),
- and([q8 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q8] <= 4
- | q8 : int(1..4)]),
- 4 =
- sum([toInt(q15 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker) *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q15], 0)
- | q15 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_05_2/expected/model_4-solution000001.solution b/tests/exhaustive/basic/partition_05_2/expected/model_4-solution000001.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_05_2/expected/model_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_05_2/expected/model_4.eprime.orig b/tests/exhaustive/basic/partition_05_2/expected/model_4.eprime.orig
deleted file mode 100644
index f37aa5dd69..0000000000
--- a/tests/exhaustive/basic/partition_05_2/expected/model_4.eprime.orig
+++ /dev/null
@@ -1,61 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionOccurrence_NumParts: int(1..4)
-find x_PartitionOccurrence_WhichPart: matrix indexed by [int(1..4)] of int(1..4)
-find x_PartitionOccurrence_PartSizes: matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionOccurrence_FirstIndex: matrix indexed by [int(1..4)] of int(1..4)
-branching on
- [x_PartitionOccurrence_NumParts, x_PartitionOccurrence_WhichPart, x_PartitionOccurrence_PartSizes,
- x_PartitionOccurrence_FirstIndex]
-such that
- and([and([q15 <= x_PartitionOccurrence_NumParts,
- or([x_PartitionOccurrence_WhichPart[q20] = q15 /\ q20 = 2 | q20 : int(1..4)]),
- x_PartitionOccurrence_WhichPart[q17] = q15;
- int(1..3)])
- -> 4 = q17 \/ 2 = q17
- | q15 : int(1..4), q17 : int(1..4)]),
- or([and([q25 <= x_PartitionOccurrence_NumParts,
- or([x_PartitionOccurrence_WhichPart[q29] = q25 /\ q29 = 2 | q29 : int(1..4)]),
- x_PartitionOccurrence_WhichPart[q27] = q25;
- int(1..3)])
- /\ q27 = 4
- | q25 : int(1..4), q27 : int(1..4)]),
- or([and([q33 <= x_PartitionOccurrence_NumParts,
- or([x_PartitionOccurrence_WhichPart[q37] = q33 /\ q37 = 2 | q37 : int(1..4)]),
- x_PartitionOccurrence_WhichPart[q35] = q33;
- int(1..3)])
- /\ q35 = 2
- | q33 : int(1..4), q35 : int(1..4)]),
- and([q41 <= x_PartitionOccurrence_NumParts /\ x_PartitionOccurrence_WhichPart[q43] = q41 ->
- or([1 = q43, 2 = q43, 3 = q43, 4 = q43; int(1..4)])
- | q41 : int(1..4), q43 : int(1..4)]),
- or([q49 <= x_PartitionOccurrence_NumParts /\ x_PartitionOccurrence_WhichPart[q51] = q49 /\ q51 = 1
- | q49 : int(1..4), q51 : int(1..4)]),
- or([q55 <= x_PartitionOccurrence_NumParts /\ x_PartitionOccurrence_WhichPart[q57] = q55 /\ q57 = 2
- | q55 : int(1..4), q57 : int(1..4)]),
- or([q61 <= x_PartitionOccurrence_NumParts /\ x_PartitionOccurrence_WhichPart[q63] = q61 /\ q63 = 3
- | q61 : int(1..4), q63 : int(1..4)]),
- or([q67 <= x_PartitionOccurrence_NumParts /\ x_PartitionOccurrence_WhichPart[q69] = q67 /\ q69 = 4
- | q67 : int(1..4), q69 : int(1..4)]),
- and([q1 <= x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q1] <= 4 | q1 : int(1..4)]),
- and([q1 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q1] = 0 | q1 : int(1..4)]),
- x_PartitionOccurrence_NumParts <= 4,
- and([q2 <= x_PartitionOccurrence_NumParts -> or([x_PartitionOccurrence_WhichPart[q3] = q2 | q3 : int(1..4)])
- | q2 : int(3..4)]),
- and([q4 <= x_PartitionOccurrence_NumParts ->
- x_PartitionOccurrence_PartSizes[q4 - 1] = x_PartitionOccurrence_PartSizes[q4]
- | q4 : int(2..4)]),
- x_PartitionOccurrence_NumParts = max([x_PartitionOccurrence_WhichPart[q5] | q5 : int(1..4)]),
- and([x_PartitionOccurrence_PartSizes[q6] = sum([toInt(x_PartitionOccurrence_WhichPart[q7] = q6) | q7 : int(1..4)])
- | q6 : int(1..4)]),
- and([q8 <= x_PartitionOccurrence_NumParts ->
- and([x_PartitionOccurrence_WhichPart[q9] = q8 -> x_PartitionOccurrence_FirstIndex[q8] <= q9 | q9 : int(1..4)])
- | q8 : int(1..4)]),
- and([q8 <= x_PartitionOccurrence_NumParts ->
- or([x_PartitionOccurrence_WhichPart[q9] = q8 /\ x_PartitionOccurrence_FirstIndex[q8] = q9 | q9 : int(1..4)])
- | q8 : int(1..4)]),
- and([q8 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_FirstIndex[q8] = 1 | q8 : int(1..4)]),
- and([q10 <= x_PartitionOccurrence_NumParts /\ q11 <= x_PartitionOccurrence_NumParts ->
- (q10 < q11 <-> x_PartitionOccurrence_FirstIndex[q10] < x_PartitionOccurrence_FirstIndex[q11])
- | q10 : int(1..4), q11 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_1-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_1_1-solution000001.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_1-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_1_1-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_1-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_1_1-solution000003.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_1.eprime b/tests/exhaustive/basic/partition_06/expected/model_1_1.eprime
new file mode 100644
index 0000000000..0185996261
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_1.eprime
@@ -0,0 +1,37 @@
+language ESSENCE' 1.0
+
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker: int(0..4)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence: matrix indexed by [int(1..4), int(1..4)] of bool
+branching on
+ [x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence]
+such that
+ and([q18 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q18, q19]) | q19 : int(1..4)]) = 2
+ | q18 : int(1..4)]),
+ and([1 =
+ sum([toInt(q14 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q14, q1])
+ | q14 : int(1..4)])
+ | q1 : int(1..4)]),
+ and([q15 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q15, q16]) | q16 : int(1..4)]) >= 1
+ | q15 : int(1..4)]),
+ and([q4 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ [-toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q4, q9]) | q9 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q5, q11] = false | q11 : int(1..4)])
+ | q5 : int(1..4)]),
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker <= 4,
+ and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q6, q7]) | q7 : int(1..4)]) <= 4
+ | q6 : int(1..4)]),
+ 4 =
+ sum([toInt(q12 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker) *
+ catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q12, q13])
+ | q13 : int(1..4)]),
+ 0)
+ | q12 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_2-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_1_2-solution000001.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_2-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_1_2-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_2-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_1_2-solution000003.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_2-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_2.eprime b/tests/exhaustive/basic/partition_06/expected/model_1_2.eprime
new file mode 100644
index 0000000000..337e8fc3c9
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_2.eprime
@@ -0,0 +1,116 @@
+language ESSENCE' 1.0
+
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker: int(0..4)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence: matrix indexed by [int(1..4), int(1..4)] of bool
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker: int(0..4)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..4), int(1..4)] of int(1..5)
+branching on
+ [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy,
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence]
+such that
+ and([q55 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q55, q56]) | q56 : int(1..4)]) = 2
+ | q55 : int(1..4)]),
+ and([1 =
+ sum([toInt(q52 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q52, q1])
+ | q52 : int(1..4)])
+ | q1 : int(1..4)]),
+ and([q57 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q57, q58]) | q58 : int(1..4)]) >= 1
+ | q57 : int(1..4)]),
+ and([q4 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ [-toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q4, q9]) | q9 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q5, q11] = false | q11 : int(1..4)])
+ | q5 : int(1..4)]),
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker <= 4,
+ and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q6, q7]) | q7 : int(1..4)]) <= 4
+ | q6 : int(1..4)]),
+ 4 =
+ sum([toInt(q12 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker) *
+ catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q12, q13])
+ | q13 : int(1..4)]),
+ 0)
+ | q12 : int(1..4)]),
+ alldifferent_except([toInt(q59 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q59, q60] !=
+ 5)
+ *
+ catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy
+ [q59, q60],
+ 0)
+ | q59 : int(1..4), q60 : int(1..4)],
+ 0),
+ and([q61 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q61, q63] != 5)
+ | q63 : int(1..4)])
+ >= 1
+ | q61 : int(1..4)]),
+ and([q17 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q17, q25] | q25 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q18, q53] = 1
+ | q53 : int(1..4)])
+ | q18 : int(1..4)]),
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker <= 4,
+ and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q20] <
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q20 + 1]
+ \/ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q20] = 5
+ | q20 : int(1..3)])
+ | q19 : int(1..4)]),
+ and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q21] = 5 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q21 + 1] = 5
+ | q21 : int(1..3)])
+ | q19 : int(1..4)]),
+ and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q22] != 5)
+ | q22 : int(1..4)])
+ <= 4
+ | q19 : int(1..4)]),
+ 4 =
+ sum([toInt(q27 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker) *
+ catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q27, q29] !=
+ 5)
+ | q29 : int(1..4)]),
+ 0)
+ | q27 : int(1..4)]),
+ and([q32 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ or([q35 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
+ (and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q35, q36] ->
+ or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q32, q38] != 5 /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q32, q38] = q36
+ | q38 : int(1..4)])
+ | q36 : int(1..4)])
+ /\
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q32, q40] != 5 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence
+ [q35, x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q32, q40]]
+ | q40 : int(1..4)]))
+ | q35 : int(1..4)])
+ | q32 : int(1..4)]),
+ and([q43 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ or([q46 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
+ (and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q46, q48] != 5 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence
+ [q43, x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q46, q48]]
+ | q48 : int(1..4)])
+ /\
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q43, q49] ->
+ or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q46, q51] != 5 /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q46, q51] = q49
+ | q51 : int(1..4)])
+ | q49 : int(1..4)]))
+ | q46 : int(1..4)])
+ | q43 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_3-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_1_3-solution000001.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_3-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_3-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_1_3-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_3-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_1_3-solution000003.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_3.eprime.orig b/tests/exhaustive/basic/partition_06/expected/model_1_3.eprime.orig
deleted file mode 100644
index 777ff6324f..0000000000
--- a/tests/exhaustive/basic/partition_06/expected/model_1_3.eprime.orig
+++ /dev/null
@@ -1,126 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence: matrix indexed by [int(1..4), int(1..4)] of bool
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..4)] of int(1..4)
-branching on
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence]
-such that
- and([q52 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q52, q53]) | q53 : int(1..4)]) = 2
- | q52 : int(1..4)]),
- and([1 =
- sum([toInt(q49 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q49, q1])
- | q49 : int(1..4)])
- | q1 : int(1..4)]),
- and([q54 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q54, q55]) | q55 : int(1..4)]) >= 1
- | q54 : int(1..4)]),
- and([q4 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- [-toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q4, q9]) | q9 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q5, q11] = false | q11 : int(1..4)])
- | q5 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker <= 4,
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q6, q7]) | q7 : int(1..4)]) <= 4
- | q6 : int(1..4)]),
- 4 =
- sum([toInt(q12 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker) *
- catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q12, q13])
- | q13 : int(1..4)]),
- 0)
- | q12 : int(1..4)]),
- alldifferent_except([toInt(q56 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q57 <=
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker
- [q56])
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q56, q57],
- 0)
- | q56 : int(1..4), q57 : int(1..4)],
- 0),
- and([q58 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q58] >= 1
- | q58 : int(1..4)]),
- and([q17 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q17]; int(1)],
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q17, q24]
- | q24 : int(1..4)];
- int(1..2)])
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q18] = 0 /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q18, q50] = 1
- | q50 : int(1..4)])
- | q18 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker <= 4,
- and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q20 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q19] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q19, q20] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q19, q20 + 1]
- | q20 : int(1..3)])
- | q19 : int(1..4)]),
- and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q21 > x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q19] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q19, q21] = 1
- | q21 : int(1..4)])
- | q19 : int(1..4)]),
- and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q19] <= 4
- | q19 : int(1..4)]),
- 4 =
- sum([toInt(q26 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker) *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q26], 0)
- | q26 : int(1..4)]),
- and([q29 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q32 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- (and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q32, q33] ->
- or([q35 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q29]
- /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q29, q35] =
- q33 | q35 : int(1..4)])
- | q33 : int(1..4)])
- /\
- and([q37 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q29] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence
- [q32,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q29, q37]]
- | q37 : int(1..4)]))
- | q32 : int(1..4)])
- | q29 : int(1..4)]),
- and([q40 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- or([q43 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q45 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q43] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence
- [q40,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q43, q45]]
- | q45 : int(1..4)])
- /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q40, q46] ->
- or([q48 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q43]
- /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q43, q48] =
- q46 | q48 : int(1..4)])
- | q46 : int(1..4)]))
- | q43 : int(1..4)])
- | q40 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_4-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_1_4-solution000001.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_4-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_1_4-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_4-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_1_4-solution000003.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_1_4.eprime b/tests/exhaustive/basic/partition_06/expected/model_1_4.eprime
new file mode 100644
index 0000000000..fe7ae25188
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_1_4.eprime
@@ -0,0 +1,85 @@
+language ESSENCE' 1.0
+
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker: int(0..4)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence: matrix indexed by [int(1..4), int(1..4)] of bool
+find x_PartitionOccurrence_NumParts: int(1..4)
+find x_PartitionOccurrence_WhichPart: matrix indexed by [int(1..4)] of int(1..4)
+find x_PartitionOccurrence_PartSizes: matrix indexed by [int(1..4)] of int(0..4)
+find x_PartitionOccurrence_FirstIndex: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_PartitionOccurrence_NumParts, x_PartitionOccurrence_WhichPart, x_PartitionOccurrence_PartSizes,
+ x_PartitionOccurrence_FirstIndex, x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence]
+such that
+ and([q48 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q48, q49]) | q49 : int(1..4)]) = 2
+ | q48 : int(1..4)]),
+ and([1 =
+ sum([toInt(q24 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q24, q1])
+ | q24 : int(1..4)])
+ | q1 : int(1..4)]),
+ and([q50 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q50, q51]) | q51 : int(1..4)]) >= 1
+ | q50 : int(1..4)]),
+ and([q4 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ [-toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q4, q9]) | q9 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q5, q11] = false | q11 : int(1..4)])
+ | q5 : int(1..4)]),
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker <= 4,
+ and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q6, q7]) | q7 : int(1..4)]) <= 4
+ | q6 : int(1..4)]),
+ 4 =
+ sum([toInt(q12 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker) *
+ catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q12, q13])
+ | q13 : int(1..4)]),
+ 0)
+ | q12 : int(1..4)]),
+ and([q14 <= x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q14] <= 4 | q14 : int(1..4)]),
+ and([q14 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q14] = 0 | q14 : int(1..4)]),
+ x_PartitionOccurrence_NumParts <= 4,
+ and([q15 <= x_PartitionOccurrence_NumParts -> or([x_PartitionOccurrence_WhichPart[q16] = q15 | q16 : int(1..4)])
+ | q15 : int(3..4)]),
+ x_PartitionOccurrence_NumParts = max([x_PartitionOccurrence_WhichPart[q17] | q17 : int(1..4)]),
+ and([x_PartitionOccurrence_PartSizes[q18] =
+ sum([toInt(x_PartitionOccurrence_WhichPart[q19] = q18) | q19 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([q20 <= x_PartitionOccurrence_NumParts ->
+ and([x_PartitionOccurrence_WhichPart[q21] = q20 -> x_PartitionOccurrence_FirstIndex[q20] <= q21
+ | q21 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q20 <= x_PartitionOccurrence_NumParts ->
+ or([x_PartitionOccurrence_WhichPart[q21] = q20 /\ x_PartitionOccurrence_FirstIndex[q20] = q21
+ | q21 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q20 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_FirstIndex[q20] = 1 | q20 : int(1..4)]),
+ and([q22 <= x_PartitionOccurrence_NumParts /\ q23 <= x_PartitionOccurrence_NumParts ->
+ (q22 < q23 <-> x_PartitionOccurrence_FirstIndex[q22] < x_PartitionOccurrence_FirstIndex[q23])
+ | q22 : int(1..4), q23 : int(1..4)]),
+ and([q26 <= x_PartitionOccurrence_NumParts ->
+ or([q30 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
+ (and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q30, q31] ->
+ or([x_PartitionOccurrence_WhichPart[q33] = q26 /\ q33 = q31 | q33 : int(1..4)])
+ | q31 : int(1..4)])
+ /\
+ and([x_PartitionOccurrence_WhichPart[q35] = q26 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q30, q35]
+ | q35 : int(1..4)]))
+ | q30 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q38 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ or([q40 <= x_PartitionOccurrence_NumParts /\
+ (and([x_PartitionOccurrence_WhichPart[q43] = q40 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q38, q43]
+ | q43 : int(1..4)])
+ /\
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q38, q44] ->
+ or([x_PartitionOccurrence_WhichPart[q46] = q40 /\ q46 = q44 | q46 : int(1..4)])
+ | q44 : int(1..4)]))
+ | q40 : int(1..4)])
+ | q38 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_1-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_2_1-solution000001.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_1-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_2_1-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_1-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_2_1-solution000003.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_1.eprime b/tests/exhaustive/basic/partition_06/expected/model_2_1.eprime
new file mode 100644
index 0000000000..8f0bcabfd6
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_1.eprime
@@ -0,0 +1,117 @@
+language ESSENCE' 1.0
+
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker: int(0..4)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..4), int(1..4)] of int(1..5)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker: int(0..4)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence: matrix indexed by [int(1..4), int(1..4)] of bool
+branching on
+ [x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence,
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy]
+such that
+ and([q57 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q57, q59] != 5)
+ | q59 : int(1..4)])
+ = 2 | q57 : int(1..4)]),
+ alldifferent_except([toInt(q60 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q60, q61] !=
+ 5)
+ *
+ catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy
+ [q60, q61],
+ 0)
+ | q60 : int(1..4), q61 : int(1..4)],
+ 0),
+ and([q62 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q62, q64] != 5)
+ | q64 : int(1..4)])
+ >= 1
+ | q62 : int(1..4)]),
+ and([q4 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q4, q12] | q12 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q5, q52] = 1
+ | q52 : int(1..4)])
+ | q5 : int(1..4)]),
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker <= 4,
+ and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q7] <
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q7 + 1]
+ \/ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q7] = 5
+ | q7 : int(1..3)])
+ | q6 : int(1..4)]),
+ and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q8] = 5 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q8 + 1] = 5
+ | q8 : int(1..3)])
+ | q6 : int(1..4)]),
+ and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q9] != 5)
+ | q9 : int(1..4)])
+ <= 4
+ | q6 : int(1..4)]),
+ 4 =
+ sum([toInt(q14 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker) *
+ catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q14, q16] !=
+ 5)
+ | q16 : int(1..4)]),
+ 0)
+ | q14 : int(1..4)]),
+ and([1 =
+ sum([toInt(q53 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q53, q17])
+ | q53 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q54 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q54, q55]) | q55 : int(1..4)]) >= 1
+ | q54 : int(1..4)]),
+ and([q20 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ [-toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q20, q25]) | q25 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q21, q27] = false | q27 : int(1..4)])
+ | q21 : int(1..4)]),
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker <= 4,
+ and([q22 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q22, q23]) | q23 : int(1..4)]) <= 4
+ | q22 : int(1..4)]),
+ 4 =
+ sum([toInt(q28 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker) *
+ catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q28, q29])
+ | q29 : int(1..4)]),
+ 0)
+ | q28 : int(1..4)]),
+ and([q32 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ or([q35 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
+ (and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q37] != 5 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence
+ [q32, x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q37]]
+ | q37 : int(1..4)])
+ /\
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q32, q38] ->
+ or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q40] != 5 /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q40] = q38
+ | q40 : int(1..4)])
+ | q38 : int(1..4)]))
+ | q35 : int(1..4)])
+ | q32 : int(1..4)]),
+ and([q43 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ or([q46 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
+ (and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q46, q47] ->
+ or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q43, q49] != 5 /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q43, q49] = q47
+ | q49 : int(1..4)])
+ | q47 : int(1..4)])
+ /\
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q43, q51] != 5 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence
+ [q46, x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q43, q51]]
+ | q51 : int(1..4)]))
+ | q46 : int(1..4)])
+ | q43 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_2-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_2_2-solution000001.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_2-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_2_2-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_2-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_2_2-solution000003.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_2-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_2.eprime b/tests/exhaustive/basic/partition_06/expected/model_2_2.eprime
new file mode 100644
index 0000000000..4220a0f519
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker: int(0..4)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..4), int(1..4)] of int(1..5)
+branching on
+ [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy]
+such that
+ and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q21] != 5)
+ | q21 : int(1..4)])
+ = 2 | q19 : int(1..4)]),
+ alldifferent_except([toInt(q22 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q22, q23] !=
+ 5)
+ *
+ catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy
+ [q22, q23],
+ 0)
+ | q22 : int(1..4), q23 : int(1..4)],
+ 0),
+ and([q24 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q24, q26] != 5)
+ | q26 : int(1..4)])
+ >= 1
+ | q24 : int(1..4)]),
+ and([q4 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q4, q12] | q12 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q5, q17] = 1
+ | q17 : int(1..4)])
+ | q5 : int(1..4)]),
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker <= 4,
+ and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q7] <
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q7 + 1]
+ \/ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q7] = 5
+ | q7 : int(1..3)])
+ | q6 : int(1..4)]),
+ and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q8] = 5 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q8 + 1] = 5
+ | q8 : int(1..3)])
+ | q6 : int(1..4)]),
+ and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q9] != 5)
+ | q9 : int(1..4)])
+ <= 4
+ | q6 : int(1..4)]),
+ 4 =
+ sum([toInt(q14 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker) *
+ catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q14, q16] !=
+ 5)
+ | q16 : int(1..4)]),
+ 0)
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_3-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_2_3-solution000001.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_3-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_3-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_2_3-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_3-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_2_3-solution000003.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_3.eprime.orig b/tests/exhaustive/basic/partition_06/expected/model_2_3.eprime.orig
deleted file mode 100644
index 5d89c386f7..0000000000
--- a/tests/exhaustive/basic/partition_06/expected/model_2_3.eprime.orig
+++ /dev/null
@@ -1,153 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..4), int(1..4)] of int(1..5)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..4)] of int(1..4)
-branching on
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy]
-such that
- and([q61 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q61, q63] != 5)
- | q63 : int(1..4)])
- = 2 | q61 : int(1..4)]),
- alldifferent_except([toInt(q64 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q64, q65] !=
- 5)
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy
- [q64, q65],
- 0)
- | q64 : int(1..4), q65 : int(1..4)],
- 0),
- and([q66 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q66, q68] != 5)
- | q68 : int(1..4)])
- >= 1
- | q66 : int(1..4)]),
- and([q4 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q4, q12] | q12 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q5, q58] = 1
- | q58 : int(1..4)])
- | q5 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker <= 4,
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q7] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q7 + 1]
- \/ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q7] = 5
- | q7 : int(1..3)])
- | q6 : int(1..4)]),
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q8] = 5 ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q8 + 1] = 5
- | q8 : int(1..3)])
- | q6 : int(1..4)]),
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q9] != 5)
- | q9 : int(1..4)])
- <= 4
- | q6 : int(1..4)]),
- 4 =
- sum([toInt(q14 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker) *
- catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q14, q16] !=
- 5)
- | q16 : int(1..4)]),
- 0)
- | q14 : int(1..4)]),
- alldifferent_except([toInt(q69 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q70 <=
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker
- [q69])
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q69, q70],
- 0)
- | q69 : int(1..4), q70 : int(1..4)],
- 0),
- and([q71 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q71] >= 1
- | q71 : int(1..4)]),
- and([q20 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q20]; int(1)],
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q20, q27]
- | q27 : int(1..4)];
- int(1..2)])
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q21] = 0 /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q21, q59] = 1
- | q59 : int(1..4)])
- | q21 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker <= 4,
- and([q22 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q23 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q22] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q22, q23] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q22, q23 + 1]
- | q23 : int(1..3)])
- | q22 : int(1..4)]),
- and([q22 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q24 > x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q22] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q22, q24] = 1
- | q24 : int(1..4)])
- | q22 : int(1..4)]),
- and([q22 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q22] <= 4
- | q22 : int(1..4)]),
- 4 =
- sum([toInt(q29 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker) *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q29], 0)
- | q29 : int(1..4)]),
- and([q32 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q35 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- (and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q37] != 5 ->
- or([q39 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q32]
- /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q32, q39] =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q37]
- | q39 : int(1..4)])
- | q37 : int(1..4)])
- /\
- and([q41 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q32] ->
- or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q43] != 5 /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q35, q43] =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q32, q41]
- | q43 : int(1..4)])
- | q41 : int(1..4)]))
- | q35 : int(1..4)])
- | q32 : int(1..4)]),
- and([q46 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- or([q49 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q51 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q49] ->
- or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q46, q53] != 5 /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q46, q53] =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q49, q51]
- | q53 : int(1..4)])
- | q51 : int(1..4)])
- /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q46, q55] != 5 ->
- or([q57 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q49]
- /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q49, q57] =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q46, q55]
- | q57 : int(1..4)])
- | q55 : int(1..4)]))
- | q49 : int(1..4)])
- | q46 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_4-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_2_4-solution000001.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_4-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_2_4-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_4-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_2_4-solution000003.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_2_4.eprime b/tests/exhaustive/basic/partition_06/expected/model_2_4.eprime
new file mode 100644
index 0000000000..bbbd3ba3be
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_2_4.eprime
@@ -0,0 +1,116 @@
+language ESSENCE' 1.0
+
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker: int(0..4)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..4), int(1..4)] of int(1..5)
+find x_PartitionOccurrence_NumParts: int(1..4)
+find x_PartitionOccurrence_WhichPart: matrix indexed by [int(1..4)] of int(1..4)
+find x_PartitionOccurrence_PartSizes: matrix indexed by [int(1..4)] of int(0..4)
+find x_PartitionOccurrence_FirstIndex: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_PartitionOccurrence_NumParts, x_PartitionOccurrence_WhichPart, x_PartitionOccurrence_PartSizes,
+ x_PartitionOccurrence_FirstIndex, x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy]
+such that
+ and([q57 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q57, q59] != 5)
+ | q59 : int(1..4)])
+ = 2 | q57 : int(1..4)]),
+ alldifferent_except([toInt(q60 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q60, q61] !=
+ 5)
+ *
+ catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy
+ [q60, q61],
+ 0)
+ | q60 : int(1..4), q61 : int(1..4)],
+ 0),
+ and([q62 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q62, q64] != 5)
+ | q64 : int(1..4)])
+ >= 1
+ | q62 : int(1..4)]),
+ and([q4 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q4, q12] | q12 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q5, q27] = 1
+ | q27 : int(1..4)])
+ | q5 : int(1..4)]),
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker <= 4,
+ and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q7] <
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q7 + 1]
+ \/ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q7] = 5
+ | q7 : int(1..3)])
+ | q6 : int(1..4)]),
+ and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q8] = 5 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q8 + 1] = 5
+ | q8 : int(1..3)])
+ | q6 : int(1..4)]),
+ and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q6, q9] != 5)
+ | q9 : int(1..4)])
+ <= 4
+ | q6 : int(1..4)]),
+ 4 =
+ sum([toInt(q14 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker) *
+ catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q14, q16] !=
+ 5)
+ | q16 : int(1..4)]),
+ 0)
+ | q14 : int(1..4)]),
+ and([q17 <= x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q17] <= 4 | q17 : int(1..4)]),
+ and([q17 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q17] = 0 | q17 : int(1..4)]),
+ x_PartitionOccurrence_NumParts <= 4,
+ and([q18 <= x_PartitionOccurrence_NumParts -> or([x_PartitionOccurrence_WhichPart[q19] = q18 | q19 : int(1..4)])
+ | q18 : int(3..4)]),
+ x_PartitionOccurrence_NumParts = max([x_PartitionOccurrence_WhichPart[q20] | q20 : int(1..4)]),
+ and([x_PartitionOccurrence_PartSizes[q21] =
+ sum([toInt(x_PartitionOccurrence_WhichPart[q22] = q21) | q22 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([q23 <= x_PartitionOccurrence_NumParts ->
+ and([x_PartitionOccurrence_WhichPart[q24] = q23 -> x_PartitionOccurrence_FirstIndex[q23] <= q24
+ | q24 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([q23 <= x_PartitionOccurrence_NumParts ->
+ or([x_PartitionOccurrence_WhichPart[q24] = q23 /\ x_PartitionOccurrence_FirstIndex[q23] = q24
+ | q24 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([q23 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_FirstIndex[q23] = 1 | q23 : int(1..4)]),
+ and([q25 <= x_PartitionOccurrence_NumParts /\ q26 <= x_PartitionOccurrence_NumParts ->
+ (q25 < q26 <-> x_PartitionOccurrence_FirstIndex[q25] < x_PartitionOccurrence_FirstIndex[q26])
+ | q25 : int(1..4), q26 : int(1..4)]),
+ and([q29 <= x_PartitionOccurrence_NumParts ->
+ or([q33 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
+ (and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q33, q35] != 5 ->
+ or([x_PartitionOccurrence_WhichPart[q37] = q29 /\
+ q37 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q33, q35]
+ | q37 : int(1..4)])
+ | q35 : int(1..4)])
+ /\
+ and([x_PartitionOccurrence_WhichPart[q39] = q29 ->
+ or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q33, q41] != 5 /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q33, q41] = q39
+ | q41 : int(1..4)])
+ | q39 : int(1..4)]))
+ | q33 : int(1..4)])
+ | q29 : int(1..4)]),
+ and([q44 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ or([q46 <= x_PartitionOccurrence_NumParts /\
+ (and([x_PartitionOccurrence_WhichPart[q49] = q46 ->
+ or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q44, q51] != 5 /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q44, q51] = q49
+ | q51 : int(1..4)])
+ | q49 : int(1..4)])
+ /\
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q44, q53] != 5 ->
+ or([x_PartitionOccurrence_WhichPart[q55] = q46 /\
+ q55 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q44, q53]
+ | q55 : int(1..4)])
+ | q53 : int(1..4)]))
+ | q46 : int(1..4)])
+ | q44 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_1-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_3_1-solution000001.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_3_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_1-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_3_1-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_3_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_1-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_3_1-solution000003.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_3_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_1.eprime.orig b/tests/exhaustive/basic/partition_06/expected/model_3_1.eprime.orig
deleted file mode 100644
index 22b58118fa..0000000000
--- a/tests/exhaustive/basic/partition_06/expected/model_3_1.eprime.orig
+++ /dev/null
@@ -1,126 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..4)] of int(1..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence: matrix indexed by [int(1..4), int(1..4)] of bool
-branching on
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- and([q54 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q54] = 2
- | q54 : int(1..4)]),
- alldifferent_except([toInt(q55 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q56 <=
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker
- [q55])
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q55, q56],
- 0)
- | q55 : int(1..4), q56 : int(1..4)],
- 0),
- and([q57 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q57] >= 1
- | q57 : int(1..4)]),
- and([q4 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q4]; int(1)],
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, q11]
- | q11 : int(1..4)];
- int(1..2)])
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q5] = 0 /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q5, q49] = 1
- | q49 : int(1..4)])
- | q5 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker <= 4,
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q7 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q7] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q7 + 1]
- | q7 : int(1..3)])
- | q6 : int(1..4)]),
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q8 > x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q8] = 1
- | q8 : int(1..4)])
- | q6 : int(1..4)]),
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] <= 4
- | q6 : int(1..4)]),
- 4 =
- sum([toInt(q13 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker) *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q13], 0)
- | q13 : int(1..4)]),
- and([1 =
- sum([toInt(q50 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q50, q14])
- | q50 : int(1..4)])
- | q14 : int(1..4)]),
- and([q51 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q51, q52]) | q52 : int(1..4)]) >= 1
- | q51 : int(1..4)]),
- and([q17 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- [-toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q17, q22]) | q22 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q18, q24] = false | q24 : int(1..4)])
- | q18 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker <= 4,
- and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q19, q20]) | q20 : int(1..4)]) <= 4
- | q19 : int(1..4)]),
- 4 =
- sum([toInt(q25 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker) *
- catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q25, q26])
- | q26 : int(1..4)]),
- 0)
- | q25 : int(1..4)]),
- and([q29 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
- or([q32 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q34 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q32] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence
- [q29,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q32, q34]]
- | q34 : int(1..4)])
- /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q29, q35] ->
- or([q37 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q32]
- /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q32, q37] =
- q35 | q37 : int(1..4)])
- | q35 : int(1..4)]))
- | q32 : int(1..4)])
- | q29 : int(1..4)]),
- and([q40 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q43 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
- (and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q43, q44] ->
- or([q46 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q40]
- /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q40, q46] =
- q44 | q46 : int(1..4)])
- | q44 : int(1..4)])
- /\
- and([q48 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q40] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence
- [q43,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q40, q48]]
- | q48 : int(1..4)]))
- | q43 : int(1..4)])
- | q40 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_2-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_3_2-solution000001.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_3_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_2-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_3_2-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_3_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_2-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_3_2-solution000003.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_3_2-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_2.eprime.orig b/tests/exhaustive/basic/partition_06/expected/model_3_2.eprime.orig
deleted file mode 100644
index 933cc936fc..0000000000
--- a/tests/exhaustive/basic/partition_06/expected/model_3_2.eprime.orig
+++ /dev/null
@@ -1,152 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..4)] of int(1..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..4), int(1..4)] of int(1..5)
-branching on
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- and([q61 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q61] = 2
- | q61 : int(1..4)]),
- alldifferent_except([toInt(q62 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q63 <=
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker
- [q62])
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q62, q63],
- 0)
- | q62 : int(1..4), q63 : int(1..4)],
- 0),
- and([q64 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q64] >= 1
- | q64 : int(1..4)]),
- and([q4 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q4]; int(1)],
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, q11]
- | q11 : int(1..4)];
- int(1..2)])
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q5] = 0 /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q5, q58] = 1
- | q58 : int(1..4)])
- | q5 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker <= 4,
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q7 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q7] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q7 + 1]
- | q7 : int(1..3)])
- | q6 : int(1..4)]),
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q8 > x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q8] = 1
- | q8 : int(1..4)])
- | q6 : int(1..4)]),
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] <= 4
- | q6 : int(1..4)]),
- 4 =
- sum([toInt(q13 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker) *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q13], 0)
- | q13 : int(1..4)]),
- alldifferent_except([toInt(q65 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q65, q66] !=
- 5)
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy
- [q65, q66],
- 0)
- | q65 : int(1..4), q66 : int(1..4)],
- 0),
- and([q67 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q67, q69] != 5)
- | q69 : int(1..4)])
- >= 1
- | q67 : int(1..4)]),
- and([q17 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q17, q25] | q25 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q18, q59] = 1
- | q59 : int(1..4)])
- | q18 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker <= 4,
- and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q20] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q20 + 1]
- \/ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q20] = 5
- | q20 : int(1..3)])
- | q19 : int(1..4)]),
- and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q21] = 5 ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q21 + 1] = 5
- | q21 : int(1..3)])
- | q19 : int(1..4)]),
- and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q19, q22] != 5)
- | q22 : int(1..4)])
- <= 4
- | q19 : int(1..4)]),
- 4 =
- sum([toInt(q27 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker) *
- catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q27, q29] !=
- 5)
- | q29 : int(1..4)]),
- 0)
- | q27 : int(1..4)]),
- and([q32 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
- or([q35 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q37 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q35] ->
- or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q32, q39] != 5 /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q32, q39] =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q35, q37]
- | q39 : int(1..4)])
- | q37 : int(1..4)])
- /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q32, q41] != 5 ->
- or([q43 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q35]
- /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q35, q43] =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q32, q41]
- | q43 : int(1..4)])
- | q41 : int(1..4)]))
- | q35 : int(1..4)])
- | q32 : int(1..4)]),
- and([q46 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q49 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
- (and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q49, q51] != 5 ->
- or([q53 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q46]
- /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q46, q53] =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q49, q51]
- | q53 : int(1..4)])
- | q51 : int(1..4)])
- /\
- and([q55 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q46] ->
- or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q49, q57] != 5 /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q49, q57] =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q46, q55]
- | q57 : int(1..4)])
- | q55 : int(1..4)]))
- | q49 : int(1..4)])
- | q46 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_3-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_3_3-solution000001.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_3_3-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_3-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_3_3-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_3_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_3-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_3_3-solution000003.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_3_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_3.eprime.orig b/tests/exhaustive/basic/partition_06/expected/model_3_3.eprime.orig
deleted file mode 100644
index 91a23d8bc7..0000000000
--- a/tests/exhaustive/basic/partition_06/expected/model_3_3.eprime.orig
+++ /dev/null
@@ -1,65 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..4)] of int(1..4)
-branching on
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- and([q16 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q16] = 2
- | q16 : int(1..4)]),
- alldifferent_except([toInt(q17 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q18 <=
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker
- [q17])
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q17, q18],
- 0)
- | q17 : int(1..4), q18 : int(1..4)],
- 0),
- and([q19 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q19] >= 1
- | q19 : int(1..4)]),
- and([q4 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q4]; int(1)],
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, q11]
- | q11 : int(1..4)];
- int(1..2)])
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q5] = 0 /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q5, q14] = 1
- | q14 : int(1..4)])
- | q5 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker <= 4,
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q7 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q7] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q7 + 1]
- | q7 : int(1..3)])
- | q6 : int(1..4)]),
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q8 > x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q8] = 1
- | q8 : int(1..4)])
- | q6 : int(1..4)]),
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] <= 4
- | q6 : int(1..4)]),
- 4 =
- sum([toInt(q13 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker) *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q13], 0)
- | q13 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_4-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_3_4-solution000001.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_3_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_4-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_3_4-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_3_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_4-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_3_4-solution000003.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_3_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_3_4.eprime.orig b/tests/exhaustive/basic/partition_06/expected/model_3_4.eprime.orig
deleted file mode 100644
index 8a20b60fc0..0000000000
--- a/tests/exhaustive/basic/partition_06/expected/model_3_4.eprime.orig
+++ /dev/null
@@ -1,125 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..4)] of int(1..4)
-find x_PartitionOccurrence_NumParts: int(1..4)
-find x_PartitionOccurrence_WhichPart: matrix indexed by [int(1..4)] of int(1..4)
-find x_PartitionOccurrence_PartSizes: matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionOccurrence_FirstIndex: matrix indexed by [int(1..4)] of int(1..4)
-branching on
- [x_PartitionOccurrence_NumParts, x_PartitionOccurrence_WhichPart, x_PartitionOccurrence_PartSizes,
- x_PartitionOccurrence_FirstIndex, x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- and([q54 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q54] = 2
- | q54 : int(1..4)]),
- alldifferent_except([toInt(q55 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q56 <=
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker
- [q55])
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q55, q56],
- 0)
- | q55 : int(1..4), q56 : int(1..4)],
- 0),
- and([q57 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q57] >= 1
- | q57 : int(1..4)]),
- and([q4 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q4]; int(1)],
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q4, q11]
- | q11 : int(1..4)];
- int(1..2)])
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q5] = 0 /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q5, q24] = 1
- | q24 : int(1..4)])
- | q5 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker <= 4,
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q7 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q7] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q7 + 1]
- | q7 : int(1..3)])
- | q6 : int(1..4)]),
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q8 > x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q6, q8] = 1
- | q8 : int(1..4)])
- | q6 : int(1..4)]),
- and([q6 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q6] <= 4
- | q6 : int(1..4)]),
- 4 =
- sum([toInt(q13 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker) *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q13], 0)
- | q13 : int(1..4)]),
- and([q14 <= x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q14] <= 4 | q14 : int(1..4)]),
- and([q14 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q14] = 0 | q14 : int(1..4)]),
- x_PartitionOccurrence_NumParts <= 4,
- and([q15 <= x_PartitionOccurrence_NumParts -> or([x_PartitionOccurrence_WhichPart[q16] = q15 | q16 : int(1..4)])
- | q15 : int(3..4)]),
- x_PartitionOccurrence_NumParts = max([x_PartitionOccurrence_WhichPart[q17] | q17 : int(1..4)]),
- and([x_PartitionOccurrence_PartSizes[q18] =
- sum([toInt(x_PartitionOccurrence_WhichPart[q19] = q18) | q19 : int(1..4)])
- | q18 : int(1..4)]),
- and([q20 <= x_PartitionOccurrence_NumParts ->
- and([x_PartitionOccurrence_WhichPart[q21] = q20 -> x_PartitionOccurrence_FirstIndex[q20] <= q21
- | q21 : int(1..4)])
- | q20 : int(1..4)]),
- and([q20 <= x_PartitionOccurrence_NumParts ->
- or([x_PartitionOccurrence_WhichPart[q21] = q20 /\ x_PartitionOccurrence_FirstIndex[q20] = q21
- | q21 : int(1..4)])
- | q20 : int(1..4)]),
- and([q20 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_FirstIndex[q20] = 1 | q20 : int(1..4)]),
- and([q22 <= x_PartitionOccurrence_NumParts /\ q23 <= x_PartitionOccurrence_NumParts ->
- (q22 < q23 <-> x_PartitionOccurrence_FirstIndex[q22] < x_PartitionOccurrence_FirstIndex[q23])
- | q22 : int(1..4), q23 : int(1..4)]),
- and([q26 <= x_PartitionOccurrence_NumParts ->
- or([q30 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q32 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q30] ->
- or([x_PartitionOccurrence_WhichPart[q34] = q26 /\
- q34 =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q30, q32]
- | q34 : int(1..4)])
- | q32 : int(1..4)])
- /\
- and([x_PartitionOccurrence_WhichPart[q36] = q26 ->
- or([q38 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q30]
- /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q30, q38] =
- q36 | q38 : int(1..4)])
- | q36 : int(1..4)]))
- | q30 : int(1..4)])
- | q26 : int(1..4)]),
- and([q41 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q43 <= x_PartitionOccurrence_NumParts /\
- (and([x_PartitionOccurrence_WhichPart[q46] = q43 ->
- or([q48 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q41]
- /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q41, q48] =
- q46 | q48 : int(1..4)])
- | q46 : int(1..4)])
- /\
- and([q50 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q41] ->
- or([x_PartitionOccurrence_WhichPart[q52] = q43 /\
- q52 =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q41, q50]
- | q52 : int(1..4)])
- | q50 : int(1..4)]))
- | q43 : int(1..4)])
- | q41 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_1-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_4_1-solution000001.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_1-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_4_1-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_1-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_4_1-solution000003.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_1.eprime b/tests/exhaustive/basic/partition_06/expected/model_4_1.eprime
new file mode 100644
index 0000000000..7b16b63344
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_1.eprime
@@ -0,0 +1,82 @@
+language ESSENCE' 1.0
+
+find x_PartitionOccurrence_NumParts: int(1..4)
+find x_PartitionOccurrence_WhichPart: matrix indexed by [int(1..4)] of int(1..4)
+find x_PartitionOccurrence_PartSizes: matrix indexed by [int(1..4)] of int(0..4)
+find x_PartitionOccurrence_FirstIndex: matrix indexed by [int(1..4)] of int(1..4)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker: int(0..4)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence: matrix indexed by [int(1..4), int(1..4)] of bool
+branching on
+ [x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker,
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence, x_PartitionOccurrence_NumParts,
+ x_PartitionOccurrence_WhichPart, x_PartitionOccurrence_PartSizes, x_PartitionOccurrence_FirstIndex]
+such that
+ and([q49 <= x_PartitionOccurrence_NumParts ->
+ sum([toInt(x_PartitionOccurrence_WhichPart[q52] = q49) | q52 : int(1..4)]) = 2
+ | q49 : int(1..4)]),
+ and([q1 <= x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q1] <= 4 | q1 : int(1..4)]),
+ and([q1 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q1] = 0 | q1 : int(1..4)]),
+ x_PartitionOccurrence_NumParts <= 4,
+ and([q2 <= x_PartitionOccurrence_NumParts -> or([x_PartitionOccurrence_WhichPart[q3] = q2 | q3 : int(1..4)])
+ | q2 : int(3..4)]),
+ x_PartitionOccurrence_NumParts = max([x_PartitionOccurrence_WhichPart[q4] | q4 : int(1..4)]),
+ and([x_PartitionOccurrence_PartSizes[q5] = sum([toInt(x_PartitionOccurrence_WhichPart[q6] = q5) | q6 : int(1..4)])
+ | q5 : int(1..4)]),
+ and([q7 <= x_PartitionOccurrence_NumParts ->
+ and([x_PartitionOccurrence_WhichPart[q8] = q7 -> x_PartitionOccurrence_FirstIndex[q7] <= q8 | q8 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([q7 <= x_PartitionOccurrence_NumParts ->
+ or([x_PartitionOccurrence_WhichPart[q8] = q7 /\ x_PartitionOccurrence_FirstIndex[q7] = q8 | q8 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([q7 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_FirstIndex[q7] = 1 | q7 : int(1..4)]),
+ and([q9 <= x_PartitionOccurrence_NumParts /\ q10 <= x_PartitionOccurrence_NumParts ->
+ (q9 < q10 <-> x_PartitionOccurrence_FirstIndex[q9] < x_PartitionOccurrence_FirstIndex[q10])
+ | q9 : int(1..4), q10 : int(1..4)]),
+ and([1 =
+ sum([toInt(q46 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q46, q11])
+ | q46 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q47 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q47, q48]) | q48 : int(1..4)]) >= 1
+ | q47 : int(1..4)]),
+ and([q14 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ [-toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q14, q19]) | q19 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q15, q21] = false | q21 : int(1..4)])
+ | q15 : int(1..4)]),
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker <= 4,
+ and([q16 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q16, q17]) | q17 : int(1..4)]) <= 4
+ | q16 : int(1..4)]),
+ 4 =
+ sum([toInt(q22 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker) *
+ catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q22, q23])
+ | q23 : int(1..4)]),
+ 0)
+ | q22 : int(1..4)]),
+ and([q26 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker ->
+ or([q28 <= x_PartitionOccurrence_NumParts /\
+ (and([x_PartitionOccurrence_WhichPart[q31] = q28 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q26, q31]
+ | q31 : int(1..4)])
+ /\
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q26, q32] ->
+ or([x_PartitionOccurrence_WhichPart[q34] = q28 /\ q34 = q32 | q34 : int(1..4)])
+ | q32 : int(1..4)]))
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q36 <= x_PartitionOccurrence_NumParts ->
+ or([q40 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Marker /\
+ (and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q40, q41] ->
+ or([x_PartitionOccurrence_WhichPart[q43] = q36 /\ q43 = q41 | q43 : int(1..4)])
+ | q41 : int(1..4)])
+ /\
+ and([x_PartitionOccurrence_WhichPart[q45] = q36 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q40, q45]
+ | q45 : int(1..4)]))
+ | q40 : int(1..4)])
+ | q36 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_2-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_4_2-solution000001.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_2-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_4_2-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_2-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_4_2-solution000003.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_2-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_2.eprime b/tests/exhaustive/basic/partition_06/expected/model_4_2.eprime
new file mode 100644
index 0000000000..7413ed3262
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_2.eprime
@@ -0,0 +1,112 @@
+language ESSENCE' 1.0
+
+find x_PartitionOccurrence_NumParts: int(1..4)
+find x_PartitionOccurrence_WhichPart: matrix indexed by [int(1..4)] of int(1..4)
+find x_PartitionOccurrence_PartSizes: matrix indexed by [int(1..4)] of int(0..4)
+find x_PartitionOccurrence_FirstIndex: matrix indexed by [int(1..4)] of int(1..4)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker: int(0..4)
+find x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..4), int(1..4)] of int(1..5)
+branching on
+ [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker,
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy, x_PartitionOccurrence_NumParts,
+ x_PartitionOccurrence_WhichPart, x_PartitionOccurrence_PartSizes, x_PartitionOccurrence_FirstIndex]
+such that
+ and([q56 <= x_PartitionOccurrence_NumParts ->
+ sum([toInt(x_PartitionOccurrence_WhichPart[q59] = q56) | q59 : int(1..4)]) = 2
+ | q56 : int(1..4)]),
+ and([q1 <= x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q1] <= 4 | q1 : int(1..4)]),
+ and([q1 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q1] = 0 | q1 : int(1..4)]),
+ x_PartitionOccurrence_NumParts <= 4,
+ and([q2 <= x_PartitionOccurrence_NumParts -> or([x_PartitionOccurrence_WhichPart[q3] = q2 | q3 : int(1..4)])
+ | q2 : int(3..4)]),
+ x_PartitionOccurrence_NumParts = max([x_PartitionOccurrence_WhichPart[q4] | q4 : int(1..4)]),
+ and([x_PartitionOccurrence_PartSizes[q5] = sum([toInt(x_PartitionOccurrence_WhichPart[q6] = q5) | q6 : int(1..4)])
+ | q5 : int(1..4)]),
+ and([q7 <= x_PartitionOccurrence_NumParts ->
+ and([x_PartitionOccurrence_WhichPart[q8] = q7 -> x_PartitionOccurrence_FirstIndex[q7] <= q8 | q8 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([q7 <= x_PartitionOccurrence_NumParts ->
+ or([x_PartitionOccurrence_WhichPart[q8] = q7 /\ x_PartitionOccurrence_FirstIndex[q7] = q8 | q8 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([q7 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_FirstIndex[q7] = 1 | q7 : int(1..4)]),
+ and([q9 <= x_PartitionOccurrence_NumParts /\ q10 <= x_PartitionOccurrence_NumParts ->
+ (q9 < q10 <-> x_PartitionOccurrence_FirstIndex[q9] < x_PartitionOccurrence_FirstIndex[q10])
+ | q9 : int(1..4), q10 : int(1..4)]),
+ alldifferent_except([toInt(q60 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q60, q61] !=
+ 5)
+ *
+ catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy
+ [q60, q61],
+ 0)
+ | q60 : int(1..4), q61 : int(1..4)],
+ 0),
+ and([q62 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q62, q64] != 5)
+ | q64 : int(1..4)])
+ >= 1
+ | q62 : int(1..4)]),
+ and([q14 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ [x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q14, q22] | q22 : int(1..4)] x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q15, q55] = 1
+ | q55 : int(1..4)])
+ | q15 : int(1..4)]),
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker <= 4,
+ and([q16 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q16, q17] <
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q16, q17 + 1]
+ \/ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q16, q17] = 5
+ | q17 : int(1..3)])
+ | q16 : int(1..4)]),
+ and([q16 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q16, q18] = 5 ->
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q16, q18 + 1] = 5
+ | q18 : int(1..3)])
+ | q16 : int(1..4)]),
+ and([q16 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q16, q19] != 5)
+ | q19 : int(1..4)])
+ <= 4
+ | q16 : int(1..4)]),
+ 4 =
+ sum([toInt(q24 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker) *
+ catchUndef(sum([toInt(x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q24, q26] !=
+ 5)
+ | q26 : int(1..4)]),
+ 0)
+ | q24 : int(1..4)]),
+ and([q29 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker ->
+ or([q31 <= x_PartitionOccurrence_NumParts /\
+ (and([x_PartitionOccurrence_WhichPart[q34] = q31 ->
+ or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q29, q36] != 5 /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q29, q36] = q34
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+ /\
+ and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q29, q38] != 5 ->
+ or([x_PartitionOccurrence_WhichPart[q40] = q31 /\
+ q40 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q29, q38]
+ | q40 : int(1..4)])
+ | q38 : int(1..4)]))
+ | q31 : int(1..4)])
+ | q29 : int(1..4)]),
+ and([q42 <= x_PartitionOccurrence_NumParts ->
+ or([q46 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Marker /\
+ (and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q46, q48] != 5 ->
+ or([x_PartitionOccurrence_WhichPart[q50] = q42 /\
+ q50 = x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q46, q48]
+ | q50 : int(1..4)])
+ | q48 : int(1..4)])
+ /\
+ and([x_PartitionOccurrence_WhichPart[q52] = q42 ->
+ or([x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q46, q54] != 5 /\
+ x_PartitionAsSet_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q46, q54] = q52
+ | q54 : int(1..4)])
+ | q52 : int(1..4)]))
+ | q46 : int(1..4)])
+ | q42 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_3-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_4_3-solution000001.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_3-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_3-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_4_3-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_3-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_4_3-solution000003.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_3.eprime.orig b/tests/exhaustive/basic/partition_06/expected/model_4_3.eprime.orig
deleted file mode 100644
index a855ea9d5c..0000000000
--- a/tests/exhaustive/basic/partition_06/expected/model_4_3.eprime.orig
+++ /dev/null
@@ -1,123 +0,0 @@
-language ESSENCE' 1.0
-
-find x_PartitionOccurrence_NumParts: int(1..4)
-find x_PartitionOccurrence_WhichPart: matrix indexed by [int(1..4)] of int(1..4)
-find x_PartitionOccurrence_PartSizes: matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionOccurrence_FirstIndex: matrix indexed by [int(1..4)] of int(1..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..4)] of int(0..4)
-find x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..4)] of int(1..4)
-branching on
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values,
- x_PartitionOccurrence_NumParts, x_PartitionOccurrence_WhichPart, x_PartitionOccurrence_PartSizes,
- x_PartitionOccurrence_FirstIndex]
-such that
- and([q53 <= x_PartitionOccurrence_NumParts ->
- sum([toInt(x_PartitionOccurrence_WhichPart[q56] = q53) | q56 : int(1..4)]) = 2
- | q53 : int(1..4)]),
- and([q1 <= x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q1] <= 4 | q1 : int(1..4)]),
- and([q1 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q1] = 0 | q1 : int(1..4)]),
- x_PartitionOccurrence_NumParts <= 4,
- and([q2 <= x_PartitionOccurrence_NumParts -> or([x_PartitionOccurrence_WhichPart[q3] = q2 | q3 : int(1..4)])
- | q2 : int(3..4)]),
- x_PartitionOccurrence_NumParts = max([x_PartitionOccurrence_WhichPart[q4] | q4 : int(1..4)]),
- and([x_PartitionOccurrence_PartSizes[q5] = sum([toInt(x_PartitionOccurrence_WhichPart[q6] = q5) | q6 : int(1..4)])
- | q5 : int(1..4)]),
- and([q7 <= x_PartitionOccurrence_NumParts ->
- and([x_PartitionOccurrence_WhichPart[q8] = q7 -> x_PartitionOccurrence_FirstIndex[q7] <= q8 | q8 : int(1..4)])
- | q7 : int(1..4)]),
- and([q7 <= x_PartitionOccurrence_NumParts ->
- or([x_PartitionOccurrence_WhichPart[q8] = q7 /\ x_PartitionOccurrence_FirstIndex[q7] = q8 | q8 : int(1..4)])
- | q7 : int(1..4)]),
- and([q7 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_FirstIndex[q7] = 1 | q7 : int(1..4)]),
- and([q9 <= x_PartitionOccurrence_NumParts /\ q10 <= x_PartitionOccurrence_NumParts ->
- (q9 < q10 <-> x_PartitionOccurrence_FirstIndex[q9] < x_PartitionOccurrence_FirstIndex[q10])
- | q9 : int(1..4), q10 : int(1..4)]),
- alldifferent_except([toInt(q57 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- q58 <=
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker
- [q57])
- *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values
- [q57, q58],
- 0)
- | q57 : int(1..4), q58 : int(1..4)],
- 0),
- and([q59 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q59] >= 1
- | q59 : int(1..4)]),
- and([q14 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q14]; int(1)],
- [x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q14, q21]
- | q21 : int(1..4)];
- int(1..2)])
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q15] = 0 /\
- and([x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q15, q52] = 1
- | q52 : int(1..4)])
- | q15 : int(1..4)]),
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker <= 4,
- and([q16 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q17 + 1 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q16] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q16, q17] <
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q16, q17 + 1]
- | q17 : int(1..3)])
- | q16 : int(1..4)]),
- and([q16 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q18 > x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q16] ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q16, q18] = 1
- | q18 : int(1..4)])
- | q16 : int(1..4)]),
- and([q16 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q16] <= 4
- | q16 : int(1..4)]),
- 4 =
- sum([toInt(q23 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker) *
- catchUndef(x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q23], 0)
- | q23 : int(1..4)]),
- and([q26 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q28 <= x_PartitionOccurrence_NumParts /\
- (and([x_PartitionOccurrence_WhichPart[q31] = q28 ->
- or([q33 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q26]
- /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q26, q33] =
- q31 | q33 : int(1..4)])
- | q31 : int(1..4)])
- /\
- and([q35 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q26] ->
- or([x_PartitionOccurrence_WhichPart[q37] = q28 /\
- q37 =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q26, q35]
- | q37 : int(1..4)])
- | q35 : int(1..4)]))
- | q28 : int(1..4)])
- | q26 : int(1..4)]),
- and([q39 <= x_PartitionOccurrence_NumParts ->
- or([q43 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Marker /\
- (and([q45 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q43] ->
- or([x_PartitionOccurrence_WhichPart[q47] = q39 /\
- q47 =
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q43, q45]
- | q47 : int(1..4)])
- | q45 : int(1..4)])
- /\
- and([x_PartitionOccurrence_WhichPart[q49] = q39 ->
- or([q51 <= x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q43]
- /\
- x_PartitionAsSet_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q43, q51] =
- q49 | q51 : int(1..4)])
- | q49 : int(1..4)]))
- | q43 : int(1..4)])
- | q39 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_4-solution000001.solution b/tests/exhaustive/basic/partition_06/expected/model_4_4-solution000001.solution
new file mode 100644
index 0000000000..bdecd9ce5b
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 2}, {3, 4})
+$ Visualisation for x
+$ 1 2
+$ 3 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_4-solution000002.solution b/tests/exhaustive/basic/partition_06/expected/model_4_4-solution000002.solution
new file mode 100644
index 0000000000..b616543ee7
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 3}, {2, 4})
+$ Visualisation for x
+$ 1 3
+$ 2 4
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_4-solution000003.solution b/tests/exhaustive/basic/partition_06/expected/model_4_4-solution000003.solution
new file mode 100644
index 0000000000..8d196199c8
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be partition({1, 4}, {2, 3})
+$ Visualisation for x
+$ 1 4
+$ 2 3
+
diff --git a/tests/exhaustive/basic/partition_06/expected/model_4_4.eprime b/tests/exhaustive/basic/partition_06/expected/model_4_4.eprime
new file mode 100644
index 0000000000..6be4048cce
--- /dev/null
+++ b/tests/exhaustive/basic/partition_06/expected/model_4_4.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_PartitionOccurrence_NumParts: int(1..4)
+find x_PartitionOccurrence_WhichPart: matrix indexed by [int(1..4)] of int(1..4)
+find x_PartitionOccurrence_PartSizes: matrix indexed by [int(1..4)] of int(0..4)
+find x_PartitionOccurrence_FirstIndex: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_PartitionOccurrence_NumParts, x_PartitionOccurrence_WhichPart, x_PartitionOccurrence_PartSizes,
+ x_PartitionOccurrence_FirstIndex]
+such that
+ and([q11 <= x_PartitionOccurrence_NumParts ->
+ sum([toInt(x_PartitionOccurrence_WhichPart[q14] = q11) | q14 : int(1..4)]) = 2
+ | q11 : int(1..4)]),
+ and([q1 <= x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q1] <= 4 | q1 : int(1..4)]),
+ and([q1 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_PartSizes[q1] = 0 | q1 : int(1..4)]),
+ x_PartitionOccurrence_NumParts <= 4,
+ and([q2 <= x_PartitionOccurrence_NumParts -> or([x_PartitionOccurrence_WhichPart[q3] = q2 | q3 : int(1..4)])
+ | q2 : int(3..4)]),
+ x_PartitionOccurrence_NumParts = max([x_PartitionOccurrence_WhichPart[q4] | q4 : int(1..4)]),
+ and([x_PartitionOccurrence_PartSizes[q5] = sum([toInt(x_PartitionOccurrence_WhichPart[q6] = q5) | q6 : int(1..4)])
+ | q5 : int(1..4)]),
+ and([q7 <= x_PartitionOccurrence_NumParts ->
+ and([x_PartitionOccurrence_WhichPart[q8] = q7 -> x_PartitionOccurrence_FirstIndex[q7] <= q8 | q8 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([q7 <= x_PartitionOccurrence_NumParts ->
+ or([x_PartitionOccurrence_WhichPart[q8] = q7 /\ x_PartitionOccurrence_FirstIndex[q7] = q8 | q8 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([q7 > x_PartitionOccurrence_NumParts -> x_PartitionOccurrence_FirstIndex[q7] = 1 | q7 : int(1..4)]),
+ and([q9 <= x_PartitionOccurrence_NumParts /\ q10 <= x_PartitionOccurrence_NumParts ->
+ (q9 < q10 <-> x_PartitionOccurrence_FirstIndex[q9] < x_PartitionOccurrence_FirstIndex[q10])
+ | q9 : int(1..4), q10 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000001.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000002.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000003.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000005.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000006.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1.eprime
new file mode 100644
index 0000000000..029d9f718f
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1.eprime
@@ -0,0 +1,20 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_Occurrence: matrix indexed by [int(a..b)] of bool
+branching on [x_Occurrence]
+such that
+ and([and([x_Occurrence[t_ExplicitVarSizeWithDummy[q7]]
+ | q7 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q7] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q8] | q8 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q8] != b + 1]) <= 6
+ | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q2] < t_ExplicitVarSizeWithDummy[q2 + 1] \/
+ t_ExplicitVarSizeWithDummy[q2] = b + 1
+ | q2 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q3] = b + 1 -> t_ExplicitVarSizeWithDummy[q3 + 1] = b + 1
+ | q3 : int(1..1 + (b - a) - 1)])]),
+ n <= sum([toInt(x_Occurrence[q1]) | q1 : int(a..b)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000004.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000006.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2.eprime
new file mode 100644
index 0000000000..2334196ec8
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_Occurrence: matrix indexed by [int(a..b)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ and([and([x_Occurrence[t_ExplicitVarSizeWithDummy[q16]]
+ | q16 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q16] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q17] | q17 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q17] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q11] < t_ExplicitVarSizeWithDummy[q11 + 1] \/
+ t_ExplicitVarSizeWithDummy[q11] = b + 1
+ | q11 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q12] = b + 1 -> t_ExplicitVarSizeWithDummy[q12 + 1] = b + 1
+ | q12 : int(1..1 + (b - a) - 1)])]),
+ n <= sum([toInt(x_Occurrence[q1]) | q1 : int(a..b)]),
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = b + 1
+ | q2 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = b + 1 -> x_ExplicitVarSizeWithDummy[q3 + 1] = b + 1
+ | q3 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithDummy[q4] != b + 1) | q4 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithDummy[q7] != b + 1 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]]
+ | q7 : int(1..1 + (b - a))]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != b + 1 /\ x_ExplicitVarSizeWithDummy[q10] = q8
+ | q10 : int(1..1 + (b - a))])
+ | q8 : int(a..b)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000002.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000003.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000004.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000005.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000006.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3.eprime
new file mode 100644
index 0000000000..d44b8ab518
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_Occurrence: matrix indexed by [int(a..b)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..1 + (b - a))
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ and([and([x_Occurrence[t_ExplicitVarSizeWithDummy[q15]]
+ | q15 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q15] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q16] | q16 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q16] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q10] < t_ExplicitVarSizeWithDummy[q10 + 1] \/
+ t_ExplicitVarSizeWithDummy[q10] = b + 1
+ | q10 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q11] = b + 1 -> t_ExplicitVarSizeWithDummy[q11 + 1] = b + 1
+ | q11 : int(1..1 + (b - a) - 1)])]),
+ n <= sum([toInt(x_Occurrence[q1]) | q1 : int(a..b)]),
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..1 + (b - a) - 1)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = a
+ | q3 : int(1..1 + (b - a))]),
+ n <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..1 + (b - a))]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7
+ | q9 : int(1..1 + (b - a))])
+ | q7 : int(a..b)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000002.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000003.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000004.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000005.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000006.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4.eprime
new file mode 100644
index 0000000000..c5a3851fe1
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_Occurrence: matrix indexed by [int(a..b)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..1 + (b - a))] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ and([and([x_Occurrence[t_ExplicitVarSizeWithDummy[q17]]
+ | q17 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q17] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q18] | q18 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q18] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q12] < t_ExplicitVarSizeWithDummy[q12 + 1] \/
+ t_ExplicitVarSizeWithDummy[q12] = b + 1
+ | q12 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q13] = b + 1 -> t_ExplicitVarSizeWithDummy[q13 + 1] = b + 1
+ | q13 : int(1..1 + (b - a) - 1)])]),
+ n <= sum([toInt(x_Occurrence[q1]) | q1 : int(a..b)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = a
+ | q3 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4]
+ | q4 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]]
+ | q8 : int(1..1 + (b - a))]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9
+ | q11 : int(1..1 + (b - a))])
+ | q9 : int(a..b)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000001.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000002.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000003.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000005.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000006.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1.eprime
new file mode 100644
index 0000000000..6a88075ca6
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1.eprime
@@ -0,0 +1,33 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1)
+find x_Occurrence: matrix indexed by [int(a..b)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ and([and([or([x_ExplicitVarSizeWithDummy[q18] != b + 1 /\
+ x_ExplicitVarSizeWithDummy[q18] = t_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..1 + (b - a))])
+ | q16 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q16] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q19] | q19 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q19] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q11] < t_ExplicitVarSizeWithDummy[q11 + 1] \/
+ t_ExplicitVarSizeWithDummy[q11] = b + 1
+ | q11 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q12] = b + 1 -> t_ExplicitVarSizeWithDummy[q12 + 1] = b + 1
+ | q12 : int(1..1 + (b - a) - 1)])]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = b + 1
+ | q1 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = b + 1 -> x_ExplicitVarSizeWithDummy[q2 + 1] = b + 1
+ | q2 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != b + 1) | q3 : int(1..1 + (b - a))]),
+ n <= sum([toInt(x_Occurrence[q5]) | q5 : int(a..b)]),
+ and([x_Occurrence[q6] ->
+ or([x_ExplicitVarSizeWithDummy[q8] != b + 1 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..1 + (b - a))])
+ | q6 : int(a..b)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != b + 1 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]]
+ | q10 : int(1..1 + (b - a))])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000004.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000006.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2.eprime
new file mode 100644
index 0000000000..f4dd241cca
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2.eprime
@@ -0,0 +1,26 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1)
+branching on [x_ExplicitVarSizeWithDummy]
+such that
+ and([and([or([x_ExplicitVarSizeWithDummy[q12] != b + 1 /\
+ x_ExplicitVarSizeWithDummy[q12] = t_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..1 + (b - a))])
+ | q10 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q10] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q13] | q13 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q13] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q5] < t_ExplicitVarSizeWithDummy[q5 + 1] \/
+ t_ExplicitVarSizeWithDummy[q5] = b + 1
+ | q5 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q6] = b + 1 -> t_ExplicitVarSizeWithDummy[q6 + 1] = b + 1
+ | q6 : int(1..1 + (b - a) - 1)])]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = b + 1
+ | q1 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = b + 1 -> x_ExplicitVarSizeWithDummy[q2 + 1] = b + 1
+ | q2 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != b + 1) | q3 : int(1..1 + (b - a))])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000002.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000003.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000004.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000005.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000006.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3.eprime
new file mode 100644
index 0000000000..92c80b9133
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..1 + (b - a))
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([and([or([x_ExplicitVarSizeWithDummy[q23] != b + 1 /\
+ x_ExplicitVarSizeWithDummy[q23] = t_ExplicitVarSizeWithDummy[q21]
+ | q23 : int(1..1 + (b - a))])
+ | q21 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q21] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q24] | q24 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q24] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q16] < t_ExplicitVarSizeWithDummy[q16 + 1] \/
+ t_ExplicitVarSizeWithDummy[q16] = b + 1
+ | q16 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q17] = b + 1 -> t_ExplicitVarSizeWithDummy[q17 + 1] = b + 1
+ | q17 : int(1..1 + (b - a) - 1)])]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = b + 1
+ | q1 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = b + 1 -> x_ExplicitVarSizeWithDummy[q2 + 1] = b + 1
+ | q2 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != b + 1) | q3 : int(1..1 + (b - a))]),
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..1 + (b - a) - 1)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = a
+ | q6 : int(1..1 + (b - a))]),
+ n <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != b + 1 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..1 + (b - a))])
+ | q9 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithDummy[q13] != b + 1 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..1 + (b - a))])
+ | q13 : int(1..1 + (b - a))])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000002.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000003.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000004.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000005.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000006.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4.eprime
new file mode 100644
index 0000000000..4b598c63b3
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..1 + (b - a))] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([and([or([x_ExplicitVarSizeWithDummy[q25] != b + 1 /\
+ x_ExplicitVarSizeWithDummy[q25] = t_ExplicitVarSizeWithDummy[q23]
+ | q25 : int(1..1 + (b - a))])
+ | q23 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q23] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q26] | q26 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q26] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q18] < t_ExplicitVarSizeWithDummy[q18 + 1] \/
+ t_ExplicitVarSizeWithDummy[q18] = b + 1
+ | q18 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q19] = b + 1 -> t_ExplicitVarSizeWithDummy[q19 + 1] = b + 1
+ | q19 : int(1..1 + (b - a) - 1)])]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = b + 1
+ | q1 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = b + 1 -> x_ExplicitVarSizeWithDummy[q2 + 1] = b + 1
+ | q2 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != b + 1) | q3 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = a
+ | q6 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7]
+ | q7 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != b + 1 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..1 + (b - a))])
+ | q11 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithDummy[q15] != b + 1 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..1 + (b - a))])
+ | q15 : int(1..1 + (b - a))])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000001.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000002.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000003.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000005.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000006.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1.eprime
new file mode 100644
index 0000000000..00361f80a7
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_ExplicitVarSizeWithMarker_Marker: int(0..1 + (b - a))
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+find x_Occurrence: matrix indexed by [int(a..b)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([and([or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = t_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..1 + (b - a))])
+ | q15 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q15] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q18] | q18 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q18] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q10] < t_ExplicitVarSizeWithDummy[q10 + 1] \/
+ t_ExplicitVarSizeWithDummy[q10] = b + 1
+ | q10 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q11] = b + 1 -> t_ExplicitVarSizeWithDummy[q11 + 1] = b + 1
+ | q11 : int(1..1 + (b - a) - 1)])]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..1 + (b - a) - 1)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = a
+ | q2 : int(1..1 + (b - a))]),
+ n <= x_ExplicitVarSizeWithMarker_Marker,
+ n <= sum([toInt(x_Occurrence[q4]) | q4 : int(a..b)]),
+ and([x_Occurrence[q5] ->
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5
+ | q7 : int(1..1 + (b - a))])
+ | q5 : int(a..b)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..1 + (b - a))])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000004.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000006.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2.eprime
new file mode 100644
index 0000000000..f071e0ff08
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_ExplicitVarSizeWithMarker_Marker: int(0..1 + (b - a))
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([and([or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q23] = t_ExplicitVarSizeWithDummy[q21]
+ | q23 : int(1..1 + (b - a))])
+ | q21 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q21] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q24] | q24 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q24] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q16] < t_ExplicitVarSizeWithDummy[q16 + 1] \/
+ t_ExplicitVarSizeWithDummy[q16] = b + 1
+ | q16 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q17] = b + 1 -> t_ExplicitVarSizeWithDummy[q17 + 1] = b + 1
+ | q17 : int(1..1 + (b - a) - 1)])]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..1 + (b - a) - 1)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = a
+ | q2 : int(1..1 + (b - a))]),
+ n <= x_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = b + 1
+ | q4 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = b + 1 -> x_ExplicitVarSizeWithDummy[q5 + 1] = b + 1
+ | q5 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithDummy[q6] != b + 1) | q6 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithDummy[q9] != b + 1 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..1 + (b - a))])
+ | q9 : int(1..1 + (b - a))]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != b + 1 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..1 + (b - a))])
+ | q13 : int(1..1 + (b - a))])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000002.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000003.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000004.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000005.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000006.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3.eprime
new file mode 100644
index 0000000000..8fa49fbf6d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_ExplicitVarSizeWithMarker_Marker: int(0..1 + (b - a))
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([and([or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = t_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..1 + (b - a))])
+ | q9 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q9] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q12] | q12 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q12] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q4] < t_ExplicitVarSizeWithDummy[q4 + 1] \/
+ t_ExplicitVarSizeWithDummy[q4] = b + 1
+ | q4 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q5] = b + 1 -> t_ExplicitVarSizeWithDummy[q5 + 1] = b + 1
+ | q5 : int(1..1 + (b - a) - 1)])]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..1 + (b - a) - 1)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = a
+ | q2 : int(1..1 + (b - a))]),
+ n <= x_ExplicitVarSizeWithMarker_Marker
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000002.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000003.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000004.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000005.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000006.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4.eprime
new file mode 100644
index 0000000000..bacc7d46b3
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4.eprime
@@ -0,0 +1,50 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_ExplicitVarSizeWithMarker_Marker: int(0..1 + (b - a))
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..1 + (b - a))] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([and([or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = t_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..1 + (b - a))])
+ | q22 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q22] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q25] | q25 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q25] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q17] < t_ExplicitVarSizeWithDummy[q17 + 1] \/
+ t_ExplicitVarSizeWithDummy[q17] = b + 1
+ | q17 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q18] = b + 1 -> t_ExplicitVarSizeWithDummy[q18 + 1] = b + 1
+ | q18 : int(1..1 + (b - a) - 1)])]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..1 + (b - a) - 1)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = a
+ | q2 : int(1..1 + (b - a))]),
+ n <= x_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = a
+ | q5 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6]
+ | q6 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..1 + (b - a))])
+ | q10 : int(1..1 + (b - a))]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..1 + (b - a))])
+ | q14 : int(1..1 + (b - a))])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000001.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000002.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000003.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000004.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000005.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000006.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1.eprime
new file mode 100644
index 0000000000..5b6f7598a4
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1.eprime
@@ -0,0 +1,38 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..1 + (b - a))] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+find x_Occurrence: matrix indexed by [int(a..b)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([and([or([x_ExplicitVarSizeWithFlags_Flags[q19] /\
+ x_ExplicitVarSizeWithFlags_Values[q19] = t_ExplicitVarSizeWithDummy[q17]
+ | q19 : int(1..1 + (b - a))])
+ | q17 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q17] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q20] | q20 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q20] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q12] < t_ExplicitVarSizeWithDummy[q12 + 1] \/
+ t_ExplicitVarSizeWithDummy[q12] = b + 1
+ | q12 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q13] = b + 1 -> t_ExplicitVarSizeWithDummy[q13 + 1] = b + 1
+ | q13 : int(1..1 + (b - a) - 1)])]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = a
+ | q2 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3]
+ | q3 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..1 + (b - a))]),
+ n <= sum([toInt(x_Occurrence[q6]) | q6 : int(a..b)]),
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7
+ | q9 : int(1..1 + (b - a))])
+ | q7 : int(a..b)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..1 + (b - a))])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000003.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000004.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000005.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000006.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2.eprime
new file mode 100644
index 0000000000..97885f92e5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..1 + (b - a))] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([and([or([x_ExplicitVarSizeWithFlags_Flags[q25] /\
+ x_ExplicitVarSizeWithFlags_Values[q25] = t_ExplicitVarSizeWithDummy[q23]
+ | q25 : int(1..1 + (b - a))])
+ | q23 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q23] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q26] | q26 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q26] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q18] < t_ExplicitVarSizeWithDummy[q18 + 1] \/
+ t_ExplicitVarSizeWithDummy[q18] = b + 1
+ | q18 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q19] = b + 1 -> t_ExplicitVarSizeWithDummy[q19 + 1] = b + 1
+ | q19 : int(1..1 + (b - a) - 1)])]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = a
+ | q2 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3]
+ | q3 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = b + 1
+ | q6 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = b + 1 -> x_ExplicitVarSizeWithDummy[q7 + 1] = b + 1
+ | q7 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithDummy[q8] != b + 1) | q8 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithDummy[q11] != b + 1 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..1 + (b - a))])
+ | q11 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != b + 1 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..1 + (b - a))])
+ | q15 : int(1..1 + (b - a))])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000002.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000003.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000004.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000005.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000006.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3.eprime
new file mode 100644
index 0000000000..60687fba2b
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3.eprime
@@ -0,0 +1,50 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..1 + (b - a))] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..1 + (b - a))
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([and([or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = t_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..1 + (b - a))])
+ | q22 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q22] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q25] | q25 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q25] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q17] < t_ExplicitVarSizeWithDummy[q17 + 1] \/
+ t_ExplicitVarSizeWithDummy[q17] = b + 1
+ | q17 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q18] = b + 1 -> t_ExplicitVarSizeWithDummy[q18 + 1] = b + 1
+ | q18 : int(1..1 + (b - a) - 1)])]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = a
+ | q2 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3]
+ | q3 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..1 + (b - a))]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..1 + (b - a) - 1)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = a
+ | q7 : int(1..1 + (b - a))]),
+ n <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..1 + (b - a))])
+ | q10 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..1 + (b - a))])
+ | q14 : int(1..1 + (b - a))])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000002.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000002.solution
new file mode 100644
index 0000000000..a28b6d6203
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000003.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000003.solution
new file mode 100644
index 0000000000..be06a54735
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000004.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000004.solution
new file mode 100644
index 0000000000..8dddb3b359
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000004.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000005.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000005.solution
new file mode 100644
index 0000000000..991fac89aa
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {2, 4}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000006.solution b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000006.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000006.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p.eprime-param b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p.eprime-param
new file mode 100644
index 0000000000..7d6b9721c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p.eprime-param
@@ -0,0 +1,5 @@
+language ESSENCE' 1.0
+
+letting n be 2
+letting a be 1
+letting b be 4
diff --git a/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4.eprime b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4.eprime
new file mode 100644
index 0000000000..ba348b8892
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+given n: int
+given a: int
+given b: int
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..1 + (b - a))] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..1 + (b - a))] of int(a..b)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([and([or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = t_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..1 + (b - a))])
+ | q11 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q11] != b + 1])
+ ->
+ sum([t_ExplicitVarSizeWithDummy[q14] | q14 : int(1..1 + (b - a)), t_ExplicitVarSizeWithDummy[q14] != b + 1]) <=
+ 6 | t_ExplicitVarSizeWithDummy : matrix indexed by [int(1..1 + (b - a))] of int(a..b + 1),
+ and([t_ExplicitVarSizeWithDummy[q6] < t_ExplicitVarSizeWithDummy[q6 + 1] \/
+ t_ExplicitVarSizeWithDummy[q6] = b + 1
+ | q6 : int(1..1 + (b - a) - 1)]),
+ and([t_ExplicitVarSizeWithDummy[q7] = b + 1 -> t_ExplicitVarSizeWithDummy[q7 + 1] = b + 1
+ | q7 : int(1..1 + (b - a) - 1)])]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..1 + (b - a) - 1)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = a
+ | q2 : int(1..1 + (b - a))]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3]
+ | q3 : int(1..1 + (b - a) - 1)]),
+ n <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..1 + (b - a))])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_1-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_1-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_1.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_1.eprime
new file mode 100644
index 0000000000..b9c9ef2a41
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_1.eprime
@@ -0,0 +1,8 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..7)] of bool
+branching on [x_Occurrence]
+such that
+ and([x_Occurrence[i] /\ x_Occurrence[j] -> |i - j| >= 3 | i : int(1..7), j : int(1..7), j > i]),
+ 3 <= sum([toInt(x_Occurrence[q1]) | q1 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_2-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_2-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_2.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_2.eprime
new file mode 100644
index 0000000000..f4555045bf
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_2.eprime
@@ -0,0 +1,17 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..7)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..7)] of int(1..8)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ and([x_Occurrence[i] /\ x_Occurrence[j] -> |i - j| >= 3 | i : int(1..7), j : int(1..7), j > i]),
+ 3 <= sum([toInt(x_Occurrence[q1]) | q1 : int(1..7)]),
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 8
+ | q2 : int(1..6)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 8 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 8 | q3 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 8) | q4 : int(1..7)]),
+ and([x_ExplicitVarSizeWithDummy[q7] != 8 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..7)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 8 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..7)])
+ | q8 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_3-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_3-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_3.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_3.eprime
new file mode 100644
index 0000000000..a9df3b1a89
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_3.eprime
@@ -0,0 +1,20 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..7)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..7)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7)] of int(1..7)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ and([x_Occurrence[i] /\ x_Occurrence[j] -> |i - j| >= 3 | i : int(1..7), j : int(1..7), j > i]),
+ 3 <= sum([toInt(x_Occurrence[q1]) | q1 : int(1..7)]),
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..6)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..7)]),
+ 3 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..7)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..7)])
+ | q7 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_4-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_4-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_4.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_4.eprime
new file mode 100644
index 0000000000..f343493acc
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_4.eprime
@@ -0,0 +1,20 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..7)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7)] of int(1..7)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ and([x_Occurrence[i] /\ x_Occurrence[j] -> |i - j| >= 3 | i : int(1..7), j : int(1..7), j > i]),
+ 3 <= sum([toInt(x_Occurrence[q1]) | q1 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..6)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..7)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..7)])
+ | q9 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_1-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_1-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_1.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_1.eprime
new file mode 100644
index 0000000000..0f44241558
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_1.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..7)] of int(1..8)
+find x_Occurrence: matrix indexed by [int(1..7)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q11] != 8 /\ x_ExplicitVarSizeWithDummy[q12] != 8 ->
+ |x_ExplicitVarSizeWithDummy[q11] - x_ExplicitVarSizeWithDummy[q12]| >= 3
+ | q11 : int(1..7), q12 : int(1..7), q12 > q11]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 8
+ | q1 : int(1..6)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 8 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 8 | q2 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 8) | q3 : int(1..7)]),
+ 3 <= sum([toInt(x_Occurrence[q5]) | q5 : int(1..7)]),
+ and([x_Occurrence[q6] ->
+ or([x_ExplicitVarSizeWithDummy[q8] != 8 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..7)])
+ | q6 : int(1..7)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 8 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_2-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_2-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_2.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_2.eprime
new file mode 100644
index 0000000000..4fb1321636
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_2.eprime
@@ -0,0 +1,13 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..7)] of int(1..8)
+branching on [x_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q5] != 8 /\ x_ExplicitVarSizeWithDummy[q6] != 8 ->
+ |x_ExplicitVarSizeWithDummy[q5] - x_ExplicitVarSizeWithDummy[q6]| >= 3
+ | q5 : int(1..7), q6 : int(1..7), q6 > q5]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 8
+ | q1 : int(1..6)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 8 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 8 | q2 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 8) | q3 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_3-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_3-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_3.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_3.eprime
new file mode 100644
index 0000000000..0c4c4b73d9
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_3.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..7)] of int(1..8)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..7)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7)] of int(1..7)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q16] != 8 /\ x_ExplicitVarSizeWithDummy[q17] != 8 ->
+ |x_ExplicitVarSizeWithDummy[q16] - x_ExplicitVarSizeWithDummy[q17]| >= 3
+ | q16 : int(1..7), q17 : int(1..7), q17 > q16]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 8
+ | q1 : int(1..6)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 8 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 8 | q2 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 8) | q3 : int(1..7)]),
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..6)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..7)]),
+ 3 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 8 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..7)])
+ | q9 : int(1..7)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 8 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..7)])
+ | q13 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_4-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_4-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_4.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_4.eprime
new file mode 100644
index 0000000000..dde41e36d9
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_4.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..7)] of int(1..8)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7)] of int(1..7)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q18] != 8 /\ x_ExplicitVarSizeWithDummy[q19] != 8 ->
+ |x_ExplicitVarSizeWithDummy[q18] - x_ExplicitVarSizeWithDummy[q19]| >= 3
+ | q18 : int(1..7), q19 : int(1..7), q19 > q18]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 8
+ | q1 : int(1..6)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 8 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 8 | q2 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 8) | q3 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..6)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 8 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..7)])
+ | q11 : int(1..7)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 8 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..7)])
+ | q15 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_1-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_1-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_1.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_1.eprime
new file mode 100644
index 0000000000..8a8eb99ad1
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..7)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7)] of int(1..7)
+find x_Occurrence: matrix indexed by [int(1..7)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker /\ q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ |x_ExplicitVarSizeWithMarker_Values[q10] - x_ExplicitVarSizeWithMarker_Values[q11]| >= 3
+ | q10 : int(1..7), q11 : int(1..7), q11 > q10]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..6)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..7)]),
+ 3 <= x_ExplicitVarSizeWithMarker_Marker,
+ 3 <= sum([toInt(x_Occurrence[q4]) | q4 : int(1..7)]),
+ and([x_Occurrence[q5] ->
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5 | q7 : int(1..7)])
+ | q5 : int(1..7)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_2-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_2-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_2.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_2.eprime
new file mode 100644
index 0000000000..dfacb2f87a
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..7)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7)] of int(1..7)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..7)] of int(1..8)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker /\ q17 <= x_ExplicitVarSizeWithMarker_Marker ->
+ |x_ExplicitVarSizeWithMarker_Values[q16] - x_ExplicitVarSizeWithMarker_Values[q17]| >= 3
+ | q16 : int(1..7), q17 : int(1..7), q17 > q16]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..6)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..7)]),
+ 3 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 8
+ | q4 : int(1..6)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 8 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 8 | q5 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 8) | q6 : int(1..7)]),
+ and([x_ExplicitVarSizeWithDummy[q9] != 8 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..7)])
+ | q9 : int(1..7)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 8 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..7)])
+ | q13 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_3-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_3-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_3.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_3.eprime
new file mode 100644
index 0000000000..a58004f8c5
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_3.eprime
@@ -0,0 +1,15 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..7)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7)] of int(1..7)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q4 <= x_ExplicitVarSizeWithMarker_Marker /\ q5 <= x_ExplicitVarSizeWithMarker_Marker ->
+ |x_ExplicitVarSizeWithMarker_Values[q4] - x_ExplicitVarSizeWithMarker_Values[q5]| >= 3
+ | q4 : int(1..7), q5 : int(1..7), q5 > q4]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..6)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..7)]),
+ 3 <= x_ExplicitVarSizeWithMarker_Marker
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_4-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_4-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_4.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_4.eprime
new file mode 100644
index 0000000000..0e6666e578
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_4.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..7)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7)] of int(1..7)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7)] of int(1..7)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ q18 <= x_ExplicitVarSizeWithMarker_Marker ->
+ |x_ExplicitVarSizeWithMarker_Values[q17] - x_ExplicitVarSizeWithMarker_Values[q18]| >= 3
+ | q17 : int(1..7), q18 : int(1..7), q18 > q17]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..6)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..7)]),
+ 3 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..6)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..7)])
+ | q10 : int(1..7)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..7)])
+ | q14 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_1-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_1-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_1.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_1.eprime
new file mode 100644
index 0000000000..65f611992a
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_1.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7)] of int(1..7)
+find x_Occurrence: matrix indexed by [int(1..7)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] /\ x_ExplicitVarSizeWithFlags_Flags[q13] ->
+ |x_ExplicitVarSizeWithFlags_Values[q12] - x_ExplicitVarSizeWithFlags_Values[q13]| >= 3
+ | q12 : int(1..7), q13 : int(1..7), q13 > q12]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..6)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..7)]),
+ 3 <= sum([toInt(x_Occurrence[q6]) | q6 : int(1..7)]),
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..7)])
+ | q7 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_2-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_2-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_2.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_2.eprime
new file mode 100644
index 0000000000..ff6745f307
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_2.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7)] of int(1..7)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..7)] of int(1..8)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Flags[q19] ->
+ |x_ExplicitVarSizeWithFlags_Values[q18] - x_ExplicitVarSizeWithFlags_Values[q19]| >= 3
+ | q18 : int(1..7), q19 : int(1..7), q19 > q18]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..6)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..7)]),
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 8
+ | q6 : int(1..6)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 8 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 8 | q7 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 8) | q8 : int(1..7)]),
+ and([x_ExplicitVarSizeWithDummy[q11] != 8 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..7)])
+ | q11 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 8 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..7)])
+ | q15 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_3-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_3-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_3.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_3.eprime
new file mode 100644
index 0000000000..1d7cf573bd
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_3.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7)] of int(1..7)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..7)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7)] of int(1..7)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] /\ x_ExplicitVarSizeWithFlags_Flags[q18] ->
+ |x_ExplicitVarSizeWithFlags_Values[q17] - x_ExplicitVarSizeWithFlags_Values[q18]| >= 3
+ | q17 : int(1..7), q18 : int(1..7), q18 > q17]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..6)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..7)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..6)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..7)]),
+ 3 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..7)])
+ | q10 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..7)])
+ | q14 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_4-solution000001.solution b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_4-solution000001.solution
new file mode 100644
index 0000000000..f1495354fe
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 4, 7}
diff --git a/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_4.eprime b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_4.eprime
new file mode 100644
index 0000000000..4d96a6fb8a
--- /dev/null
+++ b/tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_4.eprime
@@ -0,0 +1,16 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7)] of int(1..7)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] /\ x_ExplicitVarSizeWithFlags_Flags[q7] ->
+ |x_ExplicitVarSizeWithFlags_Values[q6] - x_ExplicitVarSizeWithFlags_Values[q7]| >= 3
+ | q6 : int(1..7), q7 : int(1..7), q7 > q6]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..6)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..7)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..6)]),
+ 3 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..7)])
+
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_1_1-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_1_1-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_1_1-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_1_1-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_1_1-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_1_1-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_1_1.eprime b/tests/exhaustive/basic/relation04_param/expected/model_1_1.eprime
new file mode 100644
index 0000000000..2ec04d204d
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_1_1.eprime
@@ -0,0 +1,70 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given fin2: int
+given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
+given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
+given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker: int(0..84)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence:
+ matrix indexed by [int(1..84), int(2..3)] of bool
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+branching on
+ [r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker, r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1,
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence,
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3]
+such that
+ and([q9 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ or([and([a_RelationAsSetR6_ExplicitR6_1[q11] = r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q9],
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q9, a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q11, q13]]
+ | q13 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q11, q13] != 4])
+ /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q9, q14] ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q11, q16] = q14
+ | q16 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q11, q16] != 4])
+ | q14 : int(2..3)]),
+ a_RelationAsSetR6_ExplicitR6_3[q11] = r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q9];
+ int(1..3)])
+ | q11 : int(1..fin1)])
+ | q9 : int(1..84)]),
+ and([or([q19 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q19] = a_RelationAsSetR6_ExplicitR6_1[q17],
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q19, q20] ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q17, q22] = q20
+ | q22 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q17, q22] != 4])
+ | q20 : int(2..3)])
+ /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q19, a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q17, q24]]
+ | q24 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q17, q24] != 4]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q19] = a_RelationAsSetR6_ExplicitR6_3[q17];
+ int(1..3)])
+ | q19 : int(1..84)])
+ | q17 : int(1..fin1)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker = fin1,
+ and([q1 + 1 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ flatten([[r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q1]; int(1)],
+ [-toInt(r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q1, q5]) | q5 : int(2..3)],
+ [r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q1]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q2] = 1,
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q2, q7] = false | q7 : int(2..3)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q2] = 4;
+ int(1..3)])
+ | q2 : int(1..84)])
+
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_1_2-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_1_2-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_1_2-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_1_2-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_1_2-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_1_2-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_1_2.eprime b/tests/exhaustive/basic/relation04_param/expected/model_1_2.eprime
new file mode 100644
index 0000000000..2a255134f0
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_1_2.eprime
@@ -0,0 +1,152 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given fin2: int
+given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
+given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
+given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker: int(0..84)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence:
+ matrix indexed by [int(1..84), int(2..3)] of bool
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker: int(0..84)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..84), int(1..2)] of int(2..4)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+branching on
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker, r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3, r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker,
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1,
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence,
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3]
+such that
+ and([q36 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ or([and([a_RelationAsSetR6_ExplicitR6_1[q38] = r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q36],
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q36, a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q38, q40]]
+ | q40 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q38, q40] != 4])
+ /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q36, q41] ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q38, q43] = q41
+ | q43 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q38, q43] != 4])
+ | q41 : int(2..3)]),
+ a_RelationAsSetR6_ExplicitR6_3[q38] = r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q36];
+ int(1..3)])
+ | q38 : int(1..fin1)])
+ | q36 : int(1..84)]),
+ and([or([q46 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q46] = a_RelationAsSetR6_ExplicitR6_1[q44],
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q46, q47] ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q44, q49] = q47
+ | q49 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q44, q49] != 4])
+ | q47 : int(2..3)])
+ /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q46, a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q44, q51]]
+ | q51 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q44, q51] != 4]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q46] = a_RelationAsSetR6_ExplicitR6_3[q44];
+ int(1..3)])
+ | q46 : int(1..84)])
+ | q44 : int(1..fin1)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker = fin1,
+ and([q1 + 1 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ flatten([[r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q1]; int(1)],
+ [-toInt(r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q1, q5]) | q5 : int(2..3)],
+ [r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q1]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q2] = 1,
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q2, q7] = false | q7 : int(2..3)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q2] = 4;
+ int(1..3)])
+ | q2 : int(1..84)]),
+ and([q8 + 1 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ flatten([[r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q8]; int(1)],
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q8, q15]
+ | q15 : int(1..2)],
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q8]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q9] = 1,
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q9, q17] = 2
+ | q17 : int(1..2)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q9] = 4;
+ int(1..3)])
+ | q9 : int(1..84)]),
+ and([q10 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q10, 1] <
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q10, 2]
+ \/ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q10, 1] = 4
+ | q10 : int(1..84)]),
+ and([q10 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ (r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q10, 1] = 4 ->
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q10, 2] = 4)
+ | q10 : int(1..84)]),
+ and([q19 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ or([q21 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q21] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q19],
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q21, q22] ->
+ or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q19, q24] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q19, q24] =
+ q22 | q24 : int(1..2)])
+ | q22 : int(2..3)])
+ /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q19, q26] != 4 ->
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q21,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q19, q26]]
+ | q26 : int(1..2)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q21] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q19];
+ int(1..3)])
+ | q21 : int(1..84)])
+ | q19 : int(1..84)]),
+ and([q27 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ or([q29 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q29] =
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q27],
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q29, q31] != 4 ->
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q27,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q29, q31]]
+ | q31 : int(1..2)])
+ /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q27, q32] ->
+ or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q29, q34] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q29, q34] =
+ q32 | q34 : int(1..2)])
+ | q32 : int(2..3)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q29] =
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q27];
+ int(1..3)])
+ | q29 : int(1..84)])
+ | q27 : int(1..84)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker = r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker
+
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_1_3-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_1_3-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_1_3-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_1_3-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_1_3-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_1_3-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_1_3.eprime.orig b/tests/exhaustive/basic/relation04_param/expected/model_1_3.eprime.orig
deleted file mode 100644
index d0d64b442c..0000000000
--- a/tests/exhaustive/basic/relation04_param/expected/model_1_3.eprime.orig
+++ /dev/null
@@ -1,176 +0,0 @@
-language ESSENCE' 1.0
-
-given fin1: int
-given fin2: int
-given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
-given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
-given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
-find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker: int(0..84)
-find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence:
- matrix indexed by [int(1..84), int(2..3)] of bool
-find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker: int(0..84)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..84)] of int(0..2)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..84), int(1..2)] of int(2..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-branching on
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker, r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3, r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker,
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1,
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence,
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3]
-such that
- and([q35 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
- or([and([a_RelationAsSetR6_ExplicitR6_1[q37] = r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q35],
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
- [q35, a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q37, q39]]
- | q39 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q37, q39] != 4])
- /\
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q35, q40] ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q37, q42] = q40
- | q42 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q37, q42] != 4])
- | q40 : int(2..3)]),
- a_RelationAsSetR6_ExplicitR6_3[q37] = r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q35];
- int(1..3)])
- | q37 : int(1..fin1)])
- | q35 : int(1..84)]),
- and([or([q45 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker /\
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q45] = a_RelationAsSetR6_ExplicitR6_1[q43],
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q45, q46] ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q43, q48] = q46
- | q48 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q43, q48] != 4])
- | q46 : int(2..3)])
- /\
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
- [q45, a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q43, q50]]
- | q50 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q43, q50] != 4]),
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q45] = a_RelationAsSetR6_ExplicitR6_3[q43];
- int(1..3)])
- | q45 : int(1..84)])
- | q43 : int(1..fin1)]),
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker = fin1,
- and([q1 + 1 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
- flatten([[r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q1]; int(1)],
- [-toInt(r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q1, q5]) | q5 : int(2..3)],
- [r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q1]; int(1)];
- int(1..3)])
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q2] = 1,
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q2, q7] = false | q7 : int(2..3)]),
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q2] = 4;
- int(1..3)])
- | q2 : int(1..84)]),
- and([q8 + 1 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q8]; int(1)],
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q8];
- int(1)],
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q8, q14]
- | q14 : int(1..2)];
- int(1..2)]),
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q8]; int(1)];
- int(1..3)])
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q9] = 1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q9] = 0 /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q9, q16] = 2
- | q16 : int(1..2)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q9] = 4;
- int(1..3)])
- | q9 : int(1..84)]),
- and([q10 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q10] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q10, 1] <
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q10, 2])
- | q10 : int(1..84)]),
- and([q10 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q12 > r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q10] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q10, q12] = 2
- | q12 : int(1..2)])
- | q10 : int(1..84)]),
- and([q18 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q20 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker /\
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q20] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q18],
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q20, q21] ->
- or([q23 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q18]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q18, q23]
- = q21
- | q23 : int(1..2)])
- | q21 : int(2..3)])
- /\
- and([q25 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q18]
- ->
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
- [q20,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q18, q25]]
- | q25 : int(1..2)]),
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q20] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q18];
- int(1..3)])
- | q20 : int(1..84)])
- | q18 : int(1..84)]),
- and([q26 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
- or([q28 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q28] =
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q26],
- and([q30 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q28]
- ->
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
- [q26,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q28, q30]]
- | q30 : int(1..2)])
- /\
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q26, q31] ->
- or([q33 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q28]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q28, q33]
- = q31
- | q33 : int(1..2)])
- | q31 : int(2..3)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q28] =
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q26];
- int(1..3)])
- | q28 : int(1..84)])
- | q26 : int(1..84)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker = r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker
-
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_1_4-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_1_4-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_1_4-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_1_4-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_1_4-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_1_4-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_1_4.eprime b/tests/exhaustive/basic/relation04_param/expected/model_1_4.eprime
new file mode 100644
index 0000000000..b140b9955b
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_1_4.eprime
@@ -0,0 +1,184 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given fin2: int
+given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
+given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
+given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker: int(0..84)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence:
+ matrix indexed by [int(1..84), int(2..3)] of bool
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker: int(0..84)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..84), int(1..2)] of bool
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..84), int(1..2)] of int(2..3)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+branching on
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker, r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3, r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker,
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1,
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence,
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3]
+such that
+ and([q38 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ or([and([a_RelationAsSetR6_ExplicitR6_1[q40] = r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q38],
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q38, a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q40, q42]]
+ | q42 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q40, q42] != 4])
+ /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q38, q43] ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q40, q45] = q43
+ | q45 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q40, q45] != 4])
+ | q43 : int(2..3)]),
+ a_RelationAsSetR6_ExplicitR6_3[q40] = r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q38];
+ int(1..3)])
+ | q40 : int(1..fin1)])
+ | q38 : int(1..84)]),
+ and([or([q48 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q48] = a_RelationAsSetR6_ExplicitR6_1[q46],
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q48, q49] ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q51] = q49
+ | q51 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q51] != 4])
+ | q49 : int(2..3)])
+ /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q48, a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q53]]
+ | q53 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q53] != 4]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q48] = a_RelationAsSetR6_ExplicitR6_3[q46];
+ int(1..3)])
+ | q48 : int(1..84)])
+ | q46 : int(1..fin1)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker = fin1,
+ and([q1 + 1 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ flatten([[r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q1]; int(1)],
+ [-toInt(r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q1, q5]) | q5 : int(2..3)],
+ [r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q1]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q2] = 1,
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q2, q7] = false | q7 : int(2..3)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q2] = 4;
+ int(1..3)])
+ | q2 : int(1..84)]),
+ and([q8 + 1 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ flatten([[r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q8]; int(1)],
+ flatten([flatten([[-toInt(r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q8, q16]);
+ int(1)],
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q8, q16];
+ int(1)];
+ int(1..2)])
+ | q16 : int(1..2)]),
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q8]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q9] = 1,
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q9, q18] =
+ false
+ | q18 : int(1..2)])
+ /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q9, q19] = 2
+ | q19 : int(1..2)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q9] = 4;
+ int(1..3)])
+ | q9 : int(1..84)]),
+ and([q10 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q10, 2] ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q10, 1] <
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q10, 2])
+ | q10 : int(1..84)]),
+ and([q10 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q10, q12] = false ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q10, q12] = 2
+ | q12 : int(1..2)])
+ | q10 : int(1..84)]),
+ and([q10 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q10, 2] ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q10, 1])
+ | q10 : int(1..84)]),
+ and([q21 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ or([q23 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q23] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q21],
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q23, q24] ->
+ or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q21, q26]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q21, q26]
+ = q24
+ | q26 : int(1..2)])
+ | q24 : int(2..3)])
+ /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q21, q28]
+ ->
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q23,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q21, q28]]
+ | q28 : int(1..2)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q23] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q21];
+ int(1..3)])
+ | q23 : int(1..84)])
+ | q21 : int(1..84)]),
+ and([q29 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ or([q31 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q31] =
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q29],
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q31, q33]
+ ->
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q29,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q31, q33]]
+ | q33 : int(1..2)])
+ /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q29, q34] ->
+ or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q31, q36]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q31, q36]
+ = q34
+ | q36 : int(1..2)])
+ | q34 : int(2..3)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q31] =
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q29];
+ int(1..3)])
+ | q31 : int(1..84)])
+ | q29 : int(1..84)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker = r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker
+
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_2_1-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_2_1-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_2_1-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_2_1-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_2_1-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_2_1-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_2_1.eprime b/tests/exhaustive/basic/relation04_param/expected/model_2_1.eprime
new file mode 100644
index 0000000000..ca4ced56b2
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_2_1.eprime
@@ -0,0 +1,164 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given fin2: int
+given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
+given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
+given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker: int(0..84)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..84), int(1..2)] of int(2..4)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker: int(0..84)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence:
+ matrix indexed by [int(1..84), int(2..3)] of bool
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+branching on
+ [r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker, r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1,
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence,
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3, r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3]
+such that
+ and([q36 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ or([and([a_RelationAsSetR6_ExplicitR6_1[q38] = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q36],
+ and([or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q36, q42] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q36, q42] =
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q38, q40]
+ | q42 : int(1..2)])
+ | q40 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q38, q40] != 4])
+ /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q36, q44] != 4 ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q38, q46] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q36, q44]
+ | q46 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q38, q46] != 4])
+ | q44 : int(1..2)]),
+ a_RelationAsSetR6_ExplicitR6_3[q38] = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q36];
+ int(1..3)])
+ | q38 : int(1..fin1)])
+ | q36 : int(1..84)]),
+ and([or([q49 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q49] = a_RelationAsSetR6_ExplicitR6_1[q47],
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q49, q51] != 4 ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q47, q53] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q49, q51]
+ | q53 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q47, q53] != 4])
+ | q51 : int(1..2)])
+ /\
+ and([or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q49, q57] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q49, q57] =
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q47, q55]
+ | q57 : int(1..2)])
+ | q55 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q47, q55] != 4]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q49] = a_RelationAsSetR6_ExplicitR6_3[q47];
+ int(1..3)])
+ | q49 : int(1..84)])
+ | q47 : int(1..fin1)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker = fin1,
+ and([q1 + 1 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ flatten([[r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q1]; int(1)],
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q1, q8]
+ | q8 : int(1..2)],
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q1]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q2] = 1,
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q2, q10] = 2
+ | q10 : int(1..2)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q2] = 4;
+ int(1..3)])
+ | q2 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 1] <
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 2]
+ \/ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 1] = 4
+ | q3 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ (r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 1] = 4 ->
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 2] = 4)
+ | q3 : int(1..84)]),
+ and([q11 + 1 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ flatten([[r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q11]; int(1)],
+ [-toInt(r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q11, q15])
+ | q15 : int(2..3)],
+ [r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q11]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q12] = 1,
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q12, q17] = false
+ | q17 : int(2..3)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q12] = 4;
+ int(1..3)])
+ | q12 : int(1..84)]),
+ and([q19 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ or([q21 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q21] =
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q19],
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q21, q23] != 4 ->
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q19,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q21, q23]]
+ | q23 : int(1..2)])
+ /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q19, q24] ->
+ or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q21, q26] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q21, q26] =
+ q24 | q26 : int(1..2)])
+ | q24 : int(2..3)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q21] =
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q19];
+ int(1..3)])
+ | q21 : int(1..84)])
+ | q19 : int(1..84)]),
+ and([q27 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ or([q29 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q29] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q27],
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q29, q30] ->
+ or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q27, q32] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q27, q32] =
+ q30 | q32 : int(1..2)])
+ | q30 : int(2..3)])
+ /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q27, q34] != 4 ->
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q29,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q27, q34]]
+ | q34 : int(1..2)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q29] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q27];
+ int(1..3)])
+ | q29 : int(1..84)])
+ | q27 : int(1..84)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker
+
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_2_2-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_2_2-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_2_2-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_2_2-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_2_2-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_2_2-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_2_2.eprime b/tests/exhaustive/basic/relation04_param/expected/model_2_2.eprime
new file mode 100644
index 0000000000..bda11c6f36
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_2_2.eprime
@@ -0,0 +1,91 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given fin2: int
+given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
+given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
+given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker: int(0..84)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..84), int(1..2)] of int(2..4)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+branching on
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker, r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3]
+such that
+ and([q12 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ or([and([a_RelationAsSetR6_ExplicitR6_1[q14] = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q12],
+ and([or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q12, q18] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q12, q18] =
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q14, q16]
+ | q18 : int(1..2)])
+ | q16 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q14, q16] != 4])
+ /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q12, q20] != 4 ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q14, q22] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q12, q20]
+ | q22 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q14, q22] != 4])
+ | q20 : int(1..2)]),
+ a_RelationAsSetR6_ExplicitR6_3[q14] = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q12];
+ int(1..3)])
+ | q14 : int(1..fin1)])
+ | q12 : int(1..84)]),
+ and([or([q25 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q25] = a_RelationAsSetR6_ExplicitR6_1[q23],
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q25, q27] != 4 ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q23, q29] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q25, q27]
+ | q29 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q23, q29] != 4])
+ | q27 : int(1..2)])
+ /\
+ and([or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q25, q33] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q25, q33] =
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q23, q31]
+ | q33 : int(1..2)])
+ | q31 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q23, q31] != 4]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q25] = a_RelationAsSetR6_ExplicitR6_3[q23];
+ int(1..3)])
+ | q25 : int(1..84)])
+ | q23 : int(1..fin1)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker = fin1,
+ and([q1 + 1 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ flatten([[r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q1]; int(1)],
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q1, q8]
+ | q8 : int(1..2)],
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q1]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q2] = 1,
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q2, q10] = 2
+ | q10 : int(1..2)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q2] = 4;
+ int(1..3)])
+ | q2 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 1] <
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 2]
+ \/ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 1] = 4
+ | q3 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ (r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 1] = 4 ->
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 2] = 4)
+ | q3 : int(1..84)])
+
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_2_3-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_2_3-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_2_3-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_2_3-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_2_3-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_2_3-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_2_3.eprime.orig b/tests/exhaustive/basic/relation04_param/expected/model_2_3.eprime.orig
deleted file mode 100644
index a73716ba56..0000000000
--- a/tests/exhaustive/basic/relation04_param/expected/model_2_3.eprime.orig
+++ /dev/null
@@ -1,204 +0,0 @@
-language ESSENCE' 1.0
-
-given fin1: int
-given fin2: int
-given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
-given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
-given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
-find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker: int(0..84)
-find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..84), int(1..2)] of int(2..4)
-find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker: int(0..84)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..84)] of int(0..2)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..84), int(1..2)] of int(2..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-branching on
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker, r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3, r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker,
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1,
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy,
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3]
-such that
- and([q44 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
- or([and([a_RelationAsSetR6_ExplicitR6_1[q46] = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q44],
- and([or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q44, q50] !=
- 4
- /\
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q44, q50] =
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q48]
- | q50 : int(1..2)])
- | q48 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q48] != 4])
- /\
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q44, q52] != 4 ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q54] =
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q44, q52]
- | q54 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q54] != 4])
- | q52 : int(1..2)]),
- a_RelationAsSetR6_ExplicitR6_3[q46] = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q44];
- int(1..3)])
- | q46 : int(1..fin1)])
- | q44 : int(1..84)]),
- and([or([q57 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker /\
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q57] = a_RelationAsSetR6_ExplicitR6_1[q55],
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q57, q59] != 4 ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q55, q61] =
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q57, q59]
- | q61 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q55, q61] != 4])
- | q59 : int(1..2)])
- /\
- and([or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q57, q65] !=
- 4
- /\
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q57, q65] =
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q55, q63]
- | q65 : int(1..2)])
- | q63 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q55, q63] != 4]),
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q57] = a_RelationAsSetR6_ExplicitR6_3[q55];
- int(1..3)])
- | q57 : int(1..84)])
- | q55 : int(1..fin1)]),
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker = fin1,
- and([q1 + 1 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
- flatten([[r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q1]; int(1)],
- [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q1, q8]
- | q8 : int(1..2)],
- [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q1]; int(1)];
- int(1..3)])
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q2] = 1,
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q2, q10] = 2
- | q10 : int(1..2)]),
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q2] = 4;
- int(1..3)])
- | q2 : int(1..84)]),
- and([q3 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 1] <
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 2]
- \/ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 1] = 4
- | q3 : int(1..84)]),
- and([q3 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
- (r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 1] = 4 ->
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 2] = 4)
- | q3 : int(1..84)]),
- and([q11 + 1 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q11]; int(1)],
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker
- [q11];
- int(1)],
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q11, q17]
- | q17 : int(1..2)];
- int(1..2)]),
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q11]; int(1)];
- int(1..3)])
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q12] = 1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q12] = 0 /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q12, q19] = 2
- | q19 : int(1..2)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q12] = 4;
- int(1..3)])
- | q12 : int(1..84)]),
- and([q13 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q13] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q13, 1] <
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q13, 2])
- | q13 : int(1..84)]),
- and([q13 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q15 > r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q13] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q13, q15] = 2
- | q15 : int(1..2)])
- | q13 : int(1..84)]),
- and([q21 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q23 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker /\
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q23] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q21],
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q23, q25] != 4 ->
- or([q27 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q21]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q21, q27]
- = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q23, q25]
- | q27 : int(1..2)])
- | q25 : int(1..2)])
- /\
- and([q29 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q21]
- ->
- or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q23, q31] !=
- 4
- /\
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q23, q31] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q21, q29]
- | q31 : int(1..2)])
- | q29 : int(1..2)]),
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q23] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q21];
- int(1..3)])
- | q23 : int(1..84)])
- | q21 : int(1..84)]),
- and([q32 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
- or([q34 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q34] =
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q32],
- and([q36 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q34]
- ->
- or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q32, q38] !=
- 4
- /\
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q32, q38] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q34, q36]
- | q38 : int(1..2)])
- | q36 : int(1..2)])
- /\
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q32, q40] != 4 ->
- or([q42 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q34]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q34, q42]
- = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q32, q40]
- | q42 : int(1..2)])
- | q40 : int(1..2)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q34] =
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q32];
- int(1..3)])
- | q34 : int(1..84)])
- | q32 : int(1..84)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker
-
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_2_4-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_2_4-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_2_4-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_2_4-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_2_4-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_2_4-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_2_4.eprime b/tests/exhaustive/basic/relation04_param/expected/model_2_4.eprime
new file mode 100644
index 0000000000..9f13f2adc7
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_2_4.eprime
@@ -0,0 +1,211 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given fin2: int
+given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
+given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
+given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker: int(0..84)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..84), int(1..2)] of int(2..4)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker: int(0..84)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..84), int(1..2)] of bool
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..84), int(1..2)] of int(2..3)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+branching on
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker, r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3, r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3]
+such that
+ and([q47 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ or([and([a_RelationAsSetR6_ExplicitR6_1[q49] = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q47],
+ and([or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q47, q53] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q47, q53] =
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q49, q51]
+ | q53 : int(1..2)])
+ | q51 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q49, q51] != 4])
+ /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q47, q55] != 4 ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q49, q57] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q47, q55]
+ | q57 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q49, q57] != 4])
+ | q55 : int(1..2)]),
+ a_RelationAsSetR6_ExplicitR6_3[q49] = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q47];
+ int(1..3)])
+ | q49 : int(1..fin1)])
+ | q47 : int(1..84)]),
+ and([or([q60 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q60] = a_RelationAsSetR6_ExplicitR6_1[q58],
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q60, q62] != 4 ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q58, q64] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q60, q62]
+ | q64 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q58, q64] != 4])
+ | q62 : int(1..2)])
+ /\
+ and([or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q60, q68] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q60, q68] =
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q58, q66]
+ | q68 : int(1..2)])
+ | q66 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q58, q66] != 4]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q60] = a_RelationAsSetR6_ExplicitR6_3[q58];
+ int(1..3)])
+ | q60 : int(1..84)])
+ | q58 : int(1..fin1)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker = fin1,
+ and([q1 + 1 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ flatten([[r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q1]; int(1)],
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q1, q8]
+ | q8 : int(1..2)],
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q1]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q2] = 1,
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q2, q10] = 2
+ | q10 : int(1..2)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q2] = 4;
+ int(1..3)])
+ | q2 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 1] <
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 2]
+ \/ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 1] = 4
+ | q3 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ (r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 1] = 4 ->
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q3, 2] = 4)
+ | q3 : int(1..84)]),
+ and([q11 + 1 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ flatten([[r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q11]; int(1)],
+ flatten([flatten([[-toInt(r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q11, q19]);
+ int(1)],
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q11, q19];
+ int(1)];
+ int(1..2)])
+ | q19 : int(1..2)]),
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q11]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q12] = 1,
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q12, q21] =
+ false
+ | q21 : int(1..2)])
+ /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q12, q22] = 2
+ | q22 : int(1..2)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q12] = 4;
+ int(1..3)])
+ | q12 : int(1..84)]),
+ and([q13 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q13, 2] ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q13, 1] <
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q13, 2])
+ | q13 : int(1..84)]),
+ and([q13 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q13, q15] = false ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q13, q15] = 2
+ | q15 : int(1..2)])
+ | q13 : int(1..84)]),
+ and([q13 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q13, 2] ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q13, 1])
+ | q13 : int(1..84)]),
+ and([q24 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ or([q26 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q26] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q24],
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q26, q28] != 4 ->
+ or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q24, q30]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q24, q30]
+ = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q26, q28]
+ | q30 : int(1..2)])
+ | q28 : int(1..2)])
+ /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q24, q32]
+ ->
+ or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q26, q34] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q26, q34] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q24, q32]
+ | q34 : int(1..2)])
+ | q32 : int(1..2)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q26] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q24];
+ int(1..3)])
+ | q26 : int(1..84)])
+ | q24 : int(1..84)]),
+ and([q35 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ or([q37 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q37] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q35],
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q37, q39]
+ ->
+ or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q35, q41] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q35, q41] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q37, q39]
+ | q41 : int(1..2)])
+ | q39 : int(1..2)])
+ /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q35, q43] != 4 ->
+ or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q37, q45]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q37, q45]
+ = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q35, q43]
+ | q45 : int(1..2)])
+ | q43 : int(1..2)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q37] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q35];
+ int(1..3)])
+ | q37 : int(1..84)])
+ | q35 : int(1..84)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker
+
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_3_1-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_3_1-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_3_1-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_3_1-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_3_1-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_3_1-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_3_1.eprime.orig b/tests/exhaustive/basic/relation04_param/expected/model_3_1.eprime.orig
deleted file mode 100644
index e8bce5f5e1..0000000000
--- a/tests/exhaustive/basic/relation04_param/expected/model_3_1.eprime.orig
+++ /dev/null
@@ -1,196 +0,0 @@
-language ESSENCE' 1.0
-
-given fin1: int
-given fin2: int
-given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
-given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
-given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker: int(0..84)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..84)] of int(0..2)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..84), int(1..2)] of int(2..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker: int(0..84)
-find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence:
- matrix indexed by [int(1..84), int(2..3)] of bool
-find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-branching on
- [r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker, r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1,
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence,
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3, r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3]
-such that
- and([q35 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- or([and([a_RelationAsSetR6_ExplicitR6_1[q37] = r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q35],
- and([or([q41 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q35]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q35, q41]
- = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q37, q39]
- | q41 : int(1..2)])
- | q39 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q37, q39] != 4])
- /\
- and([q43 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q35]
- ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q37, q45] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q35, q43]
- | q45 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q37, q45] != 4])
- | q43 : int(1..2)]),
- a_RelationAsSetR6_ExplicitR6_3[q37] = r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q35];
- int(1..3)])
- | q37 : int(1..fin1)])
- | q35 : int(1..84)]),
- and([or([q48 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q48] = a_RelationAsSetR6_ExplicitR6_1[q46],
- and([q50 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q48]
- ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q52] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q48, q50]
- | q52 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q52] != 4])
- | q50 : int(1..2)])
- /\
- and([or([q56 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q48]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q48, q56]
- = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q54]
- | q56 : int(1..2)])
- | q54 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q54] != 4]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q48] = a_RelationAsSetR6_ExplicitR6_3[q46];
- int(1..3)])
- | q48 : int(1..84)])
- | q46 : int(1..fin1)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker = fin1,
- and([q1 + 1 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q1]; int(1)],
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q1];
- int(1)],
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q1, q7]
- | q7 : int(1..2)];
- int(1..2)]),
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q1]; int(1)];
- int(1..3)])
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q2] = 1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q2] = 0 /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q2, q9] = 2
- | q9 : int(1..2)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q2] = 4;
- int(1..3)])
- | q2 : int(1..84)]),
- and([q3 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q3] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q3, 1] <
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q3, 2])
- | q3 : int(1..84)]),
- and([q3 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q5 > r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q3] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q3, q5] = 2
- | q5 : int(1..2)])
- | q3 : int(1..84)]),
- and([q10 + 1 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
- flatten([[r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q10]; int(1)],
- [-toInt(r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q10, q14])
- | q14 : int(2..3)],
- [r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q10]; int(1)];
- int(1..3)])
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q11] = 1,
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q11, q16] = false
- | q16 : int(2..3)]),
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q11] = 4;
- int(1..3)])
- | q11 : int(1..84)]),
- and([q18 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
- or([q20 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q20] =
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q18],
- and([q22 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q20]
- ->
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
- [q18,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q20, q22]]
- | q22 : int(1..2)])
- /\
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q18, q23] ->
- or([q25 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q20]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q20, q25]
- = q23
- | q25 : int(1..2)])
- | q23 : int(2..3)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q20] =
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q18];
- int(1..3)])
- | q20 : int(1..84)])
- | q18 : int(1..84)]),
- and([q26 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q28 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker /\
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q28] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q26],
- and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q28, q29] ->
- or([q31 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q26]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q26, q31]
- = q29
- | q31 : int(1..2)])
- | q29 : int(2..3)])
- /\
- and([q33 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q26]
- ->
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
- [q28,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q26, q33]]
- | q33 : int(1..2)]),
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q28] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q26];
- int(1..3)])
- | q28 : int(1..84)])
- | q26 : int(1..84)]),
- r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker = r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker
-
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_3_2-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_3_2-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_3_2-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_3_2-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_3_2-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_3_2-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_3_2.eprime.orig b/tests/exhaustive/basic/relation04_param/expected/model_3_2.eprime.orig
deleted file mode 100644
index a248f3fbe6..0000000000
--- a/tests/exhaustive/basic/relation04_param/expected/model_3_2.eprime.orig
+++ /dev/null
@@ -1,211 +0,0 @@
-language ESSENCE' 1.0
-
-given fin1: int
-given fin2: int
-given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
-given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
-given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker: int(0..84)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..84)] of int(0..2)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..84), int(1..2)] of int(2..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker: int(0..84)
-find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..84), int(1..2)] of int(2..4)
-find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-branching on
- [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker, r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1,
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy,
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3, r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3]
-such that
- and([q44 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- or([and([a_RelationAsSetR6_ExplicitR6_1[q46] = r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q44],
- and([or([q50 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q44]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q44, q50]
- = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q48]
- | q50 : int(1..2)])
- | q48 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q48] != 4])
- /\
- and([q52 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q44]
- ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q54] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q44, q52]
- | q54 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q46, q54] != 4])
- | q52 : int(1..2)]),
- a_RelationAsSetR6_ExplicitR6_3[q46] = r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q44];
- int(1..3)])
- | q46 : int(1..fin1)])
- | q44 : int(1..84)]),
- and([or([q57 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q57] = a_RelationAsSetR6_ExplicitR6_1[q55],
- and([q59 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q57]
- ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q55, q61] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q57, q59]
- | q61 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q55, q61] != 4])
- | q59 : int(1..2)])
- /\
- and([or([q65 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q57]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q57, q65]
- = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q55, q63]
- | q65 : int(1..2)])
- | q63 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q55, q63] != 4]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q57] = a_RelationAsSetR6_ExplicitR6_3[q55];
- int(1..3)])
- | q57 : int(1..84)])
- | q55 : int(1..fin1)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker = fin1,
- and([q1 + 1 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q1]; int(1)],
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q1];
- int(1)],
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q1, q7]
- | q7 : int(1..2)];
- int(1..2)]),
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q1]; int(1)];
- int(1..3)])
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q2] = 1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q2] = 0 /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q2, q9] = 2
- | q9 : int(1..2)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q2] = 4;
- int(1..3)])
- | q2 : int(1..84)]),
- and([q3 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q3] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q3, 1] <
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q3, 2])
- | q3 : int(1..84)]),
- and([q3 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q5 > r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q3] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q3, q5] = 2
- | q5 : int(1..2)])
- | q3 : int(1..84)]),
- and([q10 + 1 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
- flatten([[r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q10]; int(1)],
- [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q10, q17]
- | q17 : int(1..2)],
- [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q10]; int(1)];
- int(1..3)])
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q11] = 1,
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q11, q19] = 2
- | q19 : int(1..2)]),
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q11] = 4;
- int(1..3)])
- | q11 : int(1..84)]),
- and([q12 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q12, 1] <
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q12, 2]
- \/ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q12, 1] = 4
- | q12 : int(1..84)]),
- and([q12 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
- (r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q12, 1] = 4 ->
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q12, 2] = 4)
- | q12 : int(1..84)]),
- and([q21 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
- or([q23 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q23] =
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q21],
- and([q25 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q23]
- ->
- or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q21, q27] !=
- 4
- /\
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q21, q27] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q23, q25]
- | q27 : int(1..2)])
- | q25 : int(1..2)])
- /\
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q21, q29] != 4 ->
- or([q31 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q23]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q23, q31]
- = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q21, q29]
- | q31 : int(1..2)])
- | q29 : int(1..2)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q23] =
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q21];
- int(1..3)])
- | q23 : int(1..84)])
- | q21 : int(1..84)]),
- and([q32 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q34 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker /\
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q34] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q32],
- and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q34, q36] != 4 ->
- or([q38 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q32]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q32, q38]
- = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q34, q36]
- | q38 : int(1..2)])
- | q36 : int(1..2)])
- /\
- and([q40 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q32]
- ->
- or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q34, q42] !=
- 4
- /\
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q34, q42] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q32, q40]
- | q42 : int(1..2)])
- | q40 : int(1..2)]),
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q34] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q32];
- int(1..3)])
- | q34 : int(1..84)])
- | q32 : int(1..84)]),
- r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker = r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker
-
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_3_3-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_3_3-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_3_3-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_3_3-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_3_3-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_3_3-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_3_3.eprime.orig b/tests/exhaustive/basic/relation04_param/expected/model_3_3.eprime.orig
deleted file mode 100644
index 54108a9243..0000000000
--- a/tests/exhaustive/basic/relation04_param/expected/model_3_3.eprime.orig
+++ /dev/null
@@ -1,113 +0,0 @@
-language ESSENCE' 1.0
-
-given fin1: int
-given fin2: int
-given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
-given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
-given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker: int(0..84)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..84)] of int(0..2)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..84), int(1..2)] of int(2..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-branching on
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker, r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3]
-such that
- and([q11 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- or([and([a_RelationAsSetR6_ExplicitR6_1[q13] = r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q11],
- and([or([q17 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q11]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q11, q17]
- = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q13, q15]
- | q17 : int(1..2)])
- | q15 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q13, q15] != 4])
- /\
- and([q19 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q11]
- ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q13, q21] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q11, q19]
- | q21 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q13, q21] != 4])
- | q19 : int(1..2)]),
- a_RelationAsSetR6_ExplicitR6_3[q13] = r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q11];
- int(1..3)])
- | q13 : int(1..fin1)])
- | q11 : int(1..84)]),
- and([or([q24 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q24] = a_RelationAsSetR6_ExplicitR6_1[q22],
- and([q26 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q24]
- ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q22, q28] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q24, q26]
- | q28 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q22, q28] != 4])
- | q26 : int(1..2)])
- /\
- and([or([q32 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q24]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q24, q32]
- = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q22, q30]
- | q32 : int(1..2)])
- | q30 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q22, q30] != 4]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q24] = a_RelationAsSetR6_ExplicitR6_3[q22];
- int(1..3)])
- | q24 : int(1..84)])
- | q22 : int(1..fin1)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker = fin1,
- and([q1 + 1 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q1]; int(1)],
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q1];
- int(1)],
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q1, q7]
- | q7 : int(1..2)];
- int(1..2)]),
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q1]; int(1)];
- int(1..3)])
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q2] = 1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q2] = 0 /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q2, q9] = 2
- | q9 : int(1..2)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q2] = 4;
- int(1..3)])
- | q2 : int(1..84)]),
- and([q3 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q3] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q3, 1] <
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q3, 2])
- | q3 : int(1..84)]),
- and([q3 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q5 > r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q3] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q3, q5] = 2
- | q5 : int(1..2)])
- | q3 : int(1..84)])
-
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_3_4-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_3_4-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_3_4-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_3_4-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_3_4-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_3_4-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_3_4.eprime.orig b/tests/exhaustive/basic/relation04_param/expected/model_3_4.eprime.orig
deleted file mode 100644
index fecc76d420..0000000000
--- a/tests/exhaustive/basic/relation04_param/expected/model_3_4.eprime.orig
+++ /dev/null
@@ -1,245 +0,0 @@
-language ESSENCE' 1.0
-
-given fin1: int
-given fin2: int
-given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
-given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
-given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker: int(0..84)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..84)] of int(0..2)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..84), int(1..2)] of int(2..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker: int(0..84)
-find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags:
- matrix indexed by [int(1..84), int(1..2)] of bool
-find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values:
- matrix indexed by [int(1..84), int(1..2)] of int(2..3)
-find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-branching on
- [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker, r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1,
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags,
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values,
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3, r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3]
-such that
- and([q46 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- or([and([a_RelationAsSetR6_ExplicitR6_1[q48] = r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q46],
- and([or([q52 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q46]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q46, q52]
- = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q48, q50]
- | q52 : int(1..2)])
- | q50 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q48, q50] != 4])
- /\
- and([q54 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q46]
- ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q48, q56] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q46, q54]
- | q56 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q48, q56] != 4])
- | q54 : int(1..2)]),
- a_RelationAsSetR6_ExplicitR6_3[q48] = r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q46];
- int(1..3)])
- | q48 : int(1..fin1)])
- | q46 : int(1..84)]),
- and([or([q59 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q59] = a_RelationAsSetR6_ExplicitR6_1[q57],
- and([q61 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q59]
- ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q57, q63] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q59, q61]
- | q63 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q57, q63] != 4])
- | q61 : int(1..2)])
- /\
- and([or([q67 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q59]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q59, q67]
- = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q57, q65]
- | q67 : int(1..2)])
- | q65 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q57, q65] != 4]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q59] = a_RelationAsSetR6_ExplicitR6_3[q57];
- int(1..3)])
- | q59 : int(1..84)])
- | q57 : int(1..fin1)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker = fin1,
- and([q1 + 1 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q1]; int(1)],
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q1];
- int(1)],
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q1, q7]
- | q7 : int(1..2)];
- int(1..2)]),
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q1]; int(1)];
- int(1..3)])
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q2] = 1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q2] = 0 /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q2, q9] = 2
- | q9 : int(1..2)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q2] = 4;
- int(1..3)])
- | q2 : int(1..84)]),
- and([q3 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q3] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q3, 1] <
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q3, 2])
- | q3 : int(1..84)]),
- and([q3 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q5 > r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q3] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q3, q5] = 2
- | q5 : int(1..2)])
- | q3 : int(1..84)]),
- and([q10 + 1 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- flatten([[r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q10]; int(1)],
- flatten([flatten([[-toInt(r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
- [q10, q18]);
- int(1)],
- [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q10, q18];
- int(1)];
- int(1..2)])
- | q18 : int(1..2)]),
- [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q10]; int(1)];
- int(1..3)])
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q11] = 1,
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q11, q20] =
- false
- | q20 : int(1..2)])
- /\
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q11, q21] = 2
- | q21 : int(1..2)]),
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q11] = 4;
- int(1..3)])
- | q11 : int(1..84)]),
- and([q12 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q12, 2] ->
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q12, 1] <
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q12, 2])
- | q12 : int(1..84)]),
- and([q12 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q12, q14] = false ->
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q12, q14] = 2
- | q14 : int(1..2)])
- | q12 : int(1..84)]),
- and([q12 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q12, 2] ->
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q12, 1])
- | q12 : int(1..84)]),
- and([q23 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- or([q25 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q25] =
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q23],
- and([q27 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q25]
- ->
- or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
- [q23, q29]
- /\
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q23, q29]
- =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q25, q27]
- | q29 : int(1..2)])
- | q27 : int(1..2)])
- /\
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q23, q31]
- ->
- or([q33 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q25]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q25, q33]
- =
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q23, q31]
- | q33 : int(1..2)])
- | q31 : int(1..2)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q25] =
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q23];
- int(1..3)])
- | q25 : int(1..84)])
- | q23 : int(1..84)]),
- and([q34 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q36 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker /\
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q36] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q34],
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q36, q38]
- ->
- or([q40 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q34]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q34, q40]
- =
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q36, q38]
- | q40 : int(1..2)])
- | q38 : int(1..2)])
- /\
- and([q42 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q34]
- ->
- or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
- [q36, q44]
- /\
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q36, q44]
- =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q34, q42]
- | q44 : int(1..2)])
- | q42 : int(1..2)]),
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q36] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q34];
- int(1..3)])
- | q36 : int(1..84)])
- | q34 : int(1..84)]),
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker = r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker
-
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_4_1-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_4_1-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_4_1-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_4_1-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_4_1-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_4_1-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_4_1.eprime b/tests/exhaustive/basic/relation04_param/expected/model_4_1.eprime
new file mode 100644
index 0000000000..6539c4f97f
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_4_1.eprime
@@ -0,0 +1,202 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given fin2: int
+given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
+given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
+given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker: int(0..84)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..84), int(1..2)] of bool
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..84), int(1..2)] of int(2..3)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker: int(0..84)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence:
+ matrix indexed by [int(1..84), int(2..3)] of bool
+find r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+branching on
+ [r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker, r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1,
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence,
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3, r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3]
+such that
+ and([q38 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ or([and([a_RelationAsSetR6_ExplicitR6_1[q40] = r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q38],
+ and([or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q38, q44]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q38, q44]
+ = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q40, q42]
+ | q44 : int(1..2)])
+ | q42 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q40, q42] != 4])
+ /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q38, q46]
+ ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q40, q48] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q38, q46]
+ | q48 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q40, q48] != 4])
+ | q46 : int(1..2)]),
+ a_RelationAsSetR6_ExplicitR6_3[q40] = r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q38];
+ int(1..3)])
+ | q40 : int(1..fin1)])
+ | q38 : int(1..84)]),
+ and([or([q51 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q51] = a_RelationAsSetR6_ExplicitR6_1[q49],
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q51, q53]
+ ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q49, q55] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q51, q53]
+ | q55 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q49, q55] != 4])
+ | q53 : int(1..2)])
+ /\
+ and([or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q51, q59]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q51, q59]
+ = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q49, q57]
+ | q59 : int(1..2)])
+ | q57 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q49, q57] != 4]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q51] = a_RelationAsSetR6_ExplicitR6_3[q49];
+ int(1..3)])
+ | q51 : int(1..84)])
+ | q49 : int(1..fin1)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker = fin1,
+ and([q1 + 1 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ flatten([[r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q1]; int(1)],
+ flatten([flatten([[-toInt(r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q1, q9]);
+ int(1)],
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q1, q9];
+ int(1)];
+ int(1..2)])
+ | q9 : int(1..2)]),
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q1]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q2] = 1,
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q2, q11] =
+ false
+ | q11 : int(1..2)])
+ /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q2, q12] = 2
+ | q12 : int(1..2)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q2] = 4;
+ int(1..3)])
+ | q2 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, 2] ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q3, 1] <
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q3, 2])
+ | q3 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, q5] = false ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q3, q5] = 2
+ | q5 : int(1..2)])
+ | q3 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, 2] ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, 1])
+ | q3 : int(1..84)]),
+ and([q13 + 1 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ flatten([[r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q13]; int(1)],
+ [-toInt(r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q13, q17])
+ | q17 : int(2..3)],
+ [r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q13]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q14] = 1,
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q14, q19] = false
+ | q19 : int(2..3)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q14] = 4;
+ int(1..3)])
+ | q14 : int(1..84)]),
+ and([q21 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker ->
+ or([q23 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q23] =
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q21],
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q23, q25]
+ ->
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q21,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q23, q25]]
+ | q25 : int(1..2)])
+ /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q21, q26] ->
+ or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q23, q28]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q23, q28]
+ = q26
+ | q28 : int(1..2)])
+ | q26 : int(2..3)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q23] =
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q21];
+ int(1..3)])
+ | q23 : int(1..84)])
+ | q21 : int(1..84)]),
+ and([q29 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ or([q31 <= r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker /\
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q31] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q29],
+ and([r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q31, q32] ->
+ or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q29, q34]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q29, q34]
+ = q32
+ | q34 : int(1..2)])
+ | q32 : int(2..3)])
+ /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q29, q36]
+ ->
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence
+ [q31,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q29, q36]]
+ | q36 : int(1..2)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_3[q31] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q29];
+ int(1..3)])
+ | q31 : int(1..84)])
+ | q29 : int(1..84)]),
+ r_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Marker = r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker
+
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_4_2-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_4_2-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_4_2-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_4_2-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_4_2-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_4_2-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_4_2.eprime b/tests/exhaustive/basic/relation04_param/expected/model_4_2.eprime
new file mode 100644
index 0000000000..d76b74b4f4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_4_2.eprime
@@ -0,0 +1,217 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given fin2: int
+given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
+given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
+given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker: int(0..84)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..84), int(1..2)] of bool
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..84), int(1..2)] of int(2..3)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker: int(0..84)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..84), int(1..2)] of int(2..4)
+find r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+branching on
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker, r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy,
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3, r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3]
+such that
+ and([q47 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ or([and([a_RelationAsSetR6_ExplicitR6_1[q49] = r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q47],
+ and([or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q47, q53]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q47, q53]
+ = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q49, q51]
+ | q53 : int(1..2)])
+ | q51 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q49, q51] != 4])
+ /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q47, q55]
+ ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q49, q57] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q47, q55]
+ | q57 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q49, q57] != 4])
+ | q55 : int(1..2)]),
+ a_RelationAsSetR6_ExplicitR6_3[q49] = r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q47];
+ int(1..3)])
+ | q49 : int(1..fin1)])
+ | q47 : int(1..84)]),
+ and([or([q60 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q60] = a_RelationAsSetR6_ExplicitR6_1[q58],
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q60, q62]
+ ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q58, q64] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q60, q62]
+ | q64 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q58, q64] != 4])
+ | q62 : int(1..2)])
+ /\
+ and([or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q60, q68]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q60, q68]
+ = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q58, q66]
+ | q68 : int(1..2)])
+ | q66 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q58, q66] != 4]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q60] = a_RelationAsSetR6_ExplicitR6_3[q58];
+ int(1..3)])
+ | q60 : int(1..84)])
+ | q58 : int(1..fin1)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker = fin1,
+ and([q1 + 1 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ flatten([[r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q1]; int(1)],
+ flatten([flatten([[-toInt(r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q1, q9]);
+ int(1)],
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q1, q9];
+ int(1)];
+ int(1..2)])
+ | q9 : int(1..2)]),
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q1]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q2] = 1,
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q2, q11] =
+ false
+ | q11 : int(1..2)])
+ /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q2, q12] = 2
+ | q12 : int(1..2)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q2] = 4;
+ int(1..3)])
+ | q2 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, 2] ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q3, 1] <
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q3, 2])
+ | q3 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, q5] = false ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q3, q5] = 2
+ | q5 : int(1..2)])
+ | q3 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, 2] ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, 1])
+ | q3 : int(1..84)]),
+ and([q13 + 1 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ flatten([[r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q13]; int(1)],
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q13, q20]
+ | q20 : int(1..2)],
+ [r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q13]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q14] = 1,
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q14, q22] = 2
+ | q22 : int(1..2)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q14] = 4;
+ int(1..3)])
+ | q14 : int(1..84)]),
+ and([q15 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q15, 1] <
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q15, 2]
+ \/ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q15, 1] = 4
+ | q15 : int(1..84)]),
+ and([q15 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ (r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q15, 1] = 4 ->
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q15, 2] = 4)
+ | q15 : int(1..84)]),
+ and([q24 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker ->
+ or([q26 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q26] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q24],
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q26, q28]
+ ->
+ or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q24, q30] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q24, q30] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q26, q28]
+ | q30 : int(1..2)])
+ | q28 : int(1..2)])
+ /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q24, q32] != 4 ->
+ or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q26, q34]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q26, q34]
+ = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q24, q32]
+ | q34 : int(1..2)])
+ | q32 : int(1..2)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q26] =
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q24];
+ int(1..3)])
+ | q26 : int(1..84)])
+ | q24 : int(1..84)]),
+ and([q35 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ or([q37 <= r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker /\
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_1[q37] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q35],
+ and([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q37, q39] != 4 ->
+ or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q35, q41]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q35, q41]
+ = r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q37, q39]
+ | q41 : int(1..2)])
+ | q39 : int(1..2)])
+ /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q35, q43]
+ ->
+ or([r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q37, q45] !=
+ 4
+ /\
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_2_ExplicitVarSizeWithDummy[q37, q45] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q35, q43]
+ | q45 : int(1..2)])
+ | q43 : int(1..2)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Values_3[q37] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q35];
+ int(1..3)])
+ | q37 : int(1..84)])
+ | q35 : int(1..84)]),
+ r_RelationAsSetR6_ExplicitVarSizeWithMarkerR6_Marker = r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker
+
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_4_3-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_4_3-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_4_3-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_4_3-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_4_3-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_4_3-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_4_3.eprime.orig b/tests/exhaustive/basic/relation04_param/expected/model_4_3.eprime.orig
deleted file mode 100644
index f535969c32..0000000000
--- a/tests/exhaustive/basic/relation04_param/expected/model_4_3.eprime.orig
+++ /dev/null
@@ -1,244 +0,0 @@
-language ESSENCE' 1.0
-
-given fin1: int
-given fin2: int
-given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
-given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
- matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
-given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
-find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker: int(0..84)
-find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags:
- matrix indexed by [int(1..84), int(1..2)] of bool
-find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values:
- matrix indexed by [int(1..84), int(1..2)] of int(2..3)
-find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker: int(0..84)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1: matrix indexed by [int(1..84)] of int(1..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker:
- matrix indexed by [int(1..84)] of int(0..2)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..84), int(1..2)] of int(2..3)
-find r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3: matrix indexed by [int(1..84)] of int(4..10)
-branching on
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker, r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3, r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker,
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1,
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags,
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values,
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3]
-such that
- and([q46 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- or([and([a_RelationAsSetR6_ExplicitR6_1[q48] = r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q46],
- and([or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
- [q46, q52]
- /\
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q46, q52]
- = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q48, q50]
- | q52 : int(1..2)])
- | q50 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q48, q50] != 4])
- /\
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q46, q54]
- ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q48, q56] =
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q46, q54]
- | q56 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q48, q56] != 4])
- | q54 : int(1..2)]),
- a_RelationAsSetR6_ExplicitR6_3[q48] = r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q46];
- int(1..3)])
- | q48 : int(1..fin1)])
- | q46 : int(1..84)]),
- and([or([q59 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker /\
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q59] = a_RelationAsSetR6_ExplicitR6_1[q57],
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q59, q61]
- ->
- or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q57, q63] =
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q59, q61]
- | q63 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q57, q63] != 4])
- | q61 : int(1..2)])
- /\
- and([or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
- [q59, q67]
- /\
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q59, q67]
- = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q57, q65]
- | q67 : int(1..2)])
- | q65 : int(1..fin2),
- a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q57, q65] != 4]),
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q59] = a_RelationAsSetR6_ExplicitR6_3[q57];
- int(1..3)])
- | q59 : int(1..84)])
- | q57 : int(1..fin1)]),
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker = fin1,
- and([q1 + 1 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- flatten([[r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q1]; int(1)],
- flatten([flatten([[-toInt(r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
- [q1, q9]);
- int(1)],
- [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q1, q9];
- int(1)];
- int(1..2)])
- | q9 : int(1..2)]),
- [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q1]; int(1)];
- int(1..3)])
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q2] = 1,
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q2, q11] =
- false
- | q11 : int(1..2)])
- /\
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q2, q12] = 2
- | q12 : int(1..2)]),
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q2] = 4;
- int(1..3)])
- | q2 : int(1..84)]),
- and([q3 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, 2] ->
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q3, 1] <
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q3, 2])
- | q3 : int(1..84)]),
- and([q3 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, q5] = false ->
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q3, q5] = 2
- | q5 : int(1..2)])
- | q3 : int(1..84)]),
- and([q3 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, 2] ->
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, 1])
- | q3 : int(1..84)]),
- and([q13 + 1 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q13]; int(1)],
- flatten([[r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker
- [q13];
- int(1)],
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q13, q19]
- | q19 : int(1..2)];
- int(1..2)]),
- [r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q13]; int(1)];
- int(1..3)])
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q14] = 1,
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q14] = 0 /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q14, q21] = 2
- | q21 : int(1..2)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q14] = 4;
- int(1..3)])
- | q14 : int(1..84)]),
- and([q15 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q15] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q15, 1] <
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q15, 2])
- | q15 : int(1..84)]),
- and([q15 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q17 > r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q15] ->
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values[q15, q17] = 2
- | q17 : int(1..2)])
- | q15 : int(1..84)]),
- and([q23 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker ->
- or([q25 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker /\
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q25] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q23],
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q25, q27]
- ->
- or([q29 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q23]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q23, q29]
- =
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q25, q27]
- | q29 : int(1..2)])
- | q27 : int(1..2)])
- /\
- and([q31 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q23]
- ->
- or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
- [q25, q33]
- /\
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q25, q33]
- =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q23, q31]
- | q33 : int(1..2)])
- | q31 : int(1..2)]),
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q25] =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q23];
- int(1..3)])
- | q25 : int(1..84)])
- | q23 : int(1..84)]),
- and([q34 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
- or([q36 <= r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker /\
- and([r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_1[q36] =
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q34],
- and([q38 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q36]
- ->
- or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
- [q34, q40]
- /\
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q34, q40]
- =
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q36, q38]
- | q40 : int(1..2)])
- | q38 : int(1..2)])
- /\
- and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q34, q42]
- ->
- or([q44 <=
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Marker[q36]
- /\
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_2_ExplicitVarSizeWithMarker_Values
- [q36, q44]
- =
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
- [q34, q42]
- | q44 : int(1..2)])
- | q42 : int(1..2)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Values_3[q36] =
- r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q34];
- int(1..3)])
- | q36 : int(1..84)])
- | q34 : int(1..84)]),
- r_RelationAsSetR5_ExplicitVarSizeWithMarkerR5_Marker = r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker
-
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_4_4-param4-solution000001.solution b/tests/exhaustive/basic/relation04_param/expected/model_4_4-param4-solution000001.solution
new file mode 100644
index 0000000000..547e6d2e7e
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_4_4-param4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting r be relation((3, {2}, 6), (3, {3}, 9))
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_4_4-param4.eprime-param b/tests/exhaustive/basic/relation04_param/expected/model_4_4-param4.eprime-param
new file mode 100644
index 0000000000..87708d95a4
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_4_4-param4.eprime-param
@@ -0,0 +1,11 @@
+language ESSENCE' 1.0
+
+letting a_RelationAsSetR6_ExplicitR6_1 be [3, 3; int(1..2)]
+letting a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy be [[2; int(1)], [3; int(1)]; int(1..2)]
+$ Visualisation for a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy
+$ 2
+$ 3
+
+letting a_RelationAsSetR6_ExplicitR6_3 be [6, 9; int(1..2)]
+letting fin1 be 2
+letting fin2 be 1
diff --git a/tests/exhaustive/basic/relation04_param/expected/model_4_4.eprime b/tests/exhaustive/basic/relation04_param/expected/model_4_4.eprime
new file mode 100644
index 0000000000..e4cbdf3e64
--- /dev/null
+++ b/tests/exhaustive/basic/relation04_param/expected/model_4_4.eprime
@@ -0,0 +1,121 @@
+language ESSENCE' 1.0
+
+given fin1: int
+given fin2: int
+given a_RelationAsSetR6_ExplicitR6_1: matrix indexed by [int(1..fin1)] of int(1..3)
+given a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..fin1), int(1..fin2)] of int(2..4)
+given a_RelationAsSetR6_ExplicitR6_3: matrix indexed by [int(1..fin1)] of int(4..10)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker: int(0..84)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1: matrix indexed by [int(1..84)] of int(1..3)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..84), int(1..2)] of bool
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..84), int(1..2)] of int(2..3)
+find r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3: matrix indexed by [int(1..84)] of int(4..10)
+branching on
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker, r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values,
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3]
+such that
+ and([q14 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ or([and([a_RelationAsSetR6_ExplicitR6_1[q16] = r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q14],
+ and([or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q14, q20]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q14, q20]
+ = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q16, q18]
+ | q20 : int(1..2)])
+ | q18 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q16, q18] != 4])
+ /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q14, q22]
+ ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q16, q24] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q14, q22]
+ | q24 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q16, q24] != 4])
+ | q22 : int(1..2)]),
+ a_RelationAsSetR6_ExplicitR6_3[q16] = r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q14];
+ int(1..3)])
+ | q16 : int(1..fin1)])
+ | q14 : int(1..84)]),
+ and([or([q27 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q27] = a_RelationAsSetR6_ExplicitR6_1[q25],
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q27, q29]
+ ->
+ or([a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q25, q31] =
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q27, q29]
+ | q31 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q25, q31] != 4])
+ | q29 : int(1..2)])
+ /\
+ and([or([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q27, q35]
+ /\
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q27, q35]
+ = a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q25, q33]
+ | q35 : int(1..2)])
+ | q33 : int(1..fin2),
+ a_RelationAsSetR6_ExplicitR6_2_ExplicitVarSizeWithDummy[q25, q33] != 4]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q27] = a_RelationAsSetR6_ExplicitR6_3[q25];
+ int(1..3)])
+ | q27 : int(1..84)])
+ | q25 : int(1..fin1)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker = fin1,
+ and([q1 + 1 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ flatten([[r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q1]; int(1)],
+ flatten([flatten([[-toInt(r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags
+ [q1, q9]);
+ int(1)],
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values
+ [q1, q9];
+ int(1)];
+ int(1..2)])
+ | q9 : int(1..2)]),
+ [r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q1]; int(1)];
+ int(1..3)])
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_1[q2] = 1,
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q2, q11] =
+ false
+ | q11 : int(1..2)])
+ /\
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q2, q12] = 2
+ | q12 : int(1..2)]),
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_3[q2] = 4;
+ int(1..3)])
+ | q2 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, 2] ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q3, 1] <
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q3, 2])
+ | q3 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, q5] = false ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Values[q3, q5] = 2
+ | q5 : int(1..2)])
+ | q3 : int(1..84)]),
+ and([q3 <= r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Marker ->
+ (r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, 2] ->
+ r_RelationAsSetR4_ExplicitVarSizeWithMarkerR4_Values_2_ExplicitVarSizeWithFlags_Flags[q3, 1])
+ | q3 : int(1..84)])
+
diff --git a/tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2.eprime b/tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2.eprime
index 35f582c602..cdd331bb1d 100644
--- a/tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2.eprime
+++ b/tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2.eprime
@@ -12,11 +12,5 @@ such that
[-toInt(x_RelationAsSetR2_ExplicitR2_2_Occurrence[q1 + 1, q5]) | q5 : int(1..3)];
int(1..2)])
| q1 : int(1..3)]),
-<<<<<<< HEAD
- and([[x_RelationAsSetR3_ExplicitR3_2_Explicit[q2, 1]; int(1)] >>>>>> main
diff --git a/tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2.eprime b/tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2.eprime
index 1f7af37e2a..f35ec39261 100644
--- a/tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2.eprime
+++ b/tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2.eprime
@@ -10,9 +10,5 @@ such that
flatten([[x_ExplicitR2_1[q1 + 1]; int(1)], [-toInt(x_ExplicitR2_2_Occurrence[q1 + 1, q5]) | q5 : int(1..3)];
int(1..2)])
| q1 : int(1..3)]),
-<<<<<<< HEAD
- and([[x_ExplicitR3_2_Explicit[q2, 1]; int(1)] >>>>>> main
diff --git a/tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2.eprime b/tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2.eprime
index bb7be86392..5c9f630e85 100644
--- a/tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2.eprime
+++ b/tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2.eprime
@@ -21,17 +21,9 @@ such that
x_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_1[q2] = 1 /\
and([x_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q2, q7] = false | q7 : int(1..3)])
| q2 : int(1..3)]),
-<<<<<<< HEAD
- 2 <= x_RelationAsSetR3_ExplicitVarSizeWithMarkerR3_Marker,
- x_RelationAsSetR3_ExplicitVarSizeWithMarkerR3_Marker <= 3,
- and([q3 <= x_RelationAsSetR3_ExplicitVarSizeWithMarkerR3_Marker ->
- [x_RelationAsSetR3_ExplicitVarSizeWithMarkerR3_Values_2_Explicit[q3, 1]; int(1)]
2 = sum([toInt(x_RelationAsSetR2_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q3, q4]) | q4 : int(1..3)])
->>>>>>> main
| q3 : int(1..3)])
diff --git a/tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2.eprime b/tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2.eprime
index d1349cf0d0..2a175b772c 100644
--- a/tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2.eprime
+++ b/tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2.eprime
@@ -20,17 +20,9 @@ such that
x_ExplicitVarSizeWithMarkerR2_Values_1[q2] = 1 /\
and([x_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q2, q7] = false | q7 : int(1..3)])
| q2 : int(1..3)]),
-<<<<<<< HEAD
- 2 <= x_ExplicitVarSizeWithMarkerR3_Marker,
- x_ExplicitVarSizeWithMarkerR3_Marker <= 3,
- and([q3 <= x_ExplicitVarSizeWithMarkerR3_Marker ->
- [x_ExplicitVarSizeWithMarkerR3_Values_2_Explicit[q3, 1]; int(1)]
2 = sum([toInt(x_ExplicitVarSizeWithMarkerR2_Values_2_Occurrence[q3, q4]) | q4 : int(1..3)])
->>>>>>> main
| q3 : int(1..3)])
diff --git a/tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4.eprime b/tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4.eprime
index 4f317c83dc..ef02aab680 100644
--- a/tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4.eprime
+++ b/tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4.eprime
@@ -20,19 +20,10 @@ such that
x_ExplicitVarSizeWithFlagsR2_Values_1[q2] = 1 /\
and([x_ExplicitVarSizeWithFlagsR2_Values_2_Occurrence[q2, q9] = false | q9 : int(1..3)])
| q2 : int(1..3)]),
-<<<<<<< HEAD
- and([x_ExplicitVarSizeWithFlagsR3_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlagsR3_Flags[q3] | q3 : int(1..2)]),
- 2 <= sum([toInt(x_ExplicitVarSizeWithFlagsR3_Flags[q4]) | q4 : int(1..3)]),
- sum([toInt(x_ExplicitVarSizeWithFlagsR3_Flags[q4]) | q4 : int(1..3)]) <= 3,
- and([x_ExplicitVarSizeWithFlagsR3_Flags[q5] ->
- [x_ExplicitVarSizeWithFlagsR3_Values_2_Explicit[q5, 1]; int(1)] x_ExplicitVarSizeWithFlagsR2_Flags[q3] | q3 : int(1..2)]),
2 <= sum([toInt(x_ExplicitVarSizeWithFlagsR2_Flags[q4]) | q4 : int(1..3)]),
sum([toInt(x_ExplicitVarSizeWithFlagsR2_Flags[q4]) | q4 : int(1..3)]) <= 3,
and([x_ExplicitVarSizeWithFlagsR2_Flags[q5] ->
2 = sum([toInt(x_ExplicitVarSizeWithFlagsR2_Values_2_Occurrence[q5, q6]) | q6 : int(1..3)])
->>>>>>> main
| q5 : int(1..3)])
diff --git a/tests/exhaustive/basic/sequence_injective_01/expected/model.eprime b/tests/exhaustive/basic/sequence_injective_01/expected/model.eprime
index c8d80819ad..6b789c1341 100644
--- a/tests/exhaustive/basic/sequence_injective_01/expected/model.eprime
+++ b/tests/exhaustive/basic/sequence_injective_01/expected/model.eprime
@@ -7,5 +7,5 @@ branching on [f_ExplicitBounded_Length, f_ExplicitBounded_Values_1, f_ExplicitBo
such that
and([f_ExplicitBounded_Values_1[q1] != f_ExplicitBounded_Values_1[q2] \/
f_ExplicitBounded_Values_2[q1] != f_ExplicitBounded_Values_2[q2]
- | q1 : int(1..2), q2 : int(1..2), [q1; int(1)]
f_ExplicitBounded_Values_1[q2] != f_ExplicitBounded_Values_1[q3] \/
f_ExplicitBounded_Values_2[q2] != f_ExplicitBounded_Values_2[q3]
- | q2 : int(1..2), q3 : int(1..2), [q2; int(1)] >>>>>> main
diff --git a/tests/exhaustive/basic/set01_2/expected/model_1_2.eprime b/tests/exhaustive/basic/set01_2/expected/model_1_2.eprime
index e944088997..560304aacd 100644
--- a/tests/exhaustive/basic/set01_2/expected/model_1_2.eprime
+++ b/tests/exhaustive/basic/set01_2/expected/model_1_2.eprime
@@ -4,17 +4,9 @@ find x_Explicit: matrix indexed by [int(1..2)] of int(1..3)
find x_Occurrence: matrix indexed by [int(1..3)] of bool
branching on [x_Occurrence, x_Explicit]
such that
-<<<<<<< HEAD
- and([x_Occurrence[i] | i : int(1..2)]),
- 2 = sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]),
- [x_Explicit[1]; int(1)] or([x_Explicit[q8] = q6 | q8 : int(1..2)]) | q6 : int(1..3)])
-=======
and([or([x_Explicit[q10] = i | q10 : int(1..2)]) | i : int(1..2)]),
x_Explicit[1] < x_Explicit[2],
2 = sum([toInt(x_Occurrence[q3]) | q3 : int(1..3)]),
and([x_Occurrence[q4] -> or([x_Explicit[q6] = q4 | q6 : int(1..2)]) | q4 : int(1..3)]),
and([x_Occurrence[x_Explicit[q8]] | q8 : int(1..2)])
->>>>>>> main
diff --git a/tests/exhaustive/basic/set01_2/expected/model_2_1.eprime b/tests/exhaustive/basic/set01_2/expected/model_2_1.eprime
index 7b0834eddc..d0220e3ef9 100644
--- a/tests/exhaustive/basic/set01_2/expected/model_2_1.eprime
+++ b/tests/exhaustive/basic/set01_2/expected/model_2_1.eprime
@@ -4,17 +4,9 @@ find x_Occurrence: matrix indexed by [int(1..3)] of bool
find x_Explicit: matrix indexed by [int(1..2)] of int(1..3)
branching on [x_Explicit, x_Occurrence]
such that
-<<<<<<< HEAD
- and([or([x_Explicit[q10] = i | q10 : int(1..2)]) | i : int(1..2)]),
- [x_Explicit[1]; int(1)] or([x_Explicit[q6] = q4 | q6 : int(1..2)]) | q4 : int(1..3)]),
- and([x_Occurrence[x_Explicit[q8]] | q8 : int(1..2)])
-=======
and([x_Occurrence[i] | i : int(1..2)]),
2 = sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]),
x_Explicit[1] < x_Explicit[2],
and([x_Occurrence[x_Explicit[q5]] | q5 : int(1..2)]),
and([x_Occurrence[q6] -> or([x_Explicit[q8] = q6 | q8 : int(1..2)]) | q6 : int(1..3)])
->>>>>>> main
diff --git a/tests/exhaustive/basic/set01_2/expected/model_2_2.eprime b/tests/exhaustive/basic/set01_2/expected/model_2_2.eprime
index ba601dd7d5..e83e48b7e4 100644
--- a/tests/exhaustive/basic/set01_2/expected/model_2_2.eprime
+++ b/tests/exhaustive/basic/set01_2/expected/model_2_2.eprime
@@ -3,11 +3,6 @@ language ESSENCE' 1.0
find x_Occurrence: matrix indexed by [int(1..3)] of bool
branching on [x_Occurrence]
such that
-<<<<<<< HEAD
- and([or([x_Explicit[q4] = i | q4 : int(1..2)]) | i : int(1..2)]),
- [x_Explicit[1]; int(1)] >>>>>> main
diff --git a/tests/exhaustive/basic/set01_3/expected/model_1_2.eprime b/tests/exhaustive/basic/set01_3/expected/model_1_2.eprime
index e944088997..560304aacd 100644
--- a/tests/exhaustive/basic/set01_3/expected/model_1_2.eprime
+++ b/tests/exhaustive/basic/set01_3/expected/model_1_2.eprime
@@ -4,17 +4,9 @@ find x_Explicit: matrix indexed by [int(1..2)] of int(1..3)
find x_Occurrence: matrix indexed by [int(1..3)] of bool
branching on [x_Occurrence, x_Explicit]
such that
-<<<<<<< HEAD
- and([x_Occurrence[i] | i : int(1..2)]),
- 2 = sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]),
- [x_Explicit[1]; int(1)] or([x_Explicit[q8] = q6 | q8 : int(1..2)]) | q6 : int(1..3)])
-=======
and([or([x_Explicit[q10] = i | q10 : int(1..2)]) | i : int(1..2)]),
x_Explicit[1] < x_Explicit[2],
2 = sum([toInt(x_Occurrence[q3]) | q3 : int(1..3)]),
and([x_Occurrence[q4] -> or([x_Explicit[q6] = q4 | q6 : int(1..2)]) | q4 : int(1..3)]),
and([x_Occurrence[x_Explicit[q8]] | q8 : int(1..2)])
->>>>>>> main
diff --git a/tests/exhaustive/basic/set01_3/expected/model_2_1.eprime b/tests/exhaustive/basic/set01_3/expected/model_2_1.eprime
index 7b0834eddc..d0220e3ef9 100644
--- a/tests/exhaustive/basic/set01_3/expected/model_2_1.eprime
+++ b/tests/exhaustive/basic/set01_3/expected/model_2_1.eprime
@@ -4,17 +4,9 @@ find x_Occurrence: matrix indexed by [int(1..3)] of bool
find x_Explicit: matrix indexed by [int(1..2)] of int(1..3)
branching on [x_Explicit, x_Occurrence]
such that
-<<<<<<< HEAD
- and([or([x_Explicit[q10] = i | q10 : int(1..2)]) | i : int(1..2)]),
- [x_Explicit[1]; int(1)] or([x_Explicit[q6] = q4 | q6 : int(1..2)]) | q4 : int(1..3)]),
- and([x_Occurrence[x_Explicit[q8]] | q8 : int(1..2)])
-=======
and([x_Occurrence[i] | i : int(1..2)]),
2 = sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]),
x_Explicit[1] < x_Explicit[2],
and([x_Occurrence[x_Explicit[q5]] | q5 : int(1..2)]),
and([x_Occurrence[q6] -> or([x_Explicit[q8] = q6 | q8 : int(1..2)]) | q6 : int(1..3)])
->>>>>>> main
diff --git a/tests/exhaustive/basic/set01_3/expected/model_2_2.eprime b/tests/exhaustive/basic/set01_3/expected/model_2_2.eprime
index ba601dd7d5..e83e48b7e4 100644
--- a/tests/exhaustive/basic/set01_3/expected/model_2_2.eprime
+++ b/tests/exhaustive/basic/set01_3/expected/model_2_2.eprime
@@ -3,11 +3,6 @@ language ESSENCE' 1.0
find x_Occurrence: matrix indexed by [int(1..3)] of bool
branching on [x_Occurrence]
such that
-<<<<<<< HEAD
- and([or([x_Explicit[q4] = i | q4 : int(1..2)]) | i : int(1..2)]),
- [x_Explicit[1]; int(1)] >>>>>> main
diff --git a/tests/exhaustive/basic/set02/expected/model_1_2.eprime b/tests/exhaustive/basic/set02/expected/model_1_2.eprime
index f551eb02e0..0434a4ad13 100644
--- a/tests/exhaustive/basic/set02/expected/model_1_2.eprime
+++ b/tests/exhaustive/basic/set02/expected/model_1_2.eprime
@@ -4,17 +4,9 @@ find x_Explicit: matrix indexed by [int(1..2)] of int(1..3)
find x_Occurrence: matrix indexed by [int(1..3)] of bool
branching on [x_Occurrence, x_Explicit]
such that
-<<<<<<< HEAD
- x_Occurrence[1],
- 2 = sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]),
- [x_Explicit[1]; int(1)] or([x_Explicit[q8] = q6 | q8 : int(1..2)]) | q6 : int(1..3)])
-=======
or([x_Explicit[q10] = 1 | q10 : int(1..2)]),
x_Explicit[1] < x_Explicit[2],
2 = sum([toInt(x_Occurrence[q3]) | q3 : int(1..3)]),
and([x_Occurrence[q4] -> or([x_Explicit[q6] = q4 | q6 : int(1..2)]) | q4 : int(1..3)]),
and([x_Occurrence[x_Explicit[q8]] | q8 : int(1..2)])
->>>>>>> main
diff --git a/tests/exhaustive/basic/set02/expected/model_2_1.eprime b/tests/exhaustive/basic/set02/expected/model_2_1.eprime
index db500dda0f..4fe89c0a58 100644
--- a/tests/exhaustive/basic/set02/expected/model_2_1.eprime
+++ b/tests/exhaustive/basic/set02/expected/model_2_1.eprime
@@ -4,17 +4,9 @@ find x_Occurrence: matrix indexed by [int(1..3)] of bool
find x_Explicit: matrix indexed by [int(1..2)] of int(1..3)
branching on [x_Explicit, x_Occurrence]
such that
-<<<<<<< HEAD
- or([x_Explicit[q10] = 1 | q10 : int(1..2)]),
- [x_Explicit[1]; int(1)] or([x_Explicit[q6] = q4 | q6 : int(1..2)]) | q4 : int(1..3)]),
- and([x_Occurrence[x_Explicit[q8]] | q8 : int(1..2)])
-=======
x_Occurrence[1],
2 = sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]),
x_Explicit[1] < x_Explicit[2],
and([x_Occurrence[x_Explicit[q5]] | q5 : int(1..2)]),
and([x_Occurrence[q6] -> or([x_Explicit[q8] = q6 | q8 : int(1..2)]) | q6 : int(1..3)])
->>>>>>> main
diff --git a/tests/exhaustive/basic/set02/expected/model_2_2.eprime b/tests/exhaustive/basic/set02/expected/model_2_2.eprime
index 7294fc8d3b..7fddcb8930 100644
--- a/tests/exhaustive/basic/set02/expected/model_2_2.eprime
+++ b/tests/exhaustive/basic/set02/expected/model_2_2.eprime
@@ -3,11 +3,6 @@ language ESSENCE' 1.0
find x_Occurrence: matrix indexed by [int(1..3)] of bool
branching on [x_Occurrence]
such that
-<<<<<<< HEAD
- or([x_Explicit[q4] = 1 | q4 : int(1..2)]),
- [x_Explicit[1]; int(1)] >>>>>> main
diff --git a/tests/exhaustive/basic/set03/expected/model_1_1-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_1_1-solution000001.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_1_1-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_1_1-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_1_1.eprime b/tests/exhaustive/basic/set03/expected/model_1_1.eprime
new file mode 100644
index 0000000000..16b384a5f6
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_1_1.eprime
@@ -0,0 +1,8 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..2)] of bool
+branching on [x_Occurrence]
+such that
+ x_Occurrence[1],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..2)]) <= 2
+
diff --git a/tests/exhaustive/basic/set03/expected/model_1_2-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_1_2-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_1_2-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_1_2-solution000002.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_1_2.eprime b/tests/exhaustive/basic/set03/expected/model_1_2.eprime
new file mode 100644
index 0000000000..8e12c0f3a2
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_1_2.eprime
@@ -0,0 +1,16 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..2)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2)] of int(1..3)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ x_Occurrence[1],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..2)]) <= 2,
+ x_ExplicitVarSizeWithDummy[1] < x_ExplicitVarSizeWithDummy[2] \/ x_ExplicitVarSizeWithDummy[1] = 3,
+ x_ExplicitVarSizeWithDummy[1] = 3 -> x_ExplicitVarSizeWithDummy[2] = 3,
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 3) | q4 : int(1..2)]) <= 2,
+ and([x_ExplicitVarSizeWithDummy[q7] != 3 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..2)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 3 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..2)])
+ | q8 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/set03/expected/model_1_3-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_1_3-solution000001.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_1_3-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_1_3-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_1_3.eprime b/tests/exhaustive/basic/set03/expected/model_1_3.eprime
new file mode 100644
index 0000000000..6fb9afa1ba
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_1_3.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..2)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..2)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(1..2)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..2)]) <= 2,
+ 2 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[1] < x_ExplicitVarSizeWithMarker_Values[2],
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..2)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 2,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..2)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..2)])
+ | q7 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/set03/expected/model_1_4-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_1_4-solution000001.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_1_4-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_1_4-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_1_4.eprime b/tests/exhaustive/basic/set03/expected/model_1_4.eprime
new file mode 100644
index 0000000000..6301346892
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_1_4.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..2)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(1..2)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..2)]) <= 2,
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..2)]),
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..2)]) <= 2,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..2)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..2)])
+ | q9 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/set03/expected/model_2_1-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_2_1-solution000001.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_2_1-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_2_1-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_2_1.eprime b/tests/exhaustive/basic/set03/expected/model_2_1.eprime
new file mode 100644
index 0000000000..b209f517b3
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_2_1.eprime
@@ -0,0 +1,16 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..2)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q12] != 3 /\ x_ExplicitVarSizeWithDummy[q12] = 1 | q12 : int(1..2)]),
+ x_ExplicitVarSizeWithDummy[1] < x_ExplicitVarSizeWithDummy[2] \/ x_ExplicitVarSizeWithDummy[1] = 3,
+ x_ExplicitVarSizeWithDummy[1] = 3 -> x_ExplicitVarSizeWithDummy[2] = 3,
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 3) | q3 : int(1..2)]) <= 2,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..2)]) <= 2,
+ and([x_Occurrence[q6] ->
+ or([x_ExplicitVarSizeWithDummy[q8] != 3 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..2)])
+ | q6 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 3 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/set03/expected/model_2_2-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_2_2-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_2_2-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_2_2-solution000002.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_2_2.eprime b/tests/exhaustive/basic/set03/expected/model_2_2.eprime
new file mode 100644
index 0000000000..99d5e5a575
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_2_2.eprime
@@ -0,0 +1,10 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2)] of int(1..3)
+branching on [x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q6] != 3 /\ x_ExplicitVarSizeWithDummy[q6] = 1 | q6 : int(1..2)]),
+ x_ExplicitVarSizeWithDummy[1] < x_ExplicitVarSizeWithDummy[2] \/ x_ExplicitVarSizeWithDummy[1] = 3,
+ x_ExplicitVarSizeWithDummy[1] = 3 -> x_ExplicitVarSizeWithDummy[2] = 3,
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 3) | q3 : int(1..2)]) <= 2
+
diff --git a/tests/exhaustive/basic/set03/expected/model_2_3-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_2_3-solution000001.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_2_3-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_2_3-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_2_3.eprime b/tests/exhaustive/basic/set03/expected/model_2_3.eprime
new file mode 100644
index 0000000000..94cefde44a
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_2_3.eprime
@@ -0,0 +1,26 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2)] of int(1..3)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..2)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(1..2)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q17] != 3 /\ x_ExplicitVarSizeWithDummy[q17] = 1 | q17 : int(1..2)]),
+ x_ExplicitVarSizeWithDummy[1] < x_ExplicitVarSizeWithDummy[2] \/ x_ExplicitVarSizeWithDummy[1] = 3,
+ x_ExplicitVarSizeWithDummy[1] = 3 -> x_ExplicitVarSizeWithDummy[2] = 3,
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 3) | q3 : int(1..2)]) <= 2,
+ 2 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[1] < x_ExplicitVarSizeWithMarker_Values[2],
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..2)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 2,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 3 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..2)])
+ | q9 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 3 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..2)])
+ | q13 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/set03/expected/model_2_4-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_2_4-solution000001.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_2_4-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_2_4-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_2_4.eprime b/tests/exhaustive/basic/set03/expected/model_2_4.eprime
new file mode 100644
index 0000000000..3b3251ce37
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_2_4.eprime
@@ -0,0 +1,26 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2)] of int(1..3)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(1..2)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q19] != 3 /\ x_ExplicitVarSizeWithDummy[q19] = 1 | q19 : int(1..2)]),
+ x_ExplicitVarSizeWithDummy[1] < x_ExplicitVarSizeWithDummy[2] \/ x_ExplicitVarSizeWithDummy[1] = 3,
+ x_ExplicitVarSizeWithDummy[1] = 3 -> x_ExplicitVarSizeWithDummy[2] = 3,
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 3) | q3 : int(1..2)]) <= 2,
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..2)]),
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..2)]) <= 2,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 3 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..2)])
+ | q11 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 3 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..2)])
+ | q15 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/set03/expected/model_3_1-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_3_1-solution000001.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_3_1-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_3_1-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_3_1.eprime b/tests/exhaustive/basic/set03/expected/model_3_1.eprime
new file mode 100644
index 0000000000..fe211d2c59
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_3_1.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..2)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(1..2)
+find x_Occurrence: matrix indexed by [int(1..2)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 1 | q11 : int(1..2)]),
+ 2 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[1] < x_ExplicitVarSizeWithMarker_Values[2],
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..2)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 2,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..2)]) <= 2,
+ and([x_Occurrence[q5] ->
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5 | q7 : int(1..2)])
+ | q5 : int(1..2)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/set03/expected/model_3_2-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_3_2-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_3_2-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_3_2-solution000002.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_3_2.eprime b/tests/exhaustive/basic/set03/expected/model_3_2.eprime
new file mode 100644
index 0000000000..f1ac7634ba
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_3_2.eprime
@@ -0,0 +1,26 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..2)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(1..2)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2)] of int(1..3)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = 1 | q17 : int(1..2)]),
+ 2 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[1] < x_ExplicitVarSizeWithMarker_Values[2],
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..2)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 2,
+ x_ExplicitVarSizeWithDummy[1] < x_ExplicitVarSizeWithDummy[2] \/ x_ExplicitVarSizeWithDummy[1] = 3,
+ x_ExplicitVarSizeWithDummy[1] = 3 -> x_ExplicitVarSizeWithDummy[2] = 3,
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 3) | q6 : int(1..2)]) <= 2,
+ and([x_ExplicitVarSizeWithDummy[q9] != 3 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..2)])
+ | q9 : int(1..2)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 3 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..2)])
+ | q13 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/set03/expected/model_3_3-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_3_3-solution000001.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_3_3-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_3_3-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_3_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_3_3.eprime b/tests/exhaustive/basic/set03/expected/model_3_3.eprime
new file mode 100644
index 0000000000..aebac4895f
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_3_3.eprime
@@ -0,0 +1,12 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..2)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(1..2)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q5 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q5] = 1 | q5 : int(1..2)]),
+ 2 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[1] < x_ExplicitVarSizeWithMarker_Values[2],
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..2)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 2
+
diff --git a/tests/exhaustive/basic/set03/expected/model_3_4-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_3_4-solution000001.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_3_4-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_3_4-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_3_4.eprime b/tests/exhaustive/basic/set03/expected/model_3_4.eprime
new file mode 100644
index 0000000000..c839c9c5b8
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_3_4.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..2)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(1..2)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(1..2)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..2)]),
+ 2 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[1] < x_ExplicitVarSizeWithMarker_Values[2],
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..2)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 2,
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..2)]),
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..2)]) <= 2,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..2)])
+ | q10 : int(1..2)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..2)])
+ | q14 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/set03/expected/model_4_1-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_4_1-solution000001.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_4_1-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_4_1-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_4_1.eprime b/tests/exhaustive/basic/set03/expected/model_4_1.eprime
new file mode 100644
index 0000000000..248c3e3b42
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_4_1.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(1..2)
+find x_Occurrence: matrix indexed by [int(1..2)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 1 | q13 : int(1..2)]),
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..2)]),
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..2)]) <= 2,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..2)]) <= 2,
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..2)])
+ | q7 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/set03/expected/model_4_2-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_4_2-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_4_2-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_4_2-solution000002.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_4_2.eprime b/tests/exhaustive/basic/set03/expected/model_4_2.eprime
new file mode 100644
index 0000000000..ab8292a451
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_4_2.eprime
@@ -0,0 +1,26 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(1..2)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2)] of int(1..3)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..2)]),
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..2)]),
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..2)]) <= 2,
+ x_ExplicitVarSizeWithDummy[1] < x_ExplicitVarSizeWithDummy[2] \/ x_ExplicitVarSizeWithDummy[1] = 3,
+ x_ExplicitVarSizeWithDummy[1] = 3 -> x_ExplicitVarSizeWithDummy[2] = 3,
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 3) | q8 : int(1..2)]) <= 2,
+ and([x_ExplicitVarSizeWithDummy[q11] != 3 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..2)])
+ | q11 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 3 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..2)])
+ | q15 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/set03/expected/model_4_3-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_4_3-solution000001.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_4_3-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_4_3-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_4_3.eprime b/tests/exhaustive/basic/set03/expected/model_4_3.eprime
new file mode 100644
index 0000000000..3a1cb29286
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_4_3.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(1..2)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..2)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(1..2)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = 1 | q18 : int(1..2)]),
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..2)]),
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..2)]) <= 2,
+ 2 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[1] < x_ExplicitVarSizeWithMarker_Values[2],
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..2)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 2,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..2)])
+ | q10 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..2)])
+ | q14 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/set03/expected/model_4_4-solution000001.solution b/tests/exhaustive/basic/set03/expected/model_4_4-solution000001.solution
new file mode 100644
index 0000000000..de5cc861ad
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_4_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1}
diff --git a/tests/exhaustive/basic/set03/expected/model_4_4-solution000002.solution b/tests/exhaustive/basic/set03/expected/model_4_4-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_4_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set03/expected/model_4_4.eprime b/tests/exhaustive/basic/set03/expected/model_4_4.eprime
new file mode 100644
index 0000000000..ec9b61f711
--- /dev/null
+++ b/tests/exhaustive/basic/set03/expected/model_4_4.eprime
@@ -0,0 +1,12 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(1..2)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q7] /\ x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..2)]),
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Values[1] < x_ExplicitVarSizeWithFlags_Values[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..2)]),
+ x_ExplicitVarSizeWithFlags_Flags[2] -> x_ExplicitVarSizeWithFlags_Flags[1],
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..2)]) <= 2
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_1_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_1_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_1_1.eprime b/tests/exhaustive/basic/set04/expected/model_1_1_1.eprime
new file mode 100644
index 0000000000..758eeb2d3a
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_1_1.eprime
@@ -0,0 +1,9 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on [x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_1_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_1_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_1_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_1_2.eprime b/tests/exhaustive/basic/set04/expected/model_1_1_2.eprime
new file mode 100644
index 0000000000..f368f0ac5a
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_1_2.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 4
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 4 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 4 | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 4) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q7] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 4 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
+ | q8 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_1_3-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_1_3-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_1_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_1_3.eprime b/tests/exhaustive/basic/set04/expected/model_1_1_3.eprime
new file mode 100644
index 0000000000..2eabb913cf
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_1_3.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..3)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_1_4-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_1_4-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_1_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_1_4.eprime b/tests/exhaustive/basic/set04/expected/model_1_1_4.eprime
new file mode 100644
index 0000000000..ab61dc16a9
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_1_4.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
+ | q9 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_2_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_2_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_2_1-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_2_1.eprime b/tests/exhaustive/basic/set04/expected/model_1_2_1.eprime
new file mode 100644
index 0000000000..f3b700efaf
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_2_1.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q12] != 4 /\ x_ExplicitVarSizeWithDummy[q12] = 2 | q12 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 4
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 4 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 4 | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 4) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q7] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 4 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
+ | q8 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_2_3-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_2_3-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_2_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_2_3.eprime b/tests/exhaustive/basic/set04/expected/model_1_2_3.eprime
new file mode 100644
index 0000000000..72080d2343
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_2_3.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q28] != 4 /\ x_ExplicitVarSizeWithDummy[q28] = 2 | q28 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 4
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 4 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 4 | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 4) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q7] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 4 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
+ | q8 : int(1..3)]),
+ and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..2)]),
+ and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q15]]
+ | q15 : int(1..3)]),
+ and([x_Occurrence[q16] ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..3)])
+ | q16 : int(1..3)]),
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q22] != 4 /\
+ x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..3)])
+ | q20 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q24] != 4 ->
+ or([q26 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q26] = x_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..3)])
+ | q24 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_2_4-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_2_4-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_2_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_2_4.eprime b/tests/exhaustive/basic/set04/expected/model_1_2_4.eprime
new file mode 100644
index 0000000000..245f216d5c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_2_4.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q30] != 4 /\ x_ExplicitVarSizeWithDummy[q30] = 2 | q30 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 4
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 4 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 4 | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 4) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q7] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 4 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q11] < x_ExplicitVarSizeWithFlags_Values[q11 + 1]
+ | q11 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] = false -> x_ExplicitVarSizeWithFlags_Values[q12] = 1
+ | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q14]) | q14 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q17]]
+ | q17 : int(1..3)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..3)])
+ | q18 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 4 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_3_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_3_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_3_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_3_1.eprime b/tests/exhaustive/basic/set04/expected/model_1_3_1.eprime
new file mode 100644
index 0000000000..567ac8830a
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_3_1.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..3)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_3_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_3_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_3_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_3_2.eprime b/tests/exhaustive/basic/set04/expected/model_1_3_2.eprime
new file mode 100644
index 0000000000..8afee978bf
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_3_2.eprime
@@ -0,0 +1,41 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 2 | q28 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..3)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 4
+ | q10 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q11] = 4 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 4 | q11 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q12] != 4) | q12 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q15] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..3)]),
+ and([x_Occurrence[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 4 /\ x_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..3)])
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 4 ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..3)])
+ | q20 : int(1..3)]),
+ and([q24 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 4 /\
+ x_ExplicitVarSizeWithDummy[q26] = x_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..3)])
+ | q24 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_3_4-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_3_4-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_3_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_3_4.eprime b/tests/exhaustive/basic/set04/expected/model_1_3_4.eprime
new file mode 100644
index 0000000000..6d2bd5ff5b
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_3_4.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 2 | q29 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..3)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 1
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..3)]),
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = q17 | q19 : int(1..3)])
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q23] = x_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..3)])
+ | q21 : int(1..3)]),
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q27] /\
+ x_ExplicitVarSizeWithFlags_Values[q27] = x_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..3)])
+ | q25 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_4_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_4_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_4_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_4_1.eprime b/tests/exhaustive/basic/set04/expected/model_1_4_1.eprime
new file mode 100644
index 0000000000..5915d91c83
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_4_1.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 2 | q13 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
+ | q9 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_4_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_4_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_4_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_4_2.eprime b/tests/exhaustive/basic/set04/expected/model_1_4_2.eprime
new file mode 100644
index 0000000000..2b37e1dd5a
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_4_2.eprime
@@ -0,0 +1,41 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 2 | q30 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q12] < x_ExplicitVarSizeWithDummy[q12 + 1] \/ x_ExplicitVarSizeWithDummy[q12] = 4
+ | q12 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q13] = 4 -> x_ExplicitVarSizeWithDummy[q13 + 1] = 4 | q13 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q14] != 4) | q14 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q17] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q17]] | q17 : int(1..3)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 4 /\ x_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..3)])
+ | q18 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q22] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 4 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_1_4_3-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_4_3-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_1_4_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_1_4_3.eprime b/tests/exhaustive/basic/set04/expected/model_1_4_3.eprime
new file mode 100644
index 0000000000..df30a96b17
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_1_4_3.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 2 | q29 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([q12 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q12] < x_ExplicitVarSizeWithMarker_Values[q12 + 1]
+ | q12 : int(1..2)]),
+ and([q13 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q13] = 1 | q13 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q16]]
+ | q16 : int(1..3)]),
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..3)])
+ | q17 : int(1..3)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\
+ x_ExplicitVarSizeWithFlags_Values[q23] = x_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..3)])
+ | q21 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q27] = x_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..3)])
+ | q25 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_1_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_1_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_1_1.eprime b/tests/exhaustive/basic/set04/expected/model_2_1_1.eprime
new file mode 100644
index 0000000000..3f095c1e18
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_1_1.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q12] != 4 /\ x_ExplicitVarSizeWithDummy[q12] = 1 | q12 : int(1..3)]),
+ x_Occurrence[2],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..3)]) <= 3,
+ and([x_Occurrence[q6] ->
+ or([x_ExplicitVarSizeWithDummy[q8] != 4 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..3)])
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_1_3-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_1_3-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_1_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_1_3.eprime b/tests/exhaustive/basic/set04/expected/model_2_1_3.eprime
new file mode 100644
index 0000000000..c0e6fb3f20
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_1_3.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q28] != 4 /\ x_ExplicitVarSizeWithDummy[q28] = 1 | q28 : int(1..3)]),
+ x_Occurrence[2],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..3)]) <= 3,
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 4 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..3)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..2)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 4 /\
+ x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 4 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q18]]
+ | q18 : int(1..3)]),
+ and([x_Occurrence[q19] ->
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = q19
+ | q21 : int(1..3)])
+ | q19 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_1_4-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_1_4-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_1_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_1_4.eprime b/tests/exhaustive/basic/set04/expected/model_2_1_4.eprime
new file mode 100644
index 0000000000..5636e1d31f
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_1_4.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q30] != 4 /\ x_ExplicitVarSizeWithDummy[q30] = 1 | q30 : int(1..3)]),
+ x_Occurrence[2],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..3)]) <= 3,
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 4 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..3)])
+ | q24 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q28] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 4 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..3)])
+ | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..3)])
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q20]]
+ | q20 : int(1..3)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = q21 | q23 : int(1..3)])
+ | q21 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_2_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_2_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_2_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_2_1.eprime b/tests/exhaustive/basic/set04/expected/model_2_2_1.eprime
new file mode 100644
index 0000000000..ab9e099117
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_2_1.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q12] != 4 /\ x_ExplicitVarSizeWithDummy[q12] = 1 | q12 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q14] != 4 /\ x_ExplicitVarSizeWithDummy[q14] = 2 | q14 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..3)]) <= 3,
+ and([x_Occurrence[q6] ->
+ or([x_ExplicitVarSizeWithDummy[q8] != 4 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..3)])
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_2_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_2_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_2_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_2_2.eprime b/tests/exhaustive/basic/set04/expected/model_2_2_2.eprime
new file mode 100644
index 0000000000..6f4df0cbd5
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_2_2.eprime
@@ -0,0 +1,12 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q6] != 4 /\ x_ExplicitVarSizeWithDummy[q6] = 1 | q6 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q8] != 4 /\ x_ExplicitVarSizeWithDummy[q8] = 2 | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_2_3-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_2_3-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_2_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_2_3.eprime b/tests/exhaustive/basic/set04/expected/model_2_2_3.eprime
new file mode 100644
index 0000000000..047d06d041
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_2_3.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q17] != 4 /\ x_ExplicitVarSizeWithDummy[q17] = 1 | q17 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q19] != 4 /\ x_ExplicitVarSizeWithDummy[q19] = 2 | q19 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 4 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 4 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_2_4-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_2_4-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_2_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_2_4.eprime b/tests/exhaustive/basic/set04/expected/model_2_2_4.eprime
new file mode 100644
index 0000000000..05a8f136b6
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_2_4.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q19] != 4 /\ x_ExplicitVarSizeWithDummy[q19] = 1 | q19 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q21] != 4 /\ x_ExplicitVarSizeWithDummy[q21] = 2 | q21 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 4 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_3_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_3_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_3_1.eprime b/tests/exhaustive/basic/set04/expected/model_2_3_1.eprime
new file mode 100644
index 0000000000..9c7150af48
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_3_1.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q28] != 4 /\ x_ExplicitVarSizeWithDummy[q28] = 1 | q28 : int(1..3)]),
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 2 | q30 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 4 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 4 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..3)]) <= 3,
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithDummy[q19] != 4 /\ x_ExplicitVarSizeWithDummy[q19] = q17 | q19 : int(1..3)])
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q21] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q21]] | q21 : int(1..3)]),
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_3_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_3_2-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_3_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_3_2.eprime b/tests/exhaustive/basic/set04/expected/model_2_3_2.eprime
new file mode 100644
index 0000000000..3aa6f1b412
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_3_2.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q17] != 4 /\ x_ExplicitVarSizeWithDummy[q17] = 1 | q17 : int(1..3)]),
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = 2 | q19 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 4 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 4 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_3_4-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_3_4-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_3_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_3_4.eprime b/tests/exhaustive/basic/set04/expected/model_2_3_4.eprime
new file mode 100644
index 0000000000..cc9085b2c5
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_3_4.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q38] != 4 /\ x_ExplicitVarSizeWithDummy[q38] = 1 | q38 : int(1..3)]),
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = 2 | q40 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 4 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 4 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 4 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..3)])
+ | q30 : int(1..3)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..3)])
+ | q34 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_4_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_4_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_4_1.eprime b/tests/exhaustive/basic/set04/expected/model_2_4_1.eprime
new file mode 100644
index 0000000000..f56d2aa970
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_4_1.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q30] != 4 /\ x_ExplicitVarSizeWithDummy[q30] = 1 | q30 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 2 | q32 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 4 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..3)]) <= 3,
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 4 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..3)])
+ | q19 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q23] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q23]] | q23 : int(1..3)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..3)])
+ | q24 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_4_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_4_2-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_4_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_4_2.eprime b/tests/exhaustive/basic/set04/expected/model_2_4_2.eprime
new file mode 100644
index 0000000000..3e7f4a0be3
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_4_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q19] != 4 /\ x_ExplicitVarSizeWithDummy[q19] = 1 | q19 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = 2 | q21 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 4 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_2_4_3-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_4_3-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_2_4_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_2_4_3.eprime b/tests/exhaustive/basic/set04/expected/model_2_4_3.eprime
new file mode 100644
index 0000000000..71047bdbd3
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_2_4_3.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q38] != 4 /\ x_ExplicitVarSizeWithDummy[q38] = 1 | q38 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = 2 | q40 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 4
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 4 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 4 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 4) | q3 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 4 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..2)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 4 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 4 ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..3)])
+ | q30 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..3)])
+ | q34 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_1_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_1_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_1_1.eprime b/tests/exhaustive/basic/set04/expected/model_3_1_1.eprime
new file mode 100644
index 0000000000..11b75e4c19
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_1_1.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 1 | q11 : int(1..3)]),
+ x_Occurrence[2],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..3)]) <= 3,
+ and([x_Occurrence[q5] ->
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5 | q7 : int(1..3)])
+ | q5 : int(1..3)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_1_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_1_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_1_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_1_2.eprime b/tests/exhaustive/basic/set04/expected/model_3_1_2.eprime
new file mode 100644
index 0000000000..5a6b86cc08
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_1_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 1 | q28 : int(1..3)]),
+ x_Occurrence[2],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..3)]) <= 3,
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 4
+ | q5 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 4 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 4 | q6 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 4) | q7 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q10] != 4 ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 4 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q18]] | q18 : int(1..3)]),
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 4 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..3)])
+ | q19 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_1_4-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_1_4-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_1_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_1_4.eprime b/tests/exhaustive/basic/set04/expected/model_3_1_4.eprime
new file mode 100644
index 0000000000..d07b3c46b8
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_1_4.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 1 | q29 : int(1..3)]),
+ x_Occurrence[2],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..3)]) <= 3,
+ and([x_Occurrence[q23] ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..3)])
+ | q23 : int(1..3)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
+ | q27 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q19]]
+ | q19 : int(1..3)]),
+ and([x_Occurrence[q20] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = q20 | q22 : int(1..3)])
+ | q20 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_2_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_2_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_2_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_2_1.eprime b/tests/exhaustive/basic/set04/expected/model_3_2_1.eprime
new file mode 100644
index 0000000000..e22f63bd77
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_2_1.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 1 | q28 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q30] != 4 /\ x_ExplicitVarSizeWithDummy[q30] = 2 | q30 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 4
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 4 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 4 | q5 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 4) | q6 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q9] != 4 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 4 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..3)]) <= 3,
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..3)])
+ | q17 : int(1..3)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q21]]
+ | q21 : int(1..3)]),
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 4 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_2_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_2_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_2_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_2_2.eprime b/tests/exhaustive/basic/set04/expected/model_3_2_2.eprime
new file mode 100644
index 0000000000..29d9a0d39b
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_2_2.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = 1 | q17 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q19] != 4 /\ x_ExplicitVarSizeWithDummy[q19] = 2 | q19 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 4
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 4 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 4 | q5 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 4) | q6 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q9] != 4 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 4 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_2_4-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_2_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_2_4-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_2_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_2_4.eprime b/tests/exhaustive/basic/set04/expected/model_3_2_4.eprime
new file mode 100644
index 0000000000..73a3773a1d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_2_4.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = 1 | q38 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q40] != 4 /\ x_ExplicitVarSizeWithDummy[q40] = 2 | q40 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 4
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 4 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 4 | q5 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 4) | q6 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q9] != 4 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 4 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 4 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..3)])
+ | q30 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..3)])
+ | q34 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_3_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_3_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_3_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_3_1.eprime b/tests/exhaustive/basic/set04/expected/model_3_3_1.eprime
new file mode 100644
index 0000000000..2c7c27bef8
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_3_1.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 1 | q11 : int(1..3)]),
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q13] = 2 | q13 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..3)]) <= 3,
+ and([x_Occurrence[q5] ->
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5 | q7 : int(1..3)])
+ | q5 : int(1..3)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_3_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_3_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_3_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_3_2.eprime b/tests/exhaustive/basic/set04/expected/model_3_3_2.eprime
new file mode 100644
index 0000000000..3b583676e9
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_3_2.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = 1 | q17 : int(1..3)]),
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = 2 | q19 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 4
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 4 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 4 | q5 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 4) | q6 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q9] != 4 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 4 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_3_3-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_3_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_3_3-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_3_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_3_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_3_3.eprime b/tests/exhaustive/basic/set04/expected/model_3_3_3.eprime
new file mode 100644
index 0000000000..ac50cfaa35
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_3_3.eprime
@@ -0,0 +1,14 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q5 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q5] = 1 | q5 : int(1..3)]),
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_3_4-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_3_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_3_4-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_3_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_3_4.eprime b/tests/exhaustive/basic/set04/expected/model_3_3_4.eprime
new file mode 100644
index 0000000000..d4336a8b4e
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_3_4.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..3)]),
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_4_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_4_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_4_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_4_1.eprime b/tests/exhaustive/basic/set04/expected/model_3_4_1.eprime
new file mode 100644
index 0000000000..72055038e8
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_4_1.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 1 | q29 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 2 | q31 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..3)]) <= 3,
+ and([x_Occurrence[q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = q18
+ | q20 : int(1..3)])
+ | q18 : int(1..3)]),
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q22]]
+ | q22 : int(1..3)]),
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..3)])
+ | q23 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_4_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_4_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_4_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_4_2.eprime b/tests/exhaustive/basic/set04/expected/model_3_4_2.eprime
new file mode 100644
index 0000000000..3d0a63ab93
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_4_2.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = 1 | q38 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = 2 | q40 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 4
+ | q17 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 4 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 4 | q18 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 4) | q19 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q22] != 4 ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 4 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..3)])
+ | q30 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 4 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..3)])
+ | q34 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_3_4_3-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_3_4_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_4_3-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_3_4_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_3_4_3.eprime b/tests/exhaustive/basic/set04/expected/model_3_4_3.eprime
new file mode 100644
index 0000000000..0c780bf7c5
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_3_4_3.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = 2 | q20 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_1_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_1_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_1_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_1_1.eprime b/tests/exhaustive/basic/set04/expected/model_4_1_1.eprime
new file mode 100644
index 0000000000..5e98c11020
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_1_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 1 | q13 : int(1..3)]),
+ x_Occurrence[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..3)]) <= 3,
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_1_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_1_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_1_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_1_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_1_2.eprime b/tests/exhaustive/basic/set04/expected/model_4_1_2.eprime
new file mode 100644
index 0000000000..22076b537b
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_1_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..3)]),
+ x_Occurrence[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..3)]) <= 3,
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..3)])
+ | q24 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 4
+ | q7 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 4 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 4 | q8 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 4) | q9 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q12] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
+ x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..3)])
+ | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 4 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..3)])
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q20]] | q20 : int(1..3)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithDummy[q23] != 4 /\ x_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..3)])
+ | q21 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_1_3-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_1_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_1_3-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_1_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_1_3.eprime b/tests/exhaustive/basic/set04/expected/model_4_1_3.eprime
new file mode 100644
index 0000000000..c4e74c86f3
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_1_3.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 1 | q29 : int(1..3)]),
+ x_Occurrence[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..3)]) <= 3,
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..3)])
+ | q23 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..3)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..2)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 1 | q8 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q19]]
+ | q19 : int(1..3)]),
+ and([x_Occurrence[q20] ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..3)])
+ | q20 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_2_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_2_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_2_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_2_1.eprime b/tests/exhaustive/basic/set04/expected/model_4_2_1.eprime
new file mode 100644
index 0000000000..3e4cb54b04
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_2_1.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q32] != 4 /\ x_ExplicitVarSizeWithDummy[q32] = 2 | q32 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 4
+ | q6 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 4 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 4 | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 4) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q11] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 4 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..3)]) <= 3,
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = q19 | q21 : int(1..3)])
+ | q19 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q23]]
+ | q23 : int(1..3)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 4 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..3)])
+ | q24 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q28] != 4 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_2_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_2_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_2_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_2_2.eprime b/tests/exhaustive/basic/set04/expected/model_4_2_2.eprime
new file mode 100644
index 0000000000..42d1680aae
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_2_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q21] != 4 /\ x_ExplicitVarSizeWithDummy[q21] = 2 | q21 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 4
+ | q6 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 4 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 4 | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 4) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q11] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 4 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_2_3-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_2_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_2_3-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_2_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_2_3.eprime b/tests/exhaustive/basic/set04/expected/model_4_2_3.eprime
new file mode 100644
index 0000000000..01219074fb
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_2_3.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = 1 | q38 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q40] != 4 /\ x_ExplicitVarSizeWithDummy[q40] = 2 | q40 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 4
+ | q6 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 4 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 4 | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 4) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q11] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 4 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..2)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 4 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..3)])
+ | q30 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 4 ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..3)])
+ | q34 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_3_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_3_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_3_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_3_1.eprime b/tests/exhaustive/basic/set04/expected/model_4_3_1.eprime
new file mode 100644
index 0000000000..87587667fc
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_3_1.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 1 | q29 : int(1..3)]),
+ or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = 2 | q31 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..2)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..3)]) <= 3,
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..3)])
+ | q18 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q22]]
+ | q22 : int(1..3)]),
+ and([x_Occurrence[q23] ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..3)])
+ | q23 : int(1..3)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
+ | q27 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_3_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_3_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_3_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_3_2.eprime b/tests/exhaustive/basic/set04/expected/model_4_3_2.eprime
new file mode 100644
index 0000000000..8a1052d0da
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_3_2.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = 1 | q38 : int(1..3)]),
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = 2 | q40 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..2)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 4
+ | q17 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 4 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 4 | q18 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 4) | q19 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q22] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 4 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 4 ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..3)])
+ | q30 : int(1..3)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 4 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..3)])
+ | q34 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_3_3-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_3_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_3_3-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_3_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_3_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_3_3.eprime b/tests/exhaustive/basic/set04/expected/model_4_3_3.eprime
new file mode 100644
index 0000000000..50c9eadc30
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_3_3.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = 1 | q18 : int(1..3)]),
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..2)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_4_1-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_4_1-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_4_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_4_1.eprime b/tests/exhaustive/basic/set04/expected/model_4_4_1.eprime
new file mode 100644
index 0000000000..1679fe4372
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_4_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_Occurrence: matrix indexed by [int(1..3)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 1 | q13 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\ x_ExplicitVarSizeWithFlags_Values[q15] = 2 | q15 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..3)]) <= 3,
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_4_2-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_4_2-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_4_2-solution000002.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_4_2.eprime b/tests/exhaustive/basic/set04/expected/model_4_4_2.eprime
new file mode 100644
index 0000000000..41d16504a6
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_4_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = 2 | q21 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 4
+ | q6 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 4 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 4 | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 4) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q11] != 4 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 4 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_4_3-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_4_3-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_4_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_4_3.eprime b/tests/exhaustive/basic/set04/expected/model_4_4_3.eprime
new file mode 100644
index 0000000000..6c0162b987
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_4_3.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = 1 | q18 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = 2 | q20 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..2)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set04/expected/model_4_4_4-solution000001.solution b/tests/exhaustive/basic/set04/expected/model_4_4_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_4_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_4_4-solution000002.solution b/tests/exhaustive/basic/set04/expected/model_4_4_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_4_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set04/expected/model_4_4_4.eprime b/tests/exhaustive/basic/set04/expected/model_4_4_4.eprime
new file mode 100644
index 0000000000..a91619f489
--- /dev/null
+++ b/tests/exhaustive/basic/set04/expected/model_4_4_4.eprime
@@ -0,0 +1,15 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..3)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q7] /\ x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_1_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_1.eprime b/tests/exhaustive/basic/set05/expected/model_1_1_1.eprime
new file mode 100644
index 0000000000..3c56114ac2
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_1.eprime
@@ -0,0 +1,9 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_1_2-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_1_2-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_2.eprime b/tests/exhaustive/basic/set05/expected/model_1_1_2.eprime
new file mode 100644
index 0000000000..17c15fcd6b
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_2.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
+ | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_3-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_3-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_1_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_3-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_1_3-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_3.eprime b/tests/exhaustive/basic/set05/expected/model_1_1_3.eprime
new file mode 100644
index 0000000000..70361154b0
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_3.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..3)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_4-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_4-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_1_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_4-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_1_4-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_1_4.eprime b/tests/exhaustive/basic/set05/expected/model_1_1_4.eprime
new file mode 100644
index 0000000000..42983848f0
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_1_4.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_2_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_2_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_2_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_2_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_2_1-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_2_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_2_1.eprime b/tests/exhaustive/basic/set05/expected/model_1_2_1.eprime
new file mode 100644
index 0000000000..c5886a217c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_2_1.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\ x_ExplicitVarSizeWithDummy[q12] = 2 | q12 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
+ | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_2_3-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_2_3-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_2_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_2_3-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_2_3-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_2_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_2_3.eprime b/tests/exhaustive/basic/set05/expected/model_1_2_3.eprime
new file mode 100644
index 0000000000..2ef8fa28a9
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_2_3.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 2 | q28 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
+ | q8 : int(1..4)]),
+ and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..2)]),
+ and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q15]]
+ | q15 : int(1..3)]),
+ and([x_Occurrence[q16] ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..3)])
+ | q16 : int(1..4)]),
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q22] != 5 /\
+ x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..3)])
+ | q20 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q24] != 5 ->
+ or([q26 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q26] = x_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..3)])
+ | q24 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_2_4-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_2_4-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_2_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_2_4-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_2_4-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_2_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_2_4.eprime b/tests/exhaustive/basic/set05/expected/model_1_2_4.eprime
new file mode 100644
index 0000000000..6970c8923c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_2_4.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 2 | q30 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..3)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..3)])
+ | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q11] < x_ExplicitVarSizeWithFlags_Values[q11 + 1]
+ | q11 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] = false -> x_ExplicitVarSizeWithFlags_Values[q12] = 1
+ | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q14]) | q14 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q17]]
+ | q17 : int(1..3)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..3)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_3_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_3_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_3_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_3_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_3_1-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_3_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_3_1.eprime b/tests/exhaustive/basic/set05/expected/model_1_3_1.eprime
new file mode 100644
index 0000000000..79fbdc8209
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_3_1.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..3)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_3_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_3_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_3_2-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_3_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_3_2-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_3_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_3_2.eprime b/tests/exhaustive/basic/set05/expected/model_1_3_2.eprime
new file mode 100644
index 0000000000..85dcbc6f16
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_3_2.eprime
@@ -0,0 +1,41 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 2 | q28 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..3)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 5
+ | q10 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q11] = 5 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 5 | q11 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q12] != 5) | q12 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..3)]),
+ and([x_Occurrence[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\ x_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..3)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..3)])
+ | q20 : int(1..3)]),
+ and([q24 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\
+ x_ExplicitVarSizeWithDummy[q26] = x_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..3)])
+ | q24 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_3_4-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_3_4-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_3_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_3_4-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_3_4-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_3_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_3_4.eprime b/tests/exhaustive/basic/set05/expected/model_1_3_4.eprime
new file mode 100644
index 0000000000..5d9c9d1d13
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_3_4.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 2 | q29 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..3)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 1
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..3)]),
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = q17 | q19 : int(1..3)])
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q23] = x_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..3)])
+ | q21 : int(1..3)]),
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q27] /\
+ x_ExplicitVarSizeWithFlags_Values[q27] = x_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..3)])
+ | q25 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_4_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_4_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_4_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_4_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_4_1-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_4_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_4_1.eprime b/tests/exhaustive/basic/set05/expected/model_1_4_1.eprime
new file mode 100644
index 0000000000..9ede8575b3
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_4_1.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 2 | q13 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_4_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_4_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_4_2-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_4_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_4_2-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_4_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_4_2.eprime b/tests/exhaustive/basic/set05/expected/model_1_4_2.eprime
new file mode 100644
index 0000000000..ee08cbe011
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_4_2.eprime
@@ -0,0 +1,41 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 2 | q30 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] < x_ExplicitVarSizeWithDummy[q12 + 1] \/ x_ExplicitVarSizeWithDummy[q12] = 5
+ | q12 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q13] = 5 -> x_ExplicitVarSizeWithDummy[q13 + 1] = 5 | q13 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q14] != 5) | q14 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q17] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q17]] | q17 : int(1..3)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 5 /\ x_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..3)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_1_4_3-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_4_3-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_1_4_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_4_3-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_1_4_3-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_4_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_1_4_3.eprime b/tests/exhaustive/basic/set05/expected/model_1_4_3.eprime
new file mode 100644
index 0000000000..387a3320f5
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_1_4_3.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 2 | q29 : int(1..3)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..3)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..3)])
+ | q9 : int(1..4)]),
+ and([q12 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q12] < x_ExplicitVarSizeWithMarker_Values[q12 + 1]
+ | q12 : int(1..2)]),
+ and([q13 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q13] = 1 | q13 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q16]]
+ | q16 : int(1..3)]),
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..3)])
+ | q17 : int(1..4)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\
+ x_ExplicitVarSizeWithFlags_Values[q23] = x_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..3)])
+ | q21 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q27] = x_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..3)])
+ | q25 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_1_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_1_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_1_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_1_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_1_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_1_1.eprime b/tests/exhaustive/basic/set05/expected/model_2_1_1.eprime
new file mode 100644
index 0000000000..6b99e48d14
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_1_1.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\ x_ExplicitVarSizeWithDummy[q12] = 1 | q12 : int(1..3)]),
+ x_Occurrence[2],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 3,
+ and([x_Occurrence[q6] ->
+ or([x_ExplicitVarSizeWithDummy[q8] != 5 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..3)])
+ | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_1_3-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_1_3-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_1_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_1_3-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_1_3-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_1_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_1_3.eprime b/tests/exhaustive/basic/set05/expected/model_2_1_3.eprime
new file mode 100644
index 0000000000..3afbad58c6
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_1_3.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 1 | q28 : int(1..3)]),
+ x_Occurrence[2],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 3,
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..3)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..3)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..2)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\
+ x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 5 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q18]]
+ | q18 : int(1..3)]),
+ and([x_Occurrence[q19] ->
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = q19
+ | q21 : int(1..3)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_1_4-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_1_4-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_1_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_1_4-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_1_4-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_1_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_1_4.eprime b/tests/exhaustive/basic/set05/expected/model_2_1_4.eprime
new file mode 100644
index 0000000000..3cf7e10a32
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_1_4.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 1 | q30 : int(1..3)]),
+ x_Occurrence[2],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 3,
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..3)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q28] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 5 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..3)])
+ | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..3)])
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q20]]
+ | q20 : int(1..3)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = q21 | q23 : int(1..3)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_2_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_2_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_1.eprime b/tests/exhaustive/basic/set05/expected/model_2_2_1.eprime
new file mode 100644
index 0000000000..cb17af9c96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_1.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\ x_ExplicitVarSizeWithDummy[q12] = 1 | q12 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q14] != 5 /\ x_ExplicitVarSizeWithDummy[q14] = 2 | q14 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 3,
+ and([x_Occurrence[q6] ->
+ or([x_ExplicitVarSizeWithDummy[q8] != 5 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..3)])
+ | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_2_2-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_2_2-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_2.eprime b/tests/exhaustive/basic/set05/expected/model_2_2_2.eprime
new file mode 100644
index 0000000000..4cb7d7d439
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_2.eprime
@@ -0,0 +1,12 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q6] != 5 /\ x_ExplicitVarSizeWithDummy[q6] = 1 | q6 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q8] != 5 /\ x_ExplicitVarSizeWithDummy[q8] = 2 | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_3-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_3-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_2_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_3-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_2_3-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_3.eprime b/tests/exhaustive/basic/set05/expected/model_2_2_3.eprime
new file mode 100644
index 0000000000..e60bea847e
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_3.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\ x_ExplicitVarSizeWithDummy[q17] = 1 | q17 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = 2 | q19 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_4-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_4-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_2_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_4-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_2_4-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_2_4.eprime b/tests/exhaustive/basic/set05/expected/model_2_2_4.eprime
new file mode 100644
index 0000000000..06f804e4d5
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_2_4.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = 1 | q19 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = 2 | q21 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_3_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_3_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_3_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_3_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_3_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_3_1.eprime b/tests/exhaustive/basic/set05/expected/model_2_3_1.eprime
new file mode 100644
index 0000000000..40eab4116d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_3_1.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 1 | q28 : int(1..3)]),
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 2 | q30 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..4)]) <= 3,
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = q17 | q19 : int(1..3)])
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q21] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q21]] | q21 : int(1..3)]),
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..3)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_3_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_3_2-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_3_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_3_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_3_2-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_3_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_3_2.eprime b/tests/exhaustive/basic/set05/expected/model_2_3_2.eprime
new file mode 100644
index 0000000000..9ddf8ddf04
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_3_2.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\ x_ExplicitVarSizeWithDummy[q17] = 1 | q17 : int(1..3)]),
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = 2 | q19 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_3_4-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_3_4-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_3_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_3_4-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_3_4-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_3_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_3_4.eprime b/tests/exhaustive/basic/set05/expected/model_2_3_4.eprime
new file mode 100644
index 0000000000..933ef63b6a
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_3_4.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q38] != 5 /\ x_ExplicitVarSizeWithDummy[q38] = 1 | q38 : int(1..3)]),
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = 2 | q40 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..3)])
+ | q30 : int(1..3)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..3)])
+ | q34 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_4_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_4_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_4_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_4_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_4_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_4_1.eprime b/tests/exhaustive/basic/set05/expected/model_2_4_1.eprime
new file mode 100644
index 0000000000..81a9200abd
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_4_1.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 1 | q30 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 2 | q32 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..4)]) <= 3,
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..3)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q23] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q23]] | q23 : int(1..3)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..3)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_4_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_4_2-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_4_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_4_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_4_2-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_4_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_4_2.eprime b/tests/exhaustive/basic/set05/expected/model_2_4_2.eprime
new file mode 100644
index 0000000000..c9dd09c7ea
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_4_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = 1 | q19 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = 2 | q21 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_2_4_3-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_4_3-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_2_4_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_4_3-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_2_4_3-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_4_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_2_4_3.eprime b/tests/exhaustive/basic/set05/expected/model_2_4_3.eprime
new file mode 100644
index 0000000000..b649797fe9
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_2_4_3.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q38] != 5 /\ x_ExplicitVarSizeWithDummy[q38] = 1 | q38 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = 2 | q40 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..2)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..3)])
+ | q30 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..3)])
+ | q34 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_1_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_1_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_1_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_1_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_1_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_1_1.eprime b/tests/exhaustive/basic/set05/expected/model_3_1_1.eprime
new file mode 100644
index 0000000000..18b6d63112
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_1_1.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 1 | q11 : int(1..3)]),
+ x_Occurrence[2],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 3,
+ and([x_Occurrence[q5] ->
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5 | q7 : int(1..3)])
+ | q5 : int(1..4)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_1_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_1_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_1_2-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_1_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_1_2-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_1_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_1_2.eprime b/tests/exhaustive/basic/set05/expected/model_3_1_2.eprime
new file mode 100644
index 0000000000..56c03f8d80
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_1_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 1 | q28 : int(1..3)]),
+ x_Occurrence[2],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 3,
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..3)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 5
+ | q5 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 5 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 5 | q6 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 5) | q7 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 5 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q18]] | q18 : int(1..3)]),
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..3)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_1_4-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_1_4-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_1_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_1_4-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_1_4-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_1_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_1_4.eprime b/tests/exhaustive/basic/set05/expected/model_3_1_4.eprime
new file mode 100644
index 0000000000..742dd902aa
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_1_4.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 1 | q29 : int(1..3)]),
+ x_Occurrence[2],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 3,
+ and([x_Occurrence[q23] ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..3)])
+ | q23 : int(1..4)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
+ | q27 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q19]]
+ | q19 : int(1..3)]),
+ and([x_Occurrence[q20] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = q20 | q22 : int(1..3)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_2_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_2_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_2_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_2_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_2_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_2_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_2_1.eprime b/tests/exhaustive/basic/set05/expected/model_3_2_1.eprime
new file mode 100644
index 0000000000..4d541e34ee
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_2_1.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 1 | q28 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 2 | q30 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..4)]) <= 3,
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..3)])
+ | q17 : int(1..4)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q21]]
+ | q21 : int(1..3)]),
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..3)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_2_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_2_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_2_2-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_2_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_2_2-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_2_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_2_2.eprime b/tests/exhaustive/basic/set05/expected/model_3_2_2.eprime
new file mode 100644
index 0000000000..aff63a4eef
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_2_2.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = 1 | q17 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = 2 | q19 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_2_4-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_2_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_2_4-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_2_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_2_4-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_2_4-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_2_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_2_4.eprime b/tests/exhaustive/basic/set05/expected/model_3_2_4.eprime
new file mode 100644
index 0000000000..ca17b6551d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_2_4.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = 1 | q38 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = 2 | q40 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..3)])
+ | q30 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..3)])
+ | q34 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_3_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_3_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_1.eprime b/tests/exhaustive/basic/set05/expected/model_3_3_1.eprime
new file mode 100644
index 0000000000..5def062aca
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_1.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 1 | q11 : int(1..3)]),
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q13] = 2 | q13 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 3,
+ and([x_Occurrence[q5] ->
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5 | q7 : int(1..3)])
+ | q5 : int(1..4)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_3_2-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_3_2-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_2.eprime b/tests/exhaustive/basic/set05/expected/model_3_3_2.eprime
new file mode 100644
index 0000000000..c7e4092e7b
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_2.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = 1 | q17 : int(1..3)]),
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = 2 | q19 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..3)])
+ | q9 : int(1..3)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..3)])
+ | q13 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_3-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_3_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_3-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_3_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_3-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_3_3-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_3.eprime b/tests/exhaustive/basic/set05/expected/model_3_3_3.eprime
new file mode 100644
index 0000000000..30415d39e4
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_3.eprime
@@ -0,0 +1,14 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q5 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q5] = 1 | q5 : int(1..3)]),
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_4-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_3_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_4-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_3_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_4-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_3_4-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_3_4.eprime b/tests/exhaustive/basic/set05/expected/model_3_3_4.eprime
new file mode 100644
index 0000000000..5a6f8f4a1f
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_3_4.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..3)]),
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_4_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_4_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_4_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_4_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_4_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_4_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_4_1.eprime b/tests/exhaustive/basic/set05/expected/model_3_4_1.eprime
new file mode 100644
index 0000000000..8aebac7513
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_4_1.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 1 | q29 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 2 | q31 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..4)]) <= 3,
+ and([x_Occurrence[q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = q18
+ | q20 : int(1..3)])
+ | q18 : int(1..4)]),
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q22]]
+ | q22 : int(1..3)]),
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..3)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_4_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_4_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_4_2-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_4_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_4_2-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_4_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_4_2.eprime b/tests/exhaustive/basic/set05/expected/model_3_4_2.eprime
new file mode 100644
index 0000000000..5f5f7c970d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_4_2.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = 1 | q38 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = 2 | q40 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..3)])
+ | q30 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..3)])
+ | q34 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_3_4_3-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_3_4_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_4_3-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_3_4_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_4_3-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_3_4_3-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_4_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_3_4_3.eprime b/tests/exhaustive/basic/set05/expected/model_3_4_3.eprime
new file mode 100644
index 0000000000..b29a9e6cdd
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_3_4_3.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = 2 | q20 : int(1..3)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_1_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_1_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_1_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_1_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_1_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_1_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_1_1.eprime b/tests/exhaustive/basic/set05/expected/model_4_1_1.eprime
new file mode 100644
index 0000000000..9358d40bd8
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_1_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 1 | q13 : int(1..3)]),
+ x_Occurrence[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 3,
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_1_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_1_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_1_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_1_2-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_1_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_1_2-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_1_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_1_2.eprime b/tests/exhaustive/basic/set05/expected/model_4_1_2.eprime
new file mode 100644
index 0000000000..d279aa617d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_1_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..3)]),
+ x_Occurrence[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 3,
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..3)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 5
+ | q7 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 5 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 5 | q8 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 5) | q9 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q12] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
+ x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..3)])
+ | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..3)])
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q20]] | q20 : int(1..3)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithDummy[q23] != 5 /\ x_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..3)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_1_3-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_1_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_1_3-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_1_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_1_3-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_1_3-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_1_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_1_3.eprime b/tests/exhaustive/basic/set05/expected/model_4_1_3.eprime
new file mode 100644
index 0000000000..f773f1d64b
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_1_3.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 1 | q29 : int(1..3)]),
+ x_Occurrence[2],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 3,
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..3)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..3)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..2)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 1 | q8 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q19]]
+ | q19 : int(1..3)]),
+ and([x_Occurrence[q20] ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..3)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_2_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_2_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_2_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_2_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_2_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_2_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_2_1.eprime b/tests/exhaustive/basic/set05/expected/model_4_2_1.eprime
new file mode 100644
index 0000000000..4459490acf
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_2_1.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 2 | q32 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..4)]) <= 3,
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = q19 | q21 : int(1..3)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q23]]
+ | q23 : int(1..3)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..3)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q28] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_2_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_2_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_2_2-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_2_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_2_2-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_2_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_2_2.eprime b/tests/exhaustive/basic/set05/expected/model_4_2_2.eprime
new file mode 100644
index 0000000000..1fc3837d42
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_2_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = 2 | q21 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_2_3-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_2_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_2_3-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_2_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_2_3-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_2_3-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_2_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_2_3.eprime b/tests/exhaustive/basic/set05/expected/model_4_2_3.eprime
new file mode 100644
index 0000000000..e3382d275b
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_2_3.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = 1 | q38 : int(1..3)]),
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = 2 | q40 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..2)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..3)])
+ | q30 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..3)])
+ | q34 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_3_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_3_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_3_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_3_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_3_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_3_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_3_1.eprime b/tests/exhaustive/basic/set05/expected/model_4_3_1.eprime
new file mode 100644
index 0000000000..1a72db7f80
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_3_1.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 1 | q29 : int(1..3)]),
+ or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = 2 | q31 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..2)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..4)]) <= 3,
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..3)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q22]]
+ | q22 : int(1..3)]),
+ and([x_Occurrence[q23] ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..3)])
+ | q23 : int(1..4)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
+ | q27 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_3_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_3_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_3_2-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_3_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_3_2-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_3_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_3_2.eprime b/tests/exhaustive/basic/set05/expected/model_4_3_2.eprime
new file mode 100644
index 0000000000..411a506bdc
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_3_2.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = 1 | q38 : int(1..3)]),
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = 2 | q40 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..2)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..3)])
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..3)])
+ | q26 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..3)])
+ | q30 : int(1..3)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..3)])
+ | q34 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_3_3-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_3_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_3_3-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_3_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_3_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_3_3-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_3_3-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_3_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_3_3.eprime b/tests/exhaustive/basic/set05/expected/model_4_3_3.eprime
new file mode 100644
index 0000000000..e1aec900de
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_3_3.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = 1 | q18 : int(1..3)]),
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..2)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_1-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_1-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_4_1-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_1-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_4_1-solution000003.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_1-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_1.eprime b/tests/exhaustive/basic/set05/expected/model_4_4_1.eprime
new file mode 100644
index 0000000000..728004701a
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 1 | q13 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\ x_ExplicitVarSizeWithFlags_Values[q15] = 2 | q15 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 3,
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..3)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_2-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_2-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_4_2-solution000002.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_2-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_4_2-solution000003.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_2-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_2.eprime b/tests/exhaustive/basic/set05/expected/model_4_4_2.eprime
new file mode 100644
index 0000000000..0a5bd5c53a
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..3)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = 2 | q21 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..2)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..3)]) <= 3,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..3)])
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..3)])
+ | q15 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_3-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_3-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_4_3-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_3-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_4_3-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_3-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_3.eprime b/tests/exhaustive/basic/set05/expected/model_4_4_3.eprime
new file mode 100644
index 0000000000..ac17616362
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_3.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..3)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = 1 | q18 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = 2 | q20 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..2)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..3)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 3,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..3)])
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..3)])
+ | q14 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_4-solution000001.solution b/tests/exhaustive/basic/set05/expected/model_4_4_4-solution000001.solution
new file mode 100644
index 0000000000..f90e0ba18c
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_4-solution000002.solution b/tests/exhaustive/basic/set05/expected/model_4_4_4-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_4-solution000003.solution b/tests/exhaustive/basic/set05/expected/model_4_4_4-solution000003.solution
new file mode 100644
index 0000000000..fdc0f02f96
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_4-solution000003.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 4}
diff --git a/tests/exhaustive/basic/set05/expected/model_4_4_4.eprime b/tests/exhaustive/basic/set05/expected/model_4_4_4.eprime
new file mode 100644
index 0000000000..e4489eba01
--- /dev/null
+++ b/tests/exhaustive/basic/set05/expected/model_4_4_4.eprime
@@ -0,0 +1,15 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..3)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..3)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q7] /\ x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..3)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..2)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..2)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..3)]) <= 3
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_1_1.eprime
new file mode 100644
index 0000000000..f1447509f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_1_1.eprime
@@ -0,0 +1,10 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_1_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_1_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_1_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_1_2.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_1_2.eprime
new file mode 100644
index 0000000000..da7b2486bc
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_1_2.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_1_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_1_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_1_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_1_3.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_1_3.eprime
new file mode 100644
index 0000000000..d1ee49268b
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_1_3.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_1_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_1_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_1_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_1_4.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_1_4.eprime
new file mode 100644
index 0000000000..52a9a6c855
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_1_4.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_2_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_2_1.eprime
new file mode 100644
index 0000000000..f6358320c2
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_2_1.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\ x_ExplicitVarSizeWithDummy[q12] = 3 | q12 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_2_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_2_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_2_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_2_3.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_2_3.eprime
new file mode 100644
index 0000000000..38d4e045e4
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_2_3.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 3 | q28 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q15]]
+ | q15 : int(1..4)]),
+ and([x_Occurrence[q16] ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q22] != 5 /\
+ x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q24] != 5 ->
+ or([q26 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q26] = x_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_2_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_2_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_2_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_2_4.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_2_4.eprime
new file mode 100644
index 0000000000..ef4fbb7269
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_2_4.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 3 | q30 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q11] < x_ExplicitVarSizeWithFlags_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] = false -> x_ExplicitVarSizeWithFlags_Values[q12] = 1
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q14]) | q14 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q17]]
+ | q17 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_3_1.eprime
new file mode 100644
index 0000000000..70953f52c2
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_3_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 3 | q11 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_3_2.eprime
new file mode 100644
index 0000000000..07088141cf
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_3_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 3 | q28 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 5
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] = 5 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 5 | q11 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q12] != 5) | q12 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..4)]),
+ and([x_Occurrence[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\ x_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q24 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\
+ x_ExplicitVarSizeWithDummy[q26] = x_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_3_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_3_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_3_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_3_4.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_3_4.eprime
new file mode 100644
index 0000000000..9e996001f2
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_3_4.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 3 | q29 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 1
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..4)]),
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q23] = x_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q27] /\
+ x_ExplicitVarSizeWithFlags_Values[q27] = x_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_4_1.eprime
new file mode 100644
index 0000000000..2ced4fdbb0
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_4_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 3 | q13 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_4_2.eprime
new file mode 100644
index 0000000000..faf6fcb130
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_4_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 3 | q30 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] < x_ExplicitVarSizeWithDummy[q12 + 1] \/ x_ExplicitVarSizeWithDummy[q12] = 5
+ | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] = 5 -> x_ExplicitVarSizeWithDummy[q13 + 1] = 5 | q13 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q14] != 5) | q14 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q17] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q17]] | q17 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 5 /\ x_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_4_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_4_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_1_4_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_1_4_3.eprime b/tests/exhaustive/basic/set06/expected/model_1_1_4_3.eprime
new file mode 100644
index 0000000000..21bbdced45
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_1_4_3.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 3 | q29 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q12 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q12] < x_ExplicitVarSizeWithMarker_Values[q12 + 1]
+ | q12 : int(1..3)]),
+ and([q13 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q13] = 1 | q13 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q16]]
+ | q16 : int(1..4)]),
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\
+ x_ExplicitVarSizeWithFlags_Values[q23] = x_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q27] = x_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_2_1_1.eprime
new file mode 100644
index 0000000000..fd00042c48
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_1_1.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\ x_ExplicitVarSizeWithDummy[q12] = 2 | q12 : int(1..4)]),
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_1_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_1_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_2_1_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_1_3.eprime b/tests/exhaustive/basic/set06/expected/model_1_2_1_3.eprime
new file mode 100644
index 0000000000..9cd2a1ceb8
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_1_3.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 2 | q28 : int(1..4)]),
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q15]]
+ | q15 : int(1..4)]),
+ and([x_Occurrence[q16] ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q22] != 5 /\
+ x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q24] != 5 ->
+ or([q26 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q26] = x_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_1_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_1_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_2_1_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_1_4.eprime b/tests/exhaustive/basic/set06/expected/model_1_2_1_4.eprime
new file mode 100644
index 0000000000..16ffeaa1a3
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_1_4.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 2 | q30 : int(1..4)]),
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q11] < x_ExplicitVarSizeWithFlags_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] = false -> x_ExplicitVarSizeWithFlags_Values[q12] = 1
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q14]) | q14 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q17]]
+ | q17 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_2_2_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_2_2_1.eprime
new file mode 100644
index 0000000000..31cd01bf55
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_2_1.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\ x_ExplicitVarSizeWithDummy[q12] = 2 | q12 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q14] != 5 /\ x_ExplicitVarSizeWithDummy[q14] = 3 | q14 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_2_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_2_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_2_2_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_2_3.eprime b/tests/exhaustive/basic/set06/expected/model_1_2_2_3.eprime
new file mode 100644
index 0000000000..2a7394dd4b
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_2_3.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 2 | q28 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 3 | q30 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q15]]
+ | q15 : int(1..4)]),
+ and([x_Occurrence[q16] ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q22] != 5 /\
+ x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q24] != 5 ->
+ or([q26 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q26] = x_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_2_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_2_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_2_2_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_2_4.eprime b/tests/exhaustive/basic/set06/expected/model_1_2_2_4.eprime
new file mode 100644
index 0000000000..cd3be25f64
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_2_4.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 2 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 3 | q32 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q11] < x_ExplicitVarSizeWithFlags_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] = false -> x_ExplicitVarSizeWithFlags_Values[q12] = 1
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q14]) | q14 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q17]]
+ | q17 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_2_3_1.eprime
new file mode 100644
index 0000000000..c6b9ef4264
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_3_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 2 | q28 : int(1..4)]),
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 3 | q30 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q15]]
+ | q15 : int(1..4)]),
+ and([x_Occurrence[q16] ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q22] != 5 /\
+ x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q24] != 5 ->
+ or([q26 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q26] = x_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_3_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_3_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_2_3_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_3_4.eprime b/tests/exhaustive/basic/set06/expected/model_1_2_3_4.eprime
new file mode 100644
index 0000000000..6015b45fb3
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_3_4.eprime
@@ -0,0 +1,78 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q54] != 5 /\ x_ExplicitVarSizeWithDummy[q54] = 2 | q54 : int(1..4)]),
+ or([q56 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q56] = 3 | q56 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q15]]
+ | q15 : int(1..4)]),
+ and([x_Occurrence[q16] ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q22] != 5 /\
+ x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q24] != 5 ->
+ or([q26 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q26] = x_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q27] < x_ExplicitVarSizeWithFlags_Values[q27 + 1]
+ | q27 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] = false -> x_ExplicitVarSizeWithFlags_Values[q28] = 1
+ | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q29 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q29] | q29 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q30]) | q30 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q33] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q33]]
+ | q33 : int(1..4)]),
+ and([x_Occurrence[q34] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\ x_ExplicitVarSizeWithFlags_Values[q36] = q34 | q36 : int(1..4)])
+ | q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q38] ->
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\
+ x_ExplicitVarSizeWithDummy[q40] = x_ExplicitVarSizeWithFlags_Values[q38]
+ | q40 : int(1..4)])
+ | q38 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q42] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q44] /\
+ x_ExplicitVarSizeWithFlags_Values[q44] = x_ExplicitVarSizeWithDummy[q42]
+ | q44 : int(1..4)])
+ | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q46] ->
+ or([q48 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q48] = x_ExplicitVarSizeWithFlags_Values[q46]
+ | q48 : int(1..4)])
+ | q46 : int(1..4)]),
+ and([q50 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q52] /\
+ x_ExplicitVarSizeWithFlags_Values[q52] = x_ExplicitVarSizeWithMarker_Values[q50]
+ | q52 : int(1..4)])
+ | q50 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_2_4_1.eprime
new file mode 100644
index 0000000000..aed016ee53
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_4_1.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 2 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 3 | q32 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q11] < x_ExplicitVarSizeWithFlags_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] = false -> x_ExplicitVarSizeWithFlags_Values[q12] = 1
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q14]) | q14 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q17]]
+ | q17 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_4_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_4_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_2_4_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_2_4_3.eprime b/tests/exhaustive/basic/set06/expected/model_1_2_4_3.eprime
new file mode 100644
index 0000000000..bb79bbed91
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_2_4_3.eprime
@@ -0,0 +1,78 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithDummy[q54] != 5 /\ x_ExplicitVarSizeWithDummy[q54] = 2 | q54 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q56] /\ x_ExplicitVarSizeWithFlags_Values[q56] = 3 | q56 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q4] != 5) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q11] < x_ExplicitVarSizeWithFlags_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] = false -> x_ExplicitVarSizeWithFlags_Values[q12] = 1
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q14]) | q14 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q17]]
+ | q17 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q29 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q29] < x_ExplicitVarSizeWithMarker_Values[q29 + 1]
+ | q29 : int(1..3)]),
+ and([q30 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q30] = 1 | q30 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q33 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q33]]
+ | q33 : int(1..4)]),
+ and([x_Occurrence[q34] ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q36] = q34
+ | q36 : int(1..4)])
+ | q34 : int(1..4)]),
+ and([q38 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\
+ x_ExplicitVarSizeWithDummy[q40] = x_ExplicitVarSizeWithMarker_Values[q38]
+ | q40 : int(1..4)])
+ | q38 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q42] != 5 ->
+ or([q44 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q44] = x_ExplicitVarSizeWithDummy[q42]
+ | q44 : int(1..4)])
+ | q42 : int(1..4)]),
+ and([q46 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q48] /\
+ x_ExplicitVarSizeWithFlags_Values[q48] = x_ExplicitVarSizeWithMarker_Values[q46]
+ | q48 : int(1..4)])
+ | q46 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q50] ->
+ or([q52 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q52] = x_ExplicitVarSizeWithFlags_Values[q50]
+ | q52 : int(1..4)])
+ | q50 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_3_1_1.eprime
new file mode 100644
index 0000000000..534888a487
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_1_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_1_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_1_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_3_1_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_1_2.eprime b/tests/exhaustive/basic/set06/expected/model_1_3_1_2.eprime
new file mode 100644
index 0000000000..3a488b51f2
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_1_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 2 | q28 : int(1..4)]),
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 5
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] = 5 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 5 | q11 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q12] != 5) | q12 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..4)]),
+ and([x_Occurrence[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\ x_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q24 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\
+ x_ExplicitVarSizeWithDummy[q26] = x_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_1_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_1_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_3_1_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_1_4.eprime b/tests/exhaustive/basic/set06/expected/model_1_3_1_4.eprime
new file mode 100644
index 0000000000..c11065ed05
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_1_4.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 2 | q29 : int(1..4)]),
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 1
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..4)]),
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q23] = x_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q27] /\
+ x_ExplicitVarSizeWithFlags_Values[q27] = x_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_3_2_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_3_2_1.eprime
new file mode 100644
index 0000000000..1df703b36a
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_2_1.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 2 | q28 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 3 | q30 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 5
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] = 5 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 5 | q11 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q12] != 5) | q12 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..4)]),
+ and([x_Occurrence[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\ x_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q24 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\
+ x_ExplicitVarSizeWithDummy[q26] = x_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_2_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_3_2_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_2_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_3_2_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_2_4.eprime b/tests/exhaustive/basic/set06/expected/model_1_3_2_4.eprime
new file mode 100644
index 0000000000..d71d427457
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_2_4.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ or([q54 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q54] = 2 | q54 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q56] != 5 /\ x_ExplicitVarSizeWithDummy[q56] = 3 | q56 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 5
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] = 5 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 5 | q11 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q12] != 5) | q12 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..4)]),
+ and([x_Occurrence[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\ x_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q24 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\
+ x_ExplicitVarSizeWithDummy[q26] = x_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q27] < x_ExplicitVarSizeWithFlags_Values[q27 + 1]
+ | q27 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] = false -> x_ExplicitVarSizeWithFlags_Values[q28] = 1
+ | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q29 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q29] | q29 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q30]) | q30 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q33] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q33]]
+ | q33 : int(1..4)]),
+ and([x_Occurrence[q34] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\ x_ExplicitVarSizeWithFlags_Values[q36] = q34 | q36 : int(1..4)])
+ | q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q38] ->
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q40] = x_ExplicitVarSizeWithFlags_Values[q38]
+ | q40 : int(1..4)])
+ | q38 : int(1..4)]),
+ and([q42 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q44] /\
+ x_ExplicitVarSizeWithFlags_Values[q44] = x_ExplicitVarSizeWithMarker_Values[q42]
+ | q44 : int(1..4)])
+ | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q46] ->
+ or([x_ExplicitVarSizeWithDummy[q48] != 5 /\
+ x_ExplicitVarSizeWithDummy[q48] = x_ExplicitVarSizeWithFlags_Values[q46]
+ | q48 : int(1..4)])
+ | q46 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q50] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q52] /\
+ x_ExplicitVarSizeWithFlags_Values[q52] = x_ExplicitVarSizeWithDummy[q50]
+ | q52 : int(1..4)])
+ | q50 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_3_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_3_3_1.eprime
new file mode 100644
index 0000000000..10616f2d34
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_3_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q13] = 3 | q13 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_3_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_1_3_3_2.eprime
new file mode 100644
index 0000000000..0a6a65be24
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_3_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 2 | q28 : int(1..4)]),
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 3 | q30 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 5
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] = 5 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 5 | q11 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q12] != 5) | q12 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..4)]),
+ and([x_Occurrence[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\ x_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q24 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\
+ x_ExplicitVarSizeWithDummy[q26] = x_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_3_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_3_3_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_3_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_3_3_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_3_4.eprime b/tests/exhaustive/basic/set06/expected/model_1_3_3_4.eprime
new file mode 100644
index 0000000000..0d2728b93c
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_3_4.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 2 | q29 : int(1..4)]),
+ or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = 3 | q31 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 1
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..4)]),
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q23] = x_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q27] /\
+ x_ExplicitVarSizeWithFlags_Values[q27] = x_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_3_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_3_4_1.eprime
new file mode 100644
index 0000000000..73b9732e42
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_4_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 2 | q29 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 3 | q31 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 1
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..4)]),
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q23] = x_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q27] /\
+ x_ExplicitVarSizeWithFlags_Values[q27] = x_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_3_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_3_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_1_3_4_2.eprime
new file mode 100644
index 0000000000..1c2efaa35b
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_3_4_2.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ or([q54 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q54] = 2 | q54 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q56] /\ x_ExplicitVarSizeWithFlags_Values[q56] = 3 | q56 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 1
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..4)]),
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q23] = x_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q27] /\
+ x_ExplicitVarSizeWithFlags_Values[q27] = x_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q28] < x_ExplicitVarSizeWithDummy[q28 + 1] \/ x_ExplicitVarSizeWithDummy[q28] = 5
+ | q28 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q29] = 5 -> x_ExplicitVarSizeWithDummy[q29 + 1] = 5 | q29 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q30] != 5) | q30 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q33] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q33]] | q33 : int(1..4)]),
+ and([x_Occurrence[q34] ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\ x_ExplicitVarSizeWithDummy[q36] = q34 | q36 : int(1..4)])
+ | q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q38] != 5 ->
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q40] = x_ExplicitVarSizeWithDummy[q38]
+ | q40 : int(1..4)])
+ | q38 : int(1..4)]),
+ and([q42 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q44] != 5 /\
+ x_ExplicitVarSizeWithDummy[q44] = x_ExplicitVarSizeWithMarker_Values[q42]
+ | q44 : int(1..4)])
+ | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q46] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q48] /\
+ x_ExplicitVarSizeWithFlags_Values[q48] = x_ExplicitVarSizeWithDummy[q46]
+ | q48 : int(1..4)])
+ | q46 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q50] ->
+ or([x_ExplicitVarSizeWithDummy[q52] != 5 /\
+ x_ExplicitVarSizeWithDummy[q52] = x_ExplicitVarSizeWithFlags_Values[q50]
+ | q52 : int(1..4)])
+ | q50 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_4_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_4_1_1.eprime
new file mode 100644
index 0000000000..d01150a180
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_1_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 2 | q13 : int(1..4)]),
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_1_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_4_1_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_1_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_4_1_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_1_2.eprime b/tests/exhaustive/basic/set06/expected/model_1_4_1_2.eprime
new file mode 100644
index 0000000000..dd23a21391
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_1_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 2 | q30 : int(1..4)]),
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] < x_ExplicitVarSizeWithDummy[q12 + 1] \/ x_ExplicitVarSizeWithDummy[q12] = 5
+ | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] = 5 -> x_ExplicitVarSizeWithDummy[q13 + 1] = 5 | q13 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q14] != 5) | q14 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q17] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q17]] | q17 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 5 /\ x_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_1_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_4_1_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_1_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_4_1_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_1_3.eprime b/tests/exhaustive/basic/set06/expected/model_1_4_1_3.eprime
new file mode 100644
index 0000000000..a6b5c001d1
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_1_3.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 2 | q29 : int(1..4)]),
+ x_Occurrence[3],
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q12 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q12] < x_ExplicitVarSizeWithMarker_Values[q12 + 1]
+ | q12 : int(1..3)]),
+ and([q13 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q13] = 1 | q13 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q16]]
+ | q16 : int(1..4)]),
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\
+ x_ExplicitVarSizeWithFlags_Values[q23] = x_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q27] = x_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_4_2_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_4_2_1.eprime
new file mode 100644
index 0000000000..551631d48b
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_2_1.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 2 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 3 | q32 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] < x_ExplicitVarSizeWithDummy[q12 + 1] \/ x_ExplicitVarSizeWithDummy[q12] = 5
+ | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] = 5 -> x_ExplicitVarSizeWithDummy[q13 + 1] = 5 | q13 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q14] != 5) | q14 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q17] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q17]] | q17 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 5 /\ x_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_2_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_4_2_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_2_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_4_2_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_2_3.eprime b/tests/exhaustive/basic/set06/expected/model_1_4_2_3.eprime
new file mode 100644
index 0000000000..380d82c5c6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_2_3.eprime
@@ -0,0 +1,76 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q54] /\ x_ExplicitVarSizeWithFlags_Values[q54] = 2 | q54 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q56] != 5 /\ x_ExplicitVarSizeWithDummy[q56] = 3 | q56 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] < x_ExplicitVarSizeWithDummy[q12 + 1] \/ x_ExplicitVarSizeWithDummy[q12] = 5
+ | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] = 5 -> x_ExplicitVarSizeWithDummy[q13 + 1] = 5 | q13 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q14] != 5) | q14 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q17] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q17]] | q17 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 5 /\ x_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q29 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q29] < x_ExplicitVarSizeWithMarker_Values[q29 + 1]
+ | q29 : int(1..3)]),
+ and([q30 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q30] = 1 | q30 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q33 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q33]]
+ | q33 : int(1..4)]),
+ and([x_Occurrence[q34] ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q36] = q34
+ | q36 : int(1..4)])
+ | q34 : int(1..4)]),
+ and([q38 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\
+ x_ExplicitVarSizeWithFlags_Values[q40] = x_ExplicitVarSizeWithMarker_Values[q38]
+ | q40 : int(1..4)])
+ | q38 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q42] ->
+ or([q44 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q44] = x_ExplicitVarSizeWithFlags_Values[q42]
+ | q44 : int(1..4)])
+ | q42 : int(1..4)]),
+ and([q46 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q48] != 5 /\
+ x_ExplicitVarSizeWithDummy[q48] = x_ExplicitVarSizeWithMarker_Values[q46]
+ | q48 : int(1..4)])
+ | q46 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q50] != 5 ->
+ or([q52 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q52] = x_ExplicitVarSizeWithDummy[q50]
+ | q52 : int(1..4)])
+ | q50 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_4_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_4_3_1.eprime
new file mode 100644
index 0000000000..f88dbdf42f
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_3_1.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 2 | q29 : int(1..4)]),
+ or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = 3 | q31 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q12 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q12] < x_ExplicitVarSizeWithMarker_Values[q12 + 1]
+ | q12 : int(1..3)]),
+ and([q13 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q13] = 1 | q13 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q16]]
+ | q16 : int(1..4)]),
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\
+ x_ExplicitVarSizeWithFlags_Values[q23] = x_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q27] = x_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_4_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_1_4_3_2.eprime
new file mode 100644
index 0000000000..708901a3dd
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_3_2.eprime
@@ -0,0 +1,76 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q54] /\ x_ExplicitVarSizeWithFlags_Values[q54] = 2 | q54 : int(1..4)]),
+ or([q56 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q56] = 3 | q56 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q12 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q12] < x_ExplicitVarSizeWithMarker_Values[q12 + 1]
+ | q12 : int(1..3)]),
+ and([q13 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q13] = 1 | q13 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q16]]
+ | q16 : int(1..4)]),
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\
+ x_ExplicitVarSizeWithFlags_Values[q23] = x_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q27] = x_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q28] < x_ExplicitVarSizeWithDummy[q28 + 1] \/ x_ExplicitVarSizeWithDummy[q28] = 5
+ | q28 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q29] = 5 -> x_ExplicitVarSizeWithDummy[q29 + 1] = 5 | q29 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q30] != 5) | q30 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q33] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q33]] | q33 : int(1..4)]),
+ and([x_Occurrence[q34] ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\ x_ExplicitVarSizeWithDummy[q36] = q34 | q36 : int(1..4)])
+ | q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q38] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\
+ x_ExplicitVarSizeWithFlags_Values[q40] = x_ExplicitVarSizeWithDummy[q38]
+ | q40 : int(1..4)])
+ | q38 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q42] ->
+ or([x_ExplicitVarSizeWithDummy[q44] != 5 /\
+ x_ExplicitVarSizeWithDummy[q44] = x_ExplicitVarSizeWithFlags_Values[q42]
+ | q44 : int(1..4)])
+ | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q46] != 5 ->
+ or([q48 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q48] = x_ExplicitVarSizeWithDummy[q46]
+ | q48 : int(1..4)])
+ | q46 : int(1..4)]),
+ and([q50 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q52] != 5 /\
+ x_ExplicitVarSizeWithDummy[q52] = x_ExplicitVarSizeWithMarker_Values[q50]
+ | q52 : int(1..4)])
+ | q50 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_4_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_1_4_4_1.eprime
new file mode 100644
index 0000000000..3ed6afb03d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_4_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 2 | q13 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\ x_ExplicitVarSizeWithFlags_Values[q15] = 3 | q15 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_4_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_1_4_4_2.eprime
new file mode 100644
index 0000000000..a5be74d4e9
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_4_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 2 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 3 | q32 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] < x_ExplicitVarSizeWithDummy[q12 + 1] \/ x_ExplicitVarSizeWithDummy[q12] = 5
+ | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] = 5 -> x_ExplicitVarSizeWithDummy[q13 + 1] = 5 | q13 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q14] != 5) | q14 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q17] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q17]] | q17 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 5 /\ x_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_4_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_1_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_4_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_1_4_4_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_1_4_4_3.eprime b/tests/exhaustive/basic/set06/expected/model_1_4_4_3.eprime
new file mode 100644
index 0000000000..8cdcc8bdaa
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_1_4_4_3.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ x_Occurrence[1],
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 2 | q29 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 3 | q31 : int(1..4)]),
+ sum([toInt(x_Occurrence[q1]) | q1 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q12 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q12] < x_ExplicitVarSizeWithMarker_Values[q12 + 1]
+ | q12 : int(1..3)]),
+ and([q13 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q13] = 1 | q13 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q16]]
+ | q16 : int(1..4)]),
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\
+ x_ExplicitVarSizeWithFlags_Values[q23] = x_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q27] = x_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_1_1_1.eprime
new file mode 100644
index 0000000000..1f68a56e57
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_1_1.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\ x_ExplicitVarSizeWithDummy[q12] = 1 | q12 : int(1..4)]),
+ x_Occurrence[2],
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q6] ->
+ or([x_ExplicitVarSizeWithDummy[q8] != 5 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..4)])
+ | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_1_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_1_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_1_1_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_1_3.eprime b/tests/exhaustive/basic/set06/expected/model_2_1_1_3.eprime
new file mode 100644
index 0000000000..7a02ca5f86
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_1_3.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 1 | q28 : int(1..4)]),
+ x_Occurrence[2],
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\
+ x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 5 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q18]]
+ | q18 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = q19
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_1_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_1_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_1_1_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_1_4.eprime b/tests/exhaustive/basic/set06/expected/model_2_1_1_4.eprime
new file mode 100644
index 0000000000..e966231466
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_1_4.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 1 | q30 : int(1..4)]),
+ x_Occurrence[2],
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q28] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 5 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q20]]
+ | q20 : int(1..4)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_1_2_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_1_2_1.eprime
new file mode 100644
index 0000000000..9cfdfdc9c0
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_2_1.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q14] != 5 /\ x_ExplicitVarSizeWithDummy[q14] = 1 | q14 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\ x_ExplicitVarSizeWithDummy[q12] = 3 | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q6] ->
+ or([x_ExplicitVarSizeWithDummy[q8] != 5 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..4)])
+ | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_2_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_2_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_1_2_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_2_3.eprime b/tests/exhaustive/basic/set06/expected/model_2_1_2_3.eprime
new file mode 100644
index 0000000000..2fe1df7714
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_2_3.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 1 | q30 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 3 | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\
+ x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 5 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q18]]
+ | q18 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = q19
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_2_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_2_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_1_2_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_2_4.eprime b/tests/exhaustive/basic/set06/expected/model_2_1_2_4.eprime
new file mode 100644
index 0000000000..36aec49af7
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_2_4.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 1 | q32 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithDummy[q25] != 5 /\ x_ExplicitVarSizeWithDummy[q25] = 3 | q25 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = q26 | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q30]] | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 5 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q20]]
+ | q20 : int(1..4)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_1_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_1_3_1.eprime
new file mode 100644
index 0000000000..1efc26667b
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_3_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 1 | q30 : int(1..4)]),
+ x_Occurrence[2],
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 3 | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\
+ x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 5 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q18]]
+ | q18 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = q19
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_3_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_3_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_1_3_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_3_4.eprime b/tests/exhaustive/basic/set06/expected/model_2_1_3_4.eprime
new file mode 100644
index 0000000000..ced251790b
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_3_4.eprime
@@ -0,0 +1,78 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, x_Occurrence,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q56] != 5 /\ x_ExplicitVarSizeWithDummy[q56] = 1 | q56 : int(1..4)]),
+ x_Occurrence[2],
+ or([q49 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q49] = 3 | q49 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q50] ->
+ or([x_ExplicitVarSizeWithDummy[q52] != 5 /\ x_ExplicitVarSizeWithDummy[q52] = q50 | q52 : int(1..4)])
+ | q50 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q54] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q54]] | q54 : int(1..4)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\
+ x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 5 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q18]]
+ | q18 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = q19
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q22] < x_ExplicitVarSizeWithFlags_Values[q22 + 1]
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] = false -> x_ExplicitVarSizeWithFlags_Values[q23] = 1
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q24 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q24] | q24 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q25]) | q25 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] ->
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\
+ x_ExplicitVarSizeWithDummy[q30] = x_ExplicitVarSizeWithFlags_Values[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q32] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q34] /\
+ x_ExplicitVarSizeWithFlags_Values[q34] = x_ExplicitVarSizeWithDummy[q32]
+ | q34 : int(1..4)])
+ | q32 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q36] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q36]]
+ | q36 : int(1..4)]),
+ and([x_Occurrence[q37] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q39] /\ x_ExplicitVarSizeWithFlags_Values[q39] = q37 | q39 : int(1..4)])
+ | q37 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q41] ->
+ or([q43 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q43] = x_ExplicitVarSizeWithFlags_Values[q41]
+ | q43 : int(1..4)])
+ | q41 : int(1..4)]),
+ and([q45 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q47] /\
+ x_ExplicitVarSizeWithFlags_Values[q47] = x_ExplicitVarSizeWithMarker_Values[q45]
+ | q47 : int(1..4)])
+ | q45 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_1_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_1_4_1.eprime
new file mode 100644
index 0000000000..4763aec36a
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_4_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 1 | q32 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = 3 | q25 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = q26 | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q30]] | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 5 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q20]]
+ | q20 : int(1..4)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_4_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_4_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_1_4_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_1_4_3.eprime b/tests/exhaustive/basic/set06/expected/model_2_1_4_3.eprime
new file mode 100644
index 0000000000..f9660743b6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_1_4_3.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, x_Occurrence,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q56] != 5 /\ x_ExplicitVarSizeWithDummy[q56] = 1 | q56 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithFlags_Flags[q49] /\ x_ExplicitVarSizeWithFlags_Values[q49] = 3 | q49 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q50] ->
+ or([x_ExplicitVarSizeWithDummy[q52] != 5 /\ x_ExplicitVarSizeWithDummy[q52] = q50 | q52 : int(1..4)])
+ | q50 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q54] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q54]] | q54 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 5 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q20]]
+ | q20 : int(1..4)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([q24 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q24] < x_ExplicitVarSizeWithMarker_Values[q24 + 1]
+ | q24 : int(1..3)]),
+ and([q25 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q25] = 1 | q25 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q28 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\
+ x_ExplicitVarSizeWithDummy[q30] = x_ExplicitVarSizeWithMarker_Values[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q32] != 5 ->
+ or([q34 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q34] = x_ExplicitVarSizeWithDummy[q32]
+ | q34 : int(1..4)])
+ | q32 : int(1..4)]),
+ and([q36 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q36]]
+ | q36 : int(1..4)]),
+ and([x_Occurrence[q37] ->
+ or([q39 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q39] = q37
+ | q39 : int(1..4)])
+ | q37 : int(1..4)]),
+ and([q41 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q43] /\
+ x_ExplicitVarSizeWithFlags_Values[q43] = x_ExplicitVarSizeWithMarker_Values[q41]
+ | q43 : int(1..4)])
+ | q41 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q45] ->
+ or([q47 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q47] = x_ExplicitVarSizeWithFlags_Values[q45]
+ | q47 : int(1..4)])
+ | q45 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_1_1.eprime
new file mode 100644
index 0000000000..c05e9cc08f
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_1_1.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\ x_ExplicitVarSizeWithDummy[q12] = 1 | q12 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q14] != 5 /\ x_ExplicitVarSizeWithDummy[q14] = 2 | q14 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q6] ->
+ or([x_ExplicitVarSizeWithDummy[q8] != 5 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..4)])
+ | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_1_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_1_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_1_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_1_3.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_1_3.eprime
new file mode 100644
index 0000000000..ca46d4ab65
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_1_3.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 1 | q28 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 2 | q30 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\
+ x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 5 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q18]]
+ | q18 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = q19
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_1_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_1_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_1_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_1_4.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_1_4.eprime
new file mode 100644
index 0000000000..354ad47498
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_1_4.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 1 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 2 | q32 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q28] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 5 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q20]]
+ | q20 : int(1..4)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_2_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_2_1.eprime
new file mode 100644
index 0000000000..4a891ab86b
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_2_1.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\ x_ExplicitVarSizeWithDummy[q12] = 1 | q12 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q14] != 5 /\ x_ExplicitVarSizeWithDummy[q14] = 2 | q14 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q16] != 5 /\ x_ExplicitVarSizeWithDummy[q16] = 3 | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q5]) | q5 : int(1..4)]) <= 4,
+ and([x_Occurrence[q6] ->
+ or([x_ExplicitVarSizeWithDummy[q8] != 5 /\ x_ExplicitVarSizeWithDummy[q8] = q6 | q8 : int(1..4)])
+ | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_2_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_2_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_2_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_2_2.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_2_2.eprime
new file mode 100644
index 0000000000..c69010fadb
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_2_2.eprime
@@ -0,0 +1,13 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q6] != 5 /\ x_ExplicitVarSizeWithDummy[q6] = 1 | q6 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q8] != 5 /\ x_ExplicitVarSizeWithDummy[q8] = 2 | q8 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = 3 | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_2_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_2_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_2_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_2_3.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_2_3.eprime
new file mode 100644
index 0000000000..18a5bb99e1
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_2_3.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\ x_ExplicitVarSizeWithDummy[q17] = 1 | q17 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = 2 | q19 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = 3 | q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_2_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_2_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_2_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_2_4.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_2_4.eprime
new file mode 100644
index 0000000000..dcecde5147
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_2_4.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = 1 | q19 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = 2 | q21 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q23] != 5 /\ x_ExplicitVarSizeWithDummy[q23] = 3 | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_3_1.eprime
new file mode 100644
index 0000000000..0ba2c449b2
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_3_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 1 | q28 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 2 | q30 : int(1..4)]),
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q32] = 3 | q32 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..4)]) <= 4,
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q21] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q21]] | q21 : int(1..4)]),
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_3_2-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_3_2.eprime
new file mode 100644
index 0000000000..875689727a
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_3_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\ x_ExplicitVarSizeWithDummy[q17] = 1 | q17 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = 2 | q19 : int(1..4)]),
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = 3 | q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_3_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_3_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_3_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_3_4.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_3_4.eprime
new file mode 100644
index 0000000000..ca3fdd46a7
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_3_4.eprime
@@ -0,0 +1,61 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q38] != 5 /\ x_ExplicitVarSizeWithDummy[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = 2 | q40 : int(1..4)]),
+ or([q42 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_4_1.eprime
new file mode 100644
index 0000000000..9dbf7c903e
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_4_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 1 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 2 | q32 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q34] /\ x_ExplicitVarSizeWithFlags_Values[q34] = 3 | q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..4)]) <= 4,
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q23] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q23]] | q23 : int(1..4)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_4_2-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_4_2.eprime
new file mode 100644
index 0000000000..8a79eef455
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_4_2.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = 1 | q19 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = 2 | q21 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = 3 | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_4_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_4_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_2_4_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_2_4_3.eprime b/tests/exhaustive/basic/set06/expected/model_2_2_4_3.eprime
new file mode 100644
index 0000000000..7d292ec23b
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_2_4_3.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q38] != 5 /\ x_ExplicitVarSizeWithDummy[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q42] /\ x_ExplicitVarSizeWithFlags_Values[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_3_1_1.eprime
new file mode 100644
index 0000000000..38b040fe91
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_1_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 1 | q28 : int(1..4)]),
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 2 | q30 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..4)]) <= 4,
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q21] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q21]] | q21 : int(1..4)]),
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_1_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_1_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_3_1_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_1_4.eprime b/tests/exhaustive/basic/set06/expected/model_2_3_1_4.eprime
new file mode 100644
index 0000000000..02a7c6a35f
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_1_4.eprime
@@ -0,0 +1,78 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q54] != 5 /\ x_ExplicitVarSizeWithDummy[q54] = 1 | q54 : int(1..4)]),
+ or([q56 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q56] = 2 | q56 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..4)]) <= 4,
+ and([x_Occurrence[q43] ->
+ or([x_ExplicitVarSizeWithDummy[q45] != 5 /\ x_ExplicitVarSizeWithDummy[q45] = q43 | q45 : int(1..4)])
+ | q43 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q47] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q47]] | q47 : int(1..4)]),
+ and([x_Occurrence[q48] ->
+ or([q50 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q50] = q48
+ | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([q52 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q52]]
+ | q52 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q17] < x_ExplicitVarSizeWithFlags_Values[q17 + 1]
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] = false -> x_ExplicitVarSizeWithFlags_Values[q18] = 1
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q19] | q19 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q20]) | q20 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] ->
+ or([x_ExplicitVarSizeWithDummy[q25] != 5 /\
+ x_ExplicitVarSizeWithDummy[q25] = x_ExplicitVarSizeWithFlags_Values[q23]
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q27] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\
+ x_ExplicitVarSizeWithFlags_Values[q29] = x_ExplicitVarSizeWithDummy[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q31] ->
+ or([q33 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q33] = x_ExplicitVarSizeWithFlags_Values[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)]),
+ and([q35 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q37] /\
+ x_ExplicitVarSizeWithFlags_Values[q37] = x_ExplicitVarSizeWithMarker_Values[q35]
+ | q37 : int(1..4)])
+ | q35 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q39] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q39]]
+ | q39 : int(1..4)]),
+ and([x_Occurrence[q40] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q42] /\ x_ExplicitVarSizeWithFlags_Values[q42] = q40 | q42 : int(1..4)])
+ | q40 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_3_2_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_3_2_1.eprime
new file mode 100644
index 0000000000..69afb8a756
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_2_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 1 | q28 : int(1..4)]),
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 2 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 3 | q32 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..4)]) <= 4,
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q21] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q21]] | q21 : int(1..4)]),
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_2_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_3_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_2_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_3_2_2-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_2_2.eprime b/tests/exhaustive/basic/set06/expected/model_2_3_2_2.eprime
new file mode 100644
index 0000000000..9902fda506
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_2_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\ x_ExplicitVarSizeWithDummy[q17] = 1 | q17 : int(1..4)]),
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = 2 | q19 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = 3 | q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_2_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_3_2_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_2_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_3_2_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_2_4.eprime b/tests/exhaustive/basic/set06/expected/model_2_3_2_4.eprime
new file mode 100644
index 0000000000..5697b5087d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_2_4.eprime
@@ -0,0 +1,61 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q38] != 5 /\ x_ExplicitVarSizeWithDummy[q38] = 1 | q38 : int(1..4)]),
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q42] != 5 /\ x_ExplicitVarSizeWithDummy[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_3_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_3_3_1.eprime
new file mode 100644
index 0000000000..37607392b7
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_3_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 1 | q28 : int(1..4)]),
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 2 | q30 : int(1..4)]),
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q32] = 3 | q32 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..4)]) <= 4,
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q21] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q21]] | q21 : int(1..4)]),
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_3_3_2-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_2_3_3_2.eprime
new file mode 100644
index 0000000000..1f36b524f8
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_3_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\ x_ExplicitVarSizeWithDummy[q17] = 1 | q17 : int(1..4)]),
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = 2 | q19 : int(1..4)]),
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = 3 | q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_3_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_3_3_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_3_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_3_3_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_3_4.eprime b/tests/exhaustive/basic/set06/expected/model_2_3_3_4.eprime
new file mode 100644
index 0000000000..b9010e4669
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_3_4.eprime
@@ -0,0 +1,61 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q38] != 5 /\ x_ExplicitVarSizeWithDummy[q38] = 1 | q38 : int(1..4)]),
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = 2 | q40 : int(1..4)]),
+ or([q42 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_3_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_3_4_1.eprime
new file mode 100644
index 0000000000..3132c81925
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_4_1.eprime
@@ -0,0 +1,78 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q54] != 5 /\ x_ExplicitVarSizeWithDummy[q54] = 1 | q54 : int(1..4)]),
+ or([q56 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q56] = 2 | q56 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q58] /\ x_ExplicitVarSizeWithFlags_Values[q58] = 3 | q58 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)]),
+ sum([toInt(x_Occurrence[q37]) | q37 : int(1..4)]) <= 4,
+ and([x_Occurrence[q38] ->
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = q38 | q40 : int(1..4)])
+ | q38 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q42] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q42]] | q42 : int(1..4)]),
+ and([x_Occurrence[q43] ->
+ or([q45 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q45] = q43
+ | q45 : int(1..4)])
+ | q43 : int(1..4)]),
+ and([q47 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q47]]
+ | q47 : int(1..4)]),
+ and([x_Occurrence[q48] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q50] /\ x_ExplicitVarSizeWithFlags_Values[q50] = q48 | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q52] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q52]]
+ | q52 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_3_4_2-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_3_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_2_3_4_2.eprime
new file mode 100644
index 0000000000..1359af27c8
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_3_4_2.eprime
@@ -0,0 +1,61 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q38] != 5 /\ x_ExplicitVarSizeWithDummy[q38] = 1 | q38 : int(1..4)]),
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q42] /\ x_ExplicitVarSizeWithFlags_Values[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_4_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_4_1_1.eprime
new file mode 100644
index 0000000000..632496e075
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_1_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 1 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 2 | q32 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..4)]) <= 4,
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q23] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q23]] | q23 : int(1..4)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_1_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_4_1_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_1_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_4_1_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_1_3.eprime b/tests/exhaustive/basic/set06/expected/model_2_4_1_3.eprime
new file mode 100644
index 0000000000..1e494d1026
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_1_3.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithDummy[q54] != 5 /\ x_ExplicitVarSizeWithDummy[q54] = 1 | q54 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q56] /\ x_ExplicitVarSizeWithFlags_Values[q56] = 2 | q56 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..4)]) <= 4,
+ and([x_Occurrence[q43] ->
+ or([x_ExplicitVarSizeWithDummy[q45] != 5 /\ x_ExplicitVarSizeWithDummy[q45] = q43 | q45 : int(1..4)])
+ | q43 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q47] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q47]] | q47 : int(1..4)]),
+ and([x_Occurrence[q48] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q50] /\ x_ExplicitVarSizeWithFlags_Values[q50] = q48 | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q52] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q52]]
+ | q52 : int(1..4)]),
+ and([q19 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q19] < x_ExplicitVarSizeWithMarker_Values[q19 + 1]
+ | q19 : int(1..3)]),
+ and([q20 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q20] = 1 | q20 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q23 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q25] != 5 /\
+ x_ExplicitVarSizeWithDummy[q25] = x_ExplicitVarSizeWithMarker_Values[q23]
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q27] != 5 ->
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q29] = x_ExplicitVarSizeWithDummy[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([q31 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q33] /\
+ x_ExplicitVarSizeWithFlags_Values[q33] = x_ExplicitVarSizeWithMarker_Values[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q35] ->
+ or([q37 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q37] = x_ExplicitVarSizeWithFlags_Values[q35]
+ | q37 : int(1..4)])
+ | q35 : int(1..4)]),
+ and([q39 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q39]]
+ | q39 : int(1..4)]),
+ and([x_Occurrence[q40] ->
+ or([q42 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q42] = q40
+ | q42 : int(1..4)])
+ | q40 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_4_2_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_4_2_1.eprime
new file mode 100644
index 0000000000..fc14f2c0db
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_2_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 1 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 2 | q32 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q34] != 5 /\ x_ExplicitVarSizeWithDummy[q34] = 3 | q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..4)]) <= 4,
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q23] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q23]] | q23 : int(1..4)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_2_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_4_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_2_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_4_2_2-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_2_2.eprime b/tests/exhaustive/basic/set06/expected/model_2_4_2_2.eprime
new file mode 100644
index 0000000000..c887a723c4
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_2_2.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = 1 | q19 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = 2 | q21 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q23] != 5 /\ x_ExplicitVarSizeWithDummy[q23] = 3 | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_2_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_4_2_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_2_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_4_2_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_2_3.eprime b/tests/exhaustive/basic/set06/expected/model_2_4_2_3.eprime
new file mode 100644
index 0000000000..9f009dc6b0
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_2_3.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q38] != 5 /\ x_ExplicitVarSizeWithDummy[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q42] != 5 /\ x_ExplicitVarSizeWithDummy[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_4_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_4_3_1.eprime
new file mode 100644
index 0000000000..c5d220fcc3
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_3_1.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q54] != 5 /\ x_ExplicitVarSizeWithDummy[q54] = 1 | q54 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q56] /\ x_ExplicitVarSizeWithFlags_Values[q56] = 2 | q56 : int(1..4)]),
+ or([q58 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q58] = 3 | q58 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)]),
+ sum([toInt(x_Occurrence[q37]) | q37 : int(1..4)]) <= 4,
+ and([x_Occurrence[q38] ->
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = q38 | q40 : int(1..4)])
+ | q38 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q42] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q42]] | q42 : int(1..4)]),
+ and([x_Occurrence[q43] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q45] /\ x_ExplicitVarSizeWithFlags_Values[q45] = q43 | q45 : int(1..4)])
+ | q43 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q47] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q47]]
+ | q47 : int(1..4)]),
+ and([x_Occurrence[q48] ->
+ or([q50 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q50] = q48
+ | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([q52 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q52]]
+ | q52 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_4_3_2-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_2_4_3_2.eprime
new file mode 100644
index 0000000000..58bc43d769
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_3_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q38] != 5 /\ x_ExplicitVarSizeWithDummy[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = 2 | q40 : int(1..4)]),
+ or([q42 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_4_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_2_4_4_1.eprime
new file mode 100644
index 0000000000..5312aea309
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_4_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 1 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 2 | q32 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q34] /\ x_ExplicitVarSizeWithFlags_Values[q34] = 3 | q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..4)]) <= 4,
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q23] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q23]] | q23 : int(1..4)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_4_4_2-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_2_4_4_2.eprime
new file mode 100644
index 0000000000..819431e7aa
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_4_2.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = 1 | q19 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = 2 | q21 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = 3 | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_4_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_2_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_4_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_2_4_4_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_2_4_4_3.eprime b/tests/exhaustive/basic/set06/expected/model_2_4_4_3.eprime
new file mode 100644
index 0000000000..7c6e3d9d88
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_2_4_4_3.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithDummy[q38] != 5 /\ x_ExplicitVarSizeWithDummy[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q42] /\ x_ExplicitVarSizeWithFlags_Values[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 5) | q3 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_1_1_1.eprime
new file mode 100644
index 0000000000..b786f3d150
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_1_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 1 | q11 : int(1..4)]),
+ x_Occurrence[2],
+ x_Occurrence[3],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q5] ->
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5 | q7 : int(1..4)])
+ | q5 : int(1..4)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_1_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_1_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_1_1_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_1_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_1_1_2.eprime
new file mode 100644
index 0000000000..8f65d99356
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_1_2.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 1 | q28 : int(1..4)]),
+ x_Occurrence[2],
+ x_Occurrence[3],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 5
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 5 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 5 | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 5) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 5 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q18]] | q18 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_1_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_1_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_1_1_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_1_4.eprime b/tests/exhaustive/basic/set06/expected/model_3_1_1_4.eprime
new file mode 100644
index 0000000000..a8dbd5fdde
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_1_4.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 1 | q29 : int(1..4)]),
+ x_Occurrence[2],
+ x_Occurrence[3],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q23] ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
+ | q27 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q19]]
+ | q19 : int(1..4)]),
+ and([x_Occurrence[q20] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = q20 | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_1_2_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_1_2_1.eprime
new file mode 100644
index 0000000000..f2fd3908db
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_2_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 1 | q30 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = 3 | q28 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 5
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 5 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 5 | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 5) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 5 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q18]] | q18 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_2_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_2_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_1_2_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_2_4.eprime b/tests/exhaustive/basic/set06/expected/model_3_1_2_4.eprime
new file mode 100644
index 0000000000..525362fb4b
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_2_4.eprime
@@ -0,0 +1,78 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ or([q56 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q56] = 1 | q56 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithDummy[q49] != 5 /\ x_ExplicitVarSizeWithDummy[q49] = 3 | q49 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q50] ->
+ or([q52 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q52] = q50
+ | q52 : int(1..4)])
+ | q50 : int(1..4)]),
+ and([q54 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q54]]
+ | q54 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 5
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 5 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 5 | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 5) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 5 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q18]] | q18 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q22] < x_ExplicitVarSizeWithFlags_Values[q22 + 1]
+ | q22 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] = false -> x_ExplicitVarSizeWithFlags_Values[q23] = 1
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q24 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q24] | q24 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q25]) | q25 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] ->
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q30] = x_ExplicitVarSizeWithFlags_Values[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)]),
+ and([q32 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q34] /\
+ x_ExplicitVarSizeWithFlags_Values[q34] = x_ExplicitVarSizeWithMarker_Values[q32]
+ | q34 : int(1..4)])
+ | q32 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q36] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q36]]
+ | q36 : int(1..4)]),
+ and([x_Occurrence[q37] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q39] /\ x_ExplicitVarSizeWithFlags_Values[q39] = q37 | q39 : int(1..4)])
+ | q37 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q41] ->
+ or([x_ExplicitVarSizeWithDummy[q43] != 5 /\
+ x_ExplicitVarSizeWithDummy[q43] = x_ExplicitVarSizeWithFlags_Values[q41]
+ | q43 : int(1..4)])
+ | q41 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q45] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q47] /\
+ x_ExplicitVarSizeWithFlags_Values[q47] = x_ExplicitVarSizeWithDummy[q45]
+ | q47 : int(1..4)])
+ | q45 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_1_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_1_3_1.eprime
new file mode 100644
index 0000000000..5e6282546a
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_3_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q13] = 1 | q13 : int(1..4)]),
+ x_Occurrence[2],
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 3 | q11 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q5] ->
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5 | q7 : int(1..4)])
+ | q5 : int(1..4)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_1_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_1_3_2.eprime
new file mode 100644
index 0000000000..b537bac469
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_3_2.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 1 | q30 : int(1..4)]),
+ x_Occurrence[2],
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 3 | q28 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 5
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 5 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 5 | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 5) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 5 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q18]] | q18 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_3_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_3_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_1_3_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_3_4.eprime b/tests/exhaustive/basic/set06/expected/model_3_1_3_4.eprime
new file mode 100644
index 0000000000..3befc5cd42
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_3_4.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = 1 | q31 : int(1..4)]),
+ x_Occurrence[2],
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = 3 | q24 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q25] ->
+ or([q27 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q27] = q25
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([q29 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q29]]
+ | q29 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q19]]
+ | q19 : int(1..4)]),
+ and([x_Occurrence[q20] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = q20 | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_1_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_1_4_1.eprime
new file mode 100644
index 0000000000..8671f81ae6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_4_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = 1 | q31 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\ x_ExplicitVarSizeWithFlags_Values[q24] = 3 | q24 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q25] ->
+ or([q27 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q27] = q25
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([q29 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q29]]
+ | q29 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q19]]
+ | q19 : int(1..4)]),
+ and([x_Occurrence[q20] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = q20 | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_1_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_1_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_1_4_2.eprime
new file mode 100644
index 0000000000..66ffd146e3
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_1_4_2.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q56 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q56] = 1 | q56 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithFlags_Flags[q49] /\ x_ExplicitVarSizeWithFlags_Values[q49] = 3 | q49 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q50] ->
+ or([q52 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q52] = q50
+ | q52 : int(1..4)])
+ | q50 : int(1..4)]),
+ and([q54 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q54]]
+ | q54 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q19]]
+ | q19 : int(1..4)]),
+ and([x_Occurrence[q20] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = q20 | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q23] < x_ExplicitVarSizeWithDummy[q23 + 1] \/ x_ExplicitVarSizeWithDummy[q23] = 5
+ | q23 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q24] = 5 -> x_ExplicitVarSizeWithDummy[q24 + 1] = 5 | q24 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q25] != 5) | q25 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q28] != 5 ->
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q30] = x_ExplicitVarSizeWithDummy[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)]),
+ and([q32 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q34] != 5 /\
+ x_ExplicitVarSizeWithDummy[q34] = x_ExplicitVarSizeWithMarker_Values[q32]
+ | q34 : int(1..4)])
+ | q32 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q36] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q36]] | q36 : int(1..4)]),
+ and([x_Occurrence[q37] ->
+ or([x_ExplicitVarSizeWithDummy[q39] != 5 /\ x_ExplicitVarSizeWithDummy[q39] = q37 | q39 : int(1..4)])
+ | q37 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q41] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q43] /\
+ x_ExplicitVarSizeWithFlags_Values[q43] = x_ExplicitVarSizeWithDummy[q41]
+ | q43 : int(1..4)])
+ | q41 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q45] ->
+ or([x_ExplicitVarSizeWithDummy[q47] != 5 /\
+ x_ExplicitVarSizeWithDummy[q47] = x_ExplicitVarSizeWithFlags_Values[q45]
+ | q47 : int(1..4)])
+ | q45 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_2_1_1.eprime
new file mode 100644
index 0000000000..9ce4f6b713
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_1_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 1 | q28 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 2 | q30 : int(1..4)]),
+ x_Occurrence[3],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..4)]) <= 4,
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q21]]
+ | q21 : int(1..4)]),
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_1_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_1_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_2_1_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_1_4.eprime b/tests/exhaustive/basic/set06/expected/model_3_2_1_4.eprime
new file mode 100644
index 0000000000..89bd1983d1
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_1_4.eprime
@@ -0,0 +1,78 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([q54 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q54] = 1 | q54 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q56] != 5 /\ x_ExplicitVarSizeWithDummy[q56] = 2 | q56 : int(1..4)]),
+ x_Occurrence[3],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..4)]) <= 4,
+ and([x_Occurrence[q43] ->
+ or([q45 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q45] = q43
+ | q45 : int(1..4)])
+ | q43 : int(1..4)]),
+ and([q47 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q47]]
+ | q47 : int(1..4)]),
+ and([x_Occurrence[q48] ->
+ or([x_ExplicitVarSizeWithDummy[q50] != 5 /\ x_ExplicitVarSizeWithDummy[q50] = q48 | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q52] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q52]] | q52 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q17] < x_ExplicitVarSizeWithFlags_Values[q17 + 1]
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] = false -> x_ExplicitVarSizeWithFlags_Values[q18] = 1
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q19] | q19 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q20]) | q20 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q25] = x_ExplicitVarSizeWithFlags_Values[q23]
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\
+ x_ExplicitVarSizeWithFlags_Values[q29] = x_ExplicitVarSizeWithMarker_Values[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q31] ->
+ or([x_ExplicitVarSizeWithDummy[q33] != 5 /\
+ x_ExplicitVarSizeWithDummy[q33] = x_ExplicitVarSizeWithFlags_Values[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q35] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q37] /\
+ x_ExplicitVarSizeWithFlags_Values[q37] = x_ExplicitVarSizeWithDummy[q35]
+ | q37 : int(1..4)])
+ | q35 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q39] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q39]]
+ | q39 : int(1..4)]),
+ and([x_Occurrence[q40] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q42] /\ x_ExplicitVarSizeWithFlags_Values[q42] = q40 | q42 : int(1..4)])
+ | q40 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_2_2_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_2_2_1.eprime
new file mode 100644
index 0000000000..0bc238b946
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_2_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 1 | q28 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 2 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 3 | q32 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..4)]) <= 4,
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q21]]
+ | q21 : int(1..4)]),
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_2_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_2_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_2_2_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_2_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_2_2_2.eprime
new file mode 100644
index 0000000000..dbfe72b7f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_2_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = 1 | q17 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = 2 | q19 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = 3 | q21 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_2_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_2_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_2_2_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_2_4.eprime b/tests/exhaustive/basic/set06/expected/model_3_2_2_4.eprime
new file mode 100644
index 0000000000..7a1a6ff738
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_2_4.eprime
@@ -0,0 +1,61 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q42] != 5 /\ x_ExplicitVarSizeWithDummy[q42] = 3 | q42 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_2_3_1.eprime
new file mode 100644
index 0000000000..ff7bb579b2
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_3_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 1 | q28 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 2 | q30 : int(1..4)]),
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q32] = 3 | q32 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..4)]) <= 4,
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q21]]
+ | q21 : int(1..4)]),
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_2_3_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_2_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_2_3_2.eprime
new file mode 100644
index 0000000000..e1d4abb5fe
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_3_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = 1 | q17 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = 2 | q19 : int(1..4)]),
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = 3 | q21 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_3_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_3_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_2_3_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_3_4.eprime b/tests/exhaustive/basic/set06/expected/model_3_2_3_4.eprime
new file mode 100644
index 0000000000..b28bec21c6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_3_4.eprime
@@ -0,0 +1,61 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = 2 | q40 : int(1..4)]),
+ or([q42 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q42] = 3 | q42 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_2_4_1.eprime
new file mode 100644
index 0000000000..5966d0ab74
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_4_1.eprime
@@ -0,0 +1,78 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q54 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q54] = 1 | q54 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q56] != 5 /\ x_ExplicitVarSizeWithDummy[q56] = 2 | q56 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q58] /\ x_ExplicitVarSizeWithFlags_Values[q58] = 3 | q58 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)]),
+ sum([toInt(x_Occurrence[q37]) | q37 : int(1..4)]) <= 4,
+ and([x_Occurrence[q38] ->
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = q38
+ | q40 : int(1..4)])
+ | q38 : int(1..4)]),
+ and([q42 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q42]]
+ | q42 : int(1..4)]),
+ and([x_Occurrence[q43] ->
+ or([x_ExplicitVarSizeWithDummy[q45] != 5 /\ x_ExplicitVarSizeWithDummy[q45] = q43 | q45 : int(1..4)])
+ | q43 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q47] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q47]] | q47 : int(1..4)]),
+ and([x_Occurrence[q48] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q50] /\ x_ExplicitVarSizeWithFlags_Values[q50] = q48 | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q52] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q52]]
+ | q52 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_2_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_2_4_2-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_2_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_2_4_2.eprime
new file mode 100644
index 0000000000..d35a7e7b68
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_2_4_2.eprime
@@ -0,0 +1,61 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q42] /\ x_ExplicitVarSizeWithFlags_Values[q42] = 3 | q42 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_1_1.eprime
new file mode 100644
index 0000000000..80713ad04e
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_1_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 1 | q11 : int(1..4)]),
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q13] = 2 | q13 : int(1..4)]),
+ x_Occurrence[3],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q5] ->
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5 | q7 : int(1..4)])
+ | q5 : int(1..4)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_1_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_1_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_1_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_1_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_1_2.eprime
new file mode 100644
index 0000000000..53cfc835b6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_1_2.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 1 | q28 : int(1..4)]),
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 2 | q30 : int(1..4)]),
+ x_Occurrence[3],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 5
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 5 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 5 | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 5) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 5 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q18]] | q18 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_1_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_1_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_1_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_1_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_1_4.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_1_4.eprime
new file mode 100644
index 0000000000..0f704594c0
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_1_4.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 1 | q29 : int(1..4)]),
+ or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = 2 | q31 : int(1..4)]),
+ x_Occurrence[3],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q23] ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
+ | q27 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q19]]
+ | q19 : int(1..4)]),
+ and([x_Occurrence[q20] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = q20 | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_2_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_2_1.eprime
new file mode 100644
index 0000000000..918bc71bcb
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_2_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = 1 | q28 : int(1..4)]),
+ or([q30 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q30] = 2 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 3 | q32 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ sum([toInt(x_Occurrence[q16]) | q16 : int(1..4)]) <= 4,
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q21]]
+ | q21 : int(1..4)]),
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_2_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_2_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_2_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_2_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_2_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_2_2.eprime
new file mode 100644
index 0000000000..ddb40c5b40
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_2_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = 1 | q17 : int(1..4)]),
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = 2 | q19 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = 3 | q21 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_2_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_2_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_2_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_2_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_2_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_2_4.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_2_4.eprime
new file mode 100644
index 0000000000..f03b23d86a
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_2_4.eprime
@@ -0,0 +1,61 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = 1 | q38 : int(1..4)]),
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q42] != 5 /\ x_ExplicitVarSizeWithDummy[q42] = 3 | q42 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_3_1.eprime
new file mode 100644
index 0000000000..c15dc11975
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_3_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = 1 | q11 : int(1..4)]),
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q13] = 2 | q13 : int(1..4)]),
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q15] = 3 | q15 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ sum([toInt(x_Occurrence[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_Occurrence[q5] ->
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q5 | q7 : int(1..4)])
+ | q5 : int(1..4)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_3_2.eprime
new file mode 100644
index 0000000000..85731e5fd2
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_3_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = 1 | q17 : int(1..4)]),
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = 2 | q19 : int(1..4)]),
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = 3 | q21 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q6] != 5) | q6 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_3_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_3_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_3_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_3_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_3_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_3_3.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_3_3.eprime
new file mode 100644
index 0000000000..68ea664f7c
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_3_3.eprime
@@ -0,0 +1,15 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q5 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q5] = 1 | q5 : int(1..4)]),
+ or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = 3 | q9 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_3_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_3_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_3_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_3_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_3_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_3_4.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_3_4.eprime
new file mode 100644
index 0000000000..5ea57c61e2
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_3_4.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..4)]),
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..4)]),
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = 3 | q22 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_4_1.eprime
new file mode 100644
index 0000000000..73c28def99
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_4_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 1 | q29 : int(1..4)]),
+ or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = 2 | q31 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q33] /\ x_ExplicitVarSizeWithFlags_Values[q33] = 3 | q33 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..4)]) <= 4,
+ and([x_Occurrence[q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = q18
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q22]]
+ | q22 : int(1..4)]),
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_4_2.eprime
new file mode 100644
index 0000000000..d37fd441e0
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_4_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = 1 | q38 : int(1..4)]),
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q42] /\ x_ExplicitVarSizeWithFlags_Values[q42] = 3 | q42 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_4_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_3_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_4_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_3_4_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_3_4_3.eprime b/tests/exhaustive/basic/set06/expected/model_3_3_4_3.eprime
new file mode 100644
index 0000000000..8356b4d465
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_3_4_3.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..4)]),
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = 3 | q22 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_4_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_4_1_1.eprime
new file mode 100644
index 0000000000..4e52803143
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_1_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 1 | q29 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 2 | q31 : int(1..4)]),
+ x_Occurrence[3],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..4)]) <= 4,
+ and([x_Occurrence[q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = q18
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q22]]
+ | q22 : int(1..4)]),
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_1_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_4_1_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_1_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_4_1_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_1_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_4_1_2.eprime
new file mode 100644
index 0000000000..74a01c0599
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_1_2.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([q54 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q54] = 1 | q54 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q56] /\ x_ExplicitVarSizeWithFlags_Values[q56] = 2 | q56 : int(1..4)]),
+ x_Occurrence[3],
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..4)]) <= 4,
+ and([x_Occurrence[q43] ->
+ or([q45 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q45] = q43
+ | q45 : int(1..4)])
+ | q43 : int(1..4)]),
+ and([q47 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q47]]
+ | q47 : int(1..4)]),
+ and([x_Occurrence[q48] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q50] /\ x_ExplicitVarSizeWithFlags_Values[q50] = q48 | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q52] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q52]]
+ | q52 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] < x_ExplicitVarSizeWithDummy[q18 + 1] \/ x_ExplicitVarSizeWithDummy[q18] = 5
+ | q18 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q19] = 5 -> x_ExplicitVarSizeWithDummy[q19 + 1] = 5 | q19 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q20] != 5) | q20 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q23] != 5 ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q25] = x_ExplicitVarSizeWithDummy[q23]
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q29] != 5 /\
+ x_ExplicitVarSizeWithDummy[q29] = x_ExplicitVarSizeWithMarker_Values[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q31] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q33] /\
+ x_ExplicitVarSizeWithFlags_Values[q33] = x_ExplicitVarSizeWithDummy[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q35] ->
+ or([x_ExplicitVarSizeWithDummy[q37] != 5 /\
+ x_ExplicitVarSizeWithDummy[q37] = x_ExplicitVarSizeWithFlags_Values[q35]
+ | q37 : int(1..4)])
+ | q35 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q39] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q39]] | q39 : int(1..4)]),
+ and([x_Occurrence[q40] ->
+ or([x_ExplicitVarSizeWithDummy[q42] != 5 /\ x_ExplicitVarSizeWithDummy[q42] = q40 | q42 : int(1..4)])
+ | q40 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_4_2_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_4_2_1.eprime
new file mode 100644
index 0000000000..f93afbb056
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_2_1.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([q54 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q54] = 1 | q54 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q56] /\ x_ExplicitVarSizeWithFlags_Values[q56] = 2 | q56 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q58] != 5 /\ x_ExplicitVarSizeWithDummy[q58] = 3 | q58 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)]),
+ sum([toInt(x_Occurrence[q37]) | q37 : int(1..4)]) <= 4,
+ and([x_Occurrence[q38] ->
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = q38
+ | q40 : int(1..4)])
+ | q38 : int(1..4)]),
+ and([q42 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q42]]
+ | q42 : int(1..4)]),
+ and([x_Occurrence[q43] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q45] /\ x_ExplicitVarSizeWithFlags_Values[q45] = q43 | q45 : int(1..4)])
+ | q43 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q47] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q47]]
+ | q47 : int(1..4)]),
+ and([x_Occurrence[q48] ->
+ or([x_ExplicitVarSizeWithDummy[q50] != 5 /\ x_ExplicitVarSizeWithDummy[q50] = q48 | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q52] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q52]] | q52 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_2_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_4_2_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_2_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_4_2_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_2_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_4_2_2.eprime
new file mode 100644
index 0000000000..f2d9d0a651
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_2_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q42] != 5 /\ x_ExplicitVarSizeWithDummy[q42] = 3 | q42 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_4_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_4_3_1.eprime
new file mode 100644
index 0000000000..eb620a3fab
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_3_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 1 | q29 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 2 | q31 : int(1..4)]),
+ or([q33 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q33] = 3 | q33 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..4)]) <= 4,
+ and([x_Occurrence[q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = q18
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q22]]
+ | q22 : int(1..4)]),
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_4_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_4_3_2.eprime
new file mode 100644
index 0000000000..99ec382079
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_3_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = 2 | q40 : int(1..4)]),
+ or([q42 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q42] = 3 | q42 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_3_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_4_3_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_3_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_4_3_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_3_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_3_3.eprime b/tests/exhaustive/basic/set06/expected/model_3_4_3_3.eprime
new file mode 100644
index 0000000000..5a5960dab7
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_3_3.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = 2 | q20 : int(1..4)]),
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = 3 | q22 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_4_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_3_4_4_1.eprime
new file mode 100644
index 0000000000..5887490b4d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_4_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 1 | q29 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 2 | q31 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q33] /\ x_ExplicitVarSizeWithFlags_Values[q33] = 3 | q33 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..4)]) <= 4,
+ and([x_Occurrence[q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = q18
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q22]]
+ | q22 : int(1..4)]),
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_4_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_3_4_4_2.eprime
new file mode 100644
index 0000000000..5acf1611b5
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_4_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q42] /\ x_ExplicitVarSizeWithFlags_Values[q42] = 3 | q42 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_4_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_3_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_4_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_3_4_4_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_3_4_4_3.eprime b/tests/exhaustive/basic/set06/expected/model_3_4_4_3.eprime
new file mode 100644
index 0000000000..fadbf77294
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_3_4_4_3.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = 1 | q18 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = 2 | q20 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = 3 | q22 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_1_1_1.eprime
new file mode 100644
index 0000000000..840476d8f2
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_1_1.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 1 | q13 : int(1..4)]),
+ x_Occurrence[2],
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_1_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_1_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_1_1_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_1_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_1_1_2.eprime
new file mode 100644
index 0000000000..c40a34fba9
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_1_2.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..4)]),
+ x_Occurrence[2],
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 5
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 5 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 5 | q8 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 5) | q9 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q12] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
+ x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q20]] | q20 : int(1..4)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithDummy[q23] != 5 /\ x_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_1_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_1_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_1_1_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_1_3.eprime b/tests/exhaustive/basic/set06/expected/model_4_1_1_3.eprime
new file mode 100644
index 0000000000..cf6fdd09fe
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_1_3.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 1 | q29 : int(1..4)]),
+ x_Occurrence[2],
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 1 | q8 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q19]]
+ | q19 : int(1..4)]),
+ and([x_Occurrence[q20] ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_1_2_1-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_1_2_1.eprime
new file mode 100644
index 0000000000..4e673b02e4
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_2_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 1 | q32 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = 3 | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 5
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 5 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 5 | q8 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 5) | q9 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q12] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
+ x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q20]] | q20 : int(1..4)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithDummy[q23] != 5 /\ x_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_2_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_2_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_1_2_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_2_3.eprime b/tests/exhaustive/basic/set06/expected/model_4_1_2_3.eprime
new file mode 100644
index 0000000000..f80a5a1df4
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_2_3.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q56] /\ x_ExplicitVarSizeWithFlags_Values[q56] = 1 | q56 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithDummy[q54] != 5 /\ x_ExplicitVarSizeWithDummy[q54] = 3 | q54 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q48] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q50] /\ x_ExplicitVarSizeWithFlags_Values[q50] = q48 | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q52] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q52]]
+ | q52 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 5
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 5 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 5 | q8 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 5) | q9 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q12] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
+ x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q20]] | q20 : int(1..4)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithDummy[q23] != 5 /\ x_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([q24 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q24] < x_ExplicitVarSizeWithMarker_Values[q24 + 1]
+ | q24 : int(1..3)]),
+ and([q25 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q25] = 1 | q25 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q28 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\
+ x_ExplicitVarSizeWithFlags_Values[q30] = x_ExplicitVarSizeWithMarker_Values[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q32] ->
+ or([q34 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q34] = x_ExplicitVarSizeWithFlags_Values[q32]
+ | q34 : int(1..4)])
+ | q32 : int(1..4)]),
+ and([q36 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q36]]
+ | q36 : int(1..4)]),
+ and([x_Occurrence[q37] ->
+ or([q39 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q39] = q37
+ | q39 : int(1..4)])
+ | q37 : int(1..4)]),
+ and([q41 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q43] != 5 /\
+ x_ExplicitVarSizeWithDummy[q43] = x_ExplicitVarSizeWithMarker_Values[q41]
+ | q43 : int(1..4)])
+ | q41 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q45] != 5 ->
+ or([q47 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q47] = x_ExplicitVarSizeWithDummy[q45]
+ | q47 : int(1..4)])
+ | q45 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_1_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_1_3_1.eprime
new file mode 100644
index 0000000000..408fd414ac
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_3_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 1 | q31 : int(1..4)]),
+ x_Occurrence[2],
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = 3 | q29 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 1 | q8 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q19]]
+ | q19 : int(1..4)]),
+ and([x_Occurrence[q20] ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_1_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_1_3_2.eprime
new file mode 100644
index 0000000000..d20e6ad442
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_3_2.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q56] /\ x_ExplicitVarSizeWithFlags_Values[q56] = 1 | q56 : int(1..4)]),
+ x_Occurrence[2],
+ or([q54 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q54] = 3 | q54 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q48] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q50] /\ x_ExplicitVarSizeWithFlags_Values[q50] = q48 | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q52] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q52]]
+ | q52 : int(1..4)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 1 | q8 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q19]]
+ | q19 : int(1..4)]),
+ and([x_Occurrence[q20] ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q23] < x_ExplicitVarSizeWithDummy[q23 + 1] \/ x_ExplicitVarSizeWithDummy[q23] = 5
+ | q23 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q24] = 5 -> x_ExplicitVarSizeWithDummy[q24 + 1] = 5 | q24 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q25] != 5) | q25 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q28] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\
+ x_ExplicitVarSizeWithFlags_Values[q30] = x_ExplicitVarSizeWithDummy[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q32] ->
+ or([x_ExplicitVarSizeWithDummy[q34] != 5 /\
+ x_ExplicitVarSizeWithDummy[q34] = x_ExplicitVarSizeWithFlags_Values[q32]
+ | q34 : int(1..4)])
+ | q32 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q36] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q36]] | q36 : int(1..4)]),
+ and([x_Occurrence[q37] ->
+ or([x_ExplicitVarSizeWithDummy[q39] != 5 /\ x_ExplicitVarSizeWithDummy[q39] = q37 | q39 : int(1..4)])
+ | q37 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q41] != 5 ->
+ or([q43 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q43] = x_ExplicitVarSizeWithDummy[q41]
+ | q43 : int(1..4)])
+ | q41 : int(1..4)]),
+ and([q45 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q47] != 5 /\
+ x_ExplicitVarSizeWithDummy[q47] = x_ExplicitVarSizeWithMarker_Values[q45]
+ | q47 : int(1..4)])
+ | q45 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_1_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_1_4_1.eprime
new file mode 100644
index 0000000000..ab45974aa0
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_4_1.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\ x_ExplicitVarSizeWithFlags_Values[q15] = 1 | q15 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 3 | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_1_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_1_4_2.eprime
new file mode 100644
index 0000000000..db7ef3b013
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_4_2.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 1 | q32 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 3 | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 5
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 5 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 5 | q8 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 5) | q9 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q12] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
+ x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q20]] | q20 : int(1..4)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithDummy[q23] != 5 /\ x_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_4_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_4_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_1_4_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_1_4_3.eprime b/tests/exhaustive/basic/set06/expected/model_4_1_4_3.eprime
new file mode 100644
index 0000000000..4cec8ec549
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_1_4_3.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 1 | q31 : int(1..4)]),
+ x_Occurrence[2],
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 3 | q29 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 1 | q8 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q19]]
+ | q19 : int(1..4)]),
+ and([x_Occurrence[q20] ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_2_1_1.eprime
new file mode 100644
index 0000000000..ab9510be14
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_1_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 2 | q32 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..4)]) <= 4,
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q23]]
+ | q23 : int(1..4)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q28] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_1_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_1_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_2_1_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_1_3.eprime b/tests/exhaustive/basic/set06/expected/model_4_2_1_3.eprime
new file mode 100644
index 0000000000..85e53801b8
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_1_3.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q54] /\ x_ExplicitVarSizeWithFlags_Values[q54] = 1 | q54 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q56] != 5 /\ x_ExplicitVarSizeWithDummy[q56] = 2 | q56 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..4)]) <= 4,
+ and([x_Occurrence[q43] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q45] /\ x_ExplicitVarSizeWithFlags_Values[q45] = q43 | q45 : int(1..4)])
+ | q43 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q47] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q47]]
+ | q47 : int(1..4)]),
+ and([x_Occurrence[q48] ->
+ or([x_ExplicitVarSizeWithDummy[q50] != 5 /\ x_ExplicitVarSizeWithDummy[q50] = q48 | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q52] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q52]] | q52 : int(1..4)]),
+ and([q19 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q19] < x_ExplicitVarSizeWithMarker_Values[q19 + 1]
+ | q19 : int(1..3)]),
+ and([q20 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q20] = 1 | q20 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q23 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\
+ x_ExplicitVarSizeWithFlags_Values[q25] = x_ExplicitVarSizeWithMarker_Values[q23]
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] ->
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q29] = x_ExplicitVarSizeWithFlags_Values[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([q31 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q33] != 5 /\
+ x_ExplicitVarSizeWithDummy[q33] = x_ExplicitVarSizeWithMarker_Values[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q35] != 5 ->
+ or([q37 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q37] = x_ExplicitVarSizeWithDummy[q35]
+ | q37 : int(1..4)])
+ | q35 : int(1..4)]),
+ and([q39 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q39]]
+ | q39 : int(1..4)]),
+ and([x_Occurrence[q40] ->
+ or([q42 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q42] = q40
+ | q42 : int(1..4)])
+ | q40 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_2_2_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_2_2_1.eprime
new file mode 100644
index 0000000000..dad34d0ed0
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_2_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 2 | q32 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q34] != 5 /\ x_ExplicitVarSizeWithDummy[q34] = 3 | q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..4)]) <= 4,
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q23]]
+ | q23 : int(1..4)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q28] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_2_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_2_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_2_2_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_2_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_2_2_2.eprime
new file mode 100644
index 0000000000..669eaa19ca
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_2_2.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = 2 | q21 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q23] != 5 /\ x_ExplicitVarSizeWithDummy[q23] = 3 | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_2_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_2_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_2_2_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_2_3.eprime b/tests/exhaustive/basic/set06/expected/model_4_2_2_3.eprime
new file mode 100644
index 0000000000..61e6544c34
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_2_3.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q42] != 5 /\ x_ExplicitVarSizeWithDummy[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_2_3_1.eprime
new file mode 100644
index 0000000000..1199423e9f
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_3_1.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q54] /\ x_ExplicitVarSizeWithFlags_Values[q54] = 1 | q54 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q56] != 5 /\ x_ExplicitVarSizeWithDummy[q56] = 2 | q56 : int(1..4)]),
+ or([q58 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q58] = 3 | q58 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)]),
+ sum([toInt(x_Occurrence[q37]) | q37 : int(1..4)]) <= 4,
+ and([x_Occurrence[q38] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = q38 | q40 : int(1..4)])
+ | q38 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q42] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q42]]
+ | q42 : int(1..4)]),
+ and([x_Occurrence[q43] ->
+ or([x_ExplicitVarSizeWithDummy[q45] != 5 /\ x_ExplicitVarSizeWithDummy[q45] = q43 | q45 : int(1..4)])
+ | q43 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q47] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q47]] | q47 : int(1..4)]),
+ and([x_Occurrence[q48] ->
+ or([q50 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q50] = q48
+ | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([q52 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q52]]
+ | q52 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_2_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_2_3_2-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_2_3_2.eprime
new file mode 100644
index 0000000000..81418c3d6c
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_3_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = 2 | q40 : int(1..4)]),
+ or([q42 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_2_4_1.eprime
new file mode 100644
index 0000000000..a14326708e
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_4_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = 2 | q32 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q34] /\ x_ExplicitVarSizeWithFlags_Values[q34] = 3 | q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..4)]) <= 4,
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q23]]
+ | q23 : int(1..4)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q28] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_2_4_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_2_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_2_4_2.eprime
new file mode 100644
index 0000000000..e7dbd3a21e
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_4_2.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = 2 | q21 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = 3 | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_4_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_4_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_2_4_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_2_4_3.eprime b/tests/exhaustive/basic/set06/expected/model_4_2_4_3.eprime
new file mode 100644
index 0000000000..148d795f19
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_2_4_3.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q42] /\ x_ExplicitVarSizeWithFlags_Values[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_3_1_1.eprime
new file mode 100644
index 0000000000..ac596bf128
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_1_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 1 | q29 : int(1..4)]),
+ or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = 2 | q31 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..4)]) <= 4,
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q22]]
+ | q22 : int(1..4)]),
+ and([x_Occurrence[q23] ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_1_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_1_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_3_1_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_1_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_3_1_2.eprime
new file mode 100644
index 0000000000..17571cdb85
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_1_2.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q54] /\ x_ExplicitVarSizeWithFlags_Values[q54] = 1 | q54 : int(1..4)]),
+ or([q56 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q56] = 2 | q56 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..4)]) <= 4,
+ and([x_Occurrence[q43] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q45] /\ x_ExplicitVarSizeWithFlags_Values[q45] = q43 | q45 : int(1..4)])
+ | q43 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q47] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q47]]
+ | q47 : int(1..4)]),
+ and([x_Occurrence[q48] ->
+ or([q50 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q50] = q48
+ | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([q52 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q52]]
+ | q52 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] < x_ExplicitVarSizeWithDummy[q18 + 1] \/ x_ExplicitVarSizeWithDummy[q18] = 5
+ | q18 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q19] = 5 -> x_ExplicitVarSizeWithDummy[q19 + 1] = 5 | q19 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q20] != 5) | q20 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q23] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\
+ x_ExplicitVarSizeWithFlags_Values[q25] = x_ExplicitVarSizeWithDummy[q23]
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] ->
+ or([x_ExplicitVarSizeWithDummy[q29] != 5 /\
+ x_ExplicitVarSizeWithDummy[q29] = x_ExplicitVarSizeWithFlags_Values[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q31] != 5 ->
+ or([q33 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q33] = x_ExplicitVarSizeWithDummy[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)]),
+ and([q35 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q37] != 5 /\
+ x_ExplicitVarSizeWithDummy[q37] = x_ExplicitVarSizeWithMarker_Values[q35]
+ | q37 : int(1..4)])
+ | q35 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q39] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q39]] | q39 : int(1..4)]),
+ and([x_Occurrence[q40] ->
+ or([x_ExplicitVarSizeWithDummy[q42] != 5 /\ x_ExplicitVarSizeWithDummy[q42] = q40 | q42 : int(1..4)])
+ | q40 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_3_2_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_3_2_1.eprime
new file mode 100644
index 0000000000..5b1aff728e
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_2_1.eprime
@@ -0,0 +1,77 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q54] /\ x_ExplicitVarSizeWithFlags_Values[q54] = 1 | q54 : int(1..4)]),
+ or([q56 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q56] = 2 | q56 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q58] != 5 /\ x_ExplicitVarSizeWithDummy[q58] = 3 | q58 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)]),
+ sum([toInt(x_Occurrence[q37]) | q37 : int(1..4)]) <= 4,
+ and([x_Occurrence[q38] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = q38 | q40 : int(1..4)])
+ | q38 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q42] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q42]]
+ | q42 : int(1..4)]),
+ and([x_Occurrence[q43] ->
+ or([q45 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q45] = q43
+ | q45 : int(1..4)])
+ | q43 : int(1..4)]),
+ and([q47 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q47]]
+ | q47 : int(1..4)]),
+ and([x_Occurrence[q48] ->
+ or([x_ExplicitVarSizeWithDummy[q50] != 5 /\ x_ExplicitVarSizeWithDummy[q50] = q48 | q50 : int(1..4)])
+ | q48 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q52] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q52]] | q52 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_2_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_3_2_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_2_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_3_2_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_2_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_3_2_2.eprime
new file mode 100644
index 0000000000..76550b1cd1
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_2_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = 1 | q38 : int(1..4)]),
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q42] != 5 /\ x_ExplicitVarSizeWithDummy[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_3_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_3_3_1.eprime
new file mode 100644
index 0000000000..9a58f97a9b
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_3_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 1 | q29 : int(1..4)]),
+ or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = 2 | q31 : int(1..4)]),
+ or([q33 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q33] = 3 | q33 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..4)]) <= 4,
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q22]]
+ | q22 : int(1..4)]),
+ and([x_Occurrence[q23] ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_3_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_3_3_2.eprime
new file mode 100644
index 0000000000..f359e7ac0b
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_3_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = 1 | q38 : int(1..4)]),
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = 2 | q40 : int(1..4)]),
+ or([q42 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_3_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_3_3_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_3_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_3_3_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_3_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_3_3.eprime b/tests/exhaustive/basic/set06/expected/model_4_3_3_3.eprime
new file mode 100644
index 0000000000..aac2bf1a2e
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_3_3.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = 1 | q18 : int(1..4)]),
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..4)]),
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = 3 | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_3_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_3_4_1.eprime
new file mode 100644
index 0000000000..42f3b460a6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_4_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 1 | q29 : int(1..4)]),
+ or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = 2 | q31 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q33] /\ x_ExplicitVarSizeWithFlags_Values[q33] = 3 | q33 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..4)]) <= 4,
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q22]]
+ | q22 : int(1..4)]),
+ and([x_Occurrence[q23] ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_3_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_3_4_2.eprime
new file mode 100644
index 0000000000..215f736030
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_4_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = 1 | q38 : int(1..4)]),
+ or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q42] /\ x_ExplicitVarSizeWithFlags_Values[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_4_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_3_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_4_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_3_4_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_3_4_3.eprime b/tests/exhaustive/basic/set06/expected/model_4_3_4_3.eprime
new file mode 100644
index 0000000000..f84e5ef823
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_3_4_3.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = 1 | q18 : int(1..4)]),
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = 3 | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_1_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_1_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_1_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_1_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_1_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_1_1.eprime
new file mode 100644
index 0000000000..89df5f9b59
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_1_1.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 1 | q13 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\ x_ExplicitVarSizeWithFlags_Values[q15] = 2 | q15 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_1_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_1_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_1_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_1_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_1_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_1_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_1_2.eprime
new file mode 100644
index 0000000000..fb935649b7
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_1_2.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 2 | q32 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 5
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 5 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 5 | q8 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 5) | q9 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q12] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
+ x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q20]] | q20 : int(1..4)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithDummy[q23] != 5 /\ x_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_1_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_1_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_1_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_1_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_1_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_1_3.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_1_3.eprime
new file mode 100644
index 0000000000..188765c81e
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_1_3.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 1 | q29 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 2 | q31 : int(1..4)]),
+ x_Occurrence[3],
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 1 | q8 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q19]]
+ | q19 : int(1..4)]),
+ and([x_Occurrence[q20] ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_2_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_2_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_2_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_2_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_2_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_2_1.eprime
new file mode 100644
index 0000000000..5efd46fc5d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_2_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = 1 | q30 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = 2 | q32 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q34] != 5 /\ x_ExplicitVarSizeWithDummy[q34] = 3 | q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ sum([toInt(x_Occurrence[q18]) | q18 : int(1..4)]) <= 4,
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q23]]
+ | q23 : int(1..4)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q28] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_2_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_2_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_2_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_2_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_2_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_2_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_2_2.eprime
new file mode 100644
index 0000000000..0fa0747d3f
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_2_2.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = 2 | q21 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q23] != 5 /\ x_ExplicitVarSizeWithDummy[q23] = 3 | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_2_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_2_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_2_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_2_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_2_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_2_3.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_2_3.eprime
new file mode 100644
index 0000000000..4fe9b7fb6a
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_2_3.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = 2 | q40 : int(1..4)]),
+ or([x_ExplicitVarSizeWithDummy[q42] != 5 /\ x_ExplicitVarSizeWithDummy[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_3_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_3_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_3_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_3_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_3_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_3_1.eprime
new file mode 100644
index 0000000000..9eb1652af5
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_3_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = 1 | q29 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = 2 | q31 : int(1..4)]),
+ or([q33 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q33] = 3 | q33 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ sum([toInt(x_Occurrence[q17]) | q17 : int(1..4)]) <= 4,
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q22]]
+ | q22 : int(1..4)]),
+ and([x_Occurrence[q23] ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_3_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_3_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_3_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_3_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_3_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_3_2.eprime
new file mode 100644
index 0000000000..bf7ce16ba1
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_3_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = 1 | q38 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = 2 | q40 : int(1..4)]),
+ or([q42 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q42] = 3 | q42 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q19] != 5) | q19 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_3_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_3_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_3_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_3_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_3_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_3_3.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_3_3.eprime
new file mode 100644
index 0000000000..7c1be4c4b9
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_3_3.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = 1 | q18 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = 2 | q20 : int(1..4)]),
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = 3 | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_4_1-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_4_1-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_4_1-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_4_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_4_1.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_4_1.eprime
new file mode 100644
index 0000000000..5ce826b766
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_4_1.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = 1 | q13 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\ x_ExplicitVarSizeWithFlags_Values[q15] = 2 | q15 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\ x_ExplicitVarSizeWithFlags_Values[q17] = 3 | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ sum([toInt(x_Occurrence[q6]) | q6 : int(1..4)]) <= 4,
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_4_2-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_4_2-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_4_2-solution000002.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_4_2-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_4_2.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_4_2.eprime
new file mode 100644
index 0000000000..c25dce1965
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_4_2.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = 1 | q19 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = 2 | q21 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = 3 | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 5) | q8 : int(1..4)]) <= 4,
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_4_3-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_4_3-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_4_3-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_4_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_4_3.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_4_3.eprime
new file mode 100644
index 0000000000..b5daed7250
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_4_3.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = 1 | q18 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = 2 | q20 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = 3 | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4,
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ x_ExplicitVarSizeWithMarker_Marker <= 4,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_4_4-solution000001.solution b/tests/exhaustive/basic/set06/expected/model_4_4_4_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_4_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_4_4-solution000002.solution b/tests/exhaustive/basic/set06/expected/model_4_4_4_4-solution000002.solution
new file mode 100644
index 0000000000..85149821f6
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_4_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3, 4}
diff --git a/tests/exhaustive/basic/set06/expected/model_4_4_4_4.eprime b/tests/exhaustive/basic/set06/expected/model_4_4_4_4.eprime
new file mode 100644
index 0000000000..9cb0f0f85d
--- /dev/null
+++ b/tests/exhaustive/basic/set06/expected/model_4_4_4_4.eprime
@@ -0,0 +1,16 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ or([x_ExplicitVarSizeWithFlags_Flags[q7] /\ x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = 3 | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]) <= 4
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_1_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_1_1.eprime b/tests/exhaustive/basic/set07/expected/model_1_1_1.eprime
new file mode 100644
index 0000000000..1c2a0f3332
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_1_1.eprime
@@ -0,0 +1,6 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence]
+such that and([x_Occurrence[q2_1] /\ !x_Occurrence[q2_2] | q2_1 : int(1..3), q2_2 : int(4..9)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_1_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_1_2.eprime b/tests/exhaustive/basic/set07/expected/model_1_1_2.eprime
new file mode 100644
index 0000000000..db14667a95
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_1_2.eprime
@@ -0,0 +1,15 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ and([x_Occurrence[q11_1] /\ !x_Occurrence[q11_2] | q11_1 : int(1..3), q11_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_1_3-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_1_3.eprime b/tests/exhaustive/basic/set07/expected/model_1_1_3.eprime
new file mode 100644
index 0000000000..c710eaa6a1
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_1_3.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ and([x_Occurrence[q10_1] /\ !x_Occurrence[q10_2] | q10_1 : int(1..3), q10_2 : int(4..9)]),
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_1_4-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_1_4.eprime b/tests/exhaustive/basic/set07/expected/model_1_1_4.eprime
new file mode 100644
index 0000000000..71e8baf956
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_1_4.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ and([x_Occurrence[q12_1] /\ !x_Occurrence[q12_2] | q12_1 : int(1..3), q12_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_2_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_2_1.eprime b/tests/exhaustive/basic/set07/expected/model_1_2_1.eprime
new file mode 100644
index 0000000000..43b3a76c2e
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_2_1.eprime
@@ -0,0 +1,17 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ and([x_Occurrence[q13_1] /\
+ !or([x_ExplicitVarSizeWithDummy[q12] != 5 /\ x_ExplicitVarSizeWithDummy[q12] = q13_2 | q12 : int(1..4)])
+ | q13_1 : int(1..3), q13_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_2_3-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_2_3.eprime b/tests/exhaustive/basic/set07/expected/model_1_2_3.eprime
new file mode 100644
index 0000000000..2a83287908
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_2_3.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[q29_1] /\
+ !or([x_ExplicitVarSizeWithDummy[q28] != 5 /\ x_ExplicitVarSizeWithDummy[q28] = q29_2 | q28 : int(1..4)])
+ | q29_1 : int(1..3), q29_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 1 | q12 : int(1..4)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q15]]
+ | q15 : int(1..4)]),
+ and([x_Occurrence[q16] ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q22] != 5 /\
+ x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q24] != 5 ->
+ or([q26 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q26] = x_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_2_4-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_2_4.eprime b/tests/exhaustive/basic/set07/expected/model_1_2_4.eprime
new file mode 100644
index 0000000000..4700b607d4
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_2_4.eprime
@@ -0,0 +1,41 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[q31_1] /\
+ !or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = q31_2 | q30 : int(1..4)])
+ | q31_1 : int(1..3), q31_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q2] < x_ExplicitVarSizeWithDummy[q2 + 1] \/ x_ExplicitVarSizeWithDummy[q2] = 5
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q3] = 5 -> x_ExplicitVarSizeWithDummy[q3 + 1] = 5 | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q7]] | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithDummy[q10] != 5 /\ x_ExplicitVarSizeWithDummy[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q11] < x_ExplicitVarSizeWithFlags_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] = false -> x_ExplicitVarSizeWithFlags_Values[q12] = 1
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q17]]
+ | q17 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_3_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_3_1.eprime b/tests/exhaustive/basic/set07/expected/model_1_3_1.eprime
new file mode 100644
index 0000000000..6da06e040b
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_3_1.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ and([x_Occurrence[q12_1] /\
+ !or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = q12_2
+ | q11 : int(1..4)])
+ | q12_1 : int(1..3), q12_2 : int(4..9)]),
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_3_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_3_2.eprime b/tests/exhaustive/basic/set07/expected/model_1_3_2.eprime
new file mode 100644
index 0000000000..f8fefa8170
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_3_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[q29_1] /\
+ !or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = q29_2
+ | q28 : int(1..4)])
+ | q29_1 : int(1..3), q29_2 : int(4..9)]),
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 5
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] = 5 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 5 | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..4)]),
+ and([x_Occurrence[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\ x_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q24 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\
+ x_ExplicitVarSizeWithDummy[q26] = x_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_3_4-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_3_4.eprime b/tests/exhaustive/basic/set07/expected/model_1_3_4.eprime
new file mode 100644
index 0000000000..744a29abf7
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_3_4.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[q30_1] /\
+ !or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = q30_2
+ | q29 : int(1..4)])
+ | q30_1 : int(1..3), q30_2 : int(4..9)]),
+ and([q2 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q2] < x_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q3] = 1 | q3 : int(1..4)]),
+ and([q6 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q6]]
+ | q6 : int(1..4)]),
+ and([x_Occurrence[q7] ->
+ or([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 1
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..4)]),
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q23] = x_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q27] /\
+ x_ExplicitVarSizeWithFlags_Values[q27] = x_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_4_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_4_1.eprime b/tests/exhaustive/basic/set07/expected/model_1_4_1.eprime
new file mode 100644
index 0000000000..38303ddfee
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_4_1.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ and([x_Occurrence[q14_1] /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = q14_2
+ | q13 : int(1..4)])
+ | q14_1 : int(1..3), q14_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_4_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_4_2.eprime b/tests/exhaustive/basic/set07/expected/model_1_4_2.eprime
new file mode 100644
index 0000000000..e9a9b228b7
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_4_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[q31_1] /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = q31_2
+ | q30 : int(1..4)])
+ | q31_1 : int(1..3), q31_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] < x_ExplicitVarSizeWithDummy[q12 + 1] \/ x_ExplicitVarSizeWithDummy[q12] = 5
+ | q12 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q13] = 5 -> x_ExplicitVarSizeWithDummy[q13 + 1] = 5 | q13 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q17] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q17]] | q17 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 5 /\ x_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_1_4_3-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_1_4_3.eprime b/tests/exhaustive/basic/set07/expected/model_1_4_3.eprime
new file mode 100644
index 0000000000..7b8fce9b8d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_1_4_3.eprime
@@ -0,0 +1,45 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[q30_1] /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = q30_2
+ | q29 : int(1..4)])
+ | q30_1 : int(1..3), q30_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q2] < x_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3] = false -> x_ExplicitVarSizeWithFlags_Values[q3] = 1 | q3 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q11] /\ x_ExplicitVarSizeWithFlags_Values[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q12 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q12] < x_ExplicitVarSizeWithMarker_Values[q12 + 1]
+ | q12 : int(1..3)]),
+ and([q13 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q13] = 1 | q13 : int(1..4)]),
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q16]]
+ | q16 : int(1..4)]),
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\
+ x_ExplicitVarSizeWithFlags_Values[q23] = x_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q27] = x_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_1_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_1_1.eprime b/tests/exhaustive/basic/set07/expected/model_2_1_1.eprime
new file mode 100644
index 0000000000..9157723de1
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_1_1.eprime
@@ -0,0 +1,17 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q7] != 5 /\ x_ExplicitVarSizeWithDummy[q7] = q8_1 | q7 : int(1..4)]) /\
+ !x_Occurrence[q8_2]
+ | q8_1 : int(1..3), q8_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\ x_ExplicitVarSizeWithDummy[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q13]] | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_1_3-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_1_3.eprime b/tests/exhaustive/basic/set07/expected/model_2_1_3.eprime
new file mode 100644
index 0000000000..71931d01a0
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_1_3.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q23] != 5 /\ x_ExplicitVarSizeWithDummy[q23] = q24_1 | q23 : int(1..4)]) /\
+ !x_Occurrence[q24_2]
+ | q24_1 : int(1..3), q24_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([x_Occurrence[q25] ->
+ or([x_ExplicitVarSizeWithDummy[q27] != 5 /\ x_ExplicitVarSizeWithDummy[q27] = q25 | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q29] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q29]] | q29 : int(1..4)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 5 /\
+ x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 5 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q18]]
+ | q18 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q21] = q19
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_1_4-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_1_4.eprime b/tests/exhaustive/basic/set07/expected/model_2_1_4.eprime
new file mode 100644
index 0000000000..1b82376576
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_1_4.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, x_Occurrence]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q25] != 5 /\ x_ExplicitVarSizeWithDummy[q25] = q26_1 | q25 : int(1..4)]) /\
+ !x_Occurrence[q26_2]
+ | q26_1 : int(1..3), q26_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([x_Occurrence[q27] ->
+ or([x_ExplicitVarSizeWithDummy[q29] != 5 /\ x_ExplicitVarSizeWithDummy[q29] = q27 | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q31] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q31]] | q31 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 1 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 5 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q20]]
+ | q20 : int(1..4)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q23] /\ x_ExplicitVarSizeWithFlags_Values[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_2_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_2_1.eprime b/tests/exhaustive/basic/set07/expected/model_2_2_1.eprime
new file mode 100644
index 0000000000..f490f980a2
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_2_1.eprime
@@ -0,0 +1,17 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q7] != 5 /\ x_ExplicitVarSizeWithDummy[q7] = q10_1 | q7 : int(1..4)]) /\
+ !or([x_ExplicitVarSizeWithDummy[q9] != 5 /\ x_ExplicitVarSizeWithDummy[q9] = q10_2 | q9 : int(1..4)])
+ | q10_1 : int(1..3), q10_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([x_Occurrence[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\ x_ExplicitVarSizeWithDummy[q13] = q11 | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_2_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_2_2.eprime b/tests/exhaustive/basic/set07/expected/model_2_2_2.eprime
new file mode 100644
index 0000000000..ccc364f0fe
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_2_2.eprime
@@ -0,0 +1,12 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q6] != 5 /\ x_ExplicitVarSizeWithDummy[q6] = q9_1 | q6 : int(1..4)]) /\
+ !or([x_ExplicitVarSizeWithDummy[q8] != 5 /\ x_ExplicitVarSizeWithDummy[q8] = q9_2 | q8 : int(1..4)])
+ | q9_1 : int(1..3), q9_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_2_3-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_2_3.eprime b/tests/exhaustive/basic/set07/expected/model_2_2_3.eprime
new file mode 100644
index 0000000000..c1bc8f0602
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_2_3.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q17] != 5 /\ x_ExplicitVarSizeWithDummy[q17] = q20_1 | q17 : int(1..4)]) /\
+ !or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = q20_2 | q19 : int(1..4)])
+ | q20_1 : int(1..3), q20_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_2_4-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_2_4.eprime b/tests/exhaustive/basic/set07/expected/model_2_2_4.eprime
new file mode 100644
index 0000000000..128577ea84
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_2_4.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = q22_1 | q19 : int(1..4)]) /\
+ !or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q22_2 | q21 : int(1..4)])
+ | q22_1 : int(1..3), q22_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_3_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_3_1.eprime b/tests/exhaustive/basic/set07/expected/model_2_3_1.eprime
new file mode 100644
index 0000000000..bb5d893672
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_3_1.eprime
@@ -0,0 +1,41 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q18] != 5 /\ x_ExplicitVarSizeWithDummy[q18] = q21_1 | q18 : int(1..4)]) /\
+ !or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = q21_2
+ | q20 : int(1..4)])
+ | q21_1 : int(1..3), q21_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)]),
+ and([x_Occurrence[q27] ->
+ or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = q27
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([q31 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q31]]
+ | q31 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_3_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_3_2.eprime b/tests/exhaustive/basic/set07/expected/model_2_3_2.eprime
new file mode 100644
index 0000000000..9623bc7a26
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_3_2.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q17] != 5 /\ x_ExplicitVarSizeWithDummy[q17] = q20_1 | q17 : int(1..4)]) /\
+ !or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q20_2
+ | q19 : int(1..4)])
+ | q20_1 : int(1..3), q20_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_3_4-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_3_4.eprime b/tests/exhaustive/basic/set07/expected/model_2_3_4.eprime
new file mode 100644
index 0000000000..5172fad9a2
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_3_4.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q38] != 5 /\ x_ExplicitVarSizeWithDummy[q38] = q41_1 | q38 : int(1..4)]) /\
+ !or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = q41_2
+ | q40 : int(1..4)])
+ | q41_1 : int(1..3), q41_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 1 | q6 : int(1..4)]),
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 5 /\
+ x_ExplicitVarSizeWithDummy[q11] = x_ExplicitVarSizeWithMarker_Values[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 5 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_4_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_4_1.eprime b/tests/exhaustive/basic/set07/expected/model_2_4_1.eprime
new file mode 100644
index 0000000000..d96379070f
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_4_1.eprime
@@ -0,0 +1,41 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q30] != 5 /\ x_ExplicitVarSizeWithDummy[q30] = q33_1 | q30 : int(1..4)]) /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q32] /\ x_ExplicitVarSizeWithFlags_Values[q32] = q33_2
+ | q32 : int(1..4)])
+ | q33_1 : int(1..3), q33_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q23] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q23]] | q23 : int(1..4)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_4_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_4_2.eprime b/tests/exhaustive/basic/set07/expected/model_2_4_2.eprime
new file mode 100644
index 0000000000..82fca6cda7
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_4_2.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = q22_1 | q19 : int(1..4)]) /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = q22_2
+ | q21 : int(1..4)])
+ | q22_1 : int(1..3), q22_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_2_4_3-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_2_4_3.eprime b/tests/exhaustive/basic/set07/expected/model_2_4_3.eprime
new file mode 100644
index 0000000000..d9bc3fdee6
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_2_4_3.eprime
@@ -0,0 +1,58 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([or([x_ExplicitVarSizeWithDummy[q38] != 5 /\ x_ExplicitVarSizeWithDummy[q38] = q41_1 | q38 : int(1..4)]) /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = q41_2
+ | q40 : int(1..4)])
+ | q41_1 : int(1..3), q41_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 5
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 5 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 5 | q2 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 5 /\
+ x_ExplicitVarSizeWithDummy[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 5 /\
+ x_ExplicitVarSizeWithDummy[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 5 ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_1_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_1_1.eprime b/tests/exhaustive/basic/set07/expected/model_3_1_1.eprime
new file mode 100644
index 0000000000..a9299de8e5
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_1_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([or([q6 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q6] = q7_1
+ | q6 : int(1..4)])
+ /\ !x_Occurrence[q7_2]
+ | q7_1 : int(1..3), q7_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([q10 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q10] = q8
+ | q10 : int(1..4)])
+ | q8 : int(1..4)]),
+ and([q12 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q12]]
+ | q12 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_1_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_1_2.eprime b/tests/exhaustive/basic/set07/expected/model_3_1_2.eprime
new file mode 100644
index 0000000000..8897452e59
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_1_2.eprime
@@ -0,0 +1,41 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ and([or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q23] = q24_1
+ | q23 : int(1..4)])
+ /\ !x_Occurrence[q24_2]
+ | q24_1 : int(1..3), q24_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_Occurrence[q25] ->
+ or([q27 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q27] = q25
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([q29 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q29]]
+ | q29 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 5
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 5 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 5 | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 5 ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 5 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q18]] | q18 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_1_4-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_1_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_1_4.eprime b/tests/exhaustive/basic/set07/expected/model_3_1_4.eprime
new file mode 100644
index 0000000000..e3716d35cd
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_1_4.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_Occurrence]
+such that
+ and([or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q25_1
+ | q24 : int(1..4)])
+ /\ !x_Occurrence[q25_2]
+ | q25_1 : int(1..3), q25_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_Occurrence[q26] ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q28] = q26
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q30]]
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 1 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q19]]
+ | q19 : int(1..4)]),
+ and([x_Occurrence[q20] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = q20 | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_2_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_2_1.eprime b/tests/exhaustive/basic/set07/expected/model_3_2_1.eprime
new file mode 100644
index 0000000000..a4f4f9d9e3
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_2_1.eprime
@@ -0,0 +1,41 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q21_1
+ | q18 : int(1..4)])
+ /\ !or([x_ExplicitVarSizeWithDummy[q20] != 5 /\ x_ExplicitVarSizeWithDummy[q20] = q21_2 | q20 : int(1..4)])
+ | q21_1 : int(1..3), q21_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)]),
+ and([x_Occurrence[q27] ->
+ or([x_ExplicitVarSizeWithDummy[q29] != 5 /\ x_ExplicitVarSizeWithDummy[q29] = q27 | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q31] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q31]] | q31 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_2_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_2_2.eprime b/tests/exhaustive/basic/set07/expected/model_3_2_2.eprime
new file mode 100644
index 0000000000..a7e9b28aa7
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_2_2.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = q20_1
+ | q17 : int(1..4)])
+ /\ !or([x_ExplicitVarSizeWithDummy[q19] != 5 /\ x_ExplicitVarSizeWithDummy[q19] = q20_2 | q19 : int(1..4)])
+ | q20_1 : int(1..3), q20_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_2_4-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_2_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_2_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_2_4.eprime b/tests/exhaustive/basic/set07/expected/model_3_2_4.eprime
new file mode 100644
index 0000000000..9ba2c2499e
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_2_4.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = q41_1
+ | q38 : int(1..4)])
+ /\ !or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = q41_2 | q40 : int(1..4)])
+ | q41_1 : int(1..3), q41_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q16] < x_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] = false -> x_ExplicitVarSizeWithFlags_Values[q17] = 1
+ | q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q28] /\
+ x_ExplicitVarSizeWithFlags_Values[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q36] /\
+ x_ExplicitVarSizeWithFlags_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_3_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_3_1.eprime b/tests/exhaustive/basic/set07/expected/model_3_3_1.eprime
new file mode 100644
index 0000000000..f69ec68546
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_3_1.eprime
@@ -0,0 +1,24 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([or([q6 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q6] = q9_1
+ | q6 : int(1..4)])
+ /\
+ !or([q8 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q8] = q9_2
+ | q8 : int(1..4)])
+ | q9_1 : int(1..3), q9_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_Occurrence[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q12] = q10
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q14]]
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_3_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_3_2.eprime b/tests/exhaustive/basic/set07/expected/model_3_3_2.eprime
new file mode 100644
index 0000000000..adc45bc4e1
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_3_2.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = q20_1
+ | q17 : int(1..4)])
+ /\
+ !or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q20_2
+ | q19 : int(1..4)])
+ | q20_1 : int(1..3), q20_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q4] < x_ExplicitVarSizeWithDummy[q4 + 1] \/ x_ExplicitVarSizeWithDummy[q4] = 5
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q5] = 5 -> x_ExplicitVarSizeWithDummy[q5 + 1] = 5 | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q9] != 5 ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q11] = x_ExplicitVarSizeWithDummy[q9]
+ | q11 : int(1..4)])
+ | q9 : int(1..4)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 5 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_3_3-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_3_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_3_3.eprime b/tests/exhaustive/basic/set07/expected/model_3_3_3.eprime
new file mode 100644
index 0000000000..fbcbcb55a2
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_3_3.eprime
@@ -0,0 +1,17 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([or([q5 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q5] = q8_1
+ | q5 : int(1..4)])
+ /\
+ !or([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q7] = q8_2
+ | q7 : int(1..4)])
+ | q8_1 : int(1..3), q8_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_3_4-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_3_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_3_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_3_4.eprime b/tests/exhaustive/basic/set07/expected/model_3_3_4.eprime
new file mode 100644
index 0000000000..50a1db36c3
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_3_4.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q21_1
+ | q18 : int(1..4)])
+ /\
+ !or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = q21_2
+ | q20 : int(1..4)])
+ | q21_1 : int(1..3), q21_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_4_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_4_1.eprime b/tests/exhaustive/basic/set07/expected/model_3_4_1.eprime
new file mode 100644
index 0000000000..61e664ad10
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_4_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([or([q29 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q29] = q32_1
+ | q29 : int(1..4)])
+ /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q31] /\ x_ExplicitVarSizeWithFlags_Values[q31] = q32_2
+ | q31 : int(1..4)])
+ | q32_1 : int(1..3), q32_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = q18
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q22]]
+ | q22 : int(1..4)]),
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_4_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_4_2.eprime b/tests/exhaustive/basic/set07/expected/model_3_4_2.eprime
new file mode 100644
index 0000000000..b565f5f402
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_4_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([or([q38 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q38] = q41_1
+ | q38 : int(1..4)])
+ /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q40] /\ x_ExplicitVarSizeWithFlags_Values[q40] = q41_2
+ | q40 : int(1..4)])
+ | q41_1 : int(1..3), q41_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q32] /\
+ x_ExplicitVarSizeWithFlags_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithFlags_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_3_4_3-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_3_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_3_4_3.eprime b/tests/exhaustive/basic/set07/expected/model_3_4_3.eprime
new file mode 100644
index 0000000000..d801442667
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_3_4_3.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q21_1
+ | q18 : int(1..4)])
+ /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q21_2
+ | q20 : int(1..4)])
+ | q21_1 : int(1..3), q21_2 : int(4..9)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q4] < x_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5] = false -> x_ExplicitVarSizeWithFlags_Values[q5] = 1 | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithFlags_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_1_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_1_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_1_1.eprime b/tests/exhaustive/basic/set07/expected/model_4_1_1.eprime
new file mode 100644
index 0000000000..981837a4f9
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_1_1.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = q14_1 | q13 : int(1..4)])
+ /\ !x_Occurrence[q14_2]
+ | q14_1 : int(1..3), q14_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_1_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_1_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_1_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_1_2.eprime b/tests/exhaustive/basic/set07/expected/model_4_1_2.eprime
new file mode 100644
index 0000000000..3c2a07f559
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_1_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = q31_1 | q30 : int(1..4)])
+ /\ !x_Occurrence[q31_2]
+ | q31_1 : int(1..3), q31_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 5
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 5 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 5 | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
+ x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 5 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q20]] | q20 : int(1..4)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithDummy[q23] != 5 /\ x_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_1_3-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_1_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_1_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_1_3.eprime b/tests/exhaustive/basic/set07/expected/model_4_1_3.eprime
new file mode 100644
index 0000000000..00c2bc51f1
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_1_3.eprime
@@ -0,0 +1,45 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_Occurrence]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = q30_1 | q29 : int(1..4)])
+ /\ !x_Occurrence[q30_2]
+ | q30_1 : int(1..3), q30_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 1 | q8 : int(1..4)]),
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q19]]
+ | q19 : int(1..4)]),
+ and([x_Occurrence[q20] ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_2_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_2_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_2_1.eprime b/tests/exhaustive/basic/set07/expected/model_4_2_1.eprime
new file mode 100644
index 0000000000..c197a46407
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_2_1.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q30] /\ x_ExplicitVarSizeWithFlags_Values[q30] = q33_1 | q30 : int(1..4)])
+ /\ !or([x_ExplicitVarSizeWithDummy[q32] != 5 /\ x_ExplicitVarSizeWithDummy[q32] = q33_2 | q32 : int(1..4)])
+ | q33_1 : int(1..3), q33_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q23]]
+ | q23 : int(1..4)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithDummy[q26] != 5 /\ x_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q28] != 5 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q28]] | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_2_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_2_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_2_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_2_2.eprime b/tests/exhaustive/basic/set07/expected/model_4_2_2.eprime
new file mode 100644
index 0000000000..8c36b6b158
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_2_2.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = q22_1 | q19 : int(1..4)])
+ /\ !or([x_ExplicitVarSizeWithDummy[q21] != 5 /\ x_ExplicitVarSizeWithDummy[q21] = q22_2 | q21 : int(1..4)])
+ | q22_1 : int(1..3), q22_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_2_3-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_2_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_2_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_2_3.eprime b/tests/exhaustive/basic/set07/expected/model_4_2_3.eprime
new file mode 100644
index 0000000000..99e67ea897
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_2_3.eprime
@@ -0,0 +1,57 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = q41_1 | q38 : int(1..4)])
+ /\ !or([x_ExplicitVarSizeWithDummy[q40] != 5 /\ x_ExplicitVarSizeWithDummy[q40] = q41_2 | q40 : int(1..4)])
+ | q41_1 : int(1..3), q41_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q18] < x_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q19] = 1 | q19 : int(1..4)]),
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([q28 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q32] != 5 /\
+ x_ExplicitVarSizeWithDummy[q32] = x_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q34] != 5 ->
+ or([q36 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q36] = x_ExplicitVarSizeWithDummy[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_3_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_3_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_3_1.eprime b/tests/exhaustive/basic/set07/expected/model_4_3_1.eprime
new file mode 100644
index 0000000000..f8b5b0c4f9
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_3_1.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q29] /\ x_ExplicitVarSizeWithFlags_Values[q29] = q32_1 | q29 : int(1..4)])
+ /\
+ !or([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q31] = q32_2
+ | q31 : int(1..4)])
+ | q32_1 : int(1..3), q32_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q22]]
+ | q22 : int(1..4)]),
+ and([x_Occurrence[q23] ->
+ or([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..4)])
+ | q23 : int(1..4)]),
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_3_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_3_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_3_2.eprime b/tests/exhaustive/basic/set07/expected/model_4_3_2.eprime
new file mode 100644
index 0000000000..7b940b4c6d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_3_2.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q38] /\ x_ExplicitVarSizeWithFlags_Values[q38] = q41_1 | q38 : int(1..4)])
+ /\
+ !or([q40 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q40] = q41_2
+ | q40 : int(1..4)])
+ | q41_1 : int(1..3), q41_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] < x_ExplicitVarSizeWithDummy[q17 + 1] \/ x_ExplicitVarSizeWithDummy[q17] = 5
+ | q17 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q18] = 5 -> x_ExplicitVarSizeWithDummy[q18 + 1] = 5 | q18 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q22] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\
+ x_ExplicitVarSizeWithFlags_Values[q24] = x_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([x_ExplicitVarSizeWithDummy[q28] != 5 /\
+ x_ExplicitVarSizeWithDummy[q28] = x_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q30] != 5 ->
+ or([q32 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q32] = x_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)]),
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q36] != 5 /\
+ x_ExplicitVarSizeWithDummy[q36] = x_ExplicitVarSizeWithMarker_Values[q34]
+ | q36 : int(1..4)])
+ | q34 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_3_3-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_3_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_3_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_3_3.eprime b/tests/exhaustive/basic/set07/expected/model_4_3_3.eprime
new file mode 100644
index 0000000000..430b2929c9
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_3_3.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = q21_1 | q18 : int(1..4)])
+ /\
+ !or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = q21_2
+ | q20 : int(1..4)])
+ | q21_1 : int(1..3), q21_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_4_1-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_4_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_4_1.eprime b/tests/exhaustive/basic/set07/expected/model_4_4_1.eprime
new file mode 100644
index 0000000000..c330baaa50
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_4_1.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_Occurrence: matrix indexed by [int(1..4)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = q16_1 | q13 : int(1..4)])
+ /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q15] /\ x_ExplicitVarSizeWithFlags_Values[q15] = q16_2
+ | q15 : int(1..4)])
+ | q16_1 : int(1..3), q16_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_4_2-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_4_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_4_2.eprime b/tests/exhaustive/basic/set07/expected/model_4_4_2.eprime
new file mode 100644
index 0000000000..73b079af26
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_4_2.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(1..5)
+branching on [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = q22_1 | q19 : int(1..4)])
+ /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = q22_2
+ | q21 : int(1..4)])
+ | q22_1 : int(1..3), q22_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 5
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 5 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 5 | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] != 5 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithDummy[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 5 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_4_3-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_4_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_4_3.eprime b/tests/exhaustive/basic/set07/expected/model_4_4_3.eprime
new file mode 100644
index 0000000000..e83bd430d2
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_4_3.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = q21_1 | q18 : int(1..4)])
+ /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q21_2
+ | q20 : int(1..4)])
+ | q21_1 : int(1..3), q21_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 1 | q7 : int(1..4)]),
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ x_ExplicitVarSizeWithFlags_Values[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set07/expected/model_4_4_4-solution000001.solution b/tests/exhaustive/basic/set07/expected/model_4_4_4-solution000001.solution
new file mode 100644
index 0000000000..f909cc486d
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_4_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {1, 2, 3}
diff --git a/tests/exhaustive/basic/set07/expected/model_4_4_4.eprime b/tests/exhaustive/basic/set07/expected/model_4_4_4.eprime
new file mode 100644
index 0000000000..c0bc6dbb9a
--- /dev/null
+++ b/tests/exhaustive/basic/set07/expected/model_4_4_4.eprime
@@ -0,0 +1,15 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(1..4)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values]
+such that
+ and([or([x_ExplicitVarSizeWithFlags_Flags[q7] /\ x_ExplicitVarSizeWithFlags_Values[q7] = q10_1 | q7 : int(1..4)]) /\
+ !or([x_ExplicitVarSizeWithFlags_Flags[q9] /\ x_ExplicitVarSizeWithFlags_Values[q9] = q10_2 | q9 : int(1..4)])
+ | q10_1 : int(1..3), q10_2 : int(4..9)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 1 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/set08/expected/model_1_1-solution000001.solution b/tests/exhaustive/basic/set08/expected/model_1_1-solution000001.solution
new file mode 100644
index 0000000000..cb83c94151
--- /dev/null
+++ b/tests/exhaustive/basic/set08/expected/model_1_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {(3, 3), (4, 4)}
+$ Visualisation for x
+$ 3 3
+$ 4 4
+
diff --git a/tests/exhaustive/basic/set08/expected/model_1_1.eprime b/tests/exhaustive/basic/set08/expected/model_1_1.eprime
new file mode 100644
index 0000000000..95a52bf5c1
--- /dev/null
+++ b/tests/exhaustive/basic/set08/expected/model_1_1.eprime
@@ -0,0 +1,25 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..16)
+find x_ExplicitVarSizeWithMarker_Values_1: matrix indexed by [int(1..16)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..16)] of int(3..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values_1, x_ExplicitVarSizeWithMarker_Values_2]
+such that
+ and([q5 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values_1[q5] = x_ExplicitVarSizeWithMarker_Values_2[q5]
+ | q5 : int(1..16)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ flatten([[x_ExplicitVarSizeWithMarker_Values_1[q1]; int(1)],
+ [x_ExplicitVarSizeWithMarker_Values_2[q1]; int(1)];
+ int(1..2)])
+ x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values_1[q2] = 1 /\ x_ExplicitVarSizeWithMarker_Values_2[q2] = 3
+ | q2 : int(1..16)]),
+ 2 <= x_ExplicitVarSizeWithMarker_Marker
+
diff --git a/tests/exhaustive/basic/set08/expected/model_1_2-solution000001.solution b/tests/exhaustive/basic/set08/expected/model_1_2-solution000001.solution
new file mode 100644
index 0000000000..cb83c94151
--- /dev/null
+++ b/tests/exhaustive/basic/set08/expected/model_1_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {(3, 3), (4, 4)}
+$ Visualisation for x
+$ 3 3
+$ 4 4
+
diff --git a/tests/exhaustive/basic/set08/expected/model_1_2.eprime b/tests/exhaustive/basic/set08/expected/model_1_2.eprime
new file mode 100644
index 0000000000..659a99c583
--- /dev/null
+++ b/tests/exhaustive/basic/set08/expected/model_1_2.eprime
@@ -0,0 +1,54 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..16)
+find x_ExplicitVarSizeWithMarker_Values_1: matrix indexed by [int(1..16)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..16)] of int(3..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..16)] of bool
+find x_ExplicitVarSizeWithFlags_Values_1: matrix indexed by [int(1..16)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Values_2: matrix indexed by [int(1..16)] of int(3..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values_1, x_ExplicitVarSizeWithFlags_Values_2,
+ x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values_1, x_ExplicitVarSizeWithMarker_Values_2]
+such that
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values_1[q18] = x_ExplicitVarSizeWithMarker_Values_2[q18]
+ | q18 : int(1..16)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ flatten([[x_ExplicitVarSizeWithMarker_Values_1[q1]; int(1)],
+ [x_ExplicitVarSizeWithMarker_Values_2[q1]; int(1)];
+ int(1..2)])
+ x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values_1[q2] = 1 /\ x_ExplicitVarSizeWithMarker_Values_2[q2] = 3
+ | q2 : int(1..16)]),
+ 2 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ flatten([[x_ExplicitVarSizeWithFlags_Values_1[q4]; int(1)], [x_ExplicitVarSizeWithFlags_Values_2[q4]; int(1)];
+ int(1..2)])
+
+ x_ExplicitVarSizeWithFlags_Values_1[q5] = 1 /\ x_ExplicitVarSizeWithFlags_Values_2[q5] = 3
+ | q5 : int(1..16)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..15)]),
+ 2 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..16)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ (x_ExplicitVarSizeWithMarker_Values_1[q12] = x_ExplicitVarSizeWithFlags_Values_1[q10] /\
+ x_ExplicitVarSizeWithMarker_Values_2[q12] = x_ExplicitVarSizeWithFlags_Values_2[q10])
+ | q12 : int(1..16)])
+ | q10 : int(1..16)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ (x_ExplicitVarSizeWithFlags_Values_1[q16] = x_ExplicitVarSizeWithMarker_Values_1[q14] /\
+ x_ExplicitVarSizeWithFlags_Values_2[q16] = x_ExplicitVarSizeWithMarker_Values_2[q14])
+ | q16 : int(1..16)])
+ | q14 : int(1..16)])
+
diff --git a/tests/exhaustive/basic/set08/expected/model_2_1-solution000001.solution b/tests/exhaustive/basic/set08/expected/model_2_1-solution000001.solution
new file mode 100644
index 0000000000..cb83c94151
--- /dev/null
+++ b/tests/exhaustive/basic/set08/expected/model_2_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {(3, 3), (4, 4)}
+$ Visualisation for x
+$ 3 3
+$ 4 4
+
diff --git a/tests/exhaustive/basic/set08/expected/model_2_1.eprime b/tests/exhaustive/basic/set08/expected/model_2_1.eprime
new file mode 100644
index 0000000000..cb39a7bb11
--- /dev/null
+++ b/tests/exhaustive/basic/set08/expected/model_2_1.eprime
@@ -0,0 +1,54 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..16)] of bool
+find x_ExplicitVarSizeWithFlags_Values_1: matrix indexed by [int(1..16)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Values_2: matrix indexed by [int(1..16)] of int(3..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..16)
+find x_ExplicitVarSizeWithMarker_Values_1: matrix indexed by [int(1..16)] of int(1..4)
+find x_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..16)] of int(3..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values_1, x_ExplicitVarSizeWithMarker_Values_2,
+ x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values_1, x_ExplicitVarSizeWithFlags_Values_2]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] ->
+ x_ExplicitVarSizeWithFlags_Values_1[q18] = x_ExplicitVarSizeWithFlags_Values_2[q18]
+ | q18 : int(1..16)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ flatten([[x_ExplicitVarSizeWithFlags_Values_1[q1]; int(1)], [x_ExplicitVarSizeWithFlags_Values_2[q1]; int(1)];
+ int(1..2)])
+
+ x_ExplicitVarSizeWithFlags_Values_1[q2] = 1 /\ x_ExplicitVarSizeWithFlags_Values_2[q2] = 3
+ | q2 : int(1..16)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..15)]),
+ 2 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..16)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ flatten([[x_ExplicitVarSizeWithMarker_Values_1[q6]; int(1)],
+ [x_ExplicitVarSizeWithMarker_Values_2[q6]; int(1)];
+ int(1..2)])
+ x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values_1[q7] = 1 /\ x_ExplicitVarSizeWithMarker_Values_2[q7] = 3
+ | q7 : int(1..16)]),
+ 2 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\
+ (x_ExplicitVarSizeWithFlags_Values_1[q12] = x_ExplicitVarSizeWithMarker_Values_1[q10] /\
+ x_ExplicitVarSizeWithFlags_Values_2[q12] = x_ExplicitVarSizeWithMarker_Values_2[q10])
+ | q12 : int(1..16)])
+ | q10 : int(1..16)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ (x_ExplicitVarSizeWithMarker_Values_1[q16] = x_ExplicitVarSizeWithFlags_Values_1[q14] /\
+ x_ExplicitVarSizeWithMarker_Values_2[q16] = x_ExplicitVarSizeWithFlags_Values_2[q14])
+ | q16 : int(1..16)])
+ | q14 : int(1..16)])
+
diff --git a/tests/exhaustive/basic/set08/expected/model_2_2-solution000001.solution b/tests/exhaustive/basic/set08/expected/model_2_2-solution000001.solution
new file mode 100644
index 0000000000..cb83c94151
--- /dev/null
+++ b/tests/exhaustive/basic/set08/expected/model_2_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {(3, 3), (4, 4)}
+$ Visualisation for x
+$ 3 3
+$ 4 4
+
diff --git a/tests/exhaustive/basic/set08/expected/model_2_2.eprime b/tests/exhaustive/basic/set08/expected/model_2_2.eprime
new file mode 100644
index 0000000000..7cd4078178
--- /dev/null
+++ b/tests/exhaustive/basic/set08/expected/model_2_2.eprime
@@ -0,0 +1,25 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..16)] of bool
+find x_ExplicitVarSizeWithFlags_Values_1: matrix indexed by [int(1..16)] of int(1..4)
+find x_ExplicitVarSizeWithFlags_Values_2: matrix indexed by [int(1..16)] of int(3..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values_1, x_ExplicitVarSizeWithFlags_Values_2]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] ->
+ x_ExplicitVarSizeWithFlags_Values_1[q7] = x_ExplicitVarSizeWithFlags_Values_2[q7]
+ | q7 : int(1..16)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ flatten([[x_ExplicitVarSizeWithFlags_Values_1[q1]; int(1)], [x_ExplicitVarSizeWithFlags_Values_2[q1]; int(1)];
+ int(1..2)])
+
+ x_ExplicitVarSizeWithFlags_Values_1[q2] = 1 /\ x_ExplicitVarSizeWithFlags_Values_2[q2] = 3
+ | q2 : int(1..16)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..15)]),
+ 2 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..16)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_1_1.eprime
new file mode 100644
index 0000000000..0a40809bac
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_1_1.eprime
@@ -0,0 +1,10 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_Occurrence, y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_1_2.eprime
new file mode 100644
index 0000000000..3ef4eacc1f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_1_2.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on [x_Occurrence, y_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q3] < y_ExplicitVarSizeWithDummy[q3 + 1] \/ y_ExplicitVarSizeWithDummy[q3] = 6
+ | q3 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q4] = 6 -> y_ExplicitVarSizeWithDummy[q4 + 1] = 6 | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q5] != 6) | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q8] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q8]] | q8 : int(1..4)]),
+ and([y_Occurrence[q9] ->
+ or([y_ExplicitVarSizeWithDummy[q11] != 6 /\ y_ExplicitVarSizeWithDummy[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_1_3.eprime
new file mode 100644
index 0000000000..0079456c1a
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_1_3.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on [x_Occurrence, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([q3 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q3] < y_ExplicitVarSizeWithMarker_Values[q3 + 1]
+ | q3 : int(1..3)]),
+ and([q4 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q4] = 2 | q4 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q7 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q7]]
+ | q7 : int(1..4)]),
+ and([y_Occurrence[q8] ->
+ or([q10 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q10] = q8
+ | q10 : int(1..4)])
+ | q8 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_1_4.eprime
new file mode 100644
index 0000000000..ec2d788f13
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_1_4.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on [x_Occurrence, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q3] < y_ExplicitVarSizeWithFlags_Values[q3 + 1]
+ | q3 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4] = false -> y_ExplicitVarSizeWithFlags_Values[q4] = 2 | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q5] | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q6]) | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q9] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q9]] | q9 : int(1..4)]),
+ and([y_Occurrence[q10] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q12] /\ y_ExplicitVarSizeWithFlags_Values[q12] = q10 | q12 : int(1..4)])
+ | q10 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_2_1.eprime
new file mode 100644
index 0000000000..9f2dbd49dd
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_2_1.eprime
@@ -0,0 +1,19 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence, y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q3] < x_ExplicitVarSizeWithDummy[q3 + 1] \/ x_ExplicitVarSizeWithDummy[q3] = 6
+ | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q4] = 6 -> x_ExplicitVarSizeWithDummy[q4 + 1] = 6 | q4 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q5] != 6) | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q8] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 6 /\ x_ExplicitVarSizeWithDummy[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_2_2.eprime
new file mode 100644
index 0000000000..40de4c9235
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_2_2.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence, y_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q3] < x_ExplicitVarSizeWithDummy[q3 + 1] \/ x_ExplicitVarSizeWithDummy[q3] = 6
+ | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q4] = 6 -> x_ExplicitVarSizeWithDummy[q4 + 1] = 6 | q4 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q5] != 6) | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q8] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 6 /\ x_ExplicitVarSizeWithDummy[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q12] < y_ExplicitVarSizeWithDummy[q12 + 1] \/ y_ExplicitVarSizeWithDummy[q12] = 6
+ | q12 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q13] = 6 -> y_ExplicitVarSizeWithDummy[q13 + 1] = 6 | q13 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q14] != 6) | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q17] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q17]] | q17 : int(1..4)]),
+ and([y_Occurrence[q18] ->
+ or([y_ExplicitVarSizeWithDummy[q20] != 6 /\ y_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_2_3.eprime
new file mode 100644
index 0000000000..c2ab749e23
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_2_3.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q3] < x_ExplicitVarSizeWithDummy[q3 + 1] \/ x_ExplicitVarSizeWithDummy[q3] = 6
+ | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q4] = 6 -> x_ExplicitVarSizeWithDummy[q4 + 1] = 6 | q4 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q5] != 6) | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q8] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 6 /\ x_ExplicitVarSizeWithDummy[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(2..5)]),
+ and([q12 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q12] < y_ExplicitVarSizeWithMarker_Values[q12 + 1]
+ | q12 : int(1..3)]),
+ and([q13 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q13] = 2 | q13 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q16 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q16]]
+ | q16 : int(1..4)]),
+ and([y_Occurrence[q17] ->
+ or([q19 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_2_4.eprime
new file mode 100644
index 0000000000..3439f1ddf8
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_2_4.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q3] < x_ExplicitVarSizeWithDummy[q3 + 1] \/ x_ExplicitVarSizeWithDummy[q3] = 6
+ | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q4] = 6 -> x_ExplicitVarSizeWithDummy[q4 + 1] = 6 | q4 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q5] != 6) | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q8] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q8]] | q8 : int(1..4)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 6 /\ x_ExplicitVarSizeWithDummy[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q12 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q12] < y_ExplicitVarSizeWithFlags_Values[q12 + 1]
+ | q12 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q13] = false -> y_ExplicitVarSizeWithFlags_Values[q13] = 2
+ | q13 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q14 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q14] | q14 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q15]) | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q18] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q18]]
+ | q18 : int(1..4)]),
+ and([y_Occurrence[q19] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q21] /\ y_ExplicitVarSizeWithFlags_Values[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_3_1.eprime
new file mode 100644
index 0000000000..745ddbf47d
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_3_1.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([q3 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q3] < x_ExplicitVarSizeWithMarker_Values[q3 + 1]
+ | q3 : int(1..3)]),
+ and([q4 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q4] = 2 | q4 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q7 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q7]]
+ | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([q10 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q10] = q8
+ | q10 : int(1..4)])
+ | q8 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_3_2.eprime
new file mode 100644
index 0000000000..6ac452cb87
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_3_2.eprime
@@ -0,0 +1,34 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, y_ExplicitVarSizeWithDummy,
+ y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([q3 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q3] < x_ExplicitVarSizeWithMarker_Values[q3 + 1]
+ | q3 : int(1..3)]),
+ and([q4 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q4] = 2 | q4 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q7 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q7]]
+ | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([q10 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q10] = q8
+ | q10 : int(1..4)])
+ | q8 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q11] < y_ExplicitVarSizeWithDummy[q11 + 1] \/ y_ExplicitVarSizeWithDummy[q11] = 6
+ | q11 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q12] = 6 -> y_ExplicitVarSizeWithDummy[q12 + 1] = 6 | q12 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q13] != 6) | q13 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q16] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q16]] | q16 : int(1..4)]),
+ and([y_Occurrence[q17] ->
+ or([y_ExplicitVarSizeWithDummy[q19] != 6 /\ y_ExplicitVarSizeWithDummy[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_3_3.eprime
new file mode 100644
index 0000000000..9477b707c7
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_3_3.eprime
@@ -0,0 +1,38 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([q3 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q3] < x_ExplicitVarSizeWithMarker_Values[q3 + 1]
+ | q3 : int(1..3)]),
+ and([q4 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q4] = 2 | q4 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q7 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q7]]
+ | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([q10 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q10] = q8
+ | q10 : int(1..4)])
+ | q8 : int(2..5)]),
+ and([q11 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q11] < y_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q12] = 2 | q12 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q15 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q15]]
+ | q15 : int(1..4)]),
+ and([y_Occurrence[q16] ->
+ or([q18 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..4)])
+ | q16 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_3_4.eprime
new file mode 100644
index 0000000000..a002cc2f24
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_3_4.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([q3 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q3] < x_ExplicitVarSizeWithMarker_Values[q3 + 1]
+ | q3 : int(1..3)]),
+ and([q4 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q4] = 2 | q4 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q7 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q7]]
+ | q7 : int(1..4)]),
+ and([x_Occurrence[q8] ->
+ or([q10 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q10] = q8
+ | q10 : int(1..4)])
+ | q8 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q11] < y_ExplicitVarSizeWithFlags_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q12] = false -> y_ExplicitVarSizeWithFlags_Values[q12] = 2
+ | q12 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q14]) | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q17] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q17]]
+ | q17 : int(1..4)]),
+ and([y_Occurrence[q18] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q20] /\ y_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_4_1.eprime
new file mode 100644
index 0000000000..ef5ab46d55
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_4_1.eprime
@@ -0,0 +1,22 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q3] < x_ExplicitVarSizeWithFlags_Values[q3 + 1]
+ | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4] = false -> x_ExplicitVarSizeWithFlags_Values[q4] = 2 | q4 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q5] | q5 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q6]) | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q9]] | q9 : int(1..4)]),
+ and([x_Occurrence[q10] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\ x_ExplicitVarSizeWithFlags_Values[q12] = q10 | q12 : int(1..4)])
+ | q10 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_4_2.eprime
new file mode 100644
index 0000000000..5f1fccfa5a
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_4_2.eprime
@@ -0,0 +1,33 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, y_ExplicitVarSizeWithDummy,
+ y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q3] < x_ExplicitVarSizeWithFlags_Values[q3 + 1]
+ | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4] = false -> x_ExplicitVarSizeWithFlags_Values[q4] = 2 | q4 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q5] | q5 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q6]) | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q9]] | q9 : int(1..4)]),
+ and([x_Occurrence[q10] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\ x_ExplicitVarSizeWithFlags_Values[q12] = q10 | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q13] < y_ExplicitVarSizeWithDummy[q13 + 1] \/ y_ExplicitVarSizeWithDummy[q13] = 6
+ | q13 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q14] = 6 -> y_ExplicitVarSizeWithDummy[q14 + 1] = 6 | q14 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q15] != 6) | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q18] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q18]] | q18 : int(1..4)]),
+ and([y_Occurrence[q19] ->
+ or([y_ExplicitVarSizeWithDummy[q21] != 6 /\ y_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_4_3.eprime
new file mode 100644
index 0000000000..e9925fe769
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_4_3.eprime
@@ -0,0 +1,37 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q3] < x_ExplicitVarSizeWithFlags_Values[q3 + 1]
+ | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4] = false -> x_ExplicitVarSizeWithFlags_Values[q4] = 2 | q4 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q5] | q5 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q6]) | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q9]] | q9 : int(1..4)]),
+ and([x_Occurrence[q10] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\ x_ExplicitVarSizeWithFlags_Values[q12] = q10 | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([q13 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q13] < y_ExplicitVarSizeWithMarker_Values[q13 + 1]
+ | q13 : int(1..3)]),
+ and([q14 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q14] = 2 | q14 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q17 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q17]]
+ | q17 : int(1..4)]),
+ and([y_Occurrence[q18] ->
+ or([q20 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q20] = q18
+ | q20 : int(1..4)])
+ | q18 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_1_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_1_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_1_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_1_4_4.eprime
new file mode 100644
index 0000000000..83b55b09e8
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_1_4_4.eprime
@@ -0,0 +1,38 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_Occurrence[i] /\ y_Occurrence[j] -> i + 2 = j | i : int(2..5), j : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q2]) | q2 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q3] < x_ExplicitVarSizeWithFlags_Values[q3 + 1]
+ | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q4] = false -> x_ExplicitVarSizeWithFlags_Values[q4] = 2 | q4 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q5] | q5 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q6]) | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q9]] | q9 : int(1..4)]),
+ and([x_Occurrence[q10] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\ x_ExplicitVarSizeWithFlags_Values[q12] = q10 | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q13 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q13] < y_ExplicitVarSizeWithFlags_Values[q13 + 1]
+ | q13 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q14] = false -> y_ExplicitVarSizeWithFlags_Values[q14] = 2
+ | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q15] | q15 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q16]) | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q19]]
+ | q19 : int(1..4)]),
+ and([y_Occurrence[q20] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q22] /\ y_ExplicitVarSizeWithFlags_Values[q22] = q20 | q22 : int(1..4)])
+ | q20 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_1_1.eprime
new file mode 100644
index 0000000000..a263bf4a81
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_1_1.eprime
@@ -0,0 +1,20 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_Occurrence, y_Occurrence, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q12] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q12]
+ | i : int(2..5), q12 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ and([y_Occurrence[q7] ->
+ or([y_ExplicitVarSizeWithDummy[q9] != 6 /\ y_ExplicitVarSizeWithDummy[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q11] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q11]] | q11 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_1_2.eprime
new file mode 100644
index 0000000000..970b65361f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_1_2.eprime
@@ -0,0 +1,14 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on [x_Occurrence, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q6] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q6]
+ | i : int(2..5), q6 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_1_3.eprime
new file mode 100644
index 0000000000..34f57c451d
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_1_3.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q17] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q17]
+ | i : int(2..5), q17 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q12] != 6 /\
+ y_ExplicitVarSizeWithDummy[q12] = y_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([q16 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q16] = y_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_1_4.eprime
new file mode 100644
index 0000000000..e89acaaa36
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_1_4.eprime
@@ -0,0 +1,33 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q19] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q19]
+ | i : int(2..5), q19 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([y_ExplicitVarSizeWithDummy[q14] != 6 /\
+ y_ExplicitVarSizeWithDummy[q14] = y_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q18] /\
+ y_ExplicitVarSizeWithFlags_Values[q18] = y_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_2_1.eprime
new file mode 100644
index 0000000000..b50b8217a7
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_2_1.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence, y_Occurrence, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q21] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q21]
+ | i : int(2..5), q21 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 6 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q11] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q11]] | q11 : int(1..4)]),
+ and([x_Occurrence[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 6 /\ x_ExplicitVarSizeWithDummy[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q15]) | q15 : int(2..5)]),
+ and([y_Occurrence[q16] ->
+ or([y_ExplicitVarSizeWithDummy[q18] != 6 /\ y_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..4)])
+ | q16 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q20] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q20]] | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_2_2.eprime
new file mode 100644
index 0000000000..97ccb1e791
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_2_2.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on [x_ExplicitVarSizeWithDummy, x_Occurrence, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q15] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q15]
+ | i : int(2..5), q15 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 6 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q11] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q11]] | q11 : int(1..4)]),
+ and([x_Occurrence[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 6 /\ x_ExplicitVarSizeWithDummy[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_2_3.eprime
new file mode 100644
index 0000000000..834e686023
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_2_3.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q26] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q26]
+ | i : int(2..5), q26 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 6 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q11] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q11]] | q11 : int(1..4)]),
+ and([x_Occurrence[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 6 /\ x_ExplicitVarSizeWithDummy[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ and([q15 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q15] < y_ExplicitVarSizeWithMarker_Values[q15 + 1]
+ | q15 : int(1..3)]),
+ and([q16 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q16] = 2 | q16 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q19 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q21] != 6 /\
+ y_ExplicitVarSizeWithDummy[q21] = y_ExplicitVarSizeWithMarker_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q23] != 6 ->
+ or([q25 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q25] = y_ExplicitVarSizeWithDummy[q23]
+ | q25 : int(1..4)])
+ | q23 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_2_4.eprime
new file mode 100644
index 0000000000..7f9c9565ff
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_2_4.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q28] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q28]
+ | i : int(2..5), q28 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q6] < x_ExplicitVarSizeWithDummy[q6 + 1] \/ x_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q7] = 6 -> x_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q11] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q11]] | q11 : int(1..4)]),
+ and([x_Occurrence[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 6 /\ x_ExplicitVarSizeWithDummy[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q15] < y_ExplicitVarSizeWithFlags_Values[q15 + 1]
+ | q15 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q16] = false -> y_ExplicitVarSizeWithFlags_Values[q16] = 2
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q17 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q17] | q17 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q18]) | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([y_ExplicitVarSizeWithDummy[q23] != 6 /\
+ y_ExplicitVarSizeWithDummy[q23] = y_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q25] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q27] /\
+ y_ExplicitVarSizeWithFlags_Values[q27] = y_ExplicitVarSizeWithDummy[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_3_1.eprime
new file mode 100644
index 0000000000..a173ae9198
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_3_1.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, y_Occurrence,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q20] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q20]
+ | i : int(2..5), q20 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q10]]
+ | q10 : int(1..4)]),
+ and([x_Occurrence[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q13] = q11
+ | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q14]) | q14 : int(2..5)]),
+ and([y_Occurrence[q15] ->
+ or([y_ExplicitVarSizeWithDummy[q17] != 6 /\ y_ExplicitVarSizeWithDummy[q17] = q15 | q17 : int(1..4)])
+ | q15 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q19] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q19]] | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_3_2.eprime
new file mode 100644
index 0000000000..85a3d62f8d
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_3_2.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q14] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q14]
+ | i : int(2..5), q14 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q10]]
+ | q10 : int(1..4)]),
+ and([x_Occurrence[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q13] = q11
+ | q13 : int(1..4)])
+ | q11 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_3_3.eprime
new file mode 100644
index 0000000000..7e2bed2d00
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_3_3.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q25] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q25]
+ | i : int(2..5), q25 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q10]]
+ | q10 : int(1..4)]),
+ and([x_Occurrence[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q13] = q11
+ | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ and([q14 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q14] < y_ExplicitVarSizeWithMarker_Values[q14 + 1]
+ | q14 : int(1..3)]),
+ and([q15 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q15] = 2 | q15 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q18 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q20] != 6 /\
+ y_ExplicitVarSizeWithDummy[q20] = y_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q22] != 6 ->
+ or([q24 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q24] = y_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_3_4.eprime
new file mode 100644
index 0000000000..fac749f4d5
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_3_4.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q27] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q27]
+ | i : int(2..5), q27 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q10]]
+ | q10 : int(1..4)]),
+ and([x_Occurrence[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q13] = q11
+ | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q14 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q14] < y_ExplicitVarSizeWithFlags_Values[q14 + 1]
+ | q14 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15] = false -> y_ExplicitVarSizeWithFlags_Values[q15] = 2
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q16 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q16] | q16 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q17]) | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20] ->
+ or([y_ExplicitVarSizeWithDummy[q22] != 6 /\
+ y_ExplicitVarSizeWithDummy[q22] = y_ExplicitVarSizeWithFlags_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q24] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q26] /\
+ y_ExplicitVarSizeWithFlags_Values[q26] = y_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_4_1.eprime
new file mode 100644
index 0000000000..eec7a2f559
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_4_1.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, y_Occurrence,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q22] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q22]
+ | i : int(2..5), q22 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q12]]
+ | q12 : int(1..4)]),
+ and([x_Occurrence[q13] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\ x_ExplicitVarSizeWithFlags_Values[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q16]) | q16 : int(2..5)]),
+ and([y_Occurrence[q17] ->
+ or([y_ExplicitVarSizeWithDummy[q19] != 6 /\ y_ExplicitVarSizeWithDummy[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q21] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q21]] | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_4_2.eprime
new file mode 100644
index 0000000000..fbd69fb422
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_4_2.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q16] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q16]
+ | i : int(2..5), q16 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q12]]
+ | q12 : int(1..4)]),
+ and([x_Occurrence[q13] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\ x_ExplicitVarSizeWithFlags_Values[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_4_3.eprime
new file mode 100644
index 0000000000..db9fd6336e
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_4_3.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q27] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q27]
+ | i : int(2..5), q27 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q12]]
+ | q12 : int(1..4)]),
+ and([x_Occurrence[q13] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\ x_ExplicitVarSizeWithFlags_Values[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)]),
+ and([q16 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q16] < y_ExplicitVarSizeWithMarker_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([q17 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q17] = 2 | q17 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q20 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q22] != 6 /\
+ y_ExplicitVarSizeWithDummy[q22] = y_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q24] != 6 ->
+ or([q26 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q26] = y_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_2_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_2_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_2_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_2_4_4.eprime
new file mode 100644
index 0000000000..f82060de74
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_2_4_4.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithDummy[q29] != 6 -> i + 2 = y_ExplicitVarSizeWithDummy[q29]
+ | i : int(2..5), q29 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q2] < y_ExplicitVarSizeWithDummy[q2 + 1] \/ y_ExplicitVarSizeWithDummy[q2] = 6
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q3] = 6 -> y_ExplicitVarSizeWithDummy[q3 + 1] = 6 | q3 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q4] != 6) | q4 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q12]]
+ | q12 : int(1..4)]),
+ and([x_Occurrence[q13] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\ x_ExplicitVarSizeWithFlags_Values[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q16 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q16] < y_ExplicitVarSizeWithFlags_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q17] = false -> y_ExplicitVarSizeWithFlags_Values[q17] = 2
+ | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q18 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q18] | q18 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q19]) | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q22] ->
+ or([y_ExplicitVarSizeWithDummy[q24] != 6 /\
+ y_ExplicitVarSizeWithDummy[q24] = y_ExplicitVarSizeWithFlags_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q26] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q28] /\
+ y_ExplicitVarSizeWithFlags_Values[q28] = y_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_1_1.eprime
new file mode 100644
index 0000000000..5aa5be2149
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_1_1.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_Occurrence, y_Occurrence, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q11 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q11]
+ | i : int(2..5), q11 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ and([y_Occurrence[q6] ->
+ or([q8 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q8] = q6 | q8 : int(1..4)])
+ | q6 : int(2..5)]),
+ and([q10 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q10]]
+ | q10 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_1_2.eprime
new file mode 100644
index 0000000000..fd2bbeeb87
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_1_2.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_Occurrence, y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q17 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q17]
+ | i : int(2..5), q17 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q10] != 6 ->
+ or([q12 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q12] = y_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q16] != 6 /\
+ y_ExplicitVarSizeWithDummy[q16] = y_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_1_3.eprime
new file mode 100644
index 0000000000..a2de25f50a
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_1_3.eprime
@@ -0,0 +1,16 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on [x_Occurrence, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q5 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q5]
+ | i : int(2..5), q5 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_1_4.eprime
new file mode 100644
index 0000000000..7d10ae0289
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_1_4.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q18 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q18]
+ | i : int(2..5), q18 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q13] = y_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q15 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q17] /\
+ y_ExplicitVarSizeWithFlags_Values[q17] = y_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_2_1.eprime
new file mode 100644
index 0000000000..aa45ad18ec
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_2_1.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, y_Occurrence, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q20 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q20]
+ | i : int(2..5), q20 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 6 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..4)]),
+ and([x_Occurrence[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 6 /\ x_ExplicitVarSizeWithDummy[q13] = q11 | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q14]) | q14 : int(2..5)]),
+ and([y_Occurrence[q15] ->
+ or([q17 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q17] = q15
+ | q17 : int(1..4)])
+ | q15 : int(2..5)]),
+ and([q19 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q19]]
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_2_2.eprime
new file mode 100644
index 0000000000..12abc5a79c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_2_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q26 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q26]
+ | i : int(2..5), q26 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 6 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..4)]),
+ and([x_Occurrence[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 6 /\ x_ExplicitVarSizeWithDummy[q13] = q11 | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q14] < y_ExplicitVarSizeWithDummy[q14 + 1] \/ y_ExplicitVarSizeWithDummy[q14] = 6
+ | q14 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q15] = 6 -> y_ExplicitVarSizeWithDummy[q15 + 1] = 6 | q15 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q16] != 6) | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q19] != 6 ->
+ or([q21 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q21] = y_ExplicitVarSizeWithDummy[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([q23 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q25] != 6 /\
+ y_ExplicitVarSizeWithDummy[q25] = y_ExplicitVarSizeWithMarker_Values[q23]
+ | q25 : int(1..4)])
+ | q23 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_2_3.eprime
new file mode 100644
index 0000000000..beae6fe911
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_2_3.eprime
@@ -0,0 +1,26 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q14 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q14]
+ | i : int(2..5), q14 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 6 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..4)]),
+ and([x_Occurrence[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 6 /\ x_ExplicitVarSizeWithDummy[q13] = q11 | q13 : int(1..4)])
+ | q11 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_2_4.eprime
new file mode 100644
index 0000000000..0129c25cc0
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_2_4.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q27 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q27]
+ | i : int(2..5), q27 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 6 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..4)]),
+ and([x_Occurrence[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 6 /\ x_ExplicitVarSizeWithDummy[q13] = q11 | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q14 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q14] < y_ExplicitVarSizeWithFlags_Values[q14 + 1]
+ | q14 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15] = false -> y_ExplicitVarSizeWithFlags_Values[q15] = 2
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q16 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q16] | q16 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q17]) | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20] ->
+ or([q22 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q22] = y_ExplicitVarSizeWithFlags_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q24 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q26] /\
+ y_ExplicitVarSizeWithFlags_Values[q26] = y_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_3_1.eprime
new file mode 100644
index 0000000000..e299f22797
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_3_1.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, y_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q19 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q19]
+ | i : int(2..5), q19 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..4)]),
+ and([x_Occurrence[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q12] = q10
+ | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q13]) | q13 : int(2..5)]),
+ and([y_Occurrence[q14] ->
+ or([q16 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q16] = q14
+ | q16 : int(1..4)])
+ | q14 : int(2..5)]),
+ and([q18 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q18]]
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_3_2.eprime
new file mode 100644
index 0000000000..75e285106e
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_3_2.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, y_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q25 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q25]
+ | i : int(2..5), q25 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..4)]),
+ and([x_Occurrence[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q12] = q10
+ | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q13] < y_ExplicitVarSizeWithDummy[q13 + 1] \/ y_ExplicitVarSizeWithDummy[q13] = 6
+ | q13 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q14] = 6 -> y_ExplicitVarSizeWithDummy[q14 + 1] = 6 | q14 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q15] != 6) | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q18] != 6 ->
+ or([q20 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q20] = y_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([q22 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q24] != 6 /\
+ y_ExplicitVarSizeWithDummy[q24] = y_ExplicitVarSizeWithMarker_Values[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_3_3.eprime
new file mode 100644
index 0000000000..c8c2dc92cf
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_3_3.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q13 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q13]
+ | i : int(2..5), q13 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..4)]),
+ and([x_Occurrence[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q12] = q10
+ | q12 : int(1..4)])
+ | q10 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_3_4.eprime
new file mode 100644
index 0000000000..04d78aaca9
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_3_4.eprime
@@ -0,0 +1,51 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q26 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q26]
+ | i : int(2..5), q26 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q5 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q5] < x_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..4)]),
+ and([x_Occurrence[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q12] = q10
+ | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q13 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q13] < y_ExplicitVarSizeWithFlags_Values[q13 + 1]
+ | q13 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q14] = false -> y_ExplicitVarSizeWithFlags_Values[q14] = 2
+ | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q15] | q15 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q16]) | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([q21 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q21] = y_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([q23 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q25] /\
+ y_ExplicitVarSizeWithFlags_Values[q25] = y_ExplicitVarSizeWithMarker_Values[q23]
+ | q25 : int(1..4)])
+ | q23 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_4_1.eprime
new file mode 100644
index 0000000000..4beb160d92
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_4_1.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, y_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q21 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q21]
+ | i : int(2..5), q21 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)]),
+ and([x_Occurrence[q12] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\ x_ExplicitVarSizeWithFlags_Values[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q15]) | q15 : int(2..5)]),
+ and([y_Occurrence[q16] ->
+ or([q18 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..4)])
+ | q16 : int(2..5)]),
+ and([q20 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q20]]
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_4_2.eprime
new file mode 100644
index 0000000000..9db3707298
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_4_2.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, y_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q27 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q27]
+ | i : int(2..5), q27 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)]),
+ and([x_Occurrence[q12] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\ x_ExplicitVarSizeWithFlags_Values[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q15] < y_ExplicitVarSizeWithDummy[q15 + 1] \/ y_ExplicitVarSizeWithDummy[q15] = 6
+ | q15 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q16] = 6 -> y_ExplicitVarSizeWithDummy[q16 + 1] = 6 | q16 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q17] != 6) | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q20] != 6 ->
+ or([q22 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q22] = y_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q24 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q26] != 6 /\
+ y_ExplicitVarSizeWithDummy[q26] = y_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_4_3.eprime
new file mode 100644
index 0000000000..f452bb39ff
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_4_3.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q15 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q15]
+ | i : int(2..5), q15 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)]),
+ and([x_Occurrence[q12] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\ x_ExplicitVarSizeWithFlags_Values[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_3_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_3_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_3_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_3_4_4.eprime
new file mode 100644
index 0000000000..dec6657450
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_3_4_4.eprime
@@ -0,0 +1,51 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_Occurrence[i] /\ q28 <= y_ExplicitVarSizeWithMarker_Marker -> i + 2 = y_ExplicitVarSizeWithMarker_Values[q28]
+ | i : int(2..5), q28 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([q2 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q2] < y_ExplicitVarSizeWithMarker_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([q3 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q3] = 2 | q3 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)]),
+ and([x_Occurrence[q12] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\ x_ExplicitVarSizeWithFlags_Values[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q15] < y_ExplicitVarSizeWithFlags_Values[q15 + 1]
+ | q15 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q16] = false -> y_ExplicitVarSizeWithFlags_Values[q16] = 2
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q17 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q17] | q17 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q18]) | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([q23 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q23] = y_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([q25 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q27] /\
+ y_ExplicitVarSizeWithFlags_Values[q27] = y_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_1_1.eprime
new file mode 100644
index 0000000000..6809b5e1fc
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_1_1.eprime
@@ -0,0 +1,24 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_Occurrence, y_Occurrence, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q13] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q13]
+ | i : int(2..5), q13 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q7]) | q7 : int(2..5)]),
+ and([y_Occurrence[q8] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q10] /\ y_ExplicitVarSizeWithFlags_Values[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q12] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q12]]
+ | q12 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_1_2.eprime
new file mode 100644
index 0000000000..771b008b83
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_1_2.eprime
@@ -0,0 +1,33 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_Occurrence, y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q19] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q19]
+ | i : int(2..5), q19 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q7] < y_ExplicitVarSizeWithDummy[q7 + 1] \/ y_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q8] = 6 -> y_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q12] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q14] /\
+ y_ExplicitVarSizeWithFlags_Values[q14] = y_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([y_ExplicitVarSizeWithDummy[q18] != 6 /\
+ y_ExplicitVarSizeWithDummy[q18] = y_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_1_3.eprime
new file mode 100644
index 0000000000..366e35ebb5
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_1_3.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q18] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q18]
+ | i : int(2..5), q18 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([q7 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q7] < y_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q8] = 2 | q8 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q11 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q13] /\
+ y_ExplicitVarSizeWithFlags_Values[q13] = y_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q17] = y_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_1_4.eprime
new file mode 100644
index 0000000000..bfdab410df
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_1_4.eprime
@@ -0,0 +1,17 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on [x_Occurrence, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q7] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q7]
+ | i : int(2..5), q7 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_2_1.eprime
new file mode 100644
index 0000000000..e41a4cfc54
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_2_1.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, y_Occurrence, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q22] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q22]
+ | i : int(2..5), q22 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 6 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q12]] | q12 : int(1..4)]),
+ and([x_Occurrence[q13] ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 6 /\ x_ExplicitVarSizeWithDummy[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q16]) | q16 : int(2..5)]),
+ and([y_Occurrence[q17] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q19] /\ y_ExplicitVarSizeWithFlags_Values[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q21]]
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_2_2.eprime
new file mode 100644
index 0000000000..64521d1cd6
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_2_2.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q28] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q28]
+ | i : int(2..5), q28 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 6 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q12]] | q12 : int(1..4)]),
+ and([x_Occurrence[q13] ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 6 /\ x_ExplicitVarSizeWithDummy[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q16] < y_ExplicitVarSizeWithDummy[q16 + 1] \/ y_ExplicitVarSizeWithDummy[q16] = 6
+ | q16 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q17] = 6 -> y_ExplicitVarSizeWithDummy[q17 + 1] = 6 | q17 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q18] != 6) | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q21] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q23] /\
+ y_ExplicitVarSizeWithFlags_Values[q23] = y_ExplicitVarSizeWithDummy[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([y_ExplicitVarSizeWithDummy[q27] != 6 /\
+ y_ExplicitVarSizeWithDummy[q27] = y_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_2_3.eprime
new file mode 100644
index 0000000000..68e8249552
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_2_3.eprime
@@ -0,0 +1,45 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q27] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q27]
+ | i : int(2..5), q27 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 6 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q12]] | q12 : int(1..4)]),
+ and([x_Occurrence[q13] ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 6 /\ x_ExplicitVarSizeWithDummy[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)]),
+ and([q16 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q16] < y_ExplicitVarSizeWithMarker_Values[q16 + 1]
+ | q16 : int(1..3)]),
+ and([q17 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q17] = 2 | q17 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q20 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q22] /\
+ y_ExplicitVarSizeWithFlags_Values[q22] = y_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q24] ->
+ or([q26 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q26] = y_ExplicitVarSizeWithFlags_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_2_4.eprime
new file mode 100644
index 0000000000..2c847ef491
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_2_4.eprime
@@ -0,0 +1,27 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_Occurrence, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q16] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q16]
+ | i : int(2..5), q16 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 6 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q12]] | q12 : int(1..4)]),
+ and([x_Occurrence[q13] ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 6 /\ x_ExplicitVarSizeWithDummy[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_3_1.eprime
new file mode 100644
index 0000000000..2c2cd8735b
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_3_1.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, y_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q21] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q21]
+ | i : int(2..5), q21 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 2 | q8 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q11]]
+ | q11 : int(1..4)]),
+ and([x_Occurrence[q12] ->
+ or([q14 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q14] = q12
+ | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q15]) | q15 : int(2..5)]),
+ and([y_Occurrence[q16] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q18] /\ y_ExplicitVarSizeWithFlags_Values[q18] = q16 | q18 : int(1..4)])
+ | q16 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q20]]
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_3_2.eprime
new file mode 100644
index 0000000000..dca70c6bd1
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_3_2.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence, y_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q27] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q27]
+ | i : int(2..5), q27 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 2 | q8 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q11]]
+ | q11 : int(1..4)]),
+ and([x_Occurrence[q12] ->
+ or([q14 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q14] = q12
+ | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q15] < y_ExplicitVarSizeWithDummy[q15 + 1] \/ y_ExplicitVarSizeWithDummy[q15] = 6
+ | q15 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q16] = 6 -> y_ExplicitVarSizeWithDummy[q16 + 1] = 6 | q16 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q17] != 6) | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q20] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q22] /\
+ y_ExplicitVarSizeWithFlags_Values[q22] = y_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q24] ->
+ or([y_ExplicitVarSizeWithDummy[q26] != 6 /\
+ y_ExplicitVarSizeWithDummy[q26] = y_ExplicitVarSizeWithFlags_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_3_3.eprime
new file mode 100644
index 0000000000..bd28a832b9
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_3_3.eprime
@@ -0,0 +1,50 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q26] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q26]
+ | i : int(2..5), q26 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 2 | q8 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q11]]
+ | q11 : int(1..4)]),
+ and([x_Occurrence[q12] ->
+ or([q14 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q14] = q12
+ | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ and([q15 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q15] < y_ExplicitVarSizeWithMarker_Values[q15 + 1]
+ | q15 : int(1..3)]),
+ and([q16 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q16] = 2 | q16 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q19 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q21] /\
+ y_ExplicitVarSizeWithFlags_Values[q21] = y_ExplicitVarSizeWithMarker_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q23] ->
+ or([q25 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q25] = y_ExplicitVarSizeWithFlags_Values[q23]
+ | q25 : int(1..4)])
+ | q23 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_3_4.eprime
new file mode 100644
index 0000000000..276806a903
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_3_4.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q15] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q15]
+ | i : int(2..5), q15 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 2 | q8 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q11]]
+ | q11 : int(1..4)]),
+ and([x_Occurrence[q12] ->
+ or([q14 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q14] = q12
+ | q14 : int(1..4)])
+ | q12 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_4_1.eprime
new file mode 100644
index 0000000000..f3dfc3a80b
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_4_1.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, y_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q23] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q23]
+ | i : int(2..5), q23 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q7] < x_ExplicitVarSizeWithFlags_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] = false -> x_ExplicitVarSizeWithFlags_Values[q8] = 2 | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q9] | q9 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q10]) | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q13]]
+ | q13 : int(1..4)]),
+ and([x_Occurrence[q14] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\ x_ExplicitVarSizeWithFlags_Values[q16] = q14 | q16 : int(1..4)])
+ | q14 : int(2..5)]),
+ 1 <= sum([toInt(y_Occurrence[q17]) | q17 : int(2..5)]),
+ and([y_Occurrence[q18] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q20] /\ y_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q22] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q22]]
+ | q22 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_4_2.eprime
new file mode 100644
index 0000000000..7d3a34561a
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_4_2.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence, y_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q29] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q29]
+ | i : int(2..5), q29 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q7] < x_ExplicitVarSizeWithFlags_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] = false -> x_ExplicitVarSizeWithFlags_Values[q8] = 2 | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q9] | q9 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q10]) | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q13]]
+ | q13 : int(1..4)]),
+ and([x_Occurrence[q14] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\ x_ExplicitVarSizeWithFlags_Values[q16] = q14 | q16 : int(1..4)])
+ | q14 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q17] < y_ExplicitVarSizeWithDummy[q17 + 1] \/ y_ExplicitVarSizeWithDummy[q17] = 6
+ | q17 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q18] = 6 -> y_ExplicitVarSizeWithDummy[q18 + 1] = 6 | q18 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q19] != 6) | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q22] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q24] /\
+ y_ExplicitVarSizeWithFlags_Values[q24] = y_ExplicitVarSizeWithDummy[q22]
+ | q24 : int(1..4)])
+ | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([y_ExplicitVarSizeWithDummy[q28] != 6 /\
+ y_ExplicitVarSizeWithDummy[q28] = y_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_4_3.eprime
new file mode 100644
index 0000000000..eeb7266e57
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_4_3.eprime
@@ -0,0 +1,50 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q28] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q28]
+ | i : int(2..5), q28 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q7] < x_ExplicitVarSizeWithFlags_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] = false -> x_ExplicitVarSizeWithFlags_Values[q8] = 2 | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q9] | q9 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q10]) | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q13]]
+ | q13 : int(1..4)]),
+ and([x_Occurrence[q14] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\ x_ExplicitVarSizeWithFlags_Values[q16] = q14 | q16 : int(1..4)])
+ | q14 : int(2..5)]),
+ and([q17 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q17] < y_ExplicitVarSizeWithMarker_Values[q17 + 1]
+ | q17 : int(1..3)]),
+ and([q18 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q18] = 2 | q18 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q21 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q23] /\
+ y_ExplicitVarSizeWithFlags_Values[q23] = y_ExplicitVarSizeWithMarker_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q27] = y_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_1_4_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_1_4_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_1_4_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_1_4_4_4.eprime
new file mode 100644
index 0000000000..f0669c2cb4
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_1_4_4_4.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_Occurrence[i] /\ y_ExplicitVarSizeWithFlags_Flags[q17] -> i + 2 = y_ExplicitVarSizeWithFlags_Values[q17]
+ | i : int(2..5), q17 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q1]) | q1 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q2 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q2] < y_ExplicitVarSizeWithFlags_Values[q2 + 1]
+ | q2 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q3] = false -> y_ExplicitVarSizeWithFlags_Values[q3] = 2 | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q4] | q4 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q5]) | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q7] < x_ExplicitVarSizeWithFlags_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] = false -> x_ExplicitVarSizeWithFlags_Values[q8] = 2 | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q9] | q9 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q10]) | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q13]]
+ | q13 : int(1..4)]),
+ and([x_Occurrence[q14] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\ x_ExplicitVarSizeWithFlags_Values[q16] = q14 | q16 : int(1..4)])
+ | q14 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_1_1.eprime
new file mode 100644
index 0000000000..761535fe98
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_1_1.eprime
@@ -0,0 +1,20 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q12] + 2 = j
+ | q12 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q6]) | q6 : int(2..5)]),
+ and([x_Occurrence[q7] ->
+ or([x_ExplicitVarSizeWithDummy[q9] != 6 /\ x_ExplicitVarSizeWithDummy[q9] = q7 | q9 : int(1..4)])
+ | q7 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q11] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q11]] | q11 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_1_2.eprime
new file mode 100644
index 0000000000..b519538402
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_1_2.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q21] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q21] + 2 = j
+ | q21 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q6]) | q6 : int(2..5)]),
+ and([x_Occurrence[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\ x_ExplicitVarSizeWithDummy[q18] = q16 | q18 : int(1..4)])
+ | q16 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q20]] | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q7] < y_ExplicitVarSizeWithDummy[q7 + 1] \/ y_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q8] = 6 -> y_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q12] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q12]] | q12 : int(1..4)]),
+ and([y_Occurrence[q13] ->
+ or([y_ExplicitVarSizeWithDummy[q15] != 6 /\ y_ExplicitVarSizeWithDummy[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_1_3.eprime
new file mode 100644
index 0000000000..0726845331
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_1_3.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q20] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q20] + 2 = j
+ | q20 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q6]) | q6 : int(2..5)]),
+ and([x_Occurrence[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 6 /\ x_ExplicitVarSizeWithDummy[q17] = q15 | q17 : int(1..4)])
+ | q15 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q19] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q19]] | q19 : int(1..4)]),
+ and([q7 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q7] < y_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q8] = 2 | q8 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q11 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q11]]
+ | q11 : int(1..4)]),
+ and([y_Occurrence[q12] ->
+ or([q14 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q14] = q12
+ | q14 : int(1..4)])
+ | q12 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_1_4.eprime
new file mode 100644
index 0000000000..9d5ebd556d
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_1_4.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q22] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q22] + 2 = j
+ | q22 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q6]) | q6 : int(2..5)]),
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithDummy[q19] != 6 /\ x_ExplicitVarSizeWithDummy[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q21] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q21]] | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q7] < y_ExplicitVarSizeWithFlags_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8] = false -> y_ExplicitVarSizeWithFlags_Values[q8] = 2 | q8 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q9 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q9] | q9 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q10]) | q10 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q13] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q13]]
+ | q13 : int(1..4)]),
+ and([y_Occurrence[q14] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q16] /\ y_ExplicitVarSizeWithFlags_Values[q16] = q14 | q16 : int(1..4)])
+ | q14 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_2_1.eprime
new file mode 100644
index 0000000000..5a90ec4c66
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_2_1.eprime
@@ -0,0 +1,14 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q6] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q6] + 2 = j
+ | q6 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_2_2.eprime
new file mode 100644
index 0000000000..8811fd557f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_2_2.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on [x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q15] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q15] + 2 = j
+ | q15 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q11] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q11]] | q11 : int(1..4)]),
+ and([y_Occurrence[q12] ->
+ or([y_ExplicitVarSizeWithDummy[q14] != 6 /\ y_ExplicitVarSizeWithDummy[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_2_3.eprime
new file mode 100644
index 0000000000..5f0bbfbbee
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_2_3.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q14] + 2 = j
+ | q14 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q10]]
+ | q10 : int(1..4)]),
+ and([y_Occurrence[q11] ->
+ or([q13 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q13] = q11
+ | q13 : int(1..4)])
+ | q11 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_2_4.eprime
new file mode 100644
index 0000000000..d9eedcd6c7
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_2_4.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q16] + 2 = j
+ | q16 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q12] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q12]]
+ | q12 : int(1..4)]),
+ and([y_Occurrence[q13] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q15] /\ y_ExplicitVarSizeWithFlags_Values[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_3_1.eprime
new file mode 100644
index 0000000000..65dba9f00f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_3_1.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q17] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q17] + 2 = j
+ | q17 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 6 /\
+ x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_3_2.eprime
new file mode 100644
index 0000000000..d2382f30b2
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_3_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q26] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q26] + 2 = j
+ | q26 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 6 /\
+ x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q17] < y_ExplicitVarSizeWithDummy[q17 + 1] \/ y_ExplicitVarSizeWithDummy[q17] = 6
+ | q17 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q18] = 6 -> y_ExplicitVarSizeWithDummy[q18 + 1] = 6 | q18 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q19] != 6) | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q22] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q22]] | q22 : int(1..4)]),
+ and([y_Occurrence[q23] ->
+ or([y_ExplicitVarSizeWithDummy[q25] != 6 /\ y_ExplicitVarSizeWithDummy[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_3_3.eprime
new file mode 100644
index 0000000000..1ab91b53e0
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_3_3.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q25] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q25] + 2 = j
+ | q25 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 6 /\
+ x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q17 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q17] < y_ExplicitVarSizeWithMarker_Values[q17 + 1]
+ | q17 : int(1..3)]),
+ and([q18 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q18] = 2 | q18 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q21 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q21]]
+ | q21 : int(1..4)]),
+ and([y_Occurrence[q22] ->
+ or([q24 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_3_4.eprime
new file mode 100644
index 0000000000..43ccdc1260
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_3_4.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q27] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q27] + 2 = j
+ | q27 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ and([q6 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q6] < x_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 6 /\
+ x_ExplicitVarSizeWithDummy[q12] = x_ExplicitVarSizeWithMarker_Values[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q17 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q17] < y_ExplicitVarSizeWithFlags_Values[q17 + 1]
+ | q17 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q18] = false -> y_ExplicitVarSizeWithFlags_Values[q18] = 2
+ | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q19] | q19 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q20]) | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q23] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q23]]
+ | q23 : int(1..4)]),
+ and([y_Occurrence[q24] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q26] /\ y_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_4_1.eprime
new file mode 100644
index 0000000000..b726d03c45
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_4_1.eprime
@@ -0,0 +1,33 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q19] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q19] + 2 = j
+ | q19 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 6 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_4_2.eprime
new file mode 100644
index 0000000000..6e2528d6b3
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_4_2.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q28] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q28] + 2 = j
+ | q28 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 6 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q19] < y_ExplicitVarSizeWithDummy[q19 + 1] \/ y_ExplicitVarSizeWithDummy[q19] = 6
+ | q19 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q20] = 6 -> y_ExplicitVarSizeWithDummy[q20 + 1] = 6 | q20 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q21] != 6) | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q24] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q24]] | q24 : int(1..4)]),
+ and([y_Occurrence[q25] ->
+ or([y_ExplicitVarSizeWithDummy[q27] != 6 /\ y_ExplicitVarSizeWithDummy[q27] = q25 | q27 : int(1..4)])
+ | q25 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_4_3.eprime
new file mode 100644
index 0000000000..6517abff37
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_4_3.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q27] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q27] + 2 = j
+ | q27 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 6 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([q19 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q19] < y_ExplicitVarSizeWithMarker_Values[q19 + 1]
+ | q19 : int(1..3)]),
+ and([q20 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q23 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q23]]
+ | q23 : int(1..4)]),
+ and([y_Occurrence[q24] ->
+ or([q26 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q26] = q24
+ | q26 : int(1..4)])
+ | q24 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_1_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_1_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_1_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_1_4_4.eprime
new file mode 100644
index 0000000000..a99b49c2ba
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_1_4_4.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithDummy[q29] != 6 /\ y_Occurrence[j] -> x_ExplicitVarSizeWithDummy[q29] + 2 = j
+ | q29 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q5]) | q5 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q6] < x_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] = false -> x_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 6 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithFlags_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q19] < y_ExplicitVarSizeWithFlags_Values[q19 + 1]
+ | q19 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20] = false -> y_ExplicitVarSizeWithFlags_Values[q20] = 2
+ | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q21] | q21 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q22]) | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q25] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q25]]
+ | q25 : int(1..4)]),
+ and([y_Occurrence[q26] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q28] /\ y_ExplicitVarSizeWithFlags_Values[q28] = q26 | q28 : int(1..4)])
+ | q26 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_1_1.eprime
new file mode 100644
index 0000000000..6abf3ea8b6
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_1_1.eprime
@@ -0,0 +1,30 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy, y_Occurrence, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 /\ y_ExplicitVarSizeWithDummy[q17] != 6 ->
+ x_ExplicitVarSizeWithDummy[q16] + 2 = y_ExplicitVarSizeWithDummy[q17]
+ | q16 : int(1..4), q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q9]) | q9 : int(2..5)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 6 /\ x_ExplicitVarSizeWithDummy[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q22] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q22]] | q22 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q10]) | q10 : int(2..5)]),
+ and([y_Occurrence[q11] ->
+ or([y_ExplicitVarSizeWithDummy[q13] != 6 /\ y_ExplicitVarSizeWithDummy[q13] = q11 | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q15] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_1_2.eprime
new file mode 100644
index 0000000000..0b17a9f152
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_1_2.eprime
@@ -0,0 +1,24 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on [x_Occurrence, x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q15] != 6 /\ y_ExplicitVarSizeWithDummy[q16] != 6 ->
+ x_ExplicitVarSizeWithDummy[q15] + 2 = y_ExplicitVarSizeWithDummy[q16]
+ | q15 : int(1..4), q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q9]) | q9 : int(2..5)]),
+ and([x_Occurrence[q10] ->
+ or([x_ExplicitVarSizeWithDummy[q12] != 6 /\ x_ExplicitVarSizeWithDummy[q12] = q10 | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q14]] | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_1_3.eprime
new file mode 100644
index 0000000000..c40c45e8b1
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_1_3.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q26] != 6 /\ y_ExplicitVarSizeWithDummy[q27] != 6 ->
+ x_ExplicitVarSizeWithDummy[q26] + 2 = y_ExplicitVarSizeWithDummy[q27]
+ | q26 : int(1..4), q27 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q9]) | q9 : int(2..5)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithDummy[q23] != 6 /\ x_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q25] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q25]] | q25 : int(1..4)]),
+ and([q10 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q10] < y_ExplicitVarSizeWithMarker_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([q11 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q14 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q16] != 6 /\
+ y_ExplicitVarSizeWithDummy[q16] = y_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q18] != 6 ->
+ or([q20 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q20] = y_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_1_4.eprime
new file mode 100644
index 0000000000..0cdf8a54bd
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_1_4.eprime
@@ -0,0 +1,45 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q28] != 6 /\ y_ExplicitVarSizeWithDummy[q29] != 6 ->
+ x_ExplicitVarSizeWithDummy[q28] + 2 = y_ExplicitVarSizeWithDummy[q29]
+ | q28 : int(1..4), q29 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q9]) | q9 : int(2..5)]),
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithDummy[q25] != 6 /\ x_ExplicitVarSizeWithDummy[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q27] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q27]] | q27 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q10] < y_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q11] = false -> y_ExplicitVarSizeWithFlags_Values[q11] = 2
+ | q11 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([y_ExplicitVarSizeWithDummy[q18] != 6 /\
+ y_ExplicitVarSizeWithDummy[q18] = y_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q20] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q22] /\
+ y_ExplicitVarSizeWithFlags_Values[q22] = y_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_2_1.eprime
new file mode 100644
index 0000000000..ccc426d080
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_2_1.eprime
@@ -0,0 +1,24 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_ExplicitVarSizeWithDummy, y_Occurrence, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q15] != 6 /\ y_ExplicitVarSizeWithDummy[q16] != 6 ->
+ x_ExplicitVarSizeWithDummy[q15] + 2 = y_ExplicitVarSizeWithDummy[q16]
+ | q15 : int(1..4), q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q9]) | q9 : int(2..5)]),
+ and([y_Occurrence[q10] ->
+ or([y_ExplicitVarSizeWithDummy[q12] != 6 /\ y_ExplicitVarSizeWithDummy[q12] = q10 | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q14] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q14]] | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_2_2.eprime
new file mode 100644
index 0000000000..bce1fcad7f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_2_2.eprime
@@ -0,0 +1,18 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on [x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q9] != 6 /\ y_ExplicitVarSizeWithDummy[q10] != 6 ->
+ x_ExplicitVarSizeWithDummy[q9] + 2 = y_ExplicitVarSizeWithDummy[q10]
+ | q9 : int(1..4), q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_2_3.eprime
new file mode 100644
index 0000000000..f3540e7f47
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_2_3.eprime
@@ -0,0 +1,37 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q20] != 6 /\ y_ExplicitVarSizeWithDummy[q21] != 6 ->
+ x_ExplicitVarSizeWithDummy[q20] + 2 = y_ExplicitVarSizeWithDummy[q21]
+ | q20 : int(1..4), q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([q9 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q9] < y_ExplicitVarSizeWithMarker_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([q10 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q10] = 2 | q10 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q13 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q15] != 6 /\
+ y_ExplicitVarSizeWithDummy[q15] = y_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q17] != 6 ->
+ or([q19 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q19] = y_ExplicitVarSizeWithDummy[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_2_4.eprime
new file mode 100644
index 0000000000..88248fc78d
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_2_4.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q22] != 6 /\ y_ExplicitVarSizeWithDummy[q23] != 6 ->
+ x_ExplicitVarSizeWithDummy[q22] + 2 = y_ExplicitVarSizeWithDummy[q23]
+ | q22 : int(1..4), q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q9 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q9] < y_ExplicitVarSizeWithFlags_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q10] = false -> y_ExplicitVarSizeWithFlags_Values[q10] = 2
+ | q10 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q11 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q11] | q11 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q12]) | q12 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([y_ExplicitVarSizeWithDummy[q17] != 6 /\
+ y_ExplicitVarSizeWithDummy[q17] = y_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q19] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q21] /\
+ y_ExplicitVarSizeWithFlags_Values[q21] = y_ExplicitVarSizeWithDummy[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_3_1.eprime
new file mode 100644
index 0000000000..bf64c42988
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_3_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, y_Occurrence,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q26] != 6 /\ y_ExplicitVarSizeWithDummy[q27] != 6 ->
+ x_ExplicitVarSizeWithDummy[q26] + 2 = y_ExplicitVarSizeWithDummy[q27]
+ | q26 : int(1..4), q27 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([q9 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q9] < x_ExplicitVarSizeWithMarker_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([q10 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q10] = 2 | q10 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 6 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] != 6 ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q19] = x_ExplicitVarSizeWithDummy[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q20]) | q20 : int(2..5)]),
+ and([y_Occurrence[q21] ->
+ or([y_ExplicitVarSizeWithDummy[q23] != 6 /\ y_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q25] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q25]] | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_3_2.eprime
new file mode 100644
index 0000000000..e948b9d5dd
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_3_2.eprime
@@ -0,0 +1,37 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q20] != 6 /\ y_ExplicitVarSizeWithDummy[q21] != 6 ->
+ x_ExplicitVarSizeWithDummy[q20] + 2 = y_ExplicitVarSizeWithDummy[q21]
+ | q20 : int(1..4), q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([q9 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q9] < x_ExplicitVarSizeWithMarker_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([q10 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q10] = 2 | q10 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 6 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] != 6 ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q19] = x_ExplicitVarSizeWithDummy[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_3_3.eprime
new file mode 100644
index 0000000000..96a79f1b62
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_3_3.eprime
@@ -0,0 +1,54 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q31] != 6 /\ y_ExplicitVarSizeWithDummy[q32] != 6 ->
+ x_ExplicitVarSizeWithDummy[q31] + 2 = y_ExplicitVarSizeWithDummy[q32]
+ | q31 : int(1..4), q32 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([q9 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q9] < x_ExplicitVarSizeWithMarker_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([q10 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q10] = 2 | q10 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 6 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] != 6 ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q19] = x_ExplicitVarSizeWithDummy[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q20 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q20] < y_ExplicitVarSizeWithMarker_Values[q20 + 1]
+ | q20 : int(1..3)]),
+ and([q21 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q21] = 2 | q21 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q24 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q26] != 6 /\
+ y_ExplicitVarSizeWithDummy[q26] = y_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q28] != 6 ->
+ or([q30 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q30] = y_ExplicitVarSizeWithDummy[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_3_4.eprime
new file mode 100644
index 0000000000..466ab4e3bf
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_3_4.eprime
@@ -0,0 +1,56 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q33] != 6 /\ y_ExplicitVarSizeWithDummy[q34] != 6 ->
+ x_ExplicitVarSizeWithDummy[q33] + 2 = y_ExplicitVarSizeWithDummy[q34]
+ | q33 : int(1..4), q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([q9 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q9] < x_ExplicitVarSizeWithMarker_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([q10 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q10] = 2 | q10 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q15] != 6 /\
+ x_ExplicitVarSizeWithDummy[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q17] != 6 ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q19] = x_ExplicitVarSizeWithDummy[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q20] < y_ExplicitVarSizeWithFlags_Values[q20 + 1]
+ | q20 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21] = false -> y_ExplicitVarSizeWithFlags_Values[q21] = 2
+ | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q22 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q22] | q22 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q23]) | q23 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([y_ExplicitVarSizeWithDummy[q28] != 6 /\
+ y_ExplicitVarSizeWithDummy[q28] = y_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q30] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q32] /\
+ y_ExplicitVarSizeWithFlags_Values[q32] = y_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_4_1.eprime
new file mode 100644
index 0000000000..a1084e9824
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_4_1.eprime
@@ -0,0 +1,45 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, y_Occurrence,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q28] != 6 /\ y_ExplicitVarSizeWithDummy[q29] != 6 ->
+ x_ExplicitVarSizeWithDummy[q28] + 2 = y_ExplicitVarSizeWithDummy[q29]
+ | q28 : int(1..4), q29 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q9] < x_ExplicitVarSizeWithFlags_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] = false -> x_ExplicitVarSizeWithFlags_Values[q10] = 2
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q11] | q11 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q12]) | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 6 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q19] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\
+ x_ExplicitVarSizeWithFlags_Values[q21] = x_ExplicitVarSizeWithDummy[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q22]) | q22 : int(2..5)]),
+ and([y_Occurrence[q23] ->
+ or([y_ExplicitVarSizeWithDummy[q25] != 6 /\ y_ExplicitVarSizeWithDummy[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q27] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q27]] | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_4_2.eprime
new file mode 100644
index 0000000000..43b2f0a07f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_4_2.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q22] != 6 /\ y_ExplicitVarSizeWithDummy[q23] != 6 ->
+ x_ExplicitVarSizeWithDummy[q22] + 2 = y_ExplicitVarSizeWithDummy[q23]
+ | q22 : int(1..4), q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q9] < x_ExplicitVarSizeWithFlags_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] = false -> x_ExplicitVarSizeWithFlags_Values[q10] = 2
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q11] | q11 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q12]) | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 6 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q19] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\
+ x_ExplicitVarSizeWithFlags_Values[q21] = x_ExplicitVarSizeWithDummy[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_4_3.eprime
new file mode 100644
index 0000000000..d589c54438
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_4_3.eprime
@@ -0,0 +1,56 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q33] != 6 /\ y_ExplicitVarSizeWithDummy[q34] != 6 ->
+ x_ExplicitVarSizeWithDummy[q33] + 2 = y_ExplicitVarSizeWithDummy[q34]
+ | q33 : int(1..4), q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q9] < x_ExplicitVarSizeWithFlags_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] = false -> x_ExplicitVarSizeWithFlags_Values[q10] = 2
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q11] | q11 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q12]) | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 6 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q19] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\
+ x_ExplicitVarSizeWithFlags_Values[q21] = x_ExplicitVarSizeWithDummy[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([q22 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q22] < y_ExplicitVarSizeWithMarker_Values[q22 + 1]
+ | q22 : int(1..3)]),
+ and([q23 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q23] = 2 | q23 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q26 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q28] != 6 /\
+ y_ExplicitVarSizeWithDummy[q28] = y_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q30] != 6 ->
+ or([q32 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q32] = y_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_2_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_2_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_2_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_2_4_4.eprime
new file mode 100644
index 0000000000..eccd37c27c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_2_4_4.eprime
@@ -0,0 +1,58 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithDummy[q35] != 6 /\ y_ExplicitVarSizeWithDummy[q36] != 6 ->
+ x_ExplicitVarSizeWithDummy[q35] + 2 = y_ExplicitVarSizeWithDummy[q36]
+ | q35 : int(1..4), q36 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q9] < x_ExplicitVarSizeWithFlags_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] = false -> x_ExplicitVarSizeWithFlags_Values[q10] = 2
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q11] | q11 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q12]) | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([x_ExplicitVarSizeWithDummy[q17] != 6 /\
+ x_ExplicitVarSizeWithDummy[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q19] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\
+ x_ExplicitVarSizeWithFlags_Values[q21] = x_ExplicitVarSizeWithDummy[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q22 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q22] < y_ExplicitVarSizeWithFlags_Values[q22 + 1]
+ | q22 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q23] = false -> y_ExplicitVarSizeWithFlags_Values[q23] = 2
+ | q23 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q24 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q24] | q24 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q25]) | q25 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q28] ->
+ or([y_ExplicitVarSizeWithDummy[q30] != 6 /\
+ y_ExplicitVarSizeWithDummy[q30] = y_ExplicitVarSizeWithFlags_Values[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q32] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q34] /\
+ y_ExplicitVarSizeWithFlags_Values[q34] = y_ExplicitVarSizeWithDummy[q32]
+ | q34 : int(1..4)])
+ | q32 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_1_1.eprime
new file mode 100644
index 0000000000..37bb76ce7c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_1_1.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, y_Occurrence, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q15] != 6 /\ q16 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q15] + 2 = y_ExplicitVarSizeWithMarker_Values[q16]
+ | q15 : int(1..4), q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(x_Occurrence[q8]) | q8 : int(2..5)]),
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithDummy[q19] != 6 /\ x_ExplicitVarSizeWithDummy[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q21] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q21]] | q21 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q9]) | q9 : int(2..5)]),
+ and([y_Occurrence[q10] ->
+ or([q12 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q12] = q10
+ | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([q14 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q14]]
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_1_2.eprime
new file mode 100644
index 0000000000..ef24047245
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_1_2.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q26] != 6 /\ q27 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q26] + 2 = y_ExplicitVarSizeWithMarker_Values[q27]
+ | q26 : int(1..4), q27 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(x_Occurrence[q8]) | q8 : int(2..5)]),
+ and([x_Occurrence[q21] ->
+ or([x_ExplicitVarSizeWithDummy[q23] != 6 /\ x_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q25] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q25]] | q25 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q9] < y_ExplicitVarSizeWithDummy[q9 + 1] \/ y_ExplicitVarSizeWithDummy[q9] = 6
+ | q9 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q10] = 6 -> y_ExplicitVarSizeWithDummy[q10 + 1] = 6 | q10 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q11] != 6) | q11 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([q16 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q16] = y_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q20] != 6 /\
+ y_ExplicitVarSizeWithDummy[q20] = y_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_1_3.eprime
new file mode 100644
index 0000000000..e78df8b806
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_1_3.eprime
@@ -0,0 +1,27 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 /\ q15 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q14] + 2 = y_ExplicitVarSizeWithMarker_Values[q15]
+ | q14 : int(1..4), q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(x_Occurrence[q8]) | q8 : int(2..5)]),
+ and([x_Occurrence[q9] ->
+ or([x_ExplicitVarSizeWithDummy[q11] != 6 /\ x_ExplicitVarSizeWithDummy[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q13]] | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_1_4.eprime
new file mode 100644
index 0000000000..1760ad207f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_1_4.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q27] != 6 /\ q28 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q27] + 2 = y_ExplicitVarSizeWithMarker_Values[q28]
+ | q27 : int(1..4), q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(x_Occurrence[q8]) | q8 : int(2..5)]),
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 6 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q9 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q9] < y_ExplicitVarSizeWithFlags_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q10] = false -> y_ExplicitVarSizeWithFlags_Values[q10] = 2
+ | q10 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q11 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q11] | q11 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q12]) | q12 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q17] = y_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q21] /\
+ y_ExplicitVarSizeWithFlags_Values[q21] = y_ExplicitVarSizeWithMarker_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_2_1.eprime
new file mode 100644
index 0000000000..230e345c18
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_2_1.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithDummy, y_Occurrence, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 /\ q15 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q14] + 2 = y_ExplicitVarSizeWithMarker_Values[q15]
+ | q14 : int(1..4), q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q8]) | q8 : int(2..5)]),
+ and([y_Occurrence[q9] ->
+ or([q11 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q11] = q9
+ | q11 : int(1..4)])
+ | q9 : int(2..5)]),
+ and([q13 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q13]]
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_2_2.eprime
new file mode 100644
index 0000000000..f2e207b1c7
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_2_2.eprime
@@ -0,0 +1,37 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q20] != 6 /\ q21 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q20] + 2 = y_ExplicitVarSizeWithMarker_Values[q21]
+ | q20 : int(1..4), q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q8] < y_ExplicitVarSizeWithDummy[q8 + 1] \/ y_ExplicitVarSizeWithDummy[q8] = 6
+ | q8 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q9] = 6 -> y_ExplicitVarSizeWithDummy[q9 + 1] = 6 | q9 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q10] != 6) | q10 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q13] != 6 ->
+ or([q15 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q15] = y_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([q17 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q19] != 6 /\
+ y_ExplicitVarSizeWithDummy[q19] = y_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_2_3.eprime
new file mode 100644
index 0000000000..55128bbafc
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_2_3.eprime
@@ -0,0 +1,20 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on [x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q8] != 6 /\ q9 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q8] + 2 = y_ExplicitVarSizeWithMarker_Values[q9]
+ | q8 : int(1..4), q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_2_4.eprime
new file mode 100644
index 0000000000..f69d957f61
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_2_4.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q21] != 6 /\ q22 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q21] + 2 = y_ExplicitVarSizeWithMarker_Values[q22]
+ | q21 : int(1..4), q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q8] < y_ExplicitVarSizeWithFlags_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q9] = false -> y_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q10 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q10] | q10 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q11]) | q11 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q16] = y_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q20] /\
+ y_ExplicitVarSizeWithFlags_Values[q20] = y_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_3_1.eprime
new file mode 100644
index 0000000000..a25e81deb3
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_3_1.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, y_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q25] != 6 /\ q26 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q25] + 2 = y_ExplicitVarSizeWithMarker_Values[q26]
+ | q25 : int(1..4), q26 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q8 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q8] < x_ExplicitVarSizeWithMarker_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([q9 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q9] = 2 | q9 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q12 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 6 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithMarker_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q19]) | q19 : int(2..5)]),
+ and([y_Occurrence[q20] ->
+ or([q22 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..4)])
+ | q20 : int(2..5)]),
+ and([q24 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q24]]
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_3_2.eprime
new file mode 100644
index 0000000000..f4cb2aafb3
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_3_2.eprime
@@ -0,0 +1,54 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q31] != 6 /\ q32 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q31] + 2 = y_ExplicitVarSizeWithMarker_Values[q32]
+ | q31 : int(1..4), q32 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q8 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q8] < x_ExplicitVarSizeWithMarker_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([q9 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q9] = 2 | q9 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q12 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 6 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithMarker_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q19] < y_ExplicitVarSizeWithDummy[q19 + 1] \/ y_ExplicitVarSizeWithDummy[q19] = 6
+ | q19 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q20] = 6 -> y_ExplicitVarSizeWithDummy[q20 + 1] = 6 | q20 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q21] != 6) | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q24] != 6 ->
+ or([q26 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q26] = y_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([q28 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q30] != 6 /\
+ y_ExplicitVarSizeWithDummy[q30] = y_ExplicitVarSizeWithMarker_Values[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_3_3.eprime
new file mode 100644
index 0000000000..8cb929ecd5
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_3_3.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q19] != 6 /\ q20 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q19] + 2 = y_ExplicitVarSizeWithMarker_Values[q20]
+ | q19 : int(1..4), q20 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q8 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q8] < x_ExplicitVarSizeWithMarker_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([q9 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q9] = 2 | q9 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q12 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 6 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithMarker_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_3_4.eprime
new file mode 100644
index 0000000000..28b7796968
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_3_4.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q32] != 6 /\ q33 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q32] + 2 = y_ExplicitVarSizeWithMarker_Values[q33]
+ | q32 : int(1..4), q33 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q8 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q8] < x_ExplicitVarSizeWithMarker_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([q9 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q9] = 2 | q9 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q12 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q14] != 6 /\
+ x_ExplicitVarSizeWithDummy[q14] = x_ExplicitVarSizeWithMarker_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q19] < y_ExplicitVarSizeWithFlags_Values[q19 + 1]
+ | q19 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20] = false -> y_ExplicitVarSizeWithFlags_Values[q20] = 2
+ | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q21] | q21 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q22]) | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q27] = y_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([q29 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q31] /\
+ y_ExplicitVarSizeWithFlags_Values[q31] = y_ExplicitVarSizeWithMarker_Values[q29]
+ | q31 : int(1..4)])
+ | q29 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_4_1.eprime
new file mode 100644
index 0000000000..65a1069752
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_4_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, y_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q27] != 6 /\ q28 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q27] + 2 = y_ExplicitVarSizeWithMarker_Values[q28]
+ | q27 : int(1..4), q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q8] < x_ExplicitVarSizeWithFlags_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] = false -> x_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q10] | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q11]) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 6 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\
+ x_ExplicitVarSizeWithFlags_Values[q20] = x_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q21]) | q21 : int(2..5)]),
+ and([y_Occurrence[q22] ->
+ or([q24 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(2..5)]),
+ and([q26 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_4_2.eprime
new file mode 100644
index 0000000000..6026ed497b
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_4_2.eprime
@@ -0,0 +1,55 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q33] != 6 /\ q34 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q33] + 2 = y_ExplicitVarSizeWithMarker_Values[q34]
+ | q33 : int(1..4), q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q8] < x_ExplicitVarSizeWithFlags_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] = false -> x_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q10] | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q11]) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 6 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\
+ x_ExplicitVarSizeWithFlags_Values[q20] = x_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q21] < y_ExplicitVarSizeWithDummy[q21 + 1] \/ y_ExplicitVarSizeWithDummy[q21] = 6
+ | q21 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q22] = 6 -> y_ExplicitVarSizeWithDummy[q22 + 1] = 6 | q22 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q23] != 6) | q23 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q26] != 6 ->
+ or([q28 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q28] = y_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q32] != 6 /\
+ y_ExplicitVarSizeWithDummy[q32] = y_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_4_3.eprime
new file mode 100644
index 0000000000..f8dcddf3df
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_4_3.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q21] != 6 /\ q22 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q21] + 2 = y_ExplicitVarSizeWithMarker_Values[q22]
+ | q21 : int(1..4), q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q8] < x_ExplicitVarSizeWithFlags_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] = false -> x_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q10] | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q11]) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 6 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\
+ x_ExplicitVarSizeWithFlags_Values[q20] = x_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_3_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_3_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_3_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_3_4_4.eprime
new file mode 100644
index 0000000000..1cc5077042
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_3_4_4.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q34] != 6 /\ q35 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithDummy[q34] + 2 = y_ExplicitVarSizeWithMarker_Values[q35]
+ | q34 : int(1..4), q35 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q8] < x_ExplicitVarSizeWithFlags_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] = false -> x_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q10] | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q11]) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 6 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\
+ x_ExplicitVarSizeWithFlags_Values[q20] = x_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q21] < y_ExplicitVarSizeWithFlags_Values[q21 + 1]
+ | q21 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q22] = false -> y_ExplicitVarSizeWithFlags_Values[q22] = 2
+ | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q23 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q23] | q23 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q24]) | q24 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q27] ->
+ or([q29 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q29] = y_ExplicitVarSizeWithFlags_Values[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([q31 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q33] /\
+ y_ExplicitVarSizeWithFlags_Values[q33] = y_ExplicitVarSizeWithMarker_Values[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_1_1.eprime
new file mode 100644
index 0000000000..51a23a711f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_1_1.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, y_Occurrence, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q17] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q18] ->
+ x_ExplicitVarSizeWithDummy[q17] + 2 = y_ExplicitVarSizeWithFlags_Values[q18]
+ | q17 : int(1..4), q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q10]) | q10 : int(2..5)]),
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 6 /\ x_ExplicitVarSizeWithDummy[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q23] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q23]] | q23 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q11]) | q11 : int(2..5)]),
+ and([y_Occurrence[q12] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q14] /\ y_ExplicitVarSizeWithFlags_Values[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q16] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_1_2.eprime
new file mode 100644
index 0000000000..083bfa5f86
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_1_2.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q28] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q29] ->
+ x_ExplicitVarSizeWithDummy[q28] + 2 = y_ExplicitVarSizeWithFlags_Values[q29]
+ | q28 : int(1..4), q29 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q10]) | q10 : int(2..5)]),
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithDummy[q25] != 6 /\ x_ExplicitVarSizeWithDummy[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q27] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q27]] | q27 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q11] < y_ExplicitVarSizeWithDummy[q11 + 1] \/ y_ExplicitVarSizeWithDummy[q11] = 6
+ | q11 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q12] = 6 -> y_ExplicitVarSizeWithDummy[q12 + 1] = 6 | q12 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q13] != 6) | q13 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q18] /\
+ y_ExplicitVarSizeWithFlags_Values[q18] = y_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20] ->
+ or([y_ExplicitVarSizeWithDummy[q22] != 6 /\
+ y_ExplicitVarSizeWithDummy[q22] = y_ExplicitVarSizeWithFlags_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_1_3.eprime
new file mode 100644
index 0000000000..c74d6fc321
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_1_3.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q27] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q28] ->
+ x_ExplicitVarSizeWithDummy[q27] + 2 = y_ExplicitVarSizeWithFlags_Values[q28]
+ | q27 : int(1..4), q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q10]) | q10 : int(2..5)]),
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithDummy[q24] != 6 /\ x_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q26] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)]),
+ and([q11 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q11] < y_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q12] = 2 | q12 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q15 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q17] /\
+ y_ExplicitVarSizeWithFlags_Values[q17] = y_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([q21 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q21] = y_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_1_4.eprime
new file mode 100644
index 0000000000..97d878a880
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_1_4.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q17] ->
+ x_ExplicitVarSizeWithDummy[q16] + 2 = y_ExplicitVarSizeWithFlags_Values[q17]
+ | q16 : int(1..4), q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q10]) | q10 : int(2..5)]),
+ and([x_Occurrence[q11] ->
+ or([x_ExplicitVarSizeWithDummy[q13] != 6 /\ x_ExplicitVarSizeWithDummy[q13] = q11 | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 6 -> x_Occurrence[x_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_2_1.eprime
new file mode 100644
index 0000000000..d2d26b37e7
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_2_1.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithDummy, y_Occurrence, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q17] ->
+ x_ExplicitVarSizeWithDummy[q16] + 2 = y_ExplicitVarSizeWithFlags_Values[q17]
+ | q16 : int(1..4), q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q10]) | q10 : int(2..5)]),
+ and([y_Occurrence[q11] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q13] /\ y_ExplicitVarSizeWithFlags_Values[q13] = q11 | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q15]]
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_2_2.eprime
new file mode 100644
index 0000000000..327bbcc12e
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_2_2.eprime
@@ -0,0 +1,38 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q22] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q23] ->
+ x_ExplicitVarSizeWithDummy[q22] + 2 = y_ExplicitVarSizeWithFlags_Values[q23]
+ | q22 : int(1..4), q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q10] < y_ExplicitVarSizeWithDummy[q10 + 1] \/ y_ExplicitVarSizeWithDummy[q10] = 6
+ | q10 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q11] = 6 -> y_ExplicitVarSizeWithDummy[q11 + 1] = 6 | q11 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q12] != 6) | q12 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q15] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q17] /\
+ y_ExplicitVarSizeWithFlags_Values[q17] = y_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([y_ExplicitVarSizeWithDummy[q21] != 6 /\
+ y_ExplicitVarSizeWithDummy[q21] = y_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_2_3.eprime
new file mode 100644
index 0000000000..7b22da50fd
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_2_3.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q21] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q22] ->
+ x_ExplicitVarSizeWithDummy[q21] + 2 = y_ExplicitVarSizeWithFlags_Values[q22]
+ | q21 : int(1..4), q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([q10 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q10] < y_ExplicitVarSizeWithMarker_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([q11 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q14 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q16] /\
+ y_ExplicitVarSizeWithFlags_Values[q16] = y_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q18] ->
+ or([q20 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q20] = y_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_2_4.eprime
new file mode 100644
index 0000000000..1fa334760d
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_2_4.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on [x_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q10] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q11] ->
+ x_ExplicitVarSizeWithDummy[q10] + 2 = y_ExplicitVarSizeWithFlags_Values[q11]
+ | q10 : int(1..4), q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_3_1.eprime
new file mode 100644
index 0000000000..25a9e61546
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_3_1.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy, y_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q27] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q28] ->
+ x_ExplicitVarSizeWithDummy[q27] + 2 = y_ExplicitVarSizeWithFlags_Values[q28]
+ | q27 : int(1..4), q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([q10 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q10] < x_ExplicitVarSizeWithMarker_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([q11 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 6 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 6 ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q20] = x_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q21]) | q21 : int(2..5)]),
+ and([y_Occurrence[q22] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q24] /\ y_ExplicitVarSizeWithFlags_Values[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q26] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q26]]
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_3_2.eprime
new file mode 100644
index 0000000000..64200ff954
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_3_2.eprime
@@ -0,0 +1,55 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q33] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q34] ->
+ x_ExplicitVarSizeWithDummy[q33] + 2 = y_ExplicitVarSizeWithFlags_Values[q34]
+ | q33 : int(1..4), q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([q10 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q10] < x_ExplicitVarSizeWithMarker_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([q11 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 6 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 6 ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q20] = x_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q21] < y_ExplicitVarSizeWithDummy[q21 + 1] \/ y_ExplicitVarSizeWithDummy[q21] = 6
+ | q21 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q22] = 6 -> y_ExplicitVarSizeWithDummy[q22 + 1] = 6 | q22 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q23] != 6) | q23 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q26] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q28] /\
+ y_ExplicitVarSizeWithFlags_Values[q28] = y_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([y_ExplicitVarSizeWithDummy[q32] != 6 /\
+ y_ExplicitVarSizeWithDummy[q32] = y_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_3_3.eprime
new file mode 100644
index 0000000000..ccb1314b95
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_3_3.eprime
@@ -0,0 +1,58 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q32] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q33] ->
+ x_ExplicitVarSizeWithDummy[q32] + 2 = y_ExplicitVarSizeWithFlags_Values[q33]
+ | q32 : int(1..4), q33 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([q10 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q10] < x_ExplicitVarSizeWithMarker_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([q11 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 6 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 6 ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q20] = x_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([q21 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q21] < y_ExplicitVarSizeWithMarker_Values[q21 + 1]
+ | q21 : int(1..3)]),
+ and([q22 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q22] = 2 | q22 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q25 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q27] /\
+ y_ExplicitVarSizeWithFlags_Values[q27] = y_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q29] ->
+ or([q31 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q31] = y_ExplicitVarSizeWithFlags_Values[q29]
+ | q31 : int(1..4)])
+ | q29 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_3_4.eprime
new file mode 100644
index 0000000000..f3cf03d434
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_3_4.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q21] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q22] ->
+ x_ExplicitVarSizeWithDummy[q21] + 2 = y_ExplicitVarSizeWithFlags_Values[q22]
+ | q21 : int(1..4), q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([q10 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q10] < x_ExplicitVarSizeWithMarker_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([q11 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 6 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q18] != 6 ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q20] = x_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_4_1.eprime
new file mode 100644
index 0000000000..2e1cf8717a
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_4_1.eprime
@@ -0,0 +1,49 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy, y_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q29] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q30] ->
+ x_ExplicitVarSizeWithDummy[q29] + 2 = y_ExplicitVarSizeWithFlags_Values[q30]
+ | q29 : int(1..4), q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 2
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\
+ x_ExplicitVarSizeWithFlags_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q23]) | q23 : int(2..5)]),
+ and([y_Occurrence[q24] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q26] /\ y_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q28] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_4_2.eprime
new file mode 100644
index 0000000000..ad0d98f173
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_4_2.eprime
@@ -0,0 +1,57 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q35] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q36] ->
+ x_ExplicitVarSizeWithDummy[q35] + 2 = y_ExplicitVarSizeWithFlags_Values[q36]
+ | q35 : int(1..4), q36 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 2
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\
+ x_ExplicitVarSizeWithFlags_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q23] < y_ExplicitVarSizeWithDummy[q23 + 1] \/ y_ExplicitVarSizeWithDummy[q23] = 6
+ | q23 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q24] = 6 -> y_ExplicitVarSizeWithDummy[q24 + 1] = 6 | q24 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q25] != 6) | q25 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q28] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q30] /\
+ y_ExplicitVarSizeWithFlags_Values[q30] = y_ExplicitVarSizeWithDummy[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q32] ->
+ or([y_ExplicitVarSizeWithDummy[q34] != 6 /\
+ y_ExplicitVarSizeWithDummy[q34] = y_ExplicitVarSizeWithFlags_Values[q32]
+ | q34 : int(1..4)])
+ | q32 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_4_3.eprime
new file mode 100644
index 0000000000..c1250928a1
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_4_3.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q34] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q35] ->
+ x_ExplicitVarSizeWithDummy[q34] + 2 = y_ExplicitVarSizeWithFlags_Values[q35]
+ | q34 : int(1..4), q35 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 2
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\
+ x_ExplicitVarSizeWithFlags_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q23 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q23] < y_ExplicitVarSizeWithMarker_Values[q23 + 1]
+ | q23 : int(1..3)]),
+ and([q24 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q24] = 2 | q24 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q27 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q29] /\
+ y_ExplicitVarSizeWithFlags_Values[q29] = y_ExplicitVarSizeWithMarker_Values[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q31] ->
+ or([q33 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q33] = y_ExplicitVarSizeWithFlags_Values[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_2_4_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_2_4_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_2_4_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_2_4_4_4.eprime
new file mode 100644
index 0000000000..b577e5f27d
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_2_4_4_4.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithDummy[q23] != 6 /\ y_ExplicitVarSizeWithFlags_Flags[q24] ->
+ x_ExplicitVarSizeWithDummy[q23] + 2 = y_ExplicitVarSizeWithFlags_Values[q24]
+ | q23 : int(1..4), q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q1] < x_ExplicitVarSizeWithDummy[q1 + 1] \/ x_ExplicitVarSizeWithDummy[q1] = 6
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q2] = 6 -> x_ExplicitVarSizeWithDummy[q2 + 1] = 6 | q2 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q3] != 6) | q3 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q10] < x_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] = false -> x_ExplicitVarSizeWithFlags_Values[q11] = 2
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q20] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\
+ x_ExplicitVarSizeWithFlags_Values[q22] = x_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_1_1.eprime
new file mode 100644
index 0000000000..0898d273ff
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_1_1.eprime
@@ -0,0 +1,23 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q11] + 2 = j
+ | q11 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q5]) | q5 : int(2..5)]),
+ and([x_Occurrence[q6] ->
+ or([q8 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q8] = q6 | q8 : int(1..4)])
+ | q6 : int(2..5)]),
+ and([q10 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q10]]
+ | q10 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_1_2.eprime
new file mode 100644
index 0000000000..0d82bb728f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_1_2.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy,
+ y_Occurrence]
+such that
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q20] + 2 = j
+ | q20 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q5]) | q5 : int(2..5)]),
+ and([x_Occurrence[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q17] = q15
+ | q17 : int(1..4)])
+ | q15 : int(2..5)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q19]]
+ | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q11] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q11]] | q11 : int(1..4)]),
+ and([y_Occurrence[q12] ->
+ or([y_ExplicitVarSizeWithDummy[q14] != 6 /\ y_ExplicitVarSizeWithDummy[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_1_3.eprime
new file mode 100644
index 0000000000..19d7d14337
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_1_3.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q19] + 2 = j
+ | q19 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q5]) | q5 : int(2..5)]),
+ and([x_Occurrence[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q16] = q14
+ | q16 : int(1..4)])
+ | q14 : int(2..5)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q18]]
+ | q18 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q10 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q10]]
+ | q10 : int(1..4)]),
+ and([y_Occurrence[q11] ->
+ or([q13 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q13] = q11
+ | q13 : int(1..4)])
+ | q11 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_1_4.eprime
new file mode 100644
index 0000000000..367803c85b
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_1_4.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q21] + 2 = j
+ | q21 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q5]) | q5 : int(2..5)]),
+ and([x_Occurrence[q16] ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..4)])
+ | q16 : int(2..5)]),
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q20]]
+ | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q12] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q12]]
+ | q12 : int(1..4)]),
+ and([y_Occurrence[q13] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q15] /\ y_ExplicitVarSizeWithFlags_Values[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_2_1.eprime
new file mode 100644
index 0000000000..5fb49b3743
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_2_1.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([q17 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q17] + 2 = j
+ | q17 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 6 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 6 ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 6 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_2_2.eprime
new file mode 100644
index 0000000000..76e803c650
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_2_2.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q26] + 2 = j
+ | q26 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 6 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 6 ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 6 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q17] < y_ExplicitVarSizeWithDummy[q17 + 1] \/ y_ExplicitVarSizeWithDummy[q17] = 6
+ | q17 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q18] = 6 -> y_ExplicitVarSizeWithDummy[q18 + 1] = 6 | q18 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q19] != 6) | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q22] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q22]] | q22 : int(1..4)]),
+ and([y_Occurrence[q23] ->
+ or([y_ExplicitVarSizeWithDummy[q25] != 6 /\ y_ExplicitVarSizeWithDummy[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_2_3.eprime
new file mode 100644
index 0000000000..8f44fada43
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_2_3.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q25] + 2 = j
+ | q25 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 6 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 6 ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 6 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q17 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q17] < y_ExplicitVarSizeWithMarker_Values[q17 + 1]
+ | q17 : int(1..3)]),
+ and([q18 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q18] = 2 | q18 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q21 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q21]]
+ | q21 : int(1..4)]),
+ and([y_Occurrence[q22] ->
+ or([q24 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_2_4.eprime
new file mode 100644
index 0000000000..228e19fb6b
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_2_4.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q27] + 2 = j
+ | q27 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q5] < x_ExplicitVarSizeWithDummy[q5 + 1] \/ x_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q6] = 6 -> x_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] != 6 ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q12] = x_ExplicitVarSizeWithDummy[q10]
+ | q12 : int(1..4)])
+ | q10 : int(1..4)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q16] != 6 /\
+ x_ExplicitVarSizeWithDummy[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q17 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q17] < y_ExplicitVarSizeWithFlags_Values[q17 + 1]
+ | q17 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q18] = false -> y_ExplicitVarSizeWithFlags_Values[q18] = 2
+ | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q19] | q19 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q20]) | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q23] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q23]]
+ | q23 : int(1..4)]),
+ and([y_Occurrence[q24] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q26] /\ y_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_3_1.eprime
new file mode 100644
index 0000000000..1b5ab3050f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_3_1.eprime
@@ -0,0 +1,16 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([q5 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q5] + 2 = j
+ | q5 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_3_2.eprime
new file mode 100644
index 0000000000..67c1711a50
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_3_2.eprime
@@ -0,0 +1,26 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q14] + 2 = j
+ | q14 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q5] < y_ExplicitVarSizeWithDummy[q5 + 1] \/ y_ExplicitVarSizeWithDummy[q5] = 6
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q6] = 6 -> y_ExplicitVarSizeWithDummy[q6 + 1] = 6 | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q7] != 6) | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q10] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q10]] | q10 : int(1..4)]),
+ and([y_Occurrence[q11] ->
+ or([y_ExplicitVarSizeWithDummy[q13] != 6 /\ y_ExplicitVarSizeWithDummy[q13] = q11 | q13 : int(1..4)])
+ | q11 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_3_3.eprime
new file mode 100644
index 0000000000..ae76323065
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_3_3.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q13] + 2 = j
+ | q13 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ and([q5 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q5] < y_ExplicitVarSizeWithMarker_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([q6 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q6] = 2 | q6 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q9 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q9]]
+ | q9 : int(1..4)]),
+ and([y_Occurrence[q10] ->
+ or([q12 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q12] = q10
+ | q12 : int(1..4)])
+ | q10 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_3_4.eprime
new file mode 100644
index 0000000000..c222d89b6a
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_3_4.eprime
@@ -0,0 +1,31 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q15] + 2 = j
+ | q15 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q5] < y_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6] = false -> y_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q11] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q11]]
+ | q11 : int(1..4)]),
+ and([y_Occurrence[q12] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q14] /\ y_ExplicitVarSizeWithFlags_Values[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_4_1.eprime
new file mode 100644
index 0000000000..d55d8473f1
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_4_1.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q18] + 2 = j
+ | q18 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_4_2.eprime
new file mode 100644
index 0000000000..4db7080ac5
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_4_2.eprime
@@ -0,0 +1,45 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q27] + 2 = j
+ | q27 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q18] < y_ExplicitVarSizeWithDummy[q18 + 1] \/ y_ExplicitVarSizeWithDummy[q18] = 6
+ | q18 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q19] = 6 -> y_ExplicitVarSizeWithDummy[q19 + 1] = 6 | q19 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q20] != 6) | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q23] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q23]] | q23 : int(1..4)]),
+ and([y_Occurrence[q24] ->
+ or([y_ExplicitVarSizeWithDummy[q26] != 6 /\ y_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_4_3.eprime
new file mode 100644
index 0000000000..cc9cb3a8fe
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_4_3.eprime
@@ -0,0 +1,50 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_Occurrence]
+such that
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q26] + 2 = j
+ | q26 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q18] < y_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q19] = 2 | q19 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q22 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q22]]
+ | q22 : int(1..4)]),
+ and([y_Occurrence[q23] ->
+ or([q25 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..4)])
+ | q23 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_1_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_1_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_1_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_1_4_4.eprime
new file mode 100644
index 0000000000..286649e6b5
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_1_4_4.eprime
@@ -0,0 +1,51 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_Occurrence]
+such that
+ and([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ y_Occurrence[j] -> x_ExplicitVarSizeWithMarker_Values[q28] + 2 = j
+ | q28 : int(1..4), j : int(2..5)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q4]) | q4 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q5 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q5] < x_ExplicitVarSizeWithFlags_Values[q5 + 1]
+ | q5 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q6] = false -> x_ExplicitVarSizeWithFlags_Values[q6] = 2 | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q7] | q7 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q8]) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] ->
+ or([q13 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q13] = x_ExplicitVarSizeWithFlags_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q18 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q18] < y_ExplicitVarSizeWithFlags_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19] = false -> y_ExplicitVarSizeWithFlags_Values[q19] = 2
+ | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q20] | q20 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q21]) | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q24] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q24]]
+ | q24 : int(1..4)]),
+ and([y_Occurrence[q25] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q27] /\ y_ExplicitVarSizeWithFlags_Values[q27] = q25 | q27 : int(1..4)])
+ | q25 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_1_1.eprime
new file mode 100644
index 0000000000..3478aef4b6
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_1_1.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_Occurrence,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q16] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q15] + 2 = y_ExplicitVarSizeWithDummy[q16]
+ | q15 : int(1..4), q16 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q8]) | q8 : int(2..5)]),
+ and([x_Occurrence[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q19] = q17
+ | q19 : int(1..4)])
+ | q17 : int(2..5)]),
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q21]]
+ | q21 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q9]) | q9 : int(2..5)]),
+ and([y_Occurrence[q10] ->
+ or([y_ExplicitVarSizeWithDummy[q12] != 6 /\ y_ExplicitVarSizeWithDummy[q12] = q10 | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q14] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q14]] | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_1_2.eprime
new file mode 100644
index 0000000000..fd0da5899f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_1_2.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q15] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q14] + 2 = y_ExplicitVarSizeWithDummy[q15]
+ | q14 : int(1..4), q15 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q8]) | q8 : int(2..5)]),
+ and([x_Occurrence[q9] ->
+ or([q11 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q11] = q9
+ | q11 : int(1..4)])
+ | q9 : int(2..5)]),
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q13]]
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_1_3.eprime
new file mode 100644
index 0000000000..bbd02c7005
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_1_3.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q26] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q25] + 2 = y_ExplicitVarSizeWithDummy[q26]
+ | q25 : int(1..4), q26 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q8]) | q8 : int(2..5)]),
+ and([x_Occurrence[q20] ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..4)])
+ | q20 : int(2..5)]),
+ and([q24 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q24]]
+ | q24 : int(1..4)]),
+ and([q9 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q9] < y_ExplicitVarSizeWithMarker_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([q10 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q10] = 2 | q10 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q13 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q15] != 6 /\
+ y_ExplicitVarSizeWithDummy[q15] = y_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q17] != 6 ->
+ or([q19 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q19] = y_ExplicitVarSizeWithDummy[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_1_4.eprime
new file mode 100644
index 0000000000..f53ee8d570
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_1_4.eprime
@@ -0,0 +1,49 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q28] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q27] + 2 = y_ExplicitVarSizeWithDummy[q28]
+ | q27 : int(1..4), q28 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q8]) | q8 : int(2..5)]),
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(2..5)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q9 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q9] < y_ExplicitVarSizeWithFlags_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q10] = false -> y_ExplicitVarSizeWithFlags_Values[q10] = 2
+ | q10 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q11 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q11] | q11 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q12]) | q12 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([y_ExplicitVarSizeWithDummy[q17] != 6 /\
+ y_ExplicitVarSizeWithDummy[q17] = y_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q19] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q21] /\
+ y_ExplicitVarSizeWithFlags_Values[q21] = y_ExplicitVarSizeWithDummy[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_2_1.eprime
new file mode 100644
index 0000000000..6a169fe5a6
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_2_1.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_Occurrence,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q27] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q26] + 2 = y_ExplicitVarSizeWithDummy[q27]
+ | q26 : int(1..4), q27 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q8] < x_ExplicitVarSizeWithDummy[q8 + 1] \/ x_ExplicitVarSizeWithDummy[q8] = 6
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q9] = 6 -> x_ExplicitVarSizeWithDummy[q9 + 1] = 6 | q9 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q10] != 6) | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 6 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([q17 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q19] != 6 /\
+ x_ExplicitVarSizeWithDummy[q19] = x_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q20]) | q20 : int(2..5)]),
+ and([y_Occurrence[q21] ->
+ or([y_ExplicitVarSizeWithDummy[q23] != 6 /\ y_ExplicitVarSizeWithDummy[q23] = q21 | q23 : int(1..4)])
+ | q21 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q25] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q25]] | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_2_2.eprime
new file mode 100644
index 0000000000..7f3fb2bd48
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_2_2.eprime
@@ -0,0 +1,37 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q21] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q20] + 2 = y_ExplicitVarSizeWithDummy[q21]
+ | q20 : int(1..4), q21 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q8] < x_ExplicitVarSizeWithDummy[q8 + 1] \/ x_ExplicitVarSizeWithDummy[q8] = 6
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q9] = 6 -> x_ExplicitVarSizeWithDummy[q9 + 1] = 6 | q9 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q10] != 6) | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 6 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([q17 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q19] != 6 /\
+ x_ExplicitVarSizeWithDummy[q19] = x_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_2_3.eprime
new file mode 100644
index 0000000000..cc44894190
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_2_3.eprime
@@ -0,0 +1,54 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q32] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q31] + 2 = y_ExplicitVarSizeWithDummy[q32]
+ | q31 : int(1..4), q32 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q8] < x_ExplicitVarSizeWithDummy[q8 + 1] \/ x_ExplicitVarSizeWithDummy[q8] = 6
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q9] = 6 -> x_ExplicitVarSizeWithDummy[q9 + 1] = 6 | q9 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q10] != 6) | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 6 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([q17 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q19] != 6 /\
+ x_ExplicitVarSizeWithDummy[q19] = x_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([q20 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q20] < y_ExplicitVarSizeWithMarker_Values[q20 + 1]
+ | q20 : int(1..3)]),
+ and([q21 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q21] = 2 | q21 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q24 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q26] != 6 /\
+ y_ExplicitVarSizeWithDummy[q26] = y_ExplicitVarSizeWithMarker_Values[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q28] != 6 ->
+ or([q30 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q30] = y_ExplicitVarSizeWithDummy[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_2_4.eprime
new file mode 100644
index 0000000000..c22f517453
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_2_4.eprime
@@ -0,0 +1,56 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([q33 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q34] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q33] + 2 = y_ExplicitVarSizeWithDummy[q34]
+ | q33 : int(1..4), q34 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q8] < x_ExplicitVarSizeWithDummy[q8 + 1] \/ x_ExplicitVarSizeWithDummy[q8] = 6
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q9] = 6 -> x_ExplicitVarSizeWithDummy[q9 + 1] = 6 | q9 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q10] != 6) | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q13] != 6 ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([q17 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q19] != 6 /\
+ x_ExplicitVarSizeWithDummy[q19] = x_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q20] < y_ExplicitVarSizeWithFlags_Values[q20 + 1]
+ | q20 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21] = false -> y_ExplicitVarSizeWithFlags_Values[q21] = 2
+ | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q22 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q22] | q22 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q23]) | q23 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([y_ExplicitVarSizeWithDummy[q28] != 6 /\
+ y_ExplicitVarSizeWithDummy[q28] = y_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q30] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q32] /\
+ y_ExplicitVarSizeWithFlags_Values[q32] = y_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_3_1.eprime
new file mode 100644
index 0000000000..0059fed8b2
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_3_1.eprime
@@ -0,0 +1,27 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_Occurrence, y_ExplicitVarSizeWithDummy]
+such that
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q15] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q14] + 2 = y_ExplicitVarSizeWithDummy[q15]
+ | q14 : int(1..4), q15 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q8]) | q8 : int(2..5)]),
+ and([y_Occurrence[q9] ->
+ or([y_ExplicitVarSizeWithDummy[q11] != 6 /\ y_ExplicitVarSizeWithDummy[q11] = q9 | q11 : int(1..4)])
+ | q9 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q13] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q13]] | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_3_2.eprime
new file mode 100644
index 0000000000..99499bc7b1
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_3_2.eprime
@@ -0,0 +1,20 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([q8 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q9] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q8] + 2 = y_ExplicitVarSizeWithDummy[q9]
+ | q8 : int(1..4), q9 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_3_3.eprime
new file mode 100644
index 0000000000..45e304f746
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_3_3.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q20] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q19] + 2 = y_ExplicitVarSizeWithDummy[q20]
+ | q19 : int(1..4), q20 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ and([q8 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q8] < y_ExplicitVarSizeWithMarker_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([q9 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q9] = 2 | q9 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q12 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q14] != 6 /\
+ y_ExplicitVarSizeWithDummy[q14] = y_ExplicitVarSizeWithMarker_Values[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([q18 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q18] = y_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_3_4.eprime
new file mode 100644
index 0000000000..f098a13d32
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_3_4.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q22] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q21] + 2 = y_ExplicitVarSizeWithDummy[q22]
+ | q21 : int(1..4), q22 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q8] < y_ExplicitVarSizeWithFlags_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q9] = false -> y_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q10 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q10] | q10 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q11]) | q11 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([y_ExplicitVarSizeWithDummy[q16] != 6 /\
+ y_ExplicitVarSizeWithDummy[q16] = y_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q18] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q20] /\
+ y_ExplicitVarSizeWithFlags_Values[q20] = y_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_4_1.eprime
new file mode 100644
index 0000000000..6fc2962eea
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_4_1.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_Occurrence, y_ExplicitVarSizeWithDummy]
+such that
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q28] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q27] + 2 = y_ExplicitVarSizeWithDummy[q28]
+ | q27 : int(1..4), q28 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q8] < x_ExplicitVarSizeWithFlags_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] = false -> x_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q10] | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q11]) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\
+ x_ExplicitVarSizeWithFlags_Values[q20] = x_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q21]) | q21 : int(2..5)]),
+ and([y_Occurrence[q22] ->
+ or([y_ExplicitVarSizeWithDummy[q24] != 6 /\ y_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q26] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_4_2.eprime
new file mode 100644
index 0000000000..dbe9bc7729
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_4_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q22] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q21] + 2 = y_ExplicitVarSizeWithDummy[q22]
+ | q21 : int(1..4), q22 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q8] < x_ExplicitVarSizeWithFlags_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] = false -> x_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q10] | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q11]) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\
+ x_ExplicitVarSizeWithFlags_Values[q20] = x_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_4_3.eprime
new file mode 100644
index 0000000000..39e771368e
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_4_3.eprime
@@ -0,0 +1,58 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([q32 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q33] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q32] + 2 = y_ExplicitVarSizeWithDummy[q33]
+ | q32 : int(1..4), q33 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q8] < x_ExplicitVarSizeWithFlags_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] = false -> x_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q10] | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q11]) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\
+ x_ExplicitVarSizeWithFlags_Values[q20] = x_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([q21 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q21] < y_ExplicitVarSizeWithMarker_Values[q21 + 1]
+ | q21 : int(1..3)]),
+ and([q22 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q22] = 2 | q22 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q25 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q27] != 6 /\
+ y_ExplicitVarSizeWithDummy[q27] = y_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q29] != 6 ->
+ or([q31 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q31] = y_ExplicitVarSizeWithDummy[q29]
+ | q31 : int(1..4)])
+ | q29 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_2_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_2_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_2_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_2_4_4.eprime
new file mode 100644
index 0000000000..6425ad0a2b
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_2_4_4.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithDummy[q35] != 6 ->
+ x_ExplicitVarSizeWithMarker_Values[q34] + 2 = y_ExplicitVarSizeWithDummy[q35]
+ | q34 : int(1..4), q35 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q4] < y_ExplicitVarSizeWithDummy[q4 + 1] \/ y_ExplicitVarSizeWithDummy[q4] = 6
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q5] = 6 -> y_ExplicitVarSizeWithDummy[q5 + 1] = 6 | q5 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q6] != 6) | q6 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q8] < x_ExplicitVarSizeWithFlags_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] = false -> x_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q10] | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q11]) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\
+ x_ExplicitVarSizeWithFlags_Values[q20] = x_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q21] < y_ExplicitVarSizeWithFlags_Values[q21 + 1]
+ | q21 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q22] = false -> y_ExplicitVarSizeWithFlags_Values[q22] = 2
+ | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q23 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q23] | q23 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q24]) | q24 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q27] ->
+ or([y_ExplicitVarSizeWithDummy[q29] != 6 /\
+ y_ExplicitVarSizeWithDummy[q29] = y_ExplicitVarSizeWithFlags_Values[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q31] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q33] /\
+ y_ExplicitVarSizeWithFlags_Values[q33] = y_ExplicitVarSizeWithDummy[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_1_1.eprime
new file mode 100644
index 0000000000..3ec2bcc362
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_1_1.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker /\ q15 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q14] + 2 = y_ExplicitVarSizeWithMarker_Values[q15]
+ | q14 : int(1..4), q15 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(x_Occurrence[q7]) | q7 : int(2..5)]),
+ and([x_Occurrence[q16] ->
+ or([q18 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q18] = q16
+ | q18 : int(1..4)])
+ | q16 : int(2..5)]),
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q20]]
+ | q20 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q8]) | q8 : int(2..5)]),
+ and([y_Occurrence[q9] ->
+ or([q11 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q11] = q9
+ | q11 : int(1..4)])
+ | q9 : int(2..5)]),
+ and([q13 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q13]]
+ | q13 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_1_2.eprime
new file mode 100644
index 0000000000..8eaef50691
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_1_2.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ q26 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q25] + 2 = y_ExplicitVarSizeWithMarker_Values[q26]
+ | q25 : int(1..4), q26 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(x_Occurrence[q7]) | q7 : int(2..5)]),
+ and([x_Occurrence[q20] ->
+ or([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..4)])
+ | q20 : int(2..5)]),
+ and([q24 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q24]]
+ | q24 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q8] < y_ExplicitVarSizeWithDummy[q8 + 1] \/ y_ExplicitVarSizeWithDummy[q8] = 6
+ | q8 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q9] = 6 -> y_ExplicitVarSizeWithDummy[q9 + 1] = 6 | q9 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q10] != 6) | q10 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q13] != 6 ->
+ or([q15 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q15] = y_ExplicitVarSizeWithDummy[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([q17 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q19] != 6 /\
+ y_ExplicitVarSizeWithDummy[q19] = y_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_1_3.eprime
new file mode 100644
index 0000000000..16bba88020
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_1_3.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ q14 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q13] + 2 = y_ExplicitVarSizeWithMarker_Values[q14]
+ | q13 : int(1..4), q14 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(x_Occurrence[q7]) | q7 : int(2..5)]),
+ and([x_Occurrence[q8] ->
+ or([q10 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q10] = q8
+ | q10 : int(1..4)])
+ | q8 : int(2..5)]),
+ and([q12 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q12]]
+ | q12 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_1_4.eprime
new file mode 100644
index 0000000000..487253019b
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_1_4.eprime
@@ -0,0 +1,51 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker /\ q27 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q26] + 2 = y_ExplicitVarSizeWithMarker_Values[q27]
+ | q26 : int(1..4), q27 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(x_Occurrence[q7]) | q7 : int(2..5)]),
+ and([x_Occurrence[q21] ->
+ or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q23] = q21
+ | q23 : int(1..4)])
+ | q21 : int(2..5)]),
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q25]]
+ | q25 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q8] < y_ExplicitVarSizeWithFlags_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q9] = false -> y_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q10 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q10] | q10 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q11]) | q11 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q14] ->
+ or([q16 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q16] = y_ExplicitVarSizeWithFlags_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q20] /\
+ y_ExplicitVarSizeWithFlags_Values[q20] = y_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_2_1.eprime
new file mode 100644
index 0000000000..124edd1223
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_2_1.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker /\ q26 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q25] + 2 = y_ExplicitVarSizeWithMarker_Values[q26]
+ | q25 : int(1..4), q26 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 6 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 ->
+ or([q14 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithMarker_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q19]) | q19 : int(2..5)]),
+ and([y_Occurrence[q20] ->
+ or([q22 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q22] = q20
+ | q22 : int(1..4)])
+ | q20 : int(2..5)]),
+ and([q24 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q24]]
+ | q24 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_2_2.eprime
new file mode 100644
index 0000000000..7806a133c2
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_2_2.eprime
@@ -0,0 +1,54 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q31 <= x_ExplicitVarSizeWithMarker_Marker /\ q32 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q31] + 2 = y_ExplicitVarSizeWithMarker_Values[q32]
+ | q31 : int(1..4), q32 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 6 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 ->
+ or([q14 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithMarker_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q19] < y_ExplicitVarSizeWithDummy[q19 + 1] \/ y_ExplicitVarSizeWithDummy[q19] = 6
+ | q19 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q20] = 6 -> y_ExplicitVarSizeWithDummy[q20 + 1] = 6 | q20 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q21] != 6) | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q24] != 6 ->
+ or([q26 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q26] = y_ExplicitVarSizeWithDummy[q24]
+ | q26 : int(1..4)])
+ | q24 : int(1..4)]),
+ and([q28 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q30] != 6 /\
+ y_ExplicitVarSizeWithDummy[q30] = y_ExplicitVarSizeWithMarker_Values[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_2_3.eprime
new file mode 100644
index 0000000000..8c27f375ef
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_2_3.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ q20 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q19] + 2 = y_ExplicitVarSizeWithMarker_Values[q20]
+ | q19 : int(1..4), q20 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 6 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 ->
+ or([q14 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithMarker_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_2_4.eprime
new file mode 100644
index 0000000000..85a12b9508
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_2_4.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q32 <= x_ExplicitVarSizeWithMarker_Marker /\ q33 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q32] + 2 = y_ExplicitVarSizeWithMarker_Values[q33]
+ | q32 : int(1..4), q33 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 6 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 ->
+ or([q14 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithMarker_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q19] < y_ExplicitVarSizeWithFlags_Values[q19 + 1]
+ | q19 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20] = false -> y_ExplicitVarSizeWithFlags_Values[q20] = 2
+ | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q21] | q21 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q22]) | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q25] ->
+ or([q27 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q27] = y_ExplicitVarSizeWithFlags_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([q29 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q31] /\
+ y_ExplicitVarSizeWithFlags_Values[q31] = y_ExplicitVarSizeWithMarker_Values[q29]
+ | q31 : int(1..4)])
+ | q29 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_3_1.eprime
new file mode 100644
index 0000000000..66dc7e15ca
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_3_1.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker /\ q14 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q13] + 2 = y_ExplicitVarSizeWithMarker_Values[q14]
+ | q13 : int(1..4), q14 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q7]) | q7 : int(2..5)]),
+ and([y_Occurrence[q8] ->
+ or([q10 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q10] = q8
+ | q10 : int(1..4)])
+ | q8 : int(2..5)]),
+ and([q12 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q12]]
+ | q12 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_3_2.eprime
new file mode 100644
index 0000000000..9618629cd8
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_3_2.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker /\ q20 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q19] + 2 = y_ExplicitVarSizeWithMarker_Values[q20]
+ | q19 : int(1..4), q20 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q7] < y_ExplicitVarSizeWithDummy[q7 + 1] \/ y_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q8] = 6 -> y_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q12] != 6 ->
+ or([q14 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q14] = y_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([q16 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q18] != 6 /\
+ y_ExplicitVarSizeWithDummy[q18] = y_ExplicitVarSizeWithMarker_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_3_3.eprime
new file mode 100644
index 0000000000..ad1e9ea981
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_3_3.eprime
@@ -0,0 +1,24 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q7 <= x_ExplicitVarSizeWithMarker_Marker /\ q8 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] + 2 = y_ExplicitVarSizeWithMarker_Values[q8]
+ | q7 : int(1..4), q8 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_3_4.eprime
new file mode 100644
index 0000000000..4fbee84c05
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_3_4.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ q21 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q20] + 2 = y_ExplicitVarSizeWithMarker_Values[q21]
+ | q20 : int(1..4), q21 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q7] < y_ExplicitVarSizeWithFlags_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8] = false -> y_ExplicitVarSizeWithFlags_Values[q8] = 2 | q8 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q9 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q9] | q9 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q10]) | q10 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q13] ->
+ or([q15 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q15] = y_ExplicitVarSizeWithFlags_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([q17 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q19] /\
+ y_ExplicitVarSizeWithFlags_Values[q19] = y_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_4_1.eprime
new file mode 100644
index 0000000000..54b4d0bf42
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_4_1.eprime
@@ -0,0 +1,51 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_Occurrence, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker /\ q27 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q26] + 2 = y_ExplicitVarSizeWithMarker_Values[q27]
+ | q26 : int(1..4), q27 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q7] < x_ExplicitVarSizeWithFlags_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] = false -> x_ExplicitVarSizeWithFlags_Values[q8] = 2 | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q9] | q9 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q10]) | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13] ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithFlags_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([q17 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\
+ x_ExplicitVarSizeWithFlags_Values[q19] = x_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q20]) | q20 : int(2..5)]),
+ and([y_Occurrence[q21] ->
+ or([q23 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q23] = q21
+ | q23 : int(1..4)])
+ | q21 : int(2..5)]),
+ and([q25 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q25]]
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_4_2.eprime
new file mode 100644
index 0000000000..157e866343
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_4_2.eprime
@@ -0,0 +1,58 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q32 <= x_ExplicitVarSizeWithMarker_Marker /\ q33 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q32] + 2 = y_ExplicitVarSizeWithMarker_Values[q33]
+ | q32 : int(1..4), q33 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q7] < x_ExplicitVarSizeWithFlags_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] = false -> x_ExplicitVarSizeWithFlags_Values[q8] = 2 | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q9] | q9 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q10]) | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13] ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithFlags_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([q17 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\
+ x_ExplicitVarSizeWithFlags_Values[q19] = x_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q20] < y_ExplicitVarSizeWithDummy[q20 + 1] \/ y_ExplicitVarSizeWithDummy[q20] = 6
+ | q20 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q21] = 6 -> y_ExplicitVarSizeWithDummy[q21 + 1] = 6 | q21 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q22] != 6) | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q25] != 6 ->
+ or([q27 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q27] = y_ExplicitVarSizeWithDummy[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([q29 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q31] != 6 /\
+ y_ExplicitVarSizeWithDummy[q31] = y_ExplicitVarSizeWithMarker_Values[q29]
+ | q31 : int(1..4)])
+ | q29 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_4_3.eprime
new file mode 100644
index 0000000000..58d27cf48a
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_4_3.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ q21 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q20] + 2 = y_ExplicitVarSizeWithMarker_Values[q21]
+ | q20 : int(1..4), q21 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q7] < x_ExplicitVarSizeWithFlags_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] = false -> x_ExplicitVarSizeWithFlags_Values[q8] = 2 | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q9] | q9 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q10]) | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13] ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithFlags_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([q17 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\
+ x_ExplicitVarSizeWithFlags_Values[q19] = x_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_3_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_3_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_3_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_3_4_4.eprime
new file mode 100644
index 0000000000..8eeab52a56
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_3_4_4.eprime
@@ -0,0 +1,62 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([q33 <= x_ExplicitVarSizeWithMarker_Marker /\ q34 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q33] + 2 = y_ExplicitVarSizeWithMarker_Values[q34]
+ | q33 : int(1..4), q34 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q4 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q4] < y_ExplicitVarSizeWithMarker_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([q5 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q5] = 2 | q5 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithFlags_Flags[q7 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q7] < x_ExplicitVarSizeWithFlags_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q8] = false -> x_ExplicitVarSizeWithFlags_Values[q8] = 2 | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q9] | q9 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q10]) | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q13] ->
+ or([q15 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q15] = x_ExplicitVarSizeWithFlags_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([q17 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\
+ x_ExplicitVarSizeWithFlags_Values[q19] = x_ExplicitVarSizeWithMarker_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q20] < y_ExplicitVarSizeWithFlags_Values[q20 + 1]
+ | q20 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21] = false -> y_ExplicitVarSizeWithFlags_Values[q21] = 2
+ | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q22 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q22] | q22 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q23]) | q23 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([q28 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q28] = y_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q32] /\
+ y_ExplicitVarSizeWithFlags_Values[q32] = y_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_1_1.eprime
new file mode 100644
index 0000000000..842f840473
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_1_1.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q16 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q17] ->
+ x_ExplicitVarSizeWithMarker_Values[q16] + 2 = y_ExplicitVarSizeWithFlags_Values[q17]
+ | q16 : int(1..4), q17 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q9]) | q9 : int(2..5)]),
+ and([x_Occurrence[q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q20] = q18
+ | q20 : int(1..4)])
+ | q18 : int(2..5)]),
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q22]]
+ | q22 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q10]) | q10 : int(2..5)]),
+ and([y_Occurrence[q11] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q13] /\ y_ExplicitVarSizeWithFlags_Values[q13] = q11 | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q15]]
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_1_2.eprime
new file mode 100644
index 0000000000..5d8608bb70
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_1_2.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q28] ->
+ x_ExplicitVarSizeWithMarker_Values[q27] + 2 = y_ExplicitVarSizeWithFlags_Values[q28]
+ | q27 : int(1..4), q28 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q9]) | q9 : int(2..5)]),
+ and([x_Occurrence[q22] ->
+ or([q24 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(2..5)]),
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q10] < y_ExplicitVarSizeWithDummy[q10 + 1] \/ y_ExplicitVarSizeWithDummy[q10] = 6
+ | q10 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q11] = 6 -> y_ExplicitVarSizeWithDummy[q11 + 1] = 6 | q11 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q12] != 6) | q12 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q15] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q17] /\
+ y_ExplicitVarSizeWithFlags_Values[q17] = y_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([y_ExplicitVarSizeWithDummy[q21] != 6 /\
+ y_ExplicitVarSizeWithDummy[q21] = y_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_1_3.eprime
new file mode 100644
index 0000000000..0920bc13d0
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_1_3.eprime
@@ -0,0 +1,51 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q26 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q27] ->
+ x_ExplicitVarSizeWithMarker_Values[q26] + 2 = y_ExplicitVarSizeWithFlags_Values[q27]
+ | q26 : int(1..4), q27 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q9]) | q9 : int(2..5)]),
+ and([x_Occurrence[q21] ->
+ or([q23 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q23] = q21
+ | q23 : int(1..4)])
+ | q21 : int(2..5)]),
+ and([q25 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q25]]
+ | q25 : int(1..4)]),
+ and([q10 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q10] < y_ExplicitVarSizeWithMarker_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([q11 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q14 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q16] /\
+ y_ExplicitVarSizeWithFlags_Values[q16] = y_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q18] ->
+ or([q20 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q20] = y_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_1_4.eprime
new file mode 100644
index 0000000000..7ce0db61d8
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_1_4.eprime
@@ -0,0 +1,33 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q16] ->
+ x_ExplicitVarSizeWithMarker_Values[q15] + 2 = y_ExplicitVarSizeWithFlags_Values[q16]
+ | q15 : int(1..4), q16 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q9]) | q9 : int(2..5)]),
+ and([x_Occurrence[q10] ->
+ or([q12 <= x_ExplicitVarSizeWithMarker_Marker /\ x_ExplicitVarSizeWithMarker_Values[q12] = q10
+ | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker -> x_Occurrence[x_ExplicitVarSizeWithMarker_Values[q14]]
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_2_1.eprime
new file mode 100644
index 0000000000..61f44c9622
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_2_1.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q27 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q28] ->
+ x_ExplicitVarSizeWithMarker_Values[q27] + 2 = y_ExplicitVarSizeWithFlags_Values[q28]
+ | q27 : int(1..4), q28 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q9] < x_ExplicitVarSizeWithDummy[q9 + 1] \/ x_ExplicitVarSizeWithDummy[q9] = 6
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q10] = 6 -> x_ExplicitVarSizeWithDummy[q10 + 1] = 6 | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q11] != 6) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 6 /\
+ x_ExplicitVarSizeWithDummy[q20] = x_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q21]) | q21 : int(2..5)]),
+ and([y_Occurrence[q22] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q24] /\ y_ExplicitVarSizeWithFlags_Values[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q26] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q26]]
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_2_2.eprime
new file mode 100644
index 0000000000..0fed7c779e
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_2_2.eprime
@@ -0,0 +1,55 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q33 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q34] ->
+ x_ExplicitVarSizeWithMarker_Values[q33] + 2 = y_ExplicitVarSizeWithFlags_Values[q34]
+ | q33 : int(1..4), q34 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q9] < x_ExplicitVarSizeWithDummy[q9 + 1] \/ x_ExplicitVarSizeWithDummy[q9] = 6
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q10] = 6 -> x_ExplicitVarSizeWithDummy[q10 + 1] = 6 | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q11] != 6) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 6 /\
+ x_ExplicitVarSizeWithDummy[q20] = x_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q21] < y_ExplicitVarSizeWithDummy[q21 + 1] \/ y_ExplicitVarSizeWithDummy[q21] = 6
+ | q21 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q22] = 6 -> y_ExplicitVarSizeWithDummy[q22 + 1] = 6 | q22 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q23] != 6) | q23 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q26] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q28] /\
+ y_ExplicitVarSizeWithFlags_Values[q28] = y_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([y_ExplicitVarSizeWithDummy[q32] != 6 /\
+ y_ExplicitVarSizeWithDummy[q32] = y_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_2_3.eprime
new file mode 100644
index 0000000000..0a78494f0e
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_2_3.eprime
@@ -0,0 +1,58 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q32 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q33] ->
+ x_ExplicitVarSizeWithMarker_Values[q32] + 2 = y_ExplicitVarSizeWithFlags_Values[q33]
+ | q32 : int(1..4), q33 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q9] < x_ExplicitVarSizeWithDummy[q9 + 1] \/ x_ExplicitVarSizeWithDummy[q9] = 6
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q10] = 6 -> x_ExplicitVarSizeWithDummy[q10 + 1] = 6 | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q11] != 6) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 6 /\
+ x_ExplicitVarSizeWithDummy[q20] = x_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([q21 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q21] < y_ExplicitVarSizeWithMarker_Values[q21 + 1]
+ | q21 : int(1..3)]),
+ and([q22 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q22] = 2 | q22 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q25 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q27] /\
+ y_ExplicitVarSizeWithFlags_Values[q27] = y_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q29] ->
+ or([q31 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q31] = y_ExplicitVarSizeWithFlags_Values[q29]
+ | q31 : int(1..4)])
+ | q29 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_2_4.eprime
new file mode 100644
index 0000000000..e10ef03824
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_2_4.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q22] ->
+ x_ExplicitVarSizeWithMarker_Values[q21] + 2 = y_ExplicitVarSizeWithFlags_Values[q22]
+ | q21 : int(1..4), q22 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q9] < x_ExplicitVarSizeWithDummy[q9 + 1] \/ x_ExplicitVarSizeWithDummy[q9] = 6
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q10] = 6 -> x_ExplicitVarSizeWithDummy[q10 + 1] = 6 | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q11] != 6) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([q16 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 6 /\
+ x_ExplicitVarSizeWithDummy[q20] = x_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_3_1.eprime
new file mode 100644
index 0000000000..d7781435b7
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_3_1.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q16] ->
+ x_ExplicitVarSizeWithMarker_Values[q15] + 2 = y_ExplicitVarSizeWithFlags_Values[q16]
+ | q15 : int(1..4), q16 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q9]) | q9 : int(2..5)]),
+ and([y_Occurrence[q10] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q12] /\ y_ExplicitVarSizeWithFlags_Values[q12] = q10 | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q14] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q14]]
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_3_2.eprime
new file mode 100644
index 0000000000..2ce2ee5eab
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_3_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q21 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q22] ->
+ x_ExplicitVarSizeWithMarker_Values[q21] + 2 = y_ExplicitVarSizeWithFlags_Values[q22]
+ | q21 : int(1..4), q22 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q9] < y_ExplicitVarSizeWithDummy[q9 + 1] \/ y_ExplicitVarSizeWithDummy[q9] = 6
+ | q9 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q10] = 6 -> y_ExplicitVarSizeWithDummy[q10 + 1] = 6 | q10 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q11] != 6) | q11 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q16] /\
+ y_ExplicitVarSizeWithFlags_Values[q16] = y_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q18] ->
+ or([y_ExplicitVarSizeWithDummy[q20] != 6 /\
+ y_ExplicitVarSizeWithDummy[q20] = y_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_3_3.eprime
new file mode 100644
index 0000000000..c121faa238
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_3_3.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q20 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q21] ->
+ x_ExplicitVarSizeWithMarker_Values[q20] + 2 = y_ExplicitVarSizeWithFlags_Values[q21]
+ | q20 : int(1..4), q21 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ and([q9 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q9] < y_ExplicitVarSizeWithMarker_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([q10 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q10] = 2 | q10 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q13 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q15] /\
+ y_ExplicitVarSizeWithFlags_Values[q15] = y_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q17] ->
+ or([q19 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q19] = y_ExplicitVarSizeWithFlags_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_3_4.eprime
new file mode 100644
index 0000000000..ca62bca40e
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_3_4.eprime
@@ -0,0 +1,25 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q9 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q10] ->
+ x_ExplicitVarSizeWithMarker_Values[q9] + 2 = y_ExplicitVarSizeWithFlags_Values[q10]
+ | q9 : int(1..4), q10 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_4_1.eprime
new file mode 100644
index 0000000000..196b11abfb
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_4_1.eprime
@@ -0,0 +1,52 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_Occurrence, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q28 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q29] ->
+ x_ExplicitVarSizeWithMarker_Values[q28] + 2 = y_ExplicitVarSizeWithFlags_Values[q29]
+ | q28 : int(1..4), q29 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q9] < x_ExplicitVarSizeWithFlags_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] = false -> x_ExplicitVarSizeWithFlags_Values[q10] = 2
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q11] | q11 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q12]) | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\
+ x_ExplicitVarSizeWithFlags_Values[q21] = x_ExplicitVarSizeWithMarker_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q22]) | q22 : int(2..5)]),
+ and([y_Occurrence[q23] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q25] /\ y_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q27] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_4_2.eprime
new file mode 100644
index 0000000000..fe5ba424a2
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_4_2.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q34 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q35] ->
+ x_ExplicitVarSizeWithMarker_Values[q34] + 2 = y_ExplicitVarSizeWithFlags_Values[q35]
+ | q34 : int(1..4), q35 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q9] < x_ExplicitVarSizeWithFlags_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] = false -> x_ExplicitVarSizeWithFlags_Values[q10] = 2
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q11] | q11 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q12]) | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\
+ x_ExplicitVarSizeWithFlags_Values[q21] = x_ExplicitVarSizeWithMarker_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q22] < y_ExplicitVarSizeWithDummy[q22 + 1] \/ y_ExplicitVarSizeWithDummy[q22] = 6
+ | q22 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q23] = 6 -> y_ExplicitVarSizeWithDummy[q23 + 1] = 6 | q23 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q24] != 6) | q24 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q27] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q29] /\
+ y_ExplicitVarSizeWithFlags_Values[q29] = y_ExplicitVarSizeWithDummy[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q31] ->
+ or([y_ExplicitVarSizeWithDummy[q33] != 6 /\
+ y_ExplicitVarSizeWithDummy[q33] = y_ExplicitVarSizeWithFlags_Values[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_4_3.eprime
new file mode 100644
index 0000000000..6761996efd
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_4_3.eprime
@@ -0,0 +1,62 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q33 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q34] ->
+ x_ExplicitVarSizeWithMarker_Values[q33] + 2 = y_ExplicitVarSizeWithFlags_Values[q34]
+ | q33 : int(1..4), q34 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q9] < x_ExplicitVarSizeWithFlags_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] = false -> x_ExplicitVarSizeWithFlags_Values[q10] = 2
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q11] | q11 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q12]) | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\
+ x_ExplicitVarSizeWithFlags_Values[q21] = x_ExplicitVarSizeWithMarker_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([q22 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q22] < y_ExplicitVarSizeWithMarker_Values[q22 + 1]
+ | q22 : int(1..3)]),
+ and([q23 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q23] = 2 | q23 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q26 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q28] /\
+ y_ExplicitVarSizeWithFlags_Values[q28] = y_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([q32 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q32] = y_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_3_4_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_3_4_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_3_4_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_3_4_4_4.eprime
new file mode 100644
index 0000000000..647b4c3d5f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_3_4_4_4.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, x_ExplicitVarSizeWithMarker_Marker,
+ x_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q22 <= x_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithFlags_Flags[q23] ->
+ x_ExplicitVarSizeWithMarker_Values[q22] + 2 = y_ExplicitVarSizeWithFlags_Values[q23]
+ | q22 : int(1..4), q23 : int(1..4)]),
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q1] < x_ExplicitVarSizeWithMarker_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([q2 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q2] = 2 | q2 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q4 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q4] < y_ExplicitVarSizeWithFlags_Values[q4 + 1]
+ | q4 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q5] = false -> y_ExplicitVarSizeWithFlags_Values[q5] = 2 | q5 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q6] | q6 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q7]) | q7 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q9 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q9] < x_ExplicitVarSizeWithFlags_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] = false -> x_ExplicitVarSizeWithFlags_Values[q10] = 2
+ | q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q11 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q11] | q11 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q12]) | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\
+ x_ExplicitVarSizeWithFlags_Values[q21] = x_ExplicitVarSizeWithMarker_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_1_1.eprime
new file mode 100644
index 0000000000..3b3dd72895
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_1_1.eprime
@@ -0,0 +1,24 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q13] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q13] + 2 = j
+ | q13 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q7]) | q7 : int(2..5)]),
+ and([x_Occurrence[q8] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q10] /\ x_ExplicitVarSizeWithFlags_Values[q10] = q8 | q10 : int(1..4)])
+ | q8 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q12] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q12]]
+ | q12 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_1_2.eprime
new file mode 100644
index 0000000000..c7b6641b99
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_1_2.eprime
@@ -0,0 +1,35 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy,
+ y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q22] + 2 = j
+ | q22 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q7]) | q7 : int(2..5)]),
+ and([x_Occurrence[q17] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q19] /\ x_ExplicitVarSizeWithFlags_Values[q19] = q17 | q19 : int(1..4)])
+ | q17 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q21]]
+ | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q8] < y_ExplicitVarSizeWithDummy[q8 + 1] \/ y_ExplicitVarSizeWithDummy[q8] = 6
+ | q8 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q9] = 6 -> y_ExplicitVarSizeWithDummy[q9 + 1] = 6 | q9 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q10] != 6) | q10 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q13] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q13]] | q13 : int(1..4)]),
+ and([y_Occurrence[q14] ->
+ or([y_ExplicitVarSizeWithDummy[q16] != 6 /\ y_ExplicitVarSizeWithDummy[q16] = q14 | q16 : int(1..4)])
+ | q14 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_1_3.eprime
new file mode 100644
index 0000000000..8883ffc92f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_1_3.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q21] + 2 = j
+ | q21 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q7]) | q7 : int(2..5)]),
+ and([x_Occurrence[q16] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\ x_ExplicitVarSizeWithFlags_Values[q18] = q16 | q18 : int(1..4)])
+ | q16 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q20]]
+ | q20 : int(1..4)]),
+ and([q8 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q8] < y_ExplicitVarSizeWithMarker_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([q9 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q9] = 2 | q9 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q12 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q12]]
+ | q12 : int(1..4)]),
+ and([y_Occurrence[q13] ->
+ or([q15 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q15] = q13
+ | q15 : int(1..4)])
+ | q13 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_1_4.eprime
new file mode 100644
index 0000000000..e566516efd
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_1_4.eprime
@@ -0,0 +1,39 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q23] + 2 = j
+ | q23 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ 1 <= sum([toInt(x_Occurrence[q7]) | q7 : int(2..5)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q22]]
+ | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q8] < y_ExplicitVarSizeWithFlags_Values[q8 + 1]
+ | q8 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q9] = false -> y_ExplicitVarSizeWithFlags_Values[q9] = 2 | q9 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q10 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q10] | q10 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q11]) | q11 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q14] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q14]]
+ | q14 : int(1..4)]),
+ and([y_Occurrence[q15] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q17] /\ y_ExplicitVarSizeWithFlags_Values[q17] = q15 | q17 : int(1..4)])
+ | q15 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_2_1.eprime
new file mode 100644
index 0000000000..afaea477ca
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_2_1.eprime
@@ -0,0 +1,33 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q19] + 2 = j
+ | q19 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 6 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
+ x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_2_2.eprime
new file mode 100644
index 0000000000..2de99626cb
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_2_2.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q28] + 2 = j
+ | q28 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 6 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
+ x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q19] < y_ExplicitVarSizeWithDummy[q19 + 1] \/ y_ExplicitVarSizeWithDummy[q19] = 6
+ | q19 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q20] = 6 -> y_ExplicitVarSizeWithDummy[q20 + 1] = 6 | q20 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q21] != 6) | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q24] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q24]] | q24 : int(1..4)]),
+ and([y_Occurrence[q25] ->
+ or([y_ExplicitVarSizeWithDummy[q27] != 6 /\ y_ExplicitVarSizeWithDummy[q27] = q25 | q27 : int(1..4)])
+ | q25 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_2_3.eprime
new file mode 100644
index 0000000000..654da549aa
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_2_3.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q27] + 2 = j
+ | q27 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 6 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
+ x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([q19 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q19] < y_ExplicitVarSizeWithMarker_Values[q19 + 1]
+ | q19 : int(1..3)]),
+ and([q20 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q20] = 2 | q20 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q23 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q23]]
+ | q23 : int(1..4)]),
+ and([y_Occurrence[q24] ->
+ or([q26 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q26] = q24
+ | q26 : int(1..4)])
+ | q24 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_2_4.eprime
new file mode 100644
index 0000000000..af1a93b8b4
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_2_4.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q29] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q29] + 2 = j
+ | q29 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ and([x_ExplicitVarSizeWithDummy[q7] < x_ExplicitVarSizeWithDummy[q7 + 1] \/ x_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q8] = 6 -> x_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q12] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\
+ x_ExplicitVarSizeWithFlags_Values[q14] = x_ExplicitVarSizeWithDummy[q12]
+ | q14 : int(1..4)])
+ | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([x_ExplicitVarSizeWithDummy[q18] != 6 /\
+ x_ExplicitVarSizeWithDummy[q18] = x_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q19] < y_ExplicitVarSizeWithFlags_Values[q19 + 1]
+ | q19 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20] = false -> y_ExplicitVarSizeWithFlags_Values[q20] = 2
+ | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q21] | q21 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q22]) | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q25] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q25]]
+ | q25 : int(1..4)]),
+ and([y_Occurrence[q26] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q28] /\ y_ExplicitVarSizeWithFlags_Values[q28] = q26 | q28 : int(1..4)])
+ | q26 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_3_1.eprime
new file mode 100644
index 0000000000..2a4f8d9d12
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_3_1.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q18] + 2 = j
+ | q18 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 2 | q8 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_3_2.eprime
new file mode 100644
index 0000000000..237665c083
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_3_2.eprime
@@ -0,0 +1,45 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q27] + 2 = j
+ | q27 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 2 | q8 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q18] < y_ExplicitVarSizeWithDummy[q18 + 1] \/ y_ExplicitVarSizeWithDummy[q18] = 6
+ | q18 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q19] = 6 -> y_ExplicitVarSizeWithDummy[q19 + 1] = 6 | q19 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q20] != 6) | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q23] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q23]] | q23 : int(1..4)]),
+ and([y_Occurrence[q24] ->
+ or([y_ExplicitVarSizeWithDummy[q26] != 6 /\ y_ExplicitVarSizeWithDummy[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_3_3.eprime
new file mode 100644
index 0000000000..78ff28ba58
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_3_3.eprime
@@ -0,0 +1,50 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q26] + 2 = j
+ | q26 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 2 | q8 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q18 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q18] < y_ExplicitVarSizeWithMarker_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([q19 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q19] = 2 | q19 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q22 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q22]]
+ | q22 : int(1..4)]),
+ and([y_Occurrence[q23] ->
+ or([q25 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q25] = q23
+ | q25 : int(1..4)])
+ | q23 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_3_4.eprime
new file mode 100644
index 0000000000..e8221a747a
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_3_4.eprime
@@ -0,0 +1,51 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q28] + 2 = j
+ | q28 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ and([q7 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q7] < x_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q8] = 2 | q8 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q11 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\
+ x_ExplicitVarSizeWithFlags_Values[q13] = x_ExplicitVarSizeWithMarker_Values[q11]
+ | q13 : int(1..4)])
+ | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q17] = x_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q18 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q18] < y_ExplicitVarSizeWithFlags_Values[q18 + 1]
+ | q18 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19] = false -> y_ExplicitVarSizeWithFlags_Values[q19] = 2
+ | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q20] | q20 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q21]) | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q24] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q24]]
+ | q24 : int(1..4)]),
+ and([y_Occurrence[q25] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q27] /\ y_ExplicitVarSizeWithFlags_Values[q27] = q25 | q27 : int(1..4)])
+ | q25 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_4_1.eprime
new file mode 100644
index 0000000000..109e0f0711
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_4_1.eprime
@@ -0,0 +1,17 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q7] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q7] + 2 = j
+ | q7 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_4_2.eprime
new file mode 100644
index 0000000000..76ef2af84d
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_4_2.eprime
@@ -0,0 +1,27 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q16] + 2 = j
+ | q16 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q7] < y_ExplicitVarSizeWithDummy[q7 + 1] \/ y_ExplicitVarSizeWithDummy[q7] = 6
+ | q7 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q8] = 6 -> y_ExplicitVarSizeWithDummy[q8 + 1] = 6 | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q9] != 6) | q9 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q12] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q12]] | q12 : int(1..4)]),
+ and([y_Occurrence[q13] ->
+ or([y_ExplicitVarSizeWithDummy[q15] != 6 /\ y_ExplicitVarSizeWithDummy[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_4_3.eprime
new file mode 100644
index 0000000000..c7bf7b7442
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_4_3.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q15] + 2 = j
+ | q15 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ and([q7 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q7] < y_ExplicitVarSizeWithMarker_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([q8 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q8] = 2 | q8 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q11 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q11]]
+ | q11 : int(1..4)]),
+ and([y_Occurrence[q12] ->
+ or([q14 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q14] = q12
+ | q14 : int(1..4)])
+ | q12 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_1_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_1_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_1_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_1_4_4.eprime
new file mode 100644
index 0000000000..8108a5b294
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_1_4_4.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values, y_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] /\ y_Occurrence[j] -> x_ExplicitVarSizeWithFlags_Values[q17] + 2 = j
+ | q17 : int(1..4), j : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q6]) | q6 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q7] < y_ExplicitVarSizeWithFlags_Values[q7 + 1]
+ | q7 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8] = false -> y_ExplicitVarSizeWithFlags_Values[q8] = 2 | q8 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q9 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q9] | q9 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q10]) | q10 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q13] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q13]]
+ | q13 : int(1..4)]),
+ and([y_Occurrence[q14] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q16] /\ y_ExplicitVarSizeWithFlags_Values[q16] = q14 | q16 : int(1..4)])
+ | q14 : int(2..5)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_1_1.eprime
new file mode 100644
index 0000000000..58ed3249aa
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_1_1.eprime
@@ -0,0 +1,36 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_Occurrence,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] /\ y_ExplicitVarSizeWithDummy[q18] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q17] + 2 = y_ExplicitVarSizeWithDummy[q18]
+ | q17 : int(1..4), q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q10]) | q10 : int(2..5)]),
+ and([x_Occurrence[q19] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q21] /\ x_ExplicitVarSizeWithFlags_Values[q21] = q19 | q21 : int(1..4)])
+ | q19 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q23]]
+ | q23 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q11]) | q11 : int(2..5)]),
+ and([y_Occurrence[q12] ->
+ or([y_ExplicitVarSizeWithDummy[q14] != 6 /\ y_ExplicitVarSizeWithDummy[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q16] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q16]] | q16 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_1_2.eprime
new file mode 100644
index 0000000000..b326331c8d
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_1_2.eprime
@@ -0,0 +1,29 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] /\ y_ExplicitVarSizeWithDummy[q17] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q16] + 2 = y_ExplicitVarSizeWithDummy[q17]
+ | q16 : int(1..4), q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q10]) | q10 : int(2..5)]),
+ and([x_Occurrence[q11] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q13] /\ x_ExplicitVarSizeWithFlags_Values[q13] = q11 | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q15]]
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_1_3.eprime
new file mode 100644
index 0000000000..10b83edfd1
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_1_3.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] /\ y_ExplicitVarSizeWithDummy[q28] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q27] + 2 = y_ExplicitVarSizeWithDummy[q28]
+ | q27 : int(1..4), q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q10]) | q10 : int(2..5)]),
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\ x_ExplicitVarSizeWithFlags_Values[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q26]]
+ | q26 : int(1..4)]),
+ and([q11 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q11] < y_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q12] = 2 | q12 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q15 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q17] != 6 /\
+ y_ExplicitVarSizeWithDummy[q17] = y_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q19] != 6 ->
+ or([q21 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q21] = y_ExplicitVarSizeWithDummy[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_1_4.eprime
new file mode 100644
index 0000000000..9b32a426d0
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_1_4.eprime
@@ -0,0 +1,49 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q29] /\ y_ExplicitVarSizeWithDummy[q30] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q29] + 2 = y_ExplicitVarSizeWithDummy[q30]
+ | q29 : int(1..4), q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q10]) | q10 : int(2..5)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q11 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q11] < y_ExplicitVarSizeWithFlags_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q12] = false -> y_ExplicitVarSizeWithFlags_Values[q12] = 2
+ | q12 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q13 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q13] | q13 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q14]) | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q17] ->
+ or([y_ExplicitVarSizeWithDummy[q19] != 6 /\
+ y_ExplicitVarSizeWithDummy[q19] = y_ExplicitVarSizeWithFlags_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q21] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q23] /\
+ y_ExplicitVarSizeWithFlags_Values[q23] = y_ExplicitVarSizeWithDummy[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_2_1.eprime
new file mode 100644
index 0000000000..04f00777cf
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_2_1.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_Occurrence,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] /\ y_ExplicitVarSizeWithDummy[q29] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q28] + 2 = y_ExplicitVarSizeWithDummy[q29]
+ | q28 : int(1..4), q29 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 6
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] = 6 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 6 | q11 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q12] != 6) | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 6 /\
+ x_ExplicitVarSizeWithDummy[q21] = x_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q22]) | q22 : int(2..5)]),
+ and([y_Occurrence[q23] ->
+ or([y_ExplicitVarSizeWithDummy[q25] != 6 /\ y_ExplicitVarSizeWithDummy[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q27] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q27]] | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_2_2.eprime
new file mode 100644
index 0000000000..6d1e92a973
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_2_2.eprime
@@ -0,0 +1,38 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] /\ y_ExplicitVarSizeWithDummy[q23] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q22] + 2 = y_ExplicitVarSizeWithDummy[q23]
+ | q22 : int(1..4), q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 6
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] = 6 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 6 | q11 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q12] != 6) | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 6 /\
+ x_ExplicitVarSizeWithDummy[q21] = x_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_2_3.eprime
new file mode 100644
index 0000000000..10a511c037
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_2_3.eprime
@@ -0,0 +1,55 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q33] /\ y_ExplicitVarSizeWithDummy[q34] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q33] + 2 = y_ExplicitVarSizeWithDummy[q34]
+ | q33 : int(1..4), q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 6
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] = 6 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 6 | q11 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q12] != 6) | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 6 /\
+ x_ExplicitVarSizeWithDummy[q21] = x_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([q22 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q22] < y_ExplicitVarSizeWithMarker_Values[q22 + 1]
+ | q22 : int(1..3)]),
+ and([q23 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q23] = 2 | q23 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q26 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q28] != 6 /\
+ y_ExplicitVarSizeWithDummy[q28] = y_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q30] != 6 ->
+ or([q32 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q32] = y_ExplicitVarSizeWithDummy[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_2_4.eprime
new file mode 100644
index 0000000000..fbaabfe3f8
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_2_4.eprime
@@ -0,0 +1,57 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q35] /\ y_ExplicitVarSizeWithDummy[q36] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q35] + 2 = y_ExplicitVarSizeWithDummy[q36]
+ | q35 : int(1..4), q36 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q10] < x_ExplicitVarSizeWithDummy[q10 + 1] \/ x_ExplicitVarSizeWithDummy[q10] = 6
+ | q10 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q11] = 6 -> x_ExplicitVarSizeWithDummy[q11 + 1] = 6 | q11 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q12] != 6) | q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q15] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([x_ExplicitVarSizeWithDummy[q21] != 6 /\
+ x_ExplicitVarSizeWithDummy[q21] = x_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q22 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q22] < y_ExplicitVarSizeWithFlags_Values[q22 + 1]
+ | q22 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q23] = false -> y_ExplicitVarSizeWithFlags_Values[q23] = 2
+ | q23 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q24 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q24] | q24 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q25]) | q25 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q28] ->
+ or([y_ExplicitVarSizeWithDummy[q30] != 6 /\
+ y_ExplicitVarSizeWithDummy[q30] = y_ExplicitVarSizeWithFlags_Values[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q32] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q34] /\
+ y_ExplicitVarSizeWithFlags_Values[q34] = y_ExplicitVarSizeWithDummy[q32]
+ | q34 : int(1..4)])
+ | q32 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_3_1.eprime
new file mode 100644
index 0000000000..457cc6deb1
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_3_1.eprime
@@ -0,0 +1,46 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_Occurrence, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] /\ y_ExplicitVarSizeWithDummy[q28] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q27] + 2 = y_ExplicitVarSizeWithDummy[q28]
+ | q27 : int(1..4), q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([q10 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q10] < x_ExplicitVarSizeWithMarker_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([q11 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q20] = x_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q21]) | q21 : int(2..5)]),
+ and([y_Occurrence[q22] ->
+ or([y_ExplicitVarSizeWithDummy[q24] != 6 /\ y_ExplicitVarSizeWithDummy[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q26] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q26]] | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_3_2.eprime
new file mode 100644
index 0000000000..1fdcd43cc3
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_3_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] /\ y_ExplicitVarSizeWithDummy[q22] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q21] + 2 = y_ExplicitVarSizeWithDummy[q22]
+ | q21 : int(1..4), q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([q10 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q10] < x_ExplicitVarSizeWithMarker_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([q11 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q20] = x_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_3_3.eprime
new file mode 100644
index 0000000000..18c16908d3
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_3_3.eprime
@@ -0,0 +1,58 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q32] /\ y_ExplicitVarSizeWithDummy[q33] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q32] + 2 = y_ExplicitVarSizeWithDummy[q33]
+ | q32 : int(1..4), q33 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([q10 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q10] < x_ExplicitVarSizeWithMarker_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([q11 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q20] = x_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([q21 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q21] < y_ExplicitVarSizeWithMarker_Values[q21 + 1]
+ | q21 : int(1..3)]),
+ and([q22 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q22] = 2 | q22 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q25 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q27] != 6 /\
+ y_ExplicitVarSizeWithDummy[q27] = y_ExplicitVarSizeWithMarker_Values[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q29] != 6 ->
+ or([q31 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q31] = y_ExplicitVarSizeWithDummy[q29]
+ | q31 : int(1..4)])
+ | q29 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_3_4.eprime
new file mode 100644
index 0000000000..d099b0582b
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_3_4.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] /\ y_ExplicitVarSizeWithDummy[q35] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q34] + 2 = y_ExplicitVarSizeWithDummy[q35]
+ | q34 : int(1..4), q35 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([q10 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q10] < x_ExplicitVarSizeWithMarker_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([q11 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q14 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] ->
+ or([q20 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q20] = x_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q21] < y_ExplicitVarSizeWithFlags_Values[q21 + 1]
+ | q21 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q22] = false -> y_ExplicitVarSizeWithFlags_Values[q22] = 2
+ | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q23 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q23] | q23 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q24]) | q24 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q27] ->
+ or([y_ExplicitVarSizeWithDummy[q29] != 6 /\
+ y_ExplicitVarSizeWithDummy[q29] = y_ExplicitVarSizeWithFlags_Values[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q31] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q33] /\
+ y_ExplicitVarSizeWithFlags_Values[q33] = y_ExplicitVarSizeWithDummy[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_4_1.eprime
new file mode 100644
index 0000000000..f587016cd9
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_4_1.eprime
@@ -0,0 +1,28 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_Occurrence, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] /\ y_ExplicitVarSizeWithDummy[q17] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q16] + 2 = y_ExplicitVarSizeWithDummy[q17]
+ | q16 : int(1..4), q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q10]) | q10 : int(2..5)]),
+ and([y_Occurrence[q11] ->
+ or([y_ExplicitVarSizeWithDummy[q13] != 6 /\ y_ExplicitVarSizeWithDummy[q13] = q11 | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ and([y_ExplicitVarSizeWithDummy[q15] != 6 -> y_Occurrence[y_ExplicitVarSizeWithDummy[q15]] | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_4_2.eprime
new file mode 100644
index 0000000000..f30467528a
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_4_2.eprime
@@ -0,0 +1,21 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q10] /\ y_ExplicitVarSizeWithDummy[q11] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q10] + 2 = y_ExplicitVarSizeWithDummy[q11]
+ | q10 : int(1..4), q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_4_3.eprime
new file mode 100644
index 0000000000..e871f919f3
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_4_3.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] /\ y_ExplicitVarSizeWithDummy[q22] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q21] + 2 = y_ExplicitVarSizeWithDummy[q22]
+ | q21 : int(1..4), q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([q10 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q10] < y_ExplicitVarSizeWithMarker_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([q11 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q11] = 2 | q11 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q14 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q16] != 6 /\
+ y_ExplicitVarSizeWithDummy[q16] = y_ExplicitVarSizeWithMarker_Values[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q18] != 6 ->
+ or([q20 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q20] = y_ExplicitVarSizeWithDummy[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_2_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_2_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_2_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_2_4_4.eprime
new file mode 100644
index 0000000000..8954f9bfa2
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_2_4_4.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] /\ y_ExplicitVarSizeWithDummy[q24] != 6 ->
+ x_ExplicitVarSizeWithFlags_Values[q23] + 2 = y_ExplicitVarSizeWithDummy[q24]
+ | q23 : int(1..4), q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q6] < y_ExplicitVarSizeWithDummy[q6 + 1] \/ y_ExplicitVarSizeWithDummy[q6] = 6
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q7] = 6 -> y_ExplicitVarSizeWithDummy[q7 + 1] = 6 | q7 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q8] != 6) | q8 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q10] < y_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q11] = false -> y_ExplicitVarSizeWithFlags_Values[q11] = 2
+ | q11 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([y_ExplicitVarSizeWithDummy[q18] != 6 /\
+ y_ExplicitVarSizeWithDummy[q18] = y_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q20] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q22] /\
+ y_ExplicitVarSizeWithFlags_Values[q22] = y_ExplicitVarSizeWithDummy[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_1_1.eprime
new file mode 100644
index 0000000000..e2ae63fc2c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_1_1.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] /\ q17 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q16] + 2 = y_ExplicitVarSizeWithMarker_Values[q17]
+ | q16 : int(1..4), q17 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(x_Occurrence[q9]) | q9 : int(2..5)]),
+ and([x_Occurrence[q18] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q20] /\ x_ExplicitVarSizeWithFlags_Values[q20] = q18 | q20 : int(1..4)])
+ | q18 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q22]]
+ | q22 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q10]) | q10 : int(2..5)]),
+ and([y_Occurrence[q11] ->
+ or([q13 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q13] = q11
+ | q13 : int(1..4)])
+ | q11 : int(2..5)]),
+ and([q15 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q15]]
+ | q15 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_1_2.eprime
new file mode 100644
index 0000000000..ae45352286
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_1_2.eprime
@@ -0,0 +1,47 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] /\ q28 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q27] + 2 = y_ExplicitVarSizeWithMarker_Values[q28]
+ | q27 : int(1..4), q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(x_Occurrence[q9]) | q9 : int(2..5)]),
+ and([x_Occurrence[q22] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q24] /\ x_ExplicitVarSizeWithFlags_Values[q24] = q22 | q24 : int(1..4)])
+ | q22 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q26]]
+ | q26 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q10] < y_ExplicitVarSizeWithDummy[q10 + 1] \/ y_ExplicitVarSizeWithDummy[q10] = 6
+ | q10 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q11] = 6 -> y_ExplicitVarSizeWithDummy[q11 + 1] = 6 | q11 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q12] != 6) | q12 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q15] != 6 ->
+ or([q17 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q17] = y_ExplicitVarSizeWithDummy[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q21] != 6 /\
+ y_ExplicitVarSizeWithDummy[q21] = y_ExplicitVarSizeWithMarker_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_1_3.eprime
new file mode 100644
index 0000000000..cd001ff305
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_1_3.eprime
@@ -0,0 +1,32 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] /\ q16 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q15] + 2 = y_ExplicitVarSizeWithMarker_Values[q16]
+ | q15 : int(1..4), q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(x_Occurrence[q9]) | q9 : int(2..5)]),
+ and([x_Occurrence[q10] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q12] /\ x_ExplicitVarSizeWithFlags_Values[q12] = q10 | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q14] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q14]]
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_1_4.eprime
new file mode 100644
index 0000000000..c1ff4e46c8
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_1_4.eprime
@@ -0,0 +1,52 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] /\ q29 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q28] + 2 = y_ExplicitVarSizeWithMarker_Values[q29]
+ | q28 : int(1..4), q29 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(x_Occurrence[q9]) | q9 : int(2..5)]),
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q10 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q10] < y_ExplicitVarSizeWithFlags_Values[q10 + 1]
+ | q10 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q11] = false -> y_ExplicitVarSizeWithFlags_Values[q11] = 2
+ | q11 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q12 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q12] | q12 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q13]) | q13 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q16] ->
+ or([q18 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q18] = y_ExplicitVarSizeWithFlags_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([q20 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q22] /\
+ y_ExplicitVarSizeWithFlags_Values[q22] = y_ExplicitVarSizeWithMarker_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_2_1.eprime
new file mode 100644
index 0000000000..ebbb2075a2
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_2_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] /\ q28 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q27] + 2 = y_ExplicitVarSizeWithMarker_Values[q28]
+ | q27 : int(1..4), q28 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q9] < x_ExplicitVarSizeWithDummy[q9 + 1] \/ x_ExplicitVarSizeWithDummy[q9] = 6
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q10] = 6 -> x_ExplicitVarSizeWithDummy[q10 + 1] = 6 | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q11] != 6) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 6 /\
+ x_ExplicitVarSizeWithDummy[q20] = x_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q21]) | q21 : int(2..5)]),
+ and([y_Occurrence[q22] ->
+ or([q24 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q24] = q22
+ | q24 : int(1..4)])
+ | q22 : int(2..5)]),
+ and([q26 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q26]]
+ | q26 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_2_2.eprime
new file mode 100644
index 0000000000..96ae673549
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_2_2.eprime
@@ -0,0 +1,55 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q33] /\ q34 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q33] + 2 = y_ExplicitVarSizeWithMarker_Values[q34]
+ | q33 : int(1..4), q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q9] < x_ExplicitVarSizeWithDummy[q9 + 1] \/ x_ExplicitVarSizeWithDummy[q9] = 6
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q10] = 6 -> x_ExplicitVarSizeWithDummy[q10 + 1] = 6 | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q11] != 6) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 6 /\
+ x_ExplicitVarSizeWithDummy[q20] = x_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q21] < y_ExplicitVarSizeWithDummy[q21 + 1] \/ y_ExplicitVarSizeWithDummy[q21] = 6
+ | q21 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q22] = 6 -> y_ExplicitVarSizeWithDummy[q22 + 1] = 6 | q22 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q23] != 6) | q23 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q26] != 6 ->
+ or([q28 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q28] = y_ExplicitVarSizeWithDummy[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q32] != 6 /\
+ y_ExplicitVarSizeWithDummy[q32] = y_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_2_3.eprime
new file mode 100644
index 0000000000..6f50c8c681
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_2_3.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] /\ q22 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q21] + 2 = y_ExplicitVarSizeWithMarker_Values[q22]
+ | q21 : int(1..4), q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q9] < x_ExplicitVarSizeWithDummy[q9 + 1] \/ x_ExplicitVarSizeWithDummy[q9] = 6
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q10] = 6 -> x_ExplicitVarSizeWithDummy[q10 + 1] = 6 | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q11] != 6) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 6 /\
+ x_ExplicitVarSizeWithDummy[q20] = x_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_2_4.eprime
new file mode 100644
index 0000000000..a06fe066bf
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_2_4.eprime
@@ -0,0 +1,60 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] /\ q35 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q34] + 2 = y_ExplicitVarSizeWithMarker_Values[q35]
+ | q34 : int(1..4), q35 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([x_ExplicitVarSizeWithDummy[q9] < x_ExplicitVarSizeWithDummy[q9 + 1] \/ x_ExplicitVarSizeWithDummy[q9] = 6
+ | q9 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q10] = 6 -> x_ExplicitVarSizeWithDummy[q10 + 1] = 6 | q10 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q11] != 6) | q11 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q16] /\
+ x_ExplicitVarSizeWithFlags_Values[q16] = x_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] ->
+ or([x_ExplicitVarSizeWithDummy[q20] != 6 /\
+ x_ExplicitVarSizeWithDummy[q20] = x_ExplicitVarSizeWithFlags_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q21] < y_ExplicitVarSizeWithFlags_Values[q21 + 1]
+ | q21 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q22] = false -> y_ExplicitVarSizeWithFlags_Values[q22] = 2
+ | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q23 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q23] | q23 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q24]) | q24 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q27] ->
+ or([q29 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q29] = y_ExplicitVarSizeWithFlags_Values[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([q31 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q33] /\
+ y_ExplicitVarSizeWithFlags_Values[q33] = y_ExplicitVarSizeWithMarker_Values[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_3_1.eprime
new file mode 100644
index 0000000000..956990ea06
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_3_1.eprime
@@ -0,0 +1,51 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_Occurrence, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q26] /\ q27 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q26] + 2 = y_ExplicitVarSizeWithMarker_Values[q27]
+ | q26 : int(1..4), q27 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q9 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q9] < x_ExplicitVarSizeWithMarker_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([q10 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q10] = 2 | q10 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\
+ x_ExplicitVarSizeWithFlags_Values[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q19] = x_ExplicitVarSizeWithFlags_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q20]) | q20 : int(2..5)]),
+ and([y_Occurrence[q21] ->
+ or([q23 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q23] = q21
+ | q23 : int(1..4)])
+ | q21 : int(2..5)]),
+ and([q25 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q25]]
+ | q25 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_3_2.eprime
new file mode 100644
index 0000000000..76cc5a8aed
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_3_2.eprime
@@ -0,0 +1,58 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q32] /\ q33 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q32] + 2 = y_ExplicitVarSizeWithMarker_Values[q33]
+ | q32 : int(1..4), q33 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q9 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q9] < x_ExplicitVarSizeWithMarker_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([q10 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q10] = 2 | q10 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\
+ x_ExplicitVarSizeWithFlags_Values[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q19] = x_ExplicitVarSizeWithFlags_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q20] < y_ExplicitVarSizeWithDummy[q20 + 1] \/ y_ExplicitVarSizeWithDummy[q20] = 6
+ | q20 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q21] = 6 -> y_ExplicitVarSizeWithDummy[q21 + 1] = 6 | q21 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q22] != 6) | q22 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q25] != 6 ->
+ or([q27 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q27] = y_ExplicitVarSizeWithDummy[q25]
+ | q27 : int(1..4)])
+ | q25 : int(1..4)]),
+ and([q29 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q31] != 6 /\
+ y_ExplicitVarSizeWithDummy[q31] = y_ExplicitVarSizeWithMarker_Values[q29]
+ | q31 : int(1..4)])
+ | q29 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_3_3.eprime
new file mode 100644
index 0000000000..f90dae8a31
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_3_3.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] /\ q21 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q20] + 2 = y_ExplicitVarSizeWithMarker_Values[q21]
+ | q20 : int(1..4), q21 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q9 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q9] < x_ExplicitVarSizeWithMarker_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([q10 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q10] = 2 | q10 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\
+ x_ExplicitVarSizeWithFlags_Values[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q19] = x_ExplicitVarSizeWithFlags_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_3_4.eprime
new file mode 100644
index 0000000000..a3ac3373bb
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_3_4.eprime
@@ -0,0 +1,62 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q33] /\ q34 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q33] + 2 = y_ExplicitVarSizeWithMarker_Values[q34]
+ | q33 : int(1..4), q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q9 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q9] < x_ExplicitVarSizeWithMarker_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([q10 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q10] = 2 | q10 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q13 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q15] /\
+ x_ExplicitVarSizeWithFlags_Values[q15] = x_ExplicitVarSizeWithMarker_Values[q13]
+ | q15 : int(1..4)])
+ | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] ->
+ or([q19 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q19] = x_ExplicitVarSizeWithFlags_Values[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q20] < y_ExplicitVarSizeWithFlags_Values[q20 + 1]
+ | q20 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21] = false -> y_ExplicitVarSizeWithFlags_Values[q21] = 2
+ | q21 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q22 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q22] | q22 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q23]) | q23 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q26] ->
+ or([q28 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q28] = y_ExplicitVarSizeWithFlags_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([q30 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q32] /\
+ y_ExplicitVarSizeWithFlags_Values[q32] = y_ExplicitVarSizeWithMarker_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_4_1.eprime
new file mode 100644
index 0000000000..d57282a34a
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_4_1.eprime
@@ -0,0 +1,33 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_Occurrence,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q15] /\ q16 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q15] + 2 = y_ExplicitVarSizeWithMarker_Values[q16]
+ | q15 : int(1..4), q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ 1 <= sum([toInt(y_Occurrence[q9]) | q9 : int(2..5)]),
+ and([y_Occurrence[q10] ->
+ or([q12 <= y_ExplicitVarSizeWithMarker_Marker /\ y_ExplicitVarSizeWithMarker_Values[q12] = q10
+ | q12 : int(1..4)])
+ | q10 : int(2..5)]),
+ and([q14 <= y_ExplicitVarSizeWithMarker_Marker -> y_Occurrence[y_ExplicitVarSizeWithMarker_Values[q14]]
+ | q14 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_4_2.eprime
new file mode 100644
index 0000000000..71131e9ed0
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_4_2.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q21] /\ q22 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q21] + 2 = y_ExplicitVarSizeWithMarker_Values[q22]
+ | q21 : int(1..4), q22 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithDummy[q9] < y_ExplicitVarSizeWithDummy[q9 + 1] \/ y_ExplicitVarSizeWithDummy[q9] = 6
+ | q9 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q10] = 6 -> y_ExplicitVarSizeWithDummy[q10 + 1] = 6 | q10 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q11] != 6) | q11 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q14] != 6 ->
+ or([q16 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q16] = y_ExplicitVarSizeWithDummy[q14]
+ | q16 : int(1..4)])
+ | q14 : int(1..4)]),
+ and([q18 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithDummy[q20] != 6 /\
+ y_ExplicitVarSizeWithDummy[q20] = y_ExplicitVarSizeWithMarker_Values[q18]
+ | q20 : int(1..4)])
+ | q18 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_4_3.eprime
new file mode 100644
index 0000000000..926828d190
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_4_3.eprime
@@ -0,0 +1,25 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q9] /\ q10 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q9] + 2 = y_ExplicitVarSizeWithMarker_Values[q10]
+ | q9 : int(1..4), q10 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_3_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_3_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_3_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_3_4_4.eprime
new file mode 100644
index 0000000000..e141685012
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_3_4_4.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] /\ q23 <= y_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithFlags_Values[q22] + 2 = y_ExplicitVarSizeWithMarker_Values[q23]
+ | q22 : int(1..4), q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([q6 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q6] < y_ExplicitVarSizeWithMarker_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([q7 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q7] = 2 | q7 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([y_ExplicitVarSizeWithFlags_Flags[q9 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q9] < y_ExplicitVarSizeWithFlags_Values[q9 + 1]
+ | q9 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q10] = false -> y_ExplicitVarSizeWithFlags_Values[q10] = 2
+ | q10 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q11 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q11] | q11 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q12]) | q12 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q15] ->
+ or([q17 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q17] = y_ExplicitVarSizeWithFlags_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([q19 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q21] /\
+ y_ExplicitVarSizeWithFlags_Values[q21] = y_ExplicitVarSizeWithMarker_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_1_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_1_1-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_1_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_1_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_1_1-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_1_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_1_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_1_1.eprime
new file mode 100644
index 0000000000..902354c009
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_1_1.eprime
@@ -0,0 +1,40 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q18] /\ y_ExplicitVarSizeWithFlags_Flags[q19] ->
+ x_ExplicitVarSizeWithFlags_Values[q18] + 2 = y_ExplicitVarSizeWithFlags_Values[q19]
+ | q18 : int(1..4), q19 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q11]) | q11 : int(2..5)]),
+ and([x_Occurrence[q20] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q22] /\ x_ExplicitVarSizeWithFlags_Values[q22] = q20 | q22 : int(1..4)])
+ | q20 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q24] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q24]]
+ | q24 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q12]) | q12 : int(2..5)]),
+ and([y_Occurrence[q13] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q15] /\ y_ExplicitVarSizeWithFlags_Values[q15] = q13 | q15 : int(1..4)])
+ | q13 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q17] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q17]]
+ | q17 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_1_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_1_2-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_1_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_1_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_1_2-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_1_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_1_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_1_2.eprime
new file mode 100644
index 0000000000..2093b2c8e5
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_1_2.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q29] /\ y_ExplicitVarSizeWithFlags_Flags[q30] ->
+ x_ExplicitVarSizeWithFlags_Values[q29] + 2 = y_ExplicitVarSizeWithFlags_Values[q30]
+ | q29 : int(1..4), q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q11]) | q11 : int(2..5)]),
+ and([x_Occurrence[q24] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q26] /\ x_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q12] < y_ExplicitVarSizeWithDummy[q12 + 1] \/ y_ExplicitVarSizeWithDummy[q12] = 6
+ | q12 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q13] = 6 -> y_ExplicitVarSizeWithDummy[q13 + 1] = 6 | q13 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q14] != 6) | q14 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q17] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q19] /\
+ y_ExplicitVarSizeWithFlags_Values[q19] = y_ExplicitVarSizeWithDummy[q17]
+ | q19 : int(1..4)])
+ | q17 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q21] ->
+ or([y_ExplicitVarSizeWithDummy[q23] != 6 /\
+ y_ExplicitVarSizeWithDummy[q23] = y_ExplicitVarSizeWithFlags_Values[q21]
+ | q23 : int(1..4)])
+ | q21 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_1_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_1_3-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_1_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_1_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_1_3-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_1_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_1_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_1_3.eprime
new file mode 100644
index 0000000000..f2ea1ae61a
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_1_3.eprime
@@ -0,0 +1,51 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] /\ y_ExplicitVarSizeWithFlags_Flags[q29] ->
+ x_ExplicitVarSizeWithFlags_Values[q28] + 2 = y_ExplicitVarSizeWithFlags_Values[q29]
+ | q28 : int(1..4), q29 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q11]) | q11 : int(2..5)]),
+ and([x_Occurrence[q23] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q25] /\ x_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q27] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)]),
+ and([q12 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q12] < y_ExplicitVarSizeWithMarker_Values[q12 + 1]
+ | q12 : int(1..3)]),
+ and([q13 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q13] = 2 | q13 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q16 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q18] /\
+ y_ExplicitVarSizeWithFlags_Values[q18] = y_ExplicitVarSizeWithMarker_Values[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20] ->
+ or([q22 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q22] = y_ExplicitVarSizeWithFlags_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_1_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_1_4-solution000001.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_1_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_1_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_1_4-solution000002.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_1_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_1_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_1_4.eprime
new file mode 100644
index 0000000000..ca5e2cadb0
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_1_4.eprime
@@ -0,0 +1,33 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_Occurrence: matrix indexed by [int(2..5)] of bool
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_Occurrence, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] /\ y_ExplicitVarSizeWithFlags_Flags[q18] ->
+ x_ExplicitVarSizeWithFlags_Values[q17] + 2 = y_ExplicitVarSizeWithFlags_Values[q18]
+ | q17 : int(1..4), q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ 1 <= sum([toInt(x_Occurrence[q11]) | q11 : int(2..5)]),
+ and([x_Occurrence[q12] ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q14] /\ x_ExplicitVarSizeWithFlags_Values[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q16] -> x_Occurrence[x_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_2_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_2_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_2_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_2_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_2_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_2_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_2_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_2_1.eprime
new file mode 100644
index 0000000000..627fd329ca
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_2_1.eprime
@@ -0,0 +1,48 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q29] /\ y_ExplicitVarSizeWithFlags_Flags[q30] ->
+ x_ExplicitVarSizeWithFlags_Values[q29] + 2 = y_ExplicitVarSizeWithFlags_Values[q30]
+ | q29 : int(1..4), q30 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q11] < x_ExplicitVarSizeWithDummy[q11 + 1] \/ x_ExplicitVarSizeWithDummy[q11] = 6
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q12] = 6 -> x_ExplicitVarSizeWithDummy[q12 + 1] = 6 | q12 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q13] != 6) | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] ->
+ or([x_ExplicitVarSizeWithDummy[q22] != 6 /\
+ x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithFlags_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q23]) | q23 : int(2..5)]),
+ and([y_Occurrence[q24] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q26] /\ y_ExplicitVarSizeWithFlags_Values[q26] = q24 | q26 : int(1..4)])
+ | q24 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q28] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q28]]
+ | q28 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_2_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_2_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_2_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_2_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_2_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_2_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_2_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_2_2.eprime
new file mode 100644
index 0000000000..0002083a4b
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_2_2.eprime
@@ -0,0 +1,56 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q35] /\ y_ExplicitVarSizeWithFlags_Flags[q36] ->
+ x_ExplicitVarSizeWithFlags_Values[q35] + 2 = y_ExplicitVarSizeWithFlags_Values[q36]
+ | q35 : int(1..4), q36 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q11] < x_ExplicitVarSizeWithDummy[q11 + 1] \/ x_ExplicitVarSizeWithDummy[q11] = 6
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q12] = 6 -> x_ExplicitVarSizeWithDummy[q12 + 1] = 6 | q12 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q13] != 6) | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] ->
+ or([x_ExplicitVarSizeWithDummy[q22] != 6 /\
+ x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithFlags_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q23] < y_ExplicitVarSizeWithDummy[q23 + 1] \/ y_ExplicitVarSizeWithDummy[q23] = 6
+ | q23 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q24] = 6 -> y_ExplicitVarSizeWithDummy[q24 + 1] = 6 | q24 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q25] != 6) | q25 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q28] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q30] /\
+ y_ExplicitVarSizeWithFlags_Values[q30] = y_ExplicitVarSizeWithDummy[q28]
+ | q30 : int(1..4)])
+ | q28 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q32] ->
+ or([y_ExplicitVarSizeWithDummy[q34] != 6 /\
+ y_ExplicitVarSizeWithDummy[q34] = y_ExplicitVarSizeWithFlags_Values[q32]
+ | q34 : int(1..4)])
+ | q32 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_2_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_2_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_2_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_2_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_2_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_2_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_2_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_2_3.eprime
new file mode 100644
index 0000000000..95276e3dcb
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_2_3.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] /\ y_ExplicitVarSizeWithFlags_Flags[q35] ->
+ x_ExplicitVarSizeWithFlags_Values[q34] + 2 = y_ExplicitVarSizeWithFlags_Values[q35]
+ | q34 : int(1..4), q35 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q11] < x_ExplicitVarSizeWithDummy[q11 + 1] \/ x_ExplicitVarSizeWithDummy[q11] = 6
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q12] = 6 -> x_ExplicitVarSizeWithDummy[q12 + 1] = 6 | q12 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q13] != 6) | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] ->
+ or([x_ExplicitVarSizeWithDummy[q22] != 6 /\
+ x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithFlags_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)]),
+ and([q23 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q23] < y_ExplicitVarSizeWithMarker_Values[q23 + 1]
+ | q23 : int(1..3)]),
+ and([q24 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q24] = 2 | q24 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q27 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q29] /\
+ y_ExplicitVarSizeWithFlags_Values[q29] = y_ExplicitVarSizeWithMarker_Values[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q31] ->
+ or([q33 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q33] = y_ExplicitVarSizeWithFlags_Values[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_2_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_2_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_2_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_2_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_2_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_2_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_2_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_2_4.eprime
new file mode 100644
index 0000000000..05c62046ee
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_2_4.eprime
@@ -0,0 +1,41 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithDummy, x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] /\ y_ExplicitVarSizeWithFlags_Flags[q24] ->
+ x_ExplicitVarSizeWithFlags_Values[q23] + 2 = y_ExplicitVarSizeWithFlags_Values[q24]
+ | q23 : int(1..4), q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q11] < x_ExplicitVarSizeWithDummy[q11 + 1] \/ x_ExplicitVarSizeWithDummy[q11] = 6
+ | q11 : int(1..3)]),
+ and([x_ExplicitVarSizeWithDummy[q12] = 6 -> x_ExplicitVarSizeWithDummy[q12 + 1] = 6 | q12 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithDummy[q13] != 6) | q13 : int(1..4)]),
+ and([x_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q18] /\
+ x_ExplicitVarSizeWithFlags_Values[q18] = x_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q20] ->
+ or([x_ExplicitVarSizeWithDummy[q22] != 6 /\
+ x_ExplicitVarSizeWithDummy[q22] = x_ExplicitVarSizeWithFlags_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_3_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_3_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_3_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_3_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_3_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_3_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_3_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_3_1.eprime
new file mode 100644
index 0000000000..310494b661
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_3_1.eprime
@@ -0,0 +1,51 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_Occurrence, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q28] /\ y_ExplicitVarSizeWithFlags_Flags[q29] ->
+ x_ExplicitVarSizeWithFlags_Values[q28] + 2 = y_ExplicitVarSizeWithFlags_Values[q29]
+ | q28 : int(1..4), q29 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 2 | q12 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q21] = x_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q22]) | q22 : int(2..5)]),
+ and([y_Occurrence[q23] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q25] /\ y_ExplicitVarSizeWithFlags_Values[q25] = q23 | q25 : int(1..4)])
+ | q23 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q27] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q27]]
+ | q27 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_3_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_3_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_3_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_3_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_3_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_3_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_3_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_3_2.eprime
new file mode 100644
index 0000000000..8fbea0fc93
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_3_2.eprime
@@ -0,0 +1,59 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q34] /\ y_ExplicitVarSizeWithFlags_Flags[q35] ->
+ x_ExplicitVarSizeWithFlags_Values[q34] + 2 = y_ExplicitVarSizeWithFlags_Values[q35]
+ | q34 : int(1..4), q35 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 2 | q12 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q21] = x_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q22] < y_ExplicitVarSizeWithDummy[q22 + 1] \/ y_ExplicitVarSizeWithDummy[q22] = 6
+ | q22 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q23] = 6 -> y_ExplicitVarSizeWithDummy[q23 + 1] = 6 | q23 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q24] != 6) | q24 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q27] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q29] /\
+ y_ExplicitVarSizeWithFlags_Values[q29] = y_ExplicitVarSizeWithDummy[q27]
+ | q29 : int(1..4)])
+ | q27 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q31] ->
+ or([y_ExplicitVarSizeWithDummy[q33] != 6 /\
+ y_ExplicitVarSizeWithDummy[q33] = y_ExplicitVarSizeWithFlags_Values[q31]
+ | q33 : int(1..4)])
+ | q31 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_3_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_3_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_3_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_3_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_3_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_3_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_3_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_3_3.eprime
new file mode 100644
index 0000000000..a1e6b33da9
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_3_3.eprime
@@ -0,0 +1,61 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker, y_ExplicitVarSizeWithMarker_Values,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q33] /\ y_ExplicitVarSizeWithFlags_Flags[q34] ->
+ x_ExplicitVarSizeWithFlags_Values[q33] + 2 = y_ExplicitVarSizeWithFlags_Values[q34]
+ | q33 : int(1..4), q34 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 2 | q12 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q21] = x_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)]),
+ and([q22 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q22] < y_ExplicitVarSizeWithMarker_Values[q22 + 1]
+ | q22 : int(1..3)]),
+ and([q23 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q23] = 2 | q23 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q26 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q28] /\
+ y_ExplicitVarSizeWithFlags_Values[q28] = y_ExplicitVarSizeWithMarker_Values[q26]
+ | q28 : int(1..4)])
+ | q26 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q30] ->
+ or([q32 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q32] = y_ExplicitVarSizeWithFlags_Values[q30]
+ | q32 : int(1..4)])
+ | q30 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_3_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_3_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_3_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_3_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_3_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_3_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_3_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_3_4.eprime
new file mode 100644
index 0000000000..fd4427c028
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_3_4.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find x_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithMarker_Marker, x_ExplicitVarSizeWithMarker_Values, x_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] /\ y_ExplicitVarSizeWithFlags_Flags[q23] ->
+ x_ExplicitVarSizeWithFlags_Values[q22] + 2 = y_ExplicitVarSizeWithFlags_Values[q23]
+ | q22 : int(1..4), q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([q11 + 1 <= x_ExplicitVarSizeWithMarker_Marker ->
+ x_ExplicitVarSizeWithMarker_Values[q11] < x_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > x_ExplicitVarSizeWithMarker_Marker -> x_ExplicitVarSizeWithMarker_Values[q12] = 2 | q12 : int(1..4)]),
+ 1 <= x_ExplicitVarSizeWithMarker_Marker,
+ and([q15 <= x_ExplicitVarSizeWithMarker_Marker ->
+ or([x_ExplicitVarSizeWithFlags_Flags[q17] /\
+ x_ExplicitVarSizeWithFlags_Values[q17] = x_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([q21 <= x_ExplicitVarSizeWithMarker_Marker /\
+ x_ExplicitVarSizeWithMarker_Values[q21] = x_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_4_1-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_4_1-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_4_1-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_4_1-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_4_1-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_4_1-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_4_1.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_4_1.eprime
new file mode 100644
index 0000000000..3dd731472f
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_4_1.eprime
@@ -0,0 +1,33 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_Occurrence: matrix indexed by [int(2..5)] of bool
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_Occurrence,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q17] /\ y_ExplicitVarSizeWithFlags_Flags[q18] ->
+ x_ExplicitVarSizeWithFlags_Values[q17] + 2 = y_ExplicitVarSizeWithFlags_Values[q18]
+ | q17 : int(1..4), q18 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ 1 <= sum([toInt(y_Occurrence[q11]) | q11 : int(2..5)]),
+ and([y_Occurrence[q12] ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q14] /\ y_ExplicitVarSizeWithFlags_Values[q14] = q12 | q14 : int(1..4)])
+ | q12 : int(2..5)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q16] -> y_Occurrence[y_ExplicitVarSizeWithFlags_Values[q16]]
+ | q16 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_4_2-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_4_2-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_4_2-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_4_2-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_4_2-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_4_2-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_4_2.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_4_2.eprime
new file mode 100644
index 0000000000..256ad5b5d2
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_4_2.eprime
@@ -0,0 +1,41 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4)] of int(2..6)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithDummy,
+ y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q23] /\ y_ExplicitVarSizeWithFlags_Flags[q24] ->
+ x_ExplicitVarSizeWithFlags_Values[q23] + 2 = y_ExplicitVarSizeWithFlags_Values[q24]
+ | q23 : int(1..4), q24 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q11] < y_ExplicitVarSizeWithDummy[q11 + 1] \/ y_ExplicitVarSizeWithDummy[q11] = 6
+ | q11 : int(1..3)]),
+ and([y_ExplicitVarSizeWithDummy[q12] = 6 -> y_ExplicitVarSizeWithDummy[q12 + 1] = 6 | q12 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithDummy[q13] != 6) | q13 : int(1..4)]),
+ and([y_ExplicitVarSizeWithDummy[q16] != 6 ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q18] /\
+ y_ExplicitVarSizeWithFlags_Values[q18] = y_ExplicitVarSizeWithDummy[q16]
+ | q18 : int(1..4)])
+ | q16 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q20] ->
+ or([y_ExplicitVarSizeWithDummy[q22] != 6 /\
+ y_ExplicitVarSizeWithDummy[q22] = y_ExplicitVarSizeWithFlags_Values[q20]
+ | q22 : int(1..4)])
+ | q20 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_4_3-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_4_3-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_4_3-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_4_3-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_4_3-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_4_3-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_4_3.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_4_3.eprime
new file mode 100644
index 0000000000..c694863719
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_4_3.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithMarker_Marker: int(0..4)
+find y_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithMarker_Marker,
+ y_ExplicitVarSizeWithMarker_Values, y_ExplicitVarSizeWithFlags_Flags, y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q22] /\ y_ExplicitVarSizeWithFlags_Flags[q23] ->
+ x_ExplicitVarSizeWithFlags_Values[q22] + 2 = y_ExplicitVarSizeWithFlags_Values[q23]
+ | q22 : int(1..4), q23 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)]),
+ and([q11 + 1 <= y_ExplicitVarSizeWithMarker_Marker ->
+ y_ExplicitVarSizeWithMarker_Values[q11] < y_ExplicitVarSizeWithMarker_Values[q11 + 1]
+ | q11 : int(1..3)]),
+ and([q12 > y_ExplicitVarSizeWithMarker_Marker -> y_ExplicitVarSizeWithMarker_Values[q12] = 2 | q12 : int(1..4)]),
+ 1 <= y_ExplicitVarSizeWithMarker_Marker,
+ and([q15 <= y_ExplicitVarSizeWithMarker_Marker ->
+ or([y_ExplicitVarSizeWithFlags_Flags[q17] /\
+ y_ExplicitVarSizeWithFlags_Values[q17] = y_ExplicitVarSizeWithMarker_Values[q15]
+ | q17 : int(1..4)])
+ | q15 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q19] ->
+ or([q21 <= y_ExplicitVarSizeWithMarker_Marker /\
+ y_ExplicitVarSizeWithMarker_Values[q21] = y_ExplicitVarSizeWithFlags_Values[q19]
+ | q21 : int(1..4)])
+ | q19 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_4_4-solution000001.solution b/tests/exhaustive/basic/set09/expected/model_4_4_4_4-solution000001.solution
new file mode 100644
index 0000000000..48003f5fce
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_4_4-solution000001.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {2}
+letting y be {4}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_4_4-solution000002.solution b/tests/exhaustive/basic/set09/expected/model_4_4_4_4-solution000002.solution
new file mode 100644
index 0000000000..0b94905e4c
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_4_4-solution000002.solution
@@ -0,0 +1,4 @@
+language Essence 1.3
+
+letting x be {3}
+letting y be {5}
diff --git a/tests/exhaustive/basic/set09/expected/model_4_4_4_4.eprime b/tests/exhaustive/basic/set09/expected/model_4_4_4_4.eprime
new file mode 100644
index 0000000000..1741be5b67
--- /dev/null
+++ b/tests/exhaustive/basic/set09/expected/model_4_4_4_4.eprime
@@ -0,0 +1,26 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+find y_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..4)] of bool
+find y_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..4)] of int(2..5)
+branching on
+ [x_ExplicitVarSizeWithFlags_Flags, x_ExplicitVarSizeWithFlags_Values, y_ExplicitVarSizeWithFlags_Flags,
+ y_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlags_Flags[q11] /\ y_ExplicitVarSizeWithFlags_Flags[q12] ->
+ x_ExplicitVarSizeWithFlags_Values[q11] + 2 = y_ExplicitVarSizeWithFlags_Values[q12]
+ | q11 : int(1..4), q12 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q1 + 1] ->
+ x_ExplicitVarSizeWithFlags_Values[q1] < x_ExplicitVarSizeWithFlags_Values[q1 + 1]
+ | q1 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q2] = false -> x_ExplicitVarSizeWithFlags_Values[q2] = 2 | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlags_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlags_Flags[q3] | q3 : int(1..3)]),
+ 1 <= sum([toInt(x_ExplicitVarSizeWithFlags_Flags[q4]) | q4 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q6 + 1] ->
+ y_ExplicitVarSizeWithFlags_Values[q6] < y_ExplicitVarSizeWithFlags_Values[q6 + 1]
+ | q6 : int(1..3)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q7] = false -> y_ExplicitVarSizeWithFlags_Values[q7] = 2 | q7 : int(1..4)]),
+ and([y_ExplicitVarSizeWithFlags_Flags[q8 + 1] -> y_ExplicitVarSizeWithFlags_Flags[q8] | q8 : int(1..3)]),
+ 1 <= sum([toInt(y_ExplicitVarSizeWithFlags_Flags[q9]) | q9 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000001.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000001.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000002.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000002.solution
new file mode 100644
index 0000000000..7c5b3bfc58
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {{}}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000003.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000003.solution
new file mode 100644
index 0000000000..550c68f48c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{2}}
+$ Visualisation for x
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000004.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000004.solution
new file mode 100644
index 0000000000..69bc828bbc
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1}}
+$ Visualisation for x
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000005.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000005.solution
new file mode 100644
index 0000000000..114bad5315
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000005.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1, 2}}
+$ Visualisation for x
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000006.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000006.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000007.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000007.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000008.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000008.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000009.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000009.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000010.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000010.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000011.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000011.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000011.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000012.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000012.solution
new file mode 100644
index 0000000000..f1a04b347c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000013.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000013.solution
new file mode 100644
index 0000000000..b1673f700a
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000014.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000014.solution
new file mode 100644
index 0000000000..8400fcb8c1
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000015.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000015.solution
new file mode 100644
index 0000000000..7c7f2e98ea
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000015.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}, {2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000016.solution b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000016.solution
new file mode 100644
index 0000000000..29f10f5fb0
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1-solution000016.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_1.eprime b/tests/exhaustive/basic/setOfSet01/expected/model_1.eprime
new file mode 100644
index 0000000000..ec206e1289
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_1.eprime
@@ -0,0 +1,14 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarkerR2_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarkerR2_Values_Occurrence: matrix indexed by [int(1..4), int(1..2)] of bool
+branching on [x_ExplicitVarSizeWithMarkerR2_Marker, x_ExplicitVarSizeWithMarkerR2_Values_Occurrence]
+such that
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarkerR2_Marker ->
+ [-toInt(x_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q1, q5]) | q5 : int(1..2)] x_ExplicitVarSizeWithMarkerR2_Marker ->
+ and([x_ExplicitVarSizeWithMarkerR2_Values_Occurrence[q2, q7] = false | q7 : int(1..2)])
+ | q2 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000001.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000001.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000002.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000002.solution
new file mode 100644
index 0000000000..114bad5315
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1, 2}}
+$ Visualisation for x
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000003.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000003.solution
new file mode 100644
index 0000000000..69bc828bbc
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1}}
+$ Visualisation for x
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000004.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000004.solution
new file mode 100644
index 0000000000..550c68f48c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{2}}
+$ Visualisation for x
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000005.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000005.solution
new file mode 100644
index 0000000000..7c5b3bfc58
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {{}}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000006.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000006.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000007.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000007.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000008.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000008.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000009.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000009.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000010.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000010.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000011.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000011.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000011.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000012.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000012.solution
new file mode 100644
index 0000000000..7c7f2e98ea
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}, {2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000013.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000013.solution
new file mode 100644
index 0000000000..8400fcb8c1
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000014.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000014.solution
new file mode 100644
index 0000000000..b1673f700a
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000015.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000015.solution
new file mode 100644
index 0000000000..f1a04b347c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000015.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000016.solution b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000016.solution
new file mode 100644
index 0000000000..29f10f5fb0
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2-solution000016.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_2.eprime b/tests/exhaustive/basic/setOfSet01/expected/model_2.eprime
new file mode 100644
index 0000000000..2bba65c207
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_2.eprime
@@ -0,0 +1,24 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarkerR6_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy:
+ matrix indexed by [int(1..4), int(1..2)] of int(1..3)
+branching on [x_ExplicitVarSizeWithMarkerR6_Marker, x_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy]
+such that
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarkerR6_Marker ->
+ [x_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q1, q8] | q8 : int(1..2)] x_ExplicitVarSizeWithMarkerR6_Marker ->
+ and([x_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q2, q10] = 1 | q10 : int(1..2)])
+ | q2 : int(1..4)]),
+ and([q3 <= x_ExplicitVarSizeWithMarkerR6_Marker ->
+ x_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q3, 1] <
+ x_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q3, 2]
+ \/ x_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q3, 1] = 3
+ | q3 : int(1..4)]),
+ and([q3 <= x_ExplicitVarSizeWithMarkerR6_Marker ->
+ (x_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q3, 1] = 3 ->
+ x_ExplicitVarSizeWithMarkerR6_Values_ExplicitVarSizeWithDummy[q3, 2] = 3)
+ | q3 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000001.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000001.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000002.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000002.solution
new file mode 100644
index 0000000000..7c5b3bfc58
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {{}}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000003.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000003.solution
new file mode 100644
index 0000000000..69bc828bbc
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1}}
+$ Visualisation for x
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000004.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000004.solution
new file mode 100644
index 0000000000..550c68f48c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{2}}
+$ Visualisation for x
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000005.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000005.solution
new file mode 100644
index 0000000000..114bad5315
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000005.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1, 2}}
+$ Visualisation for x
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000006.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000006.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000007.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000007.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000008.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000008.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000009.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000009.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000010.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000010.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000011.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000011.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000011.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000012.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000012.solution
new file mode 100644
index 0000000000..f1a04b347c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000013.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000013.solution
new file mode 100644
index 0000000000..8400fcb8c1
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000014.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000014.solution
new file mode 100644
index 0000000000..b1673f700a
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000015.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000015.solution
new file mode 100644
index 0000000000..7c7f2e98ea
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000015.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}, {2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000016.solution b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000016.solution
new file mode 100644
index 0000000000..29f10f5fb0
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_3-solution000016.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_3.eprime.orig b/tests/exhaustive/basic/setOfSet01/expected/model_3.eprime.orig
deleted file mode 100644
index a8557ffeaf..0000000000
--- a/tests/exhaustive/basic/setOfSet01/expected/model_3.eprime.orig
+++ /dev/null
@@ -1,34 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithMarkerR5_Marker: int(0..4)
-find x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)
-find x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of int(1..2)
-branching on
- [x_ExplicitVarSizeWithMarkerR5_Marker, x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker,
- x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- and([q1 + 1 <= x_ExplicitVarSizeWithMarkerR5_Marker ->
- flatten([[x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q1]; int(1)],
- [x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q1, q7] | q7 : int(1..2)];
- int(1..2)])
- x_ExplicitVarSizeWithMarkerR5_Marker ->
- x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q2] = 0 /\
- and([x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q2, q9] = 1 | q9 : int(1..2)])
- | q2 : int(1..4)]),
- and([q3 <= x_ExplicitVarSizeWithMarkerR5_Marker ->
- (2 <= x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q3] ->
- x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q3, 1] <
- x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q3, 2])
- | q3 : int(1..4)]),
- and([q3 <= x_ExplicitVarSizeWithMarkerR5_Marker ->
- and([q5 > x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Marker[q3] ->
- x_ExplicitVarSizeWithMarkerR5_Values_ExplicitVarSizeWithMarker_Values[q3, q5] = 1
- | q5 : int(1..2)])
- | q3 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000001.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000001.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000002.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000002.solution
new file mode 100644
index 0000000000..7c5b3bfc58
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {{}}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000003.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000003.solution
new file mode 100644
index 0000000000..69bc828bbc
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1}}
+$ Visualisation for x
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000004.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000004.solution
new file mode 100644
index 0000000000..550c68f48c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{2}}
+$ Visualisation for x
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000005.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000005.solution
new file mode 100644
index 0000000000..114bad5315
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000005.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1, 2}}
+$ Visualisation for x
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000006.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000006.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000007.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000007.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000008.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000008.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000009.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000009.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000010.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000010.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000011.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000011.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000011.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000012.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000012.solution
new file mode 100644
index 0000000000..f1a04b347c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000013.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000013.solution
new file mode 100644
index 0000000000..8400fcb8c1
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000014.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000014.solution
new file mode 100644
index 0000000000..b1673f700a
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000015.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000015.solution
new file mode 100644
index 0000000000..7c7f2e98ea
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000015.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}, {2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000016.solution b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000016.solution
new file mode 100644
index 0000000000..29f10f5fb0
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4-solution000016.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_4.eprime b/tests/exhaustive/basic/setOfSet01/expected/model_4.eprime
new file mode 100644
index 0000000000..979f6d52c7
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_4.eprime
@@ -0,0 +1,43 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithMarkerR4_Marker: int(0..4)
+find x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+find x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..4), int(1..2)] of int(1..2)
+branching on
+ [x_ExplicitVarSizeWithMarkerR4_Marker, x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values]
+such that
+ and([q1 + 1 <= x_ExplicitVarSizeWithMarkerR4_Marker ->
+ flatten([flatten([[-toInt(x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q1, q9]);
+ int(1)],
+ [x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q1, q9]; int(1)];
+ int(1..2)])
+ | q9 : int(1..2)])
+ x_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q2, q11] = false | q11 : int(1..2)])
+ /\ and([x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q2, q12] = 1 | q12 : int(1..2)])
+ | q2 : int(1..4)]),
+ and([q3 <= x_ExplicitVarSizeWithMarkerR4_Marker ->
+ (x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q3, 2] ->
+ x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q3, 1] <
+ x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q3, 2])
+ | q3 : int(1..4)]),
+ and([q3 <= x_ExplicitVarSizeWithMarkerR4_Marker ->
+ and([x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q3, q5] = false ->
+ x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Values[q3, q5] = 1
+ | q5 : int(1..2)])
+ | q3 : int(1..4)]),
+ and([q3 <= x_ExplicitVarSizeWithMarkerR4_Marker ->
+ (x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q3, 2] ->
+ x_ExplicitVarSizeWithMarkerR4_Values_ExplicitVarSizeWithFlags_Flags[q3, 1])
+ | q3 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000001.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000001.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000002.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000002.solution
new file mode 100644
index 0000000000..7c5b3bfc58
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {{}}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000003.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000003.solution
new file mode 100644
index 0000000000..550c68f48c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{2}}
+$ Visualisation for x
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000004.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000004.solution
new file mode 100644
index 0000000000..69bc828bbc
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1}}
+$ Visualisation for x
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000005.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000005.solution
new file mode 100644
index 0000000000..114bad5315
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000005.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1, 2}}
+$ Visualisation for x
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000006.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000006.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000007.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000007.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000008.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000008.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000009.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000009.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000010.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000010.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000011.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000011.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000011.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000012.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000012.solution
new file mode 100644
index 0000000000..f1a04b347c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000013.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000013.solution
new file mode 100644
index 0000000000..b1673f700a
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000014.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000014.solution
new file mode 100644
index 0000000000..8400fcb8c1
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000015.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000015.solution
new file mode 100644
index 0000000000..7c7f2e98ea
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000015.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}, {2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000016.solution b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000016.solution
new file mode 100644
index 0000000000..29f10f5fb0
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5-solution000016.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_5.eprime b/tests/exhaustive/basic/setOfSet01/expected/model_5.eprime
new file mode 100644
index 0000000000..f99416596c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_5.eprime
@@ -0,0 +1,15 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlagsR2_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlagsR2_Values_Occurrence: matrix indexed by [int(1..4), int(1..2)] of bool
+branching on [x_ExplicitVarSizeWithFlagsR2_Flags, x_ExplicitVarSizeWithFlagsR2_Values_Occurrence]
+such that
+ and([x_ExplicitVarSizeWithFlagsR2_Flags[q1 + 1] ->
+ [-toInt(x_ExplicitVarSizeWithFlagsR2_Values_Occurrence[q1, q7]) | q7 : int(1..2)]
+ and([x_ExplicitVarSizeWithFlagsR2_Values_Occurrence[q2, q9] = false | q9 : int(1..2)])
+ | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlagsR2_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlagsR2_Flags[q3] | q3 : int(1..3)])
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000001.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000001.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000002.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000002.solution
new file mode 100644
index 0000000000..114bad5315
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000002.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1, 2}}
+$ Visualisation for x
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000003.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000003.solution
new file mode 100644
index 0000000000..69bc828bbc
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1}}
+$ Visualisation for x
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000004.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000004.solution
new file mode 100644
index 0000000000..550c68f48c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{2}}
+$ Visualisation for x
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000005.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000005.solution
new file mode 100644
index 0000000000..7c5b3bfc58
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000005.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {{}}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000006.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000006.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000007.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000007.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000008.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000008.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000009.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000009.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000010.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000010.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000011.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000011.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000011.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000012.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000012.solution
new file mode 100644
index 0000000000..7c7f2e98ea
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}, {2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000013.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000013.solution
new file mode 100644
index 0000000000..8400fcb8c1
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000014.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000014.solution
new file mode 100644
index 0000000000..b1673f700a
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000015.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000015.solution
new file mode 100644
index 0000000000..f1a04b347c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000015.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000016.solution b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000016.solution
new file mode 100644
index 0000000000..29f10f5fb0
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6-solution000016.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_6.eprime b/tests/exhaustive/basic/setOfSet01/expected/model_6.eprime
new file mode 100644
index 0000000000..f1ff4362d3
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_6.eprime
@@ -0,0 +1,24 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlagsR6_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlagsR6_Values_ExplicitVarSizeWithDummy: matrix indexed by [int(1..4), int(1..2)] of int(1..3)
+branching on [x_ExplicitVarSizeWithFlagsR6_Flags, x_ExplicitVarSizeWithFlagsR6_Values_ExplicitVarSizeWithDummy]
+such that
+ and([x_ExplicitVarSizeWithFlagsR6_Flags[q1 + 1] ->
+ [x_ExplicitVarSizeWithFlagsR6_Values_ExplicitVarSizeWithDummy[q1, q10] | q10 : int(1..2)]
+ and([x_ExplicitVarSizeWithFlagsR6_Values_ExplicitVarSizeWithDummy[q2, q12] = 1 | q12 : int(1..2)])
+ | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlagsR6_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlagsR6_Flags[q3] | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlagsR6_Flags[q5] ->
+ x_ExplicitVarSizeWithFlagsR6_Values_ExplicitVarSizeWithDummy[q5, 1] <
+ x_ExplicitVarSizeWithFlagsR6_Values_ExplicitVarSizeWithDummy[q5, 2]
+ \/ x_ExplicitVarSizeWithFlagsR6_Values_ExplicitVarSizeWithDummy[q5, 1] = 3
+ | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlagsR6_Flags[q5] ->
+ (x_ExplicitVarSizeWithFlagsR6_Values_ExplicitVarSizeWithDummy[q5, 1] = 3 ->
+ x_ExplicitVarSizeWithFlagsR6_Values_ExplicitVarSizeWithDummy[q5, 2] = 3)
+ | q5 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000001.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000001.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000002.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000002.solution
new file mode 100644
index 0000000000..7c5b3bfc58
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {{}}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000003.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000003.solution
new file mode 100644
index 0000000000..69bc828bbc
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1}}
+$ Visualisation for x
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000004.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000004.solution
new file mode 100644
index 0000000000..550c68f48c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{2}}
+$ Visualisation for x
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000005.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000005.solution
new file mode 100644
index 0000000000..114bad5315
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000005.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1, 2}}
+$ Visualisation for x
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000006.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000006.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000007.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000007.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000008.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000008.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000009.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000009.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000010.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000010.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000011.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000011.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000011.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000012.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000012.solution
new file mode 100644
index 0000000000..f1a04b347c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000013.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000013.solution
new file mode 100644
index 0000000000..8400fcb8c1
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000014.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000014.solution
new file mode 100644
index 0000000000..b1673f700a
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000015.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000015.solution
new file mode 100644
index 0000000000..7c7f2e98ea
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000015.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}, {2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000016.solution b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000016.solution
new file mode 100644
index 0000000000..29f10f5fb0
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_7-solution000016.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_7.eprime.orig b/tests/exhaustive/basic/setOfSet01/expected/model_7.eprime.orig
deleted file mode 100644
index e21b02711c..0000000000
--- a/tests/exhaustive/basic/setOfSet01/expected/model_7.eprime.orig
+++ /dev/null
@@ -1,35 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitVarSizeWithFlagsR5_Flags: matrix indexed by [int(1..4)] of bool
-find x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)
-find x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values:
- matrix indexed by [int(1..4), int(1..2)] of int(1..2)
-branching on
- [x_ExplicitVarSizeWithFlagsR5_Flags, x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker,
- x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values]
-such that
- and([x_ExplicitVarSizeWithFlagsR5_Flags[q1 + 1] ->
- flatten([[x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q1]; int(1)],
- [x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q1, q9] | q9 : int(1..2)];
- int(1..2)])
-
- x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q2] = 0 /\
- and([x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q2, q11] = 1 | q11 : int(1..2)])
- | q2 : int(1..4)]),
- and([x_ExplicitVarSizeWithFlagsR5_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlagsR5_Flags[q3] | q3 : int(1..3)]),
- and([x_ExplicitVarSizeWithFlagsR5_Flags[q5] ->
- (2 <= x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q5] ->
- x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q5, 1] <
- x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q5, 2])
- | q5 : int(1..4)]),
- and([x_ExplicitVarSizeWithFlagsR5_Flags[q5] ->
- and([q7 > x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Marker[q5] ->
- x_ExplicitVarSizeWithFlagsR5_Values_ExplicitVarSizeWithMarker_Values[q5, q7] = 1
- | q7 : int(1..2)])
- | q5 : int(1..4)])
-
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000001.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000001.solution
new file mode 100644
index 0000000000..1a734343d9
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000001.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000002.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000002.solution
new file mode 100644
index 0000000000..7c5b3bfc58
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000002.solution
@@ -0,0 +1,3 @@
+language Essence 1.3
+
+letting x be {{}}
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000003.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000003.solution
new file mode 100644
index 0000000000..69bc828bbc
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000003.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1}}
+$ Visualisation for x
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000004.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000004.solution
new file mode 100644
index 0000000000..550c68f48c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000004.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{2}}
+$ Visualisation for x
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000005.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000005.solution
new file mode 100644
index 0000000000..114bad5315
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000005.solution
@@ -0,0 +1,6 @@
+language Essence 1.3
+
+letting x be {{1, 2}}
+$ Visualisation for x
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000006.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000006.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000007.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000007.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000007.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000008.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000008.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000008.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000009.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000009.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000009.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000010.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000010.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000010.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000011.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000011.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000011.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000012.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000012.solution
new file mode 100644
index 0000000000..f1a04b347c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000012.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000013.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000013.solution
new file mode 100644
index 0000000000..8400fcb8c1
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000013.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000014.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000014.solution
new file mode 100644
index 0000000000..b1673f700a
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000014.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000015.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000015.solution
new file mode 100644
index 0000000000..7c7f2e98ea
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000015.solution
@@ -0,0 +1,8 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}, {2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000016.solution b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000016.solution
new file mode 100644
index 0000000000..29f10f5fb0
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8-solution000016.solution
@@ -0,0 +1,9 @@
+language Essence 1.3
+
+letting x be {{}, {1}, {1, 2}, {2}}
+$ Visualisation for x
+$
+$ 1
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet01/expected/model_8.eprime b/tests/exhaustive/basic/setOfSet01/expected/model_8.eprime
new file mode 100644
index 0000000000..2e31cf9b1f
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet01/expected/model_8.eprime
@@ -0,0 +1,44 @@
+language ESSENCE' 1.0
+
+find x_ExplicitVarSizeWithFlagsR4_Flags: matrix indexed by [int(1..4)] of bool
+find x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags:
+ matrix indexed by [int(1..4), int(1..2)] of bool
+find x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values:
+ matrix indexed by [int(1..4), int(1..2)] of int(1..2)
+branching on
+ [x_ExplicitVarSizeWithFlagsR4_Flags, x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values]
+such that
+ and([x_ExplicitVarSizeWithFlagsR4_Flags[q1 + 1] ->
+ flatten([flatten([[-toInt(x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q1, q11]);
+ int(1)],
+ [x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q1, q11]; int(1)];
+ int(1..2)])
+ | q11 : int(1..2)])
+
+ and([x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q2, q13] = false | q13 : int(1..2)]) /\
+ and([x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q2, q14] = 1 | q14 : int(1..2)])
+ | q2 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlagsR4_Flags[q3 + 1] -> x_ExplicitVarSizeWithFlagsR4_Flags[q3] | q3 : int(1..3)]),
+ and([x_ExplicitVarSizeWithFlagsR4_Flags[q5] ->
+ (x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q5, 2] ->
+ x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q5, 1] <
+ x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q5, 2])
+ | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlagsR4_Flags[q5] ->
+ and([x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q5, q7] = false ->
+ x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Values[q5, q7] = 1
+ | q7 : int(1..2)])
+ | q5 : int(1..4)]),
+ and([x_ExplicitVarSizeWithFlagsR4_Flags[q5] ->
+ (x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q5, 2] ->
+ x_ExplicitVarSizeWithFlagsR4_Values_ExplicitVarSizeWithFlags_Flags[q5, 1])
+ | q5 : int(1..4)])
+
diff --git a/tests/exhaustive/basic/setOfSet02/expected/model_1_1-solution000002.solution b/tests/exhaustive/basic/setOfSet02/expected/model_1_1-solution000002.solution
new file mode 100644
index 0000000000..707d6ddaf7
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet02/expected/model_1_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2, 3}, {1, 3, 4}}
+$ Visualisation for x
+$ 1 2 3
+$ 1 3 4
+
diff --git a/tests/exhaustive/basic/setOfSet02/expected/model_1_2-solution000002.solution b/tests/exhaustive/basic/setOfSet02/expected/model_1_2-solution000002.solution
new file mode 100644
index 0000000000..707d6ddaf7
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet02/expected/model_1_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2, 3}, {1, 3, 4}}
+$ Visualisation for x
+$ 1 2 3
+$ 1 3 4
+
diff --git a/tests/exhaustive/basic/setOfSet02/expected/model_1_2.eprime.orig b/tests/exhaustive/basic/setOfSet02/expected/model_1_2.eprime.orig
deleted file mode 100644
index 16addfde90..0000000000
--- a/tests/exhaustive/basic/setOfSet02/expected/model_1_2.eprime.orig
+++ /dev/null
@@ -1,26 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..4)] of bool
-find x_ExplicitR3_Explicit: matrix indexed by [int(1..2), int(1..3)] of int(1..4)
-branching on [x_ExplicitR3_Explicit, x_ExplicitR2_Occurrence]
-such that
- or([and([x_ExplicitR2_Occurrence[q31, q32] -> or([1 = q32, 2 = q32, 3 = q32; int(1..3)]) | q32 : int(1..4)]) /\
- and([x_ExplicitR2_Occurrence[q31, 1], x_ExplicitR2_Occurrence[q31, 2], x_ExplicitR2_Occurrence[q31, 3];
- int(1..3)])
- | q31 : int(1..2)]),
- [-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..4)] or([x_ExplicitR3_Explicit[q13, q18] = q16 | q18 : int(1..3)])
- | q16 : int(1..4)])
- /\ and([x_ExplicitR2_Occurrence[q15, x_ExplicitR3_Explicit[q13, q20]] | q20 : int(1..3)])
- | q15 : int(1..2)])
- | q13 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q22, x_ExplicitR3_Explicit[q24, q26]] | q26 : int(1..3)]) /\
- and([x_ExplicitR2_Occurrence[q22, q27] -> or([x_ExplicitR3_Explicit[q24, q29] = q27 | q29 : int(1..3)])
- | q27 : int(1..4)])
- | q24 : int(1..2)])
- | q22 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet02/expected/model_2_1-solution000002.solution b/tests/exhaustive/basic/setOfSet02/expected/model_2_1-solution000002.solution
new file mode 100644
index 0000000000..707d6ddaf7
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet02/expected/model_2_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2, 3}, {1, 3, 4}}
+$ Visualisation for x
+$ 1 2 3
+$ 1 3 4
+
diff --git a/tests/exhaustive/basic/setOfSet02/expected/model_2_1.eprime.orig b/tests/exhaustive/basic/setOfSet02/expected/model_2_1.eprime.orig
deleted file mode 100644
index 443becc194..0000000000
--- a/tests/exhaustive/basic/setOfSet02/expected/model_2_1.eprime.orig
+++ /dev/null
@@ -1,32 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR3_Explicit: matrix indexed by [int(1..2), int(1..3)] of int(1..4)
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..4)] of bool
-branching on [x_ExplicitR2_Occurrence, x_ExplicitR3_Explicit]
-such that
- or([and([or([1 = x_ExplicitR3_Explicit[q31, q33], 2 = x_ExplicitR3_Explicit[q31, q33],
- 3 = x_ExplicitR3_Explicit[q31, q33];
- int(1..3)])
- | q33 : int(1..3)])
- /\
- and([or([x_ExplicitR3_Explicit[q31, q37] = 1 | q37 : int(1..3)]),
- or([x_ExplicitR3_Explicit[q31, q39] = 2 | q39 : int(1..3)]),
- or([x_ExplicitR3_Explicit[q31, q41] = 3 | q41 : int(1..3)]);
- int(1..3)])
- | q31 : int(1..2)]),
- [x_ExplicitR3_Explicit[1, q5] | q5 : int(1..3)] or([x_ExplicitR3_Explicit[q15, q20] = q18 | q20 : int(1..3)])
- | q18 : int(1..4)])
- | q15 : int(1..2)])
- | q13 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q24, q25] -> or([x_ExplicitR3_Explicit[q22, q27] = q25 | q27 : int(1..3)])
- | q25 : int(1..4)])
- /\ and([x_ExplicitR2_Occurrence[q24, x_ExplicitR3_Explicit[q22, q29]] | q29 : int(1..3)])
- | q24 : int(1..2)])
- | q22 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet02/expected/model_2_2-solution000002.solution b/tests/exhaustive/basic/setOfSet02/expected/model_2_2-solution000002.solution
new file mode 100644
index 0000000000..707d6ddaf7
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet02/expected/model_2_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2, 3}, {1, 3, 4}}
+$ Visualisation for x
+$ 1 2 3
+$ 1 3 4
+
diff --git a/tests/exhaustive/basic/setOfSet02/expected/model_2_2.eprime.orig b/tests/exhaustive/basic/setOfSet02/expected/model_2_2.eprime.orig
deleted file mode 100644
index 72c33b3766..0000000000
--- a/tests/exhaustive/basic/setOfSet02/expected/model_2_2.eprime.orig
+++ /dev/null
@@ -1,18 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR3_Explicit: matrix indexed by [int(1..2), int(1..3)] of int(1..4)
-branching on [x_ExplicitR3_Explicit]
-such that
- or([and([or([1 = x_ExplicitR3_Explicit[q8, q10], 2 = x_ExplicitR3_Explicit[q8, q10],
- 3 = x_ExplicitR3_Explicit[q8, q10];
- int(1..3)])
- | q10 : int(1..3)])
- /\
- and([or([x_ExplicitR3_Explicit[q8, q14] = 1 | q14 : int(1..3)]),
- or([x_ExplicitR3_Explicit[q8, q16] = 2 | q16 : int(1..3)]),
- or([x_ExplicitR3_Explicit[q8, q18] = 3 | q18 : int(1..3)]);
- int(1..3)])
- | q8 : int(1..2)]),
- [x_ExplicitR3_Explicit[1, q5] | q5 : int(1..3)] >>>>>> master
-=======
[-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..4)] >>>>>> main
diff --git a/tests/exhaustive/basic/setOfSet03/expected/model_2.eprime.orig b/tests/exhaustive/basic/setOfSet03/expected/model_2.eprime.orig
deleted file mode 100644
index 0c8fc4a8a1..0000000000
--- a/tests/exhaustive/basic/setOfSet03/expected/model_2.eprime.orig
+++ /dev/null
@@ -1,14 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR3_Explicit: matrix indexed by [int(1..2), int(1..3)] of int(1..4)
-branching on [x_ExplicitR3_Explicit]
-such that
- [x_ExplicitR3_Explicit[1, q5] | q5 : int(1..3)] >>>>>> master
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000001.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000002.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000003.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000004.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000005.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000006.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1.eprime b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1.eprime
new file mode 100644
index 0000000000..2aa55abc0e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_1.eprime
@@ -0,0 +1,9 @@
+language ESSENCE' 1.0
+
+find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
+branching on [x_ExplicitR2_Occurrence]
+such that
+ [-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..2)] x_ExplicitR6_ExplicitVarSizeWithDummy[q7, q9 + 1] = 3
+ | q9 : int(1..2)])
+ | q7 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q7, q10] != 3) | q10 : int(1..3)]) <= 3 | q7 : int(1..2)]),
+ and([or([and([x_ExplicitR2_Occurrence[q17, q18] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q15, q20] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q15, q20] = q18
+ | q20 : int(1..3)])
+ | q18 : int(1..2)])
+ /\
+ and([x_ExplicitR6_ExplicitVarSizeWithDummy[q15, q22] != 3 ->
+ x_ExplicitR2_Occurrence[q17, x_ExplicitR6_ExplicitVarSizeWithDummy[q15, q22]]
+ | q22 : int(1..3)])
+ | q17 : int(1..2)])
+ | q15 : int(1..2)]),
+ and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q26, q28] != 3 ->
+ x_ExplicitR2_Occurrence[q24, x_ExplicitR6_ExplicitVarSizeWithDummy[q26, q28]]
+ | q28 : int(1..3)])
+ /\
+ and([x_ExplicitR2_Occurrence[q24, q29] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q26, q31] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q26, q31] = q29
+ | q31 : int(1..3)])
+ | q29 : int(1..2)])
+ | q26 : int(1..2)])
+ | q24 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000003.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000004.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3.eprime.orig
deleted file mode 100644
index cfc048dd79..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_3.eprime.orig
+++ /dev/null
@@ -1,52 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Marker, x_ExplicitR5_ExplicitVarSizeWithMarker_Values,
- x_ExplicitR2_Occurrence]
-such that
- [-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..2)]
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q8] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q8 + 1]
- | q8 : int(1..2)])
- | q7 : int(1..2)]),
- and([and([q9 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q7] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q9] = 1
- | q9 : int(1..3)])
- | q7 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q7] <= 3 | q7 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q16, q17] ->
- or([q19 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q14] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q14, q19] = q17
- | q19 : int(1..3)])
- | q17 : int(1..2)])
- /\
- and([q21 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q14] ->
- x_ExplicitR2_Occurrence[q16, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q14, q21]]
- | q21 : int(1..3)])
- | q16 : int(1..2)])
- | q14 : int(1..2)]),
- and([or([and([q27 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q25] ->
- x_ExplicitR2_Occurrence[q23, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q25, q27]]
- | q27 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q23, q28] ->
- or([q30 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q25] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q25, q30] = q28
- | q30 : int(1..3)])
- | q28 : int(1..2)])
- | q25 : int(1..2)])
- | q23 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000003.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000004.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4.eprime b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4.eprime
new file mode 100644
index 0000000000..47eebe1823
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_1_4.eprime
@@ -0,0 +1,57 @@
+language ESSENCE' 1.0
+
+find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
+find x_ExplicitR4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitR4_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
+branching on
+ [x_ExplicitR4_ExplicitVarSizeWithFlags_Flags, x_ExplicitR4_ExplicitVarSizeWithFlags_Values, x_ExplicitR2_Occurrence]
+such that
+ [-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..2)]
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q7, q8] <
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q7, q8 + 1]
+ | q8 : int(1..2)])
+ | q7 : int(1..2)]),
+ and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q7, q9] = false ->
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q7, q9] = 1
+ | q9 : int(1..3)])
+ | q7 : int(1..2)]),
+ and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q7, q10 + 1] ->
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q7, q10]
+ | q10 : int(1..2)])
+ | q7 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q7, q11]) | q11 : int(1..3)]) <= 3 | q7 : int(1..2)]),
+ and([or([and([x_ExplicitR2_Occurrence[q18, q19] ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q16, q21] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q16, q21] = q19
+ | q21 : int(1..3)])
+ | q19 : int(1..2)])
+ /\
+ and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q16, q23] ->
+ x_ExplicitR2_Occurrence[q18, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q16, q23]]
+ | q23 : int(1..3)])
+ | q18 : int(1..2)])
+ | q16 : int(1..2)]),
+ and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q27, q29] ->
+ x_ExplicitR2_Occurrence[q25, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q27, q29]]
+ | q29 : int(1..3)])
+ /\
+ and([x_ExplicitR2_Occurrence[q25, q30] ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q27, q32] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q27, q32] = q30
+ | q32 : int(1..3)])
+ | q30 : int(1..2)])
+ | q27 : int(1..2)])
+ | q25 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000003.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000004.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3.eprime.orig
deleted file mode 100644
index 392506e889..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_3.eprime.orig
+++ /dev/null
@@ -1,115 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Marker, x_ExplicitR5_ExplicitVarSizeWithMarker_Values,
- x_ExplicitR2_Occurrence, x_ExplicitR6_ExplicitVarSizeWithDummy]
-such that
- [-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..2)] x_ExplicitR6_ExplicitVarSizeWithDummy[q7, q9 + 1] = 3
- | q9 : int(1..2)])
- | q7 : int(1..2)]),
- and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q7, q10] != 3) | q10 : int(1..3)]) <= 3 | q7 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q17, q18] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q15, q20] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q15, q20] = q18
- | q20 : int(1..3)])
- | q18 : int(1..2)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q15, q22] != 3 ->
- x_ExplicitR2_Occurrence[q17, x_ExplicitR6_ExplicitVarSizeWithDummy[q15, q22]]
- | q22 : int(1..3)])
- | q17 : int(1..2)])
- | q15 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q26, q28] != 3 ->
- x_ExplicitR2_Occurrence[q24, x_ExplicitR6_ExplicitVarSizeWithDummy[q26, q28]]
- | q28 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q24, q29] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q26, q31] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q26, q31] = q29
- | q31 : int(1..3)])
- | q29 : int(1..2)])
- | q26 : int(1..2)])
- | q24 : int(1..2)]),
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q37] | q37 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q33, q34] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q33, q34 + 1]
- | q34 : int(1..2)])
- | q33 : int(1..2)]),
- and([and([q35 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q33] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q33, q35] = 1
- | q35 : int(1..3)])
- | q33 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q33] <= 3 | q33 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q42, q43] ->
- or([q45 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q40] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q40, q45] = q43
- | q45 : int(1..3)])
- | q43 : int(1..2)])
- /\
- and([q47 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q40] ->
- x_ExplicitR2_Occurrence[q42, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q40, q47]]
- | q47 : int(1..3)])
- | q42 : int(1..2)])
- | q40 : int(1..2)]),
- and([or([and([q53 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q51] ->
- x_ExplicitR2_Occurrence[q49, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q51, q53]]
- | q53 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q49, q54] ->
- or([q56 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q51] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q51, q56] = q54
- | q56 : int(1..3)])
- | q54 : int(1..2)])
- | q51 : int(1..2)])
- | q49 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q60, q62] != 3 ->
- or([q64 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q58] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q58, q64] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q60, q62]
- | q64 : int(1..3)])
- | q62 : int(1..3)])
- /\
- and([q66 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q58] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q60, q68] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q60, q68] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q58, q66]
- | q68 : int(1..3)])
- | q66 : int(1..3)])
- | q60 : int(1..2)])
- | q58 : int(1..2)]),
- and([or([and([q74 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q72] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q70, q76] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q70, q76] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q72, q74]
- | q76 : int(1..3)])
- | q74 : int(1..3)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q70, q78] != 3 ->
- or([q80 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q72] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q72, q80] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q70, q78]
- | q80 : int(1..3)])
- | q78 : int(1..3)])
- | q72 : int(1..2)])
- | q70 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000003.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000004.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4.eprime b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4.eprime
new file mode 100644
index 0000000000..46fba1f2be
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_2_4.eprime
@@ -0,0 +1,121 @@
+language ESSENCE' 1.0
+
+find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
+find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+find x_ExplicitR4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitR4_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
+branching on
+ [x_ExplicitR4_ExplicitVarSizeWithFlags_Flags, x_ExplicitR4_ExplicitVarSizeWithFlags_Values, x_ExplicitR2_Occurrence,
+ x_ExplicitR6_ExplicitVarSizeWithDummy]
+such that
+ [-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..2)] x_ExplicitR6_ExplicitVarSizeWithDummy[q7, q9 + 1] = 3
+ | q9 : int(1..2)])
+ | q7 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q7, q10] != 3) | q10 : int(1..3)]) <= 3 | q7 : int(1..2)]),
+ and([or([and([x_ExplicitR2_Occurrence[q17, q18] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q15, q20] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q15, q20] = q18
+ | q20 : int(1..3)])
+ | q18 : int(1..2)])
+ /\
+ and([x_ExplicitR6_ExplicitVarSizeWithDummy[q15, q22] != 3 ->
+ x_ExplicitR2_Occurrence[q17, x_ExplicitR6_ExplicitVarSizeWithDummy[q15, q22]]
+ | q22 : int(1..3)])
+ | q17 : int(1..2)])
+ | q15 : int(1..2)]),
+ and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q26, q28] != 3 ->
+ x_ExplicitR2_Occurrence[q24, x_ExplicitR6_ExplicitVarSizeWithDummy[q26, q28]]
+ | q28 : int(1..3)])
+ /\
+ and([x_ExplicitR2_Occurrence[q24, q29] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q26, q31] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q26, q31] = q29
+ | q31 : int(1..3)])
+ | q29 : int(1..2)])
+ | q26 : int(1..2)])
+ | q24 : int(1..2)]),
+ flatten([flatten([[-toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[1, q39]); int(1)],
+ [x_ExplicitR4_ExplicitVarSizeWithFlags_Values[1, q39]; int(1)];
+ int(1..2)])
+ | q39 : int(1..3)])
+
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q33, q34] <
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q33, q34 + 1]
+ | q34 : int(1..2)])
+ | q33 : int(1..2)]),
+ and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q35] = false ->
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q33, q35] = 1
+ | q35 : int(1..3)])
+ | q33 : int(1..2)]),
+ and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q36 + 1] ->
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q36]
+ | q36 : int(1..2)])
+ | q33 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q37]) | q37 : int(1..3)]) <= 3 | q33 : int(1..2)]),
+ and([or([and([x_ExplicitR2_Occurrence[q44, q45] ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q42, q47] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q42, q47] = q45
+ | q47 : int(1..3)])
+ | q45 : int(1..2)])
+ /\
+ and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q42, q49] ->
+ x_ExplicitR2_Occurrence[q44, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q42, q49]]
+ | q49 : int(1..3)])
+ | q44 : int(1..2)])
+ | q42 : int(1..2)]),
+ and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q53, q55] ->
+ x_ExplicitR2_Occurrence[q51, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q53, q55]]
+ | q55 : int(1..3)])
+ /\
+ and([x_ExplicitR2_Occurrence[q51, q56] ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q53, q58] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q53, q58] = q56
+ | q58 : int(1..3)])
+ | q56 : int(1..2)])
+ | q53 : int(1..2)])
+ | q51 : int(1..2)]),
+ and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q62, q64] != 3 ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q60, q66] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q60, q66] =
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q62, q64]
+ | q66 : int(1..3)])
+ | q64 : int(1..3)])
+ /\
+ and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q60, q68] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q62, q70] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q62, q70] =
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q60, q68]
+ | q70 : int(1..3)])
+ | q68 : int(1..3)])
+ | q62 : int(1..2)])
+ | q60 : int(1..2)]),
+ and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q74, q76] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q72, q78] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q72, q78] =
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q74, q76]
+ | q78 : int(1..3)])
+ | q76 : int(1..3)])
+ /\
+ and([x_ExplicitR6_ExplicitVarSizeWithDummy[q72, q80] != 3 ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q74, q82] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q74, q82] =
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q72, q80]
+ | q82 : int(1..3)])
+ | q80 : int(1..3)])
+ | q74 : int(1..2)])
+ | q72 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_1.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_1.eprime.orig
deleted file mode 100644
index cfc048dd79..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_1.eprime.orig
+++ /dev/null
@@ -1,52 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Marker, x_ExplicitR5_ExplicitVarSizeWithMarker_Values,
- x_ExplicitR2_Occurrence]
-such that
- [-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..2)]
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q8] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q8 + 1]
- | q8 : int(1..2)])
- | q7 : int(1..2)]),
- and([and([q9 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q7] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q9] = 1
- | q9 : int(1..3)])
- | q7 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q7] <= 3 | q7 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q16, q17] ->
- or([q19 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q14] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q14, q19] = q17
- | q19 : int(1..3)])
- | q17 : int(1..2)])
- /\
- and([q21 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q14] ->
- x_ExplicitR2_Occurrence[q16, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q14, q21]]
- | q21 : int(1..3)])
- | q16 : int(1..2)])
- | q14 : int(1..2)]),
- and([or([and([q27 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q25] ->
- x_ExplicitR2_Occurrence[q23, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q25, q27]]
- | q27 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q23, q28] ->
- or([q30 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q25] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q25, q30] = q28
- | q30 : int(1..3)])
- | q28 : int(1..2)])
- | q25 : int(1..2)])
- | q23 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000001.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000002.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000003.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000004.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000005.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000006.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2.eprime.orig
deleted file mode 100644
index ee38a53845..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_2.eprime.orig
+++ /dev/null
@@ -1,116 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
-branching on
- [x_ExplicitR6_ExplicitVarSizeWithDummy, x_ExplicitR2_Occurrence, x_ExplicitR5_ExplicitVarSizeWithMarker_Marker,
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values]
-such that
- [-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..2)]
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q8] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q8 + 1]
- | q8 : int(1..2)])
- | q7 : int(1..2)]),
- and([and([q9 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q7] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q9] = 1
- | q9 : int(1..3)])
- | q7 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q7] <= 3 | q7 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q16, q17] ->
- or([q19 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q14] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q14, q19] = q17
- | q19 : int(1..3)])
- | q17 : int(1..2)])
- /\
- and([q21 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q14] ->
- x_ExplicitR2_Occurrence[q16, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q14, q21]]
- | q21 : int(1..3)])
- | q16 : int(1..2)])
- | q14 : int(1..2)]),
- and([or([and([q27 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q25] ->
- x_ExplicitR2_Occurrence[q23, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q25, q27]]
- | q27 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q23, q28] ->
- or([q30 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q25] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q25, q30] = q28
- | q30 : int(1..3)])
- | q28 : int(1..2)])
- | q25 : int(1..2)])
- | q23 : int(1..2)]),
- [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q37] | q37 : int(1..3)]
- x_ExplicitR6_ExplicitVarSizeWithDummy[q32, q34 + 1] = 3
- | q34 : int(1..2)])
- | q32 : int(1..2)]),
- and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q32, q35] != 3) | q35 : int(1..3)]) <= 3 | q32 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q42, q43] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q40, q45] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q40, q45] = q43
- | q45 : int(1..3)])
- | q43 : int(1..2)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q40, q47] != 3 ->
- x_ExplicitR2_Occurrence[q42, x_ExplicitR6_ExplicitVarSizeWithDummy[q40, q47]]
- | q47 : int(1..3)])
- | q42 : int(1..2)])
- | q40 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q51, q53] != 3 ->
- x_ExplicitR2_Occurrence[q49, x_ExplicitR6_ExplicitVarSizeWithDummy[q51, q53]]
- | q53 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q49, q54] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q51, q56] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q51, q56] = q54
- | q56 : int(1..3)])
- | q54 : int(1..2)])
- | q51 : int(1..2)])
- | q49 : int(1..2)]),
- and([or([and([q62 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q60] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q58, q64] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q58, q64] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q60, q62]
- | q64 : int(1..3)])
- | q62 : int(1..3)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q58, q66] != 3 ->
- or([q68 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q60] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q60, q68] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q58, q66]
- | q68 : int(1..3)])
- | q66 : int(1..3)])
- | q60 : int(1..2)])
- | q58 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q72, q74] != 3 ->
- or([q76 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q70] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q70, q76] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q72, q74]
- | q76 : int(1..3)])
- | q74 : int(1..3)])
- /\
- and([q78 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q70] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q72, q80] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q72, q80] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q70, q78]
- | q80 : int(1..3)])
- | q78 : int(1..3)])
- | q72 : int(1..2)])
- | q70 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_3.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_3.eprime.orig
deleted file mode 100644
index cfc048dd79..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_3.eprime.orig
+++ /dev/null
@@ -1,52 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Marker, x_ExplicitR5_ExplicitVarSizeWithMarker_Values,
- x_ExplicitR2_Occurrence]
-such that
- [-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..2)]
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q8] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q8 + 1]
- | q8 : int(1..2)])
- | q7 : int(1..2)]),
- and([and([q9 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q7] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q9] = 1
- | q9 : int(1..3)])
- | q7 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q7] <= 3 | q7 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q16, q17] ->
- or([q19 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q14] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q14, q19] = q17
- | q19 : int(1..3)])
- | q17 : int(1..2)])
- /\
- and([q21 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q14] ->
- x_ExplicitR2_Occurrence[q16, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q14, q21]]
- | q21 : int(1..3)])
- | q16 : int(1..2)])
- | q14 : int(1..2)]),
- and([or([and([q27 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q25] ->
- x_ExplicitR2_Occurrence[q23, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q25, q27]]
- | q27 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q23, q28] ->
- or([q30 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q25] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q25, q30] = q28
- | q30 : int(1..3)])
- | q28 : int(1..2)])
- | q25 : int(1..2)])
- | q23 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000003.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000004.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4.eprime.orig
deleted file mode 100644
index 852454b6db..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_1_3_4.eprime.orig
+++ /dev/null
@@ -1,129 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-find x_ExplicitR4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
-find x_ExplicitR4_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR4_ExplicitVarSizeWithFlags_Flags, x_ExplicitR4_ExplicitVarSizeWithFlags_Values, x_ExplicitR2_Occurrence,
- x_ExplicitR5_ExplicitVarSizeWithMarker_Marker, x_ExplicitR5_ExplicitVarSizeWithMarker_Values]
-such that
- [-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..2)]
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q8] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q8 + 1]
- | q8 : int(1..2)])
- | q7 : int(1..2)]),
- and([and([q9 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q7] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q7, q9] = 1
- | q9 : int(1..3)])
- | q7 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q7] <= 3 | q7 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q16, q17] ->
- or([q19 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q14] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q14, q19] = q17
- | q19 : int(1..3)])
- | q17 : int(1..2)])
- /\
- and([q21 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q14] ->
- x_ExplicitR2_Occurrence[q16, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q14, q21]]
- | q21 : int(1..3)])
- | q16 : int(1..2)])
- | q14 : int(1..2)]),
- and([or([and([q27 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q25] ->
- x_ExplicitR2_Occurrence[q23, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q25, q27]]
- | q27 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q23, q28] ->
- or([q30 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q25] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q25, q30] = q28
- | q30 : int(1..3)])
- | q28 : int(1..2)])
- | q25 : int(1..2)])
- | q23 : int(1..2)]),
- flatten([flatten([[-toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[1, q38]); int(1)],
- [x_ExplicitR4_ExplicitVarSizeWithFlags_Values[1, q38]; int(1)];
- int(1..2)])
- | q38 : int(1..3)])
-
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q32, q33] <
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q32, q33 + 1]
- | q33 : int(1..2)])
- | q32 : int(1..2)]),
- and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q32, q34] = false ->
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q32, q34] = 1
- | q34 : int(1..3)])
- | q32 : int(1..2)]),
- and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q32, q35 + 1] ->
- x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q32, q35]
- | q35 : int(1..2)])
- | q32 : int(1..2)]),
- and([sum([toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q32, q36]) | q36 : int(1..3)]) <= 3 | q32 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q43, q44] ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q41, q46] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q41, q46] = q44
- | q46 : int(1..3)])
- | q44 : int(1..2)])
- /\
- and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q41, q48] ->
- x_ExplicitR2_Occurrence[q43, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q41, q48]]
- | q48 : int(1..3)])
- | q43 : int(1..2)])
- | q41 : int(1..2)]),
- and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q52, q54] ->
- x_ExplicitR2_Occurrence[q50, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q52, q54]]
- | q54 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q50, q55] ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q52, q57] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q52, q57] = q55
- | q57 : int(1..3)])
- | q55 : int(1..2)])
- | q52 : int(1..2)])
- | q50 : int(1..2)]),
- and([or([and([q63 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q61] ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q59, q65] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q59, q65] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q61, q63]
- | q65 : int(1..3)])
- | q63 : int(1..3)])
- /\
- and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q59, q67] ->
- or([q69 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q61] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q61, q69] =
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q59, q67]
- | q69 : int(1..3)])
- | q67 : int(1..3)])
- | q61 : int(1..2)])
- | q59 : int(1..2)]),
- and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q73, q75] ->
- or([q77 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q71] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q71, q77] =
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q73, q75]
- | q77 : int(1..3)])
- | q75 : int(1..3)])
- /\
- and([q79 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q71] ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q73, q81] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q73, q81] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q71, q79]
- | q81 : int(1..3)])
- | q79 : int(1..3)])
- | q73 : int(1..2)])
- | q71 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000001.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000002.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000003.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000004.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000005.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000006.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2.eprime b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2.eprime
new file mode 100644
index 0000000000..cd957e819c
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_2.eprime
@@ -0,0 +1,122 @@
+language ESSENCE' 1.0
+
+find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
+find x_ExplicitR4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitR4_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
+find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+branching on
+ [x_ExplicitR6_ExplicitVarSizeWithDummy, x_ExplicitR2_Occurrence, x_ExplicitR4_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values]
+such that
+ [-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..2)]
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q7, q8] <
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q7, q8 + 1]
+ | q8 : int(1..2)])
+ | q7 : int(1..2)]),
+ and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q7, q9] = false ->
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q7, q9] = 1
+ | q9 : int(1..3)])
+ | q7 : int(1..2)]),
+ and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q7, q10 + 1] ->
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q7, q10]
+ | q10 : int(1..2)])
+ | q7 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q7, q11]) | q11 : int(1..3)]) <= 3 | q7 : int(1..2)]),
+ and([or([and([x_ExplicitR2_Occurrence[q18, q19] ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q16, q21] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q16, q21] = q19
+ | q21 : int(1..3)])
+ | q19 : int(1..2)])
+ /\
+ and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q16, q23] ->
+ x_ExplicitR2_Occurrence[q18, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q16, q23]]
+ | q23 : int(1..3)])
+ | q18 : int(1..2)])
+ | q16 : int(1..2)]),
+ and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q27, q29] ->
+ x_ExplicitR2_Occurrence[q25, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q27, q29]]
+ | q29 : int(1..3)])
+ /\
+ and([x_ExplicitR2_Occurrence[q25, q30] ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q27, q32] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q27, q32] = q30
+ | q32 : int(1..3)])
+ | q30 : int(1..2)])
+ | q27 : int(1..2)])
+ | q25 : int(1..2)]),
+ [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q39] | q39 : int(1..3)]
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q34, q36 + 1] = 3
+ | q36 : int(1..2)])
+ | q34 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q34, q37] != 3) | q37 : int(1..3)]) <= 3 | q34 : int(1..2)]),
+ and([or([and([x_ExplicitR2_Occurrence[q44, q45] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q42, q47] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q42, q47] = q45
+ | q47 : int(1..3)])
+ | q45 : int(1..2)])
+ /\
+ and([x_ExplicitR6_ExplicitVarSizeWithDummy[q42, q49] != 3 ->
+ x_ExplicitR2_Occurrence[q44, x_ExplicitR6_ExplicitVarSizeWithDummy[q42, q49]]
+ | q49 : int(1..3)])
+ | q44 : int(1..2)])
+ | q42 : int(1..2)]),
+ and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q53, q55] != 3 ->
+ x_ExplicitR2_Occurrence[q51, x_ExplicitR6_ExplicitVarSizeWithDummy[q53, q55]]
+ | q55 : int(1..3)])
+ /\
+ and([x_ExplicitR2_Occurrence[q51, q56] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q53, q58] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q53, q58] = q56
+ | q58 : int(1..3)])
+ | q56 : int(1..2)])
+ | q53 : int(1..2)])
+ | q51 : int(1..2)]),
+ and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q62, q64] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q60, q66] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q60, q66] =
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q62, q64]
+ | q66 : int(1..3)])
+ | q64 : int(1..3)])
+ /\
+ and([x_ExplicitR6_ExplicitVarSizeWithDummy[q60, q68] != 3 ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q62, q70] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q62, q70] =
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q60, q68]
+ | q70 : int(1..3)])
+ | q68 : int(1..3)])
+ | q62 : int(1..2)])
+ | q60 : int(1..2)]),
+ and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q74, q76] != 3 ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q72, q78] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q72, q78] =
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q74, q76]
+ | q78 : int(1..3)])
+ | q76 : int(1..3)])
+ /\
+ and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q72, q80] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q74, q82] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q74, q82] =
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q72, q80]
+ | q82 : int(1..3)])
+ | q80 : int(1..3)])
+ | q74 : int(1..2)])
+ | q72 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000003.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000004.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3.eprime.orig
deleted file mode 100644
index 71a5adaa9b..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_1_4_3.eprime.orig
+++ /dev/null
@@ -1,129 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-find x_ExplicitR4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
-find x_ExplicitR4_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Marker, x_ExplicitR5_ExplicitVarSizeWithMarker_Values,
- x_ExplicitR2_Occurrence, x_ExplicitR4_ExplicitVarSizeWithFlags_Flags, x_ExplicitR4_ExplicitVarSizeWithFlags_Values]
-such that
- [-toInt(x_ExplicitR2_Occurrence[1, q4]) | q4 : int(1..2)]
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q7, q8] <
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q7, q8 + 1]
- | q8 : int(1..2)])
- | q7 : int(1..2)]),
- and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q7, q9] = false ->
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q7, q9] = 1
- | q9 : int(1..3)])
- | q7 : int(1..2)]),
- and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q7, q10 + 1] ->
- x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q7, q10]
- | q10 : int(1..2)])
- | q7 : int(1..2)]),
- and([sum([toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q7, q11]) | q11 : int(1..3)]) <= 3 | q7 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q18, q19] ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q16, q21] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q16, q21] = q19
- | q21 : int(1..3)])
- | q19 : int(1..2)])
- /\
- and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q16, q23] ->
- x_ExplicitR2_Occurrence[q18, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q16, q23]]
- | q23 : int(1..3)])
- | q18 : int(1..2)])
- | q16 : int(1..2)]),
- and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q27, q29] ->
- x_ExplicitR2_Occurrence[q25, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q27, q29]]
- | q29 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q25, q30] ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q27, q32] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q27, q32] = q30
- | q32 : int(1..3)])
- | q30 : int(1..2)])
- | q27 : int(1..2)])
- | q25 : int(1..2)]),
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q38] | q38 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q34, q35] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q34, q35 + 1]
- | q35 : int(1..2)])
- | q34 : int(1..2)]),
- and([and([q36 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q34] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q34, q36] = 1
- | q36 : int(1..3)])
- | q34 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q34] <= 3 | q34 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q43, q44] ->
- or([q46 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q41] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q41, q46] = q44
- | q46 : int(1..3)])
- | q44 : int(1..2)])
- /\
- and([q48 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q41] ->
- x_ExplicitR2_Occurrence[q43, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q41, q48]]
- | q48 : int(1..3)])
- | q43 : int(1..2)])
- | q41 : int(1..2)]),
- and([or([and([q54 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q52] ->
- x_ExplicitR2_Occurrence[q50, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q52, q54]]
- | q54 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q50, q55] ->
- or([q57 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q52] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q52, q57] = q55
- | q57 : int(1..3)])
- | q55 : int(1..2)])
- | q52 : int(1..2)])
- | q50 : int(1..2)]),
- and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q61, q63] ->
- or([q65 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q59] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q59, q65] =
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q61, q63]
- | q65 : int(1..3)])
- | q63 : int(1..3)])
- /\
- and([q67 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q59] ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q61, q69] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q61, q69] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q59, q67]
- | q69 : int(1..3)])
- | q67 : int(1..3)])
- | q61 : int(1..2)])
- | q59 : int(1..2)]),
- and([or([and([q75 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q73] ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q71, q77] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q71, q77] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q73, q75]
- | q77 : int(1..3)])
- | q75 : int(1..3)])
- /\
- and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q71, q79] ->
- or([q81 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q73] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q73, q81] =
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q71, q79]
- | q81 : int(1..3)])
- | q79 : int(1..3)])
- | q73 : int(1..2)])
- | q71 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000001.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000002.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000003.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000004.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000005.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000006.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1.eprime b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1.eprime
new file mode 100644
index 0000000000..3b170dc84f
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_1.eprime
@@ -0,0 +1,42 @@
+language ESSENCE' 1.0
+
+find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
+branching on [x_ExplicitR2_Occurrence, x_ExplicitR6_ExplicitVarSizeWithDummy]
+such that
+ [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q7] | q7 : int(1..3)] x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q4 + 1] = 3
+ | q4 : int(1..2)])
+ | q2 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q5] != 3) | q5 : int(1..3)]) <= 3 | q2 : int(1..2)]),
+ [-toInt(x_ExplicitR2_Occurrence[1, q12]) | q12 : int(1..2)]
+ x_ExplicitR2_Occurrence[q15, x_ExplicitR6_ExplicitVarSizeWithDummy[q17, q19]]
+ | q19 : int(1..3)])
+ /\
+ and([x_ExplicitR2_Occurrence[q15, q20] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q17, q22] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q17, q22] = q20
+ | q22 : int(1..3)])
+ | q20 : int(1..2)])
+ | q17 : int(1..2)])
+ | q15 : int(1..2)]),
+ and([or([and([x_ExplicitR2_Occurrence[q26, q27] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q24, q29] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q24, q29] = q27
+ | q29 : int(1..3)])
+ | q27 : int(1..2)])
+ /\
+ and([x_ExplicitR6_ExplicitVarSizeWithDummy[q24, q31] != 3 ->
+ x_ExplicitR2_Occurrence[q26, x_ExplicitR6_ExplicitVarSizeWithDummy[q24, q31]]
+ | q31 : int(1..3)])
+ | q26 : int(1..2)])
+ | q24 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000003.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000004.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3.eprime.orig
deleted file mode 100644
index 3de66ab4d8..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_3.eprime.orig
+++ /dev/null
@@ -1,115 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Marker, x_ExplicitR5_ExplicitVarSizeWithMarker_Values,
- x_ExplicitR6_ExplicitVarSizeWithDummy, x_ExplicitR2_Occurrence]
-such that
- [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q7] | q7 : int(1..3)] x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q4 + 1] = 3
- | q4 : int(1..2)])
- | q2 : int(1..2)]),
- and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q5] != 3) | q5 : int(1..3)]) <= 3 | q2 : int(1..2)]),
- [-toInt(x_ExplicitR2_Occurrence[1, q12]) | q12 : int(1..2)]
- x_ExplicitR2_Occurrence[q15, x_ExplicitR6_ExplicitVarSizeWithDummy[q17, q19]]
- | q19 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q15, q20] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q17, q22] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q17, q22] = q20
- | q22 : int(1..3)])
- | q20 : int(1..2)])
- | q17 : int(1..2)])
- | q15 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q26, q27] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q24, q29] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q24, q29] = q27
- | q29 : int(1..3)])
- | q27 : int(1..2)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q24, q31] != 3 ->
- x_ExplicitR2_Occurrence[q26, x_ExplicitR6_ExplicitVarSizeWithDummy[q24, q31]]
- | q31 : int(1..3)])
- | q26 : int(1..2)])
- | q24 : int(1..2)]),
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q37] | q37 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q33, q34] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q33, q34 + 1]
- | q34 : int(1..2)])
- | q33 : int(1..2)]),
- and([and([q35 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q33] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q33, q35] = 1
- | q35 : int(1..3)])
- | q33 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q33] <= 3 | q33 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q42, q44] != 3 ->
- or([q46 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q40] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q40, q46] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q42, q44]
- | q46 : int(1..3)])
- | q44 : int(1..3)])
- /\
- and([q48 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q40] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q42, q50] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q42, q50] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q40, q48]
- | q50 : int(1..3)])
- | q48 : int(1..3)])
- | q42 : int(1..2)])
- | q40 : int(1..2)]),
- and([or([and([q56 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q54] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q52, q58] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q52, q58] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q54, q56]
- | q58 : int(1..3)])
- | q56 : int(1..3)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q52, q60] != 3 ->
- or([q62 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q54] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q54, q62] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q52, q60]
- | q62 : int(1..3)])
- | q60 : int(1..3)])
- | q54 : int(1..2)])
- | q52 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q66, q67] ->
- or([q69 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q64] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q64, q69] = q67
- | q69 : int(1..3)])
- | q67 : int(1..2)])
- /\
- and([q71 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q64] ->
- x_ExplicitR2_Occurrence[q66, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q64, q71]]
- | q71 : int(1..3)])
- | q66 : int(1..2)])
- | q64 : int(1..2)]),
- and([or([and([q77 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q75] ->
- x_ExplicitR2_Occurrence[q73, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q75, q77]]
- | q77 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q73, q78] ->
- or([q80 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q75] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q75, q80] = q78
- | q80 : int(1..3)])
- | q78 : int(1..2)])
- | q75 : int(1..2)])
- | q73 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000003.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000004.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4.eprime b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4.eprime
new file mode 100644
index 0000000000..169610bca6
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_1_4.eprime
@@ -0,0 +1,121 @@
+language ESSENCE' 1.0
+
+find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
+find x_ExplicitR4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitR4_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
+branching on
+ [x_ExplicitR4_ExplicitVarSizeWithFlags_Flags, x_ExplicitR4_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitR6_ExplicitVarSizeWithDummy, x_ExplicitR2_Occurrence]
+such that
+ [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q7] | q7 : int(1..3)] x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q4 + 1] = 3
+ | q4 : int(1..2)])
+ | q2 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q5] != 3) | q5 : int(1..3)]) <= 3 | q2 : int(1..2)]),
+ [-toInt(x_ExplicitR2_Occurrence[1, q12]) | q12 : int(1..2)]
+ x_ExplicitR2_Occurrence[q15, x_ExplicitR6_ExplicitVarSizeWithDummy[q17, q19]]
+ | q19 : int(1..3)])
+ /\
+ and([x_ExplicitR2_Occurrence[q15, q20] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q17, q22] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q17, q22] = q20
+ | q22 : int(1..3)])
+ | q20 : int(1..2)])
+ | q17 : int(1..2)])
+ | q15 : int(1..2)]),
+ and([or([and([x_ExplicitR2_Occurrence[q26, q27] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q24, q29] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q24, q29] = q27
+ | q29 : int(1..3)])
+ | q27 : int(1..2)])
+ /\
+ and([x_ExplicitR6_ExplicitVarSizeWithDummy[q24, q31] != 3 ->
+ x_ExplicitR2_Occurrence[q26, x_ExplicitR6_ExplicitVarSizeWithDummy[q24, q31]]
+ | q31 : int(1..3)])
+ | q26 : int(1..2)])
+ | q24 : int(1..2)]),
+ flatten([flatten([[-toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[1, q39]); int(1)],
+ [x_ExplicitR4_ExplicitVarSizeWithFlags_Values[1, q39]; int(1)];
+ int(1..2)])
+ | q39 : int(1..3)])
+
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q33, q34] <
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q33, q34 + 1]
+ | q34 : int(1..2)])
+ | q33 : int(1..2)]),
+ and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q35] = false ->
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q33, q35] = 1
+ | q35 : int(1..3)])
+ | q33 : int(1..2)]),
+ and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q36 + 1] ->
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q36]
+ | q36 : int(1..2)])
+ | q33 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q37]) | q37 : int(1..3)]) <= 3 | q33 : int(1..2)]),
+ and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q44, q46] != 3 ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q42, q48] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q42, q48] =
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q44, q46]
+ | q48 : int(1..3)])
+ | q46 : int(1..3)])
+ /\
+ and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q42, q50] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q44, q52] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q44, q52] =
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q42, q50]
+ | q52 : int(1..3)])
+ | q50 : int(1..3)])
+ | q44 : int(1..2)])
+ | q42 : int(1..2)]),
+ and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q56, q58] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q54, q60] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q54, q60] =
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q56, q58]
+ | q60 : int(1..3)])
+ | q58 : int(1..3)])
+ /\
+ and([x_ExplicitR6_ExplicitVarSizeWithDummy[q54, q62] != 3 ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q56, q64] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q56, q64] =
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q54, q62]
+ | q64 : int(1..3)])
+ | q62 : int(1..3)])
+ | q56 : int(1..2)])
+ | q54 : int(1..2)]),
+ and([or([and([x_ExplicitR2_Occurrence[q68, q69] ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q66, q71] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q66, q71] = q69
+ | q71 : int(1..3)])
+ | q69 : int(1..2)])
+ /\
+ and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q66, q73] ->
+ x_ExplicitR2_Occurrence[q68, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q66, q73]]
+ | q73 : int(1..3)])
+ | q68 : int(1..2)])
+ | q66 : int(1..2)]),
+ and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q77, q79] ->
+ x_ExplicitR2_Occurrence[q75, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q77, q79]]
+ | q79 : int(1..3)])
+ /\
+ and([x_ExplicitR2_Occurrence[q75, q80] ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q77, q82] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q77, q82] = q80
+ | q82 : int(1..3)])
+ | q80 : int(1..2)])
+ | q77 : int(1..2)])
+ | q75 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000001.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000002.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000003.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000004.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000005.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000006.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2.eprime b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2.eprime
new file mode 100644
index 0000000000..82d1d04484
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_2.eprime
@@ -0,0 +1,16 @@
+language ESSENCE' 1.0
+
+find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+branching on [x_ExplicitR6_ExplicitVarSizeWithDummy]
+such that
+ [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q7] | q7 : int(1..3)] x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q4 + 1] = 3
+ | q4 : int(1..2)])
+ | q2 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q5] != 3) | q5 : int(1..3)]) <= 3 | q2 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000003.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000004.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3.eprime.orig
deleted file mode 100644
index bdcbef4970..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_3.eprime.orig
+++ /dev/null
@@ -1,67 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Marker, x_ExplicitR5_ExplicitVarSizeWithMarker_Values,
- x_ExplicitR6_ExplicitVarSizeWithDummy]
-such that
- [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q7] | q7 : int(1..3)] x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q4 + 1] = 3
- | q4 : int(1..2)])
- | q2 : int(1..2)]),
- and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q5] != 3) | q5 : int(1..3)]) <= 3 | q2 : int(1..2)]),
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q14] | q14 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q11] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q11 + 1]
- | q11 : int(1..2)])
- | q10 : int(1..2)]),
- and([and([q12 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q10] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q12] = 1
- | q12 : int(1..3)])
- | q10 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q10] <= 3 | q10 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q21] != 3 ->
- or([q23 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q17] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q17, q23] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q21]
- | q23 : int(1..3)])
- | q21 : int(1..3)])
- /\
- and([q25 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q17] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q27] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q27] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q17, q25]
- | q27 : int(1..3)])
- | q25 : int(1..3)])
- | q19 : int(1..2)])
- | q17 : int(1..2)]),
- and([or([and([q33 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q31] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q35] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q35] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q31, q33]
- | q35 : int(1..3)])
- | q33 : int(1..3)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q37] != 3 ->
- or([q39 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q31] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q31, q39] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q37]
- | q39 : int(1..3)])
- | q37 : int(1..3)])
- | q31 : int(1..2)])
- | q29 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000003.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000004.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4.eprime b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4.eprime
new file mode 100644
index 0000000000..247428fb21
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_2_4.eprime
@@ -0,0 +1,73 @@
+language ESSENCE' 1.0
+
+find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+find x_ExplicitR4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitR4_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
+branching on
+ [x_ExplicitR4_ExplicitVarSizeWithFlags_Flags, x_ExplicitR4_ExplicitVarSizeWithFlags_Values,
+ x_ExplicitR6_ExplicitVarSizeWithDummy]
+such that
+ [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q7] | q7 : int(1..3)] x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q4 + 1] = 3
+ | q4 : int(1..2)])
+ | q2 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q5] != 3) | q5 : int(1..3)]) <= 3 | q2 : int(1..2)]),
+ flatten([flatten([[-toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[1, q16]); int(1)],
+ [x_ExplicitR4_ExplicitVarSizeWithFlags_Values[1, q16]; int(1)];
+ int(1..2)])
+ | q16 : int(1..3)])
+
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q10, q11] <
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q10, q11 + 1]
+ | q11 : int(1..2)])
+ | q10 : int(1..2)]),
+ and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q10, q12] = false ->
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q10, q12] = 1
+ | q12 : int(1..3)])
+ | q10 : int(1..2)]),
+ and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q10, q13 + 1] ->
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q10, q13]
+ | q13 : int(1..2)])
+ | q10 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q10, q14]) | q14 : int(1..3)]) <= 3 | q10 : int(1..2)]),
+ and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q21, q23] != 3 ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q19, q25] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q19, q25] =
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q21, q23]
+ | q25 : int(1..3)])
+ | q23 : int(1..3)])
+ /\
+ and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q19, q27] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q21, q29] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q21, q29] =
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q19, q27]
+ | q29 : int(1..3)])
+ | q27 : int(1..3)])
+ | q21 : int(1..2)])
+ | q19 : int(1..2)]),
+ and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q35] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q31, q37] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q31, q37] =
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q33, q35]
+ | q37 : int(1..3)])
+ | q35 : int(1..3)])
+ /\
+ and([x_ExplicitR6_ExplicitVarSizeWithDummy[q31, q39] != 3 ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q41] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q33, q41] =
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q31, q39]
+ | q41 : int(1..3)])
+ | q39 : int(1..3)])
+ | q33 : int(1..2)])
+ | q31 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000001.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000002.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000003.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000004.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000005.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000006.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1.eprime.orig
deleted file mode 100644
index e268def585..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_1.eprime.orig
+++ /dev/null
@@ -1,115 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-branching on
- [x_ExplicitR2_Occurrence, x_ExplicitR6_ExplicitVarSizeWithDummy, x_ExplicitR5_ExplicitVarSizeWithMarker_Marker,
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values]
-such that
- [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q7] | q7 : int(1..3)] x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q4 + 1] = 3
- | q4 : int(1..2)])
- | q2 : int(1..2)]),
- and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q5] != 3) | q5 : int(1..3)]) <= 3 | q2 : int(1..2)]),
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q14] | q14 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q11] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q11 + 1]
- | q11 : int(1..2)])
- | q10 : int(1..2)]),
- and([and([q12 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q10] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q12] = 1
- | q12 : int(1..3)])
- | q10 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q10] <= 3 | q10 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q21] != 3 ->
- or([q23 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q17] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q17, q23] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q21]
- | q23 : int(1..3)])
- | q21 : int(1..3)])
- /\
- and([q25 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q17] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q27] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q27] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q17, q25]
- | q27 : int(1..3)])
- | q25 : int(1..3)])
- | q19 : int(1..2)])
- | q17 : int(1..2)]),
- and([or([and([q33 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q31] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q35] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q35] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q31, q33]
- | q35 : int(1..3)])
- | q33 : int(1..3)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q37] != 3 ->
- or([q39 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q31] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q31, q39] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q37]
- | q39 : int(1..3)])
- | q37 : int(1..3)])
- | q31 : int(1..2)])
- | q29 : int(1..2)]),
- [-toInt(x_ExplicitR2_Occurrence[1, q43]) | q43 : int(1..2)]
- x_ExplicitR2_Occurrence[q46, x_ExplicitR6_ExplicitVarSizeWithDummy[q48, q50]]
- | q50 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q46, q51] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q48, q53] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q48, q53] = q51
- | q53 : int(1..3)])
- | q51 : int(1..2)])
- | q48 : int(1..2)])
- | q46 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q57, q58] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q55, q60] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q55, q60] = q58
- | q60 : int(1..3)])
- | q58 : int(1..2)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q55, q62] != 3 ->
- x_ExplicitR2_Occurrence[q57, x_ExplicitR6_ExplicitVarSizeWithDummy[q55, q62]]
- | q62 : int(1..3)])
- | q57 : int(1..2)])
- | q55 : int(1..2)]),
- and([or([and([q68 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q66] ->
- x_ExplicitR2_Occurrence[q64, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q66, q68]]
- | q68 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q64, q69] ->
- or([q71 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q66] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q66, q71] = q69
- | q71 : int(1..3)])
- | q69 : int(1..2)])
- | q66 : int(1..2)])
- | q64 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q75, q76] ->
- or([q78 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q73] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q73, q78] = q76
- | q78 : int(1..3)])
- | q76 : int(1..2)])
- /\
- and([q80 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q73] ->
- x_ExplicitR2_Occurrence[q75, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q73, q80]]
- | q80 : int(1..3)])
- | q75 : int(1..2)])
- | q73 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_2.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_2.eprime.orig
deleted file mode 100644
index bdcbef4970..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_2.eprime.orig
+++ /dev/null
@@ -1,67 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Marker, x_ExplicitR5_ExplicitVarSizeWithMarker_Values,
- x_ExplicitR6_ExplicitVarSizeWithDummy]
-such that
- [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q7] | q7 : int(1..3)] x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q4 + 1] = 3
- | q4 : int(1..2)])
- | q2 : int(1..2)]),
- and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q5] != 3) | q5 : int(1..3)]) <= 3 | q2 : int(1..2)]),
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q14] | q14 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q11] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q11 + 1]
- | q11 : int(1..2)])
- | q10 : int(1..2)]),
- and([and([q12 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q10] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q12] = 1
- | q12 : int(1..3)])
- | q10 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q10] <= 3 | q10 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q21] != 3 ->
- or([q23 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q17] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q17, q23] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q21]
- | q23 : int(1..3)])
- | q21 : int(1..3)])
- /\
- and([q25 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q17] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q27] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q27] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q17, q25]
- | q27 : int(1..3)])
- | q25 : int(1..3)])
- | q19 : int(1..2)])
- | q17 : int(1..2)]),
- and([or([and([q33 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q31] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q35] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q35] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q31, q33]
- | q35 : int(1..3)])
- | q33 : int(1..3)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q37] != 3 ->
- or([q39 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q31] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q31, q39] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q37]
- | q39 : int(1..3)])
- | q37 : int(1..3)])
- | q31 : int(1..2)])
- | q29 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_3.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_3.eprime.orig
deleted file mode 100644
index bdcbef4970..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_3.eprime.orig
+++ /dev/null
@@ -1,67 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Marker, x_ExplicitR5_ExplicitVarSizeWithMarker_Values,
- x_ExplicitR6_ExplicitVarSizeWithDummy]
-such that
- [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q7] | q7 : int(1..3)] x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q4 + 1] = 3
- | q4 : int(1..2)])
- | q2 : int(1..2)]),
- and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q5] != 3) | q5 : int(1..3)]) <= 3 | q2 : int(1..2)]),
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q14] | q14 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q11] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q11 + 1]
- | q11 : int(1..2)])
- | q10 : int(1..2)]),
- and([and([q12 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q10] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q12] = 1
- | q12 : int(1..3)])
- | q10 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q10] <= 3 | q10 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q21] != 3 ->
- or([q23 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q17] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q17, q23] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q21]
- | q23 : int(1..3)])
- | q21 : int(1..3)])
- /\
- and([q25 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q17] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q27] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q27] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q17, q25]
- | q27 : int(1..3)])
- | q25 : int(1..3)])
- | q19 : int(1..2)])
- | q17 : int(1..2)]),
- and([or([and([q33 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q31] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q35] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q35] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q31, q33]
- | q35 : int(1..3)])
- | q33 : int(1..3)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q37] != 3 ->
- or([q39 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q31] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q31, q39] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q37]
- | q39 : int(1..3)])
- | q37 : int(1..3)])
- | q31 : int(1..2)])
- | q29 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000003.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000004.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4.eprime.orig
deleted file mode 100644
index cfc3d08942..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_2_3_4.eprime.orig
+++ /dev/null
@@ -1,153 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-find x_ExplicitR4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
-find x_ExplicitR4_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR4_ExplicitVarSizeWithFlags_Flags, x_ExplicitR4_ExplicitVarSizeWithFlags_Values,
- x_ExplicitR6_ExplicitVarSizeWithDummy, x_ExplicitR5_ExplicitVarSizeWithMarker_Marker,
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values]
-such that
- [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q7] | q7 : int(1..3)] x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q4 + 1] = 3
- | q4 : int(1..2)])
- | q2 : int(1..2)]),
- and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q5] != 3) | q5 : int(1..3)]) <= 3 | q2 : int(1..2)]),
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q14] | q14 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q11] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q11 + 1]
- | q11 : int(1..2)])
- | q10 : int(1..2)]),
- and([and([q12 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q10] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q10, q12] = 1
- | q12 : int(1..3)])
- | q10 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q10] <= 3 | q10 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q21] != 3 ->
- or([q23 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q17] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q17, q23] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q21]
- | q23 : int(1..3)])
- | q21 : int(1..3)])
- /\
- and([q25 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q17] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q27] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q19, q27] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q17, q25]
- | q27 : int(1..3)])
- | q25 : int(1..3)])
- | q19 : int(1..2)])
- | q17 : int(1..2)]),
- and([or([and([q33 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q31] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q35] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q35] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q31, q33]
- | q35 : int(1..3)])
- | q33 : int(1..3)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q37] != 3 ->
- or([q39 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q31] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q31, q39] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q29, q37]
- | q39 : int(1..3)])
- | q37 : int(1..3)])
- | q31 : int(1..2)])
- | q29 : int(1..2)]),
- flatten([flatten([[-toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[1, q47]); int(1)],
- [x_ExplicitR4_ExplicitVarSizeWithFlags_Values[1, q47]; int(1)];
- int(1..2)])
- | q47 : int(1..3)])
-
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q41, q42] <
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q41, q42 + 1]
- | q42 : int(1..2)])
- | q41 : int(1..2)]),
- and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q41, q43] = false ->
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q41, q43] = 1
- | q43 : int(1..3)])
- | q41 : int(1..2)]),
- and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q41, q44 + 1] ->
- x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q41, q44]
- | q44 : int(1..2)])
- | q41 : int(1..2)]),
- and([sum([toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q41, q45]) | q45 : int(1..3)]) <= 3 | q41 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q52, q54] != 3 ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q50, q56] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q50, q56] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q52, q54]
- | q56 : int(1..3)])
- | q54 : int(1..3)])
- /\
- and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q50, q58] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q52, q60] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q52, q60] =
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q50, q58]
- | q60 : int(1..3)])
- | q58 : int(1..3)])
- | q52 : int(1..2)])
- | q50 : int(1..2)]),
- and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q64, q66] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q62, q68] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q62, q68] =
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q64, q66]
- | q68 : int(1..3)])
- | q66 : int(1..3)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q62, q70] != 3 ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q64, q72] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q64, q72] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q62, q70]
- | q72 : int(1..3)])
- | q70 : int(1..3)])
- | q64 : int(1..2)])
- | q62 : int(1..2)]),
- and([or([and([q78 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q76] ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q74, q80] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q74, q80] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q76, q78]
- | q80 : int(1..3)])
- | q78 : int(1..3)])
- /\
- and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q74, q82] ->
- or([q84 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q76] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q76, q84] =
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q74, q82]
- | q84 : int(1..3)])
- | q82 : int(1..3)])
- | q76 : int(1..2)])
- | q74 : int(1..2)]),
- and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q88, q90] ->
- or([q92 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q86] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q86, q92] =
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q88, q90]
- | q92 : int(1..3)])
- | q90 : int(1..3)])
- /\
- and([q94 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q86] ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q88, q96] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q88, q96] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q86, q94]
- | q96 : int(1..3)])
- | q94 : int(1..3)])
- | q88 : int(1..2)])
- | q86 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000001.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000002.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000003.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000004.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000005.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000006.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1.eprime b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1.eprime
new file mode 100644
index 0000000000..ed505c7c7d
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_1.eprime
@@ -0,0 +1,121 @@
+language ESSENCE' 1.0
+
+find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
+find x_ExplicitR4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
+find x_ExplicitR4_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
+find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
+branching on
+ [x_ExplicitR2_Occurrence, x_ExplicitR6_ExplicitVarSizeWithDummy, x_ExplicitR4_ExplicitVarSizeWithFlags_Flags,
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values]
+such that
+ [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q7] | q7 : int(1..3)] x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q4 + 1] = 3
+ | q4 : int(1..2)])
+ | q2 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q5] != 3) | q5 : int(1..3)]) <= 3 | q2 : int(1..2)]),
+ flatten([flatten([[-toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[1, q16]); int(1)],
+ [x_ExplicitR4_ExplicitVarSizeWithFlags_Values[1, q16]; int(1)];
+ int(1..2)])
+ | q16 : int(1..3)])
+
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q10, q11] <
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q10, q11 + 1]
+ | q11 : int(1..2)])
+ | q10 : int(1..2)]),
+ and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q10, q12] = false ->
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q10, q12] = 1
+ | q12 : int(1..3)])
+ | q10 : int(1..2)]),
+ and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q10, q13 + 1] ->
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q10, q13]
+ | q13 : int(1..2)])
+ | q10 : int(1..2)]),
+ and([sum([toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q10, q14]) | q14 : int(1..3)]) <= 3 | q10 : int(1..2)]),
+ and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q21, q23] != 3 ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q19, q25] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q19, q25] =
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q21, q23]
+ | q25 : int(1..3)])
+ | q23 : int(1..3)])
+ /\
+ and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q19, q27] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q21, q29] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q21, q29] =
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q19, q27]
+ | q29 : int(1..3)])
+ | q27 : int(1..3)])
+ | q21 : int(1..2)])
+ | q19 : int(1..2)]),
+ and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q35] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q31, q37] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q31, q37] =
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q33, q35]
+ | q37 : int(1..3)])
+ | q35 : int(1..3)])
+ /\
+ and([x_ExplicitR6_ExplicitVarSizeWithDummy[q31, q39] != 3 ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q41] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q33, q41] =
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q31, q39]
+ | q41 : int(1..3)])
+ | q39 : int(1..3)])
+ | q33 : int(1..2)])
+ | q31 : int(1..2)]),
+ [-toInt(x_ExplicitR2_Occurrence[1, q45]) | q45 : int(1..2)]
+ x_ExplicitR2_Occurrence[q48, x_ExplicitR6_ExplicitVarSizeWithDummy[q50, q52]]
+ | q52 : int(1..3)])
+ /\
+ and([x_ExplicitR2_Occurrence[q48, q53] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q50, q55] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q50, q55] = q53
+ | q55 : int(1..3)])
+ | q53 : int(1..2)])
+ | q50 : int(1..2)])
+ | q48 : int(1..2)]),
+ and([or([and([x_ExplicitR2_Occurrence[q59, q60] ->
+ or([x_ExplicitR6_ExplicitVarSizeWithDummy[q57, q62] != 3 /\
+ x_ExplicitR6_ExplicitVarSizeWithDummy[q57, q62] = q60
+ | q62 : int(1..3)])
+ | q60 : int(1..2)])
+ /\
+ and([x_ExplicitR6_ExplicitVarSizeWithDummy[q57, q64] != 3 ->
+ x_ExplicitR2_Occurrence[q59, x_ExplicitR6_ExplicitVarSizeWithDummy[q57, q64]]
+ | q64 : int(1..3)])
+ | q59 : int(1..2)])
+ | q57 : int(1..2)]),
+ and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q68, q70] ->
+ x_ExplicitR2_Occurrence[q66, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q68, q70]]
+ | q70 : int(1..3)])
+ /\
+ and([x_ExplicitR2_Occurrence[q66, q71] ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q68, q73] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q68, q73] = q71
+ | q73 : int(1..3)])
+ | q71 : int(1..2)])
+ | q68 : int(1..2)])
+ | q66 : int(1..2)]),
+ and([or([and([x_ExplicitR2_Occurrence[q77, q78] ->
+ or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q75, q80] /\
+ x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q75, q80] = q78
+ | q80 : int(1..3)])
+ | q78 : int(1..2)])
+ /\
+ and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q75, q82] ->
+ x_ExplicitR2_Occurrence[q77, x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q75, q82]]
+ | q82 : int(1..3)])
+ | q77 : int(1..2)])
+ | q75 : int(1..2)])
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000003.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000004.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3.eprime.orig
deleted file mode 100644
index 08a9116fab..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_2_4_3.eprime.orig
+++ /dev/null
@@ -1,153 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
-find x_ExplicitR4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
-find x_ExplicitR4_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Marker, x_ExplicitR5_ExplicitVarSizeWithMarker_Values,
- x_ExplicitR6_ExplicitVarSizeWithDummy, x_ExplicitR4_ExplicitVarSizeWithFlags_Flags,
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values]
-such that
- [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q7] | q7 : int(1..3)] x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q4 + 1] = 3
- | q4 : int(1..2)])
- | q2 : int(1..2)]),
- and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q2, q5] != 3) | q5 : int(1..3)]) <= 3 | q2 : int(1..2)]),
- flatten([flatten([[-toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[1, q16]); int(1)],
- [x_ExplicitR4_ExplicitVarSizeWithFlags_Values[1, q16]; int(1)];
- int(1..2)])
- | q16 : int(1..3)])
-
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q10, q11] <
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q10, q11 + 1]
- | q11 : int(1..2)])
- | q10 : int(1..2)]),
- and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q10, q12] = false ->
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q10, q12] = 1
- | q12 : int(1..3)])
- | q10 : int(1..2)]),
- and([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q10, q13 + 1] ->
- x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q10, q13]
- | q13 : int(1..2)])
- | q10 : int(1..2)]),
- and([sum([toInt(x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q10, q14]) | q14 : int(1..3)]) <= 3 | q10 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q21, q23] != 3 ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q19, q25] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q19, q25] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q21, q23]
- | q25 : int(1..3)])
- | q23 : int(1..3)])
- /\
- and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q19, q27] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q21, q29] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q21, q29] =
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q19, q27]
- | q29 : int(1..3)])
- | q27 : int(1..3)])
- | q21 : int(1..2)])
- | q19 : int(1..2)]),
- and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q35] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q31, q37] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q31, q37] =
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q33, q35]
- | q37 : int(1..3)])
- | q35 : int(1..3)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q31, q39] != 3 ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q33, q41] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q33, q41] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q31, q39]
- | q41 : int(1..3)])
- | q39 : int(1..3)])
- | q33 : int(1..2)])
- | q31 : int(1..2)]),
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q47] | q47 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q43, q44] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q43, q44 + 1]
- | q44 : int(1..2)])
- | q43 : int(1..2)]),
- and([and([q45 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q43] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q43, q45] = 1
- | q45 : int(1..3)])
- | q43 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q43] <= 3 | q43 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q52, q54] != 3 ->
- or([q56 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q50] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q50, q56] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q52, q54]
- | q56 : int(1..3)])
- | q54 : int(1..3)])
- /\
- and([q58 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q50] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q52, q60] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q52, q60] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q50, q58]
- | q60 : int(1..3)])
- | q58 : int(1..3)])
- | q52 : int(1..2)])
- | q50 : int(1..2)]),
- and([or([and([q66 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q64] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q62, q68] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q62, q68] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q64, q66]
- | q68 : int(1..3)])
- | q66 : int(1..3)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q62, q70] != 3 ->
- or([q72 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q64] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q64, q72] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q62, q70]
- | q72 : int(1..3)])
- | q70 : int(1..3)])
- | q64 : int(1..2)])
- | q62 : int(1..2)]),
- and([or([and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q76, q78] ->
- or([q80 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q74] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q74, q80] =
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q76, q78]
- | q80 : int(1..3)])
- | q78 : int(1..3)])
- /\
- and([q82 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q74] ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q76, q84] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q76, q84] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q74, q82]
- | q84 : int(1..3)])
- | q82 : int(1..3)])
- | q76 : int(1..2)])
- | q74 : int(1..2)]),
- and([or([and([q90 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q88] ->
- or([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q86, q92] /\
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q86, q92] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q88, q90]
- | q92 : int(1..3)])
- | q90 : int(1..3)])
- /\
- and([x_ExplicitR4_ExplicitVarSizeWithFlags_Flags[q86, q94] ->
- or([q96 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q88] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q88, q96] =
- x_ExplicitR4_ExplicitVarSizeWithFlags_Values[q86, q94]
- | q96 : int(1..3)])
- | q94 : int(1..3)])
- | q88 : int(1..2)])
- | q86 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000001.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000002.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000003.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000004.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000005.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000006.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1.eprime.orig
deleted file mode 100644
index 7d1e4bb4cf..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_1.eprime.orig
+++ /dev/null
@@ -1,52 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-branching on
- [x_ExplicitR2_Occurrence, x_ExplicitR5_ExplicitVarSizeWithMarker_Marker,
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values]
-such that
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q6] | q6 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q2, q3] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q2, q3 + 1]
- | q3 : int(1..2)])
- | q2 : int(1..2)]),
- and([and([q4 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q2] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q2, q4] = 1
- | q4 : int(1..3)])
- | q2 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q2] <= 3 | q2 : int(1..2)]),
- [-toInt(x_ExplicitR2_Occurrence[1, q11]) | q11 : int(1..2)]
- x_ExplicitR2_Occurrence[q14, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q16, q18]]
- | q18 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q14, q19] ->
- or([q21 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q16] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q16, q21] = q19
- | q21 : int(1..3)])
- | q19 : int(1..2)])
- | q16 : int(1..2)])
- | q14 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q25, q26] ->
- or([q28 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q23] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q23, q28] = q26
- | q28 : int(1..3)])
- | q26 : int(1..2)])
- /\
- and([q30 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q23] ->
- x_ExplicitR2_Occurrence[q25, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q23, q30]]
- | q30 : int(1..3)])
- | q25 : int(1..2)])
- | q23 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000001.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000002.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000003.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000004.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000005.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000006.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2.eprime.orig
deleted file mode 100644
index 9dc0033744..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_2.eprime.orig
+++ /dev/null
@@ -1,116 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-find x_ExplicitR6_ExplicitVarSizeWithDummy: matrix indexed by [int(1..2), int(1..3)] of int(1..3)
-branching on
- [x_ExplicitR6_ExplicitVarSizeWithDummy, x_ExplicitR5_ExplicitVarSizeWithMarker_Marker,
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values, x_ExplicitR2_Occurrence]
-such that
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q6] | q6 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q2, q3] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q2, q3 + 1]
- | q3 : int(1..2)])
- | q2 : int(1..2)]),
- and([and([q4 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q2] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q2, q4] = 1
- | q4 : int(1..3)])
- | q2 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q2] <= 3 | q2 : int(1..2)]),
- [-toInt(x_ExplicitR2_Occurrence[1, q11]) | q11 : int(1..2)]
- x_ExplicitR2_Occurrence[q14, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q16, q18]]
- | q18 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q14, q19] ->
- or([q21 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q16] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q16, q21] = q19
- | q21 : int(1..3)])
- | q19 : int(1..2)])
- | q16 : int(1..2)])
- | q14 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q25, q26] ->
- or([q28 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q23] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q23, q28] = q26
- | q28 : int(1..3)])
- | q26 : int(1..2)])
- /\
- and([q30 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q23] ->
- x_ExplicitR2_Occurrence[q25, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q23, q30]]
- | q30 : int(1..3)])
- | q25 : int(1..2)])
- | q23 : int(1..2)]),
- [x_ExplicitR6_ExplicitVarSizeWithDummy[1, q37] | q37 : int(1..3)]
- x_ExplicitR6_ExplicitVarSizeWithDummy[q32, q34 + 1] = 3
- | q34 : int(1..2)])
- | q32 : int(1..2)]),
- and([sum([toInt(x_ExplicitR6_ExplicitVarSizeWithDummy[q32, q35] != 3) | q35 : int(1..3)]) <= 3 | q32 : int(1..2)]),
- and([or([and([q44 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q42] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q40, q46] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q40, q46] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q42, q44]
- | q46 : int(1..3)])
- | q44 : int(1..3)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q40, q48] != 3 ->
- or([q50 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q42] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q42, q50] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q40, q48]
- | q50 : int(1..3)])
- | q48 : int(1..3)])
- | q42 : int(1..2)])
- | q40 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q54, q56] != 3 ->
- or([q58 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q52] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q52, q58] =
- x_ExplicitR6_ExplicitVarSizeWithDummy[q54, q56]
- | q58 : int(1..3)])
- | q56 : int(1..3)])
- /\
- and([q60 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q52] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q54, q62] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q54, q62] =
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q52, q60]
- | q62 : int(1..3)])
- | q60 : int(1..3)])
- | q54 : int(1..2)])
- | q52 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q66, q67] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q64, q69] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q64, q69] = q67
- | q69 : int(1..3)])
- | q67 : int(1..2)])
- /\
- and([x_ExplicitR6_ExplicitVarSizeWithDummy[q64, q71] != 3 ->
- x_ExplicitR2_Occurrence[q66, x_ExplicitR6_ExplicitVarSizeWithDummy[q64, q71]]
- | q71 : int(1..3)])
- | q66 : int(1..2)])
- | q64 : int(1..2)]),
- and([or([and([x_ExplicitR6_ExplicitVarSizeWithDummy[q75, q77] != 3 ->
- x_ExplicitR2_Occurrence[q73, x_ExplicitR6_ExplicitVarSizeWithDummy[q75, q77]]
- | q77 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q73, q78] ->
- or([x_ExplicitR6_ExplicitVarSizeWithDummy[q75, q80] != 3 /\
- x_ExplicitR6_ExplicitVarSizeWithDummy[q75, q80] = q78
- | q80 : int(1..3)])
- | q78 : int(1..2)])
- | q75 : int(1..2)])
- | q73 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_3.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_3.eprime.orig
deleted file mode 100644
index 7d1e4bb4cf..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_3.eprime.orig
+++ /dev/null
@@ -1,52 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-branching on
- [x_ExplicitR2_Occurrence, x_ExplicitR5_ExplicitVarSizeWithMarker_Marker,
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values]
-such that
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q6] | q6 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q2, q3] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q2, q3 + 1]
- | q3 : int(1..2)])
- | q2 : int(1..2)]),
- and([and([q4 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q2] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q2, q4] = 1
- | q4 : int(1..3)])
- | q2 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q2] <= 3 | q2 : int(1..2)]),
- [-toInt(x_ExplicitR2_Occurrence[1, q11]) | q11 : int(1..2)]
- x_ExplicitR2_Occurrence[q14, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q16, q18]]
- | q18 : int(1..3)])
- /\
- and([x_ExplicitR2_Occurrence[q14, q19] ->
- or([q21 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q16] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q16, q21] = q19
- | q21 : int(1..3)])
- | q19 : int(1..2)])
- | q16 : int(1..2)])
- | q14 : int(1..2)]),
- and([or([and([x_ExplicitR2_Occurrence[q25, q26] ->
- or([q28 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q23] /\
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q23, q28] = q26
- | q28 : int(1..3)])
- | q26 : int(1..2)])
- /\
- and([q30 <= x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q23] ->
- x_ExplicitR2_Occurrence[q25, x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q23, q30]]
- | q30 : int(1..3)])
- | q25 : int(1..2)])
- | q23 : int(1..2)])
-
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000001.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000001.solution
new file mode 100644
index 0000000000..3ec452354e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000001.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1}}
+$ Visualisation for x
+$
+$ 1
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000002.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000002.solution
new file mode 100644
index 0000000000..c8946f3d06
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000002.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {2}}
+$ Visualisation for x
+$
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000003.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000003.solution
new file mode 100644
index 0000000000..af16592c51
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000003.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {2}}
+$ Visualisation for x
+$ 1
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000004.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000004.solution
new file mode 100644
index 0000000000..a6c0b6a43e
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000004.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{}, {1, 2}}
+$ Visualisation for x
+$
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000005.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000005.solution
new file mode 100644
index 0000000000..38937c9389
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000005.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1}, {1, 2}}
+$ Visualisation for x
+$ 1
+$ 1 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000006.solution b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000006.solution
new file mode 100644
index 0000000000..9bf2af0712
--- /dev/null
+++ b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000006.solution
@@ -0,0 +1,7 @@
+language Essence 1.3
+
+letting x be {{1, 2}, {2}}
+$ Visualisation for x
+$ 1 2
+$ 2
+
diff --git a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4.eprime.orig b/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4.eprime.orig
deleted file mode 100644
index 54c36877e9..0000000000
--- a/tests/exhaustive/basic/setOfSet04/expected/model_3_1_4.eprime.orig
+++ /dev/null
@@ -1,130 +0,0 @@
-language ESSENCE' 1.0
-
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..2)] of int(0..3)
-find x_ExplicitR5_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-find x_ExplicitR2_Occurrence: matrix indexed by [int(1..2), int(1..2)] of bool
-find x_ExplicitR4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2), int(1..3)] of bool
-find x_ExplicitR4_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2), int(1..3)] of int(1..2)
-branching on
- [x_ExplicitR4_ExplicitVarSizeWithFlags_Flags, x_ExplicitR4_ExplicitVarSizeWithFlags_Values,
- x_ExplicitR5_ExplicitVarSizeWithMarker_Marker, x_ExplicitR5_ExplicitVarSizeWithMarker_Values,
- x_ExplicitR2_Occurrence]
-such that
- flatten([[x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[1]; int(1)],
- [x_ExplicitR5_ExplicitVarSizeWithMarker_Values[1, q6] | q6 : int(1..3)];
- int(1..2)])
-
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q2, q3] <
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q2, q3 + 1]
- | q3 : int(1..2)])
- | q2 : int(1..2)]),
- and([and([q4 > x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q2] ->
- x_ExplicitR5_ExplicitVarSizeWithMarker_Values[q2, q4] = 1
- | q4 : int(1..3)])
- | q2 : int(1..2)]),
- and([x_ExplicitR5_ExplicitVarSizeWithMarker_Marker[q2] <= 3 | q2 : int(1..2)]),
- [-toInt(x_ExplicitR2_Occurrence[1, q11]) | q11 : int(1..2)]