From 168f7f13a36850a023a8549af0215046403a5db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 27 Feb 2024 15:39:08 +0000 Subject: [PATCH 001/124] tidy up --- src/Conjure/Language/Parser.hs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index c1f44b43a..bc27dc1d7 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -16,16 +16,8 @@ module Conjure.Language.Parser ) where --- conjure - --- text - import Conjure.Language.AST.ASTParser (ParserError, parseProgram, runASTParser) import Conjure.Language.AST.ASTParser qualified as P --- containers --- import qualified Data.Set as S ( null, fromList, toList ) - --- import Conjure.Language.AST.Helpers (ParserState) import Conjure.Language.AST.Helpers qualified as P import Conjure.Language.AST.Reformer (HighLevelTree (..), flatten) import Conjure.Language.AST.Syntax (DomainNode, ProgramTree) From 3cec7db2f447c46b1bad9364f5bc6eee039ff9a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 27 Feb 2024 15:40:51 +0000 Subject: [PATCH 002/124] tidy up --- src/Conjure/Language/ParserC.hs | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/Conjure/Language/ParserC.hs b/src/Conjure/Language/ParserC.hs index c4a2d9e8a..c4ede18e7 100644 --- a/src/Conjure/Language/ParserC.hs +++ b/src/Conjure/Language/ParserC.hs @@ -1,20 +1,16 @@ {-# LANGUAGE RecordWildCards #-} -module Conjure.Language.ParserC ( - parseModel ) where +module Conjure.Language.ParserC + ( parseModel, + ) +where --- conjure -import Conjure.Prelude -import Conjure.Language.Definition - -import qualified Conjure.Language.Validator as V +import Conjure.Language.AST.ASTParser (parseProgram) import Conjure.Language.AST.Syntax (ProgramTree) +import Conjure.Language.Definition import Conjure.Language.Parser (Pipeline) -import Conjure.Language.AST.ASTParser (parseProgram) - - - - +import Conjure.Language.Validator qualified as V +import Conjure.Prelude parseModel :: Pipeline ProgramTree Model -parseModel = (parseProgram,V.validateModel,False) \ No newline at end of file +parseModel = (parseProgram, V.validateModel, False) From ca98ad1aaa01aa597d08b7b8f5ea9a10cc1d4499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 28 Feb 2024 11:54:50 +0000 Subject: [PATCH 003/124] limit all of -Xmx -Xms -Xss --- etc/savilerow/savilerow | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/savilerow/savilerow b/etc/savilerow/savilerow index bec411d64..84edf62b2 100755 --- a/etc/savilerow/savilerow +++ b/etc/savilerow/savilerow @@ -22,6 +22,6 @@ case "$@" in fi ;; *) - java -ea -XX:ParallelGCThreads=1 -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" "$@" + java -ea -XX:ParallelGCThreads=1 -Djava.library.path=$DIR/lib/ -Xmx8G -Xms8G -Xss1G -jar "$DIR/savilerow.jar" "$@" ;; esac From 1595706a060b9357895dd19a24da8deee507b062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 5 Mar 2024 10:36:39 +0000 Subject: [PATCH 004/124] SR use /dev/urandom to avoid blocking on random number gen --- etc/savilerow/savilerow | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/savilerow/savilerow b/etc/savilerow/savilerow index 84edf62b2..f3a037c6c 100755 --- a/etc/savilerow/savilerow +++ b/etc/savilerow/savilerow @@ -22,6 +22,6 @@ case "$@" in fi ;; *) - java -ea -XX:ParallelGCThreads=1 -Djava.library.path=$DIR/lib/ -Xmx8G -Xms8G -Xss1G -jar "$DIR/savilerow.jar" "$@" + java -ea -XX:ParallelGCThreads=1 -Djava.security.egd=file:/dev/urandom -Djava.library.path=$DIR/lib/ -Xmx8G -Xms8G -Xss1G -jar "$DIR/savilerow.jar" "$@" ;; esac From 476fe8c8978bd46fba94106d88c5cd56fbc0a98e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 5 Mar 2024 20:43:41 +0000 Subject: [PATCH 005/124] trying with a version of SR that doesn't handle time limits --- etc/savilerow/savilerow.jar | Bin 806881 -> 806420 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/etc/savilerow/savilerow.jar b/etc/savilerow/savilerow.jar index 13b1bd62e749ed4236bb97a364899de797804553..acf370f68b231f71d0e15d286cf50a406dda3190 100644 GIT binary patch delta 21034 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 DMmv#p delta 21237 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 From ec25fe6fba78d1f9d55e51cb95e45f0bbd8b0689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 6 Mar 2024 16:51:37 +0000 Subject: [PATCH 006/124] docker/podman instructions --- docs/installation.rst | 51 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/docs/installation.rst b/docs/installation.rst index 1a25ed652..e48719590 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -51,3 +51,54 @@ An up-to-date version of Savile Row is also copied next to the Conjure executabl A standalone version of Savile Row and user documentation for Savile Row can be downloaded from `its website `_. + +Docker/Podman +------------- + +We release an container image that can be used via Docker or Podman. + +- The latest release is always at ghcr.io/conjure-cp/conjure:latest + +- The latest commit on main is at ghcr.io/conjure-cp/conjure:main + +- You can also use a specific version using the SHA of a particular image: ghcr.io/conjure-cp/conjure@sha256:VERSION + +See all available images on `Github `_. + +Inside the container, you will be able to run conjure, savilerow, and almost all supported solvers. + +CPLEX +===== + +CPLEX is a commercial mathemathical programming solver that is supported by Conjure. However we cannot provide CPLEX as part of the container image due to its license. Instead, we include instructions here for building another image that contains CPLEX as well. + +Obtain a commercial or academic license for CPLEX. Use the instructions on `its website `_. Notes on `this post `_ are helpful too. + +We assume you are on a Linux system here, though steps for macOS are very similar. + +- Download the installer. A file called `cplex_studio2211.linux_x86_64.bin`. +- Run the installer and follow the instructions. +- You can install CPLEX to its default location, however a user-level install is also possible. Assuming you installed it at: `/home/USER/cplex-install` for the remaining instructions +- Create a file called `/home/USER/cplex-install/Dockerfile` with the following contents + +.. code-block:: bash + + FROM ghcr.io/conjure-cp/conjure@sha256:VERSION + COPY cplex /root/.local/ + ENV CPLEX_PATH /root/.local/cplex/bin/x86-64_linux/libcplex2211.so + +- In the `/home/USER/cplex-install` directory execute: `podman build -t cplex-image .` + +- `podman images` should now list `localhost/cplex-image` as well as a bunch of other images. + + + + + + + + + + + + From f8621467643d0492ca5d159330a72fc563a1d854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 6 Mar 2024 17:49:33 +0000 Subject: [PATCH 007/124] two backticks --- docs/installation.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index e48719590..50a7d9ec1 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -76,10 +76,10 @@ Obtain a commercial or academic license for CPLEX. Use the instructions on `its We assume you are on a Linux system here, though steps for macOS are very similar. -- Download the installer. A file called `cplex_studio2211.linux_x86_64.bin`. +- Download the installer. A file called ``cplex_studio2211.linux_x86_64.bin``. - Run the installer and follow the instructions. -- You can install CPLEX to its default location, however a user-level install is also possible. Assuming you installed it at: `/home/USER/cplex-install` for the remaining instructions -- Create a file called `/home/USER/cplex-install/Dockerfile` with the following contents +- You can install CPLEX to its default location, however a user-level install is also possible. Assuming you installed it at: ``/home/USER/cplex-install`` for the remaining instructions +- Create a file called ``/home/USER/cplex-install/Dockerfile`` with the following contents .. code-block:: bash @@ -87,9 +87,9 @@ We assume you are on a Linux system here, though steps for macOS are very simila COPY cplex /root/.local/ ENV CPLEX_PATH /root/.local/cplex/bin/x86-64_linux/libcplex2211.so -- In the `/home/USER/cplex-install` directory execute: `podman build -t cplex-image .` +- In the ``/home/USER/cplex-install`` directory execute: ``podman build -t cplex-image .`` -- `podman images` should now list `localhost/cplex-image` as well as a bunch of other images. +- `podman images` should now list ``localhost/cplex-image`` as well as a bunch of other images. From d5ca76c2a7bba09b5dc98263f7dc40e8c41bf8ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 6 Mar 2024 23:20:11 +0000 Subject: [PATCH 008/124] initial work on adding a stats.json file --- conjure-cp.cabal | 1 + src/Conjure/UI/MainHelper.hs | 16 +++++++++---- src/Conjure/UI/SolveStats.hs | 45 ++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 src/Conjure/UI/SolveStats.hs diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 8f1517ed4..11984a46d 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -251,6 +251,7 @@ Library , Conjure.UI.ParameterGenerator , Conjure.UI.NormaliseQuantified , Conjure.UI.ErrorDisplay + , Conjure.UI.SolveStats , Conjure.LSP.LanguageServer , Conjure.LSP.Documentation diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 7190cb47b..d16dc0eae 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -19,7 +19,7 @@ import Conjure.UI.Split ( outputSplittedModels, removeUnusedDecls ) import Conjure.UI.VarSymBreaking ( outputVarSymBreaking ) import Conjure.UI.ParameterGenerator ( parameterGenerator ) import Conjure.UI.NormaliseQuantified ( normaliseQuantifiedVariables ) - +import Conjure.UI.SolveStats ( mkSolveStats ) import Conjure.Language.Name ( Name(..) ) import Conjure.Language.Definition ( Model(..), ModelInfo(..), Statement(..), Declaration(..), FindOrGiven(..) ) @@ -52,9 +52,6 @@ import qualified Data.HashMap.Strict as M -- unordered-containers -- filepath import System.FilePath ( splitFileName, takeBaseName, (<.>) ) --- system-filepath --- import qualified Filesystem.Path as Sys ( FilePath ) - -- directory import System.Directory ( copyFile, findExecutable ) @@ -1096,21 +1093,30 @@ srStdoutHandler _ _ _ _ = bug "srStdoutHandler" srCleanUp :: FilePath -> UI -> Text -> [sols] -> Sh (Either [Doc] [sols]) srCleanUp outBase Solve{..} stdoutSR solutions = do + let mkFilename ext = outputDirectory outBase ++ ext + -- closing the array in the all solutions json file case outputFormat of JSON -> case solutionsInOneFile of False -> return () True -> do - let mkFilename ext = outputDirectory outBase ++ ext let filenameEssenceSolJSON = mkFilename ".solutions.json" case solutions of [] -> liftIO $ writeFile filenameEssenceSolJSON "[]\n" _ -> liftIO $ appendFile filenameEssenceSolJSON "]\n" _ -> return () + let srInfoFilename = mkFilename ".eprime-info" + let statsFilename = mkFilename ".stats" + srInfoContent <- liftIO $ readFileIfExists srInfoFilename + stderrSR <- lastStderr exitCodeSR <- lastExitCode let combinedSR = T.unlines [stdoutSR, stderrSR] + + let stats = mkSolveStats (fromMaybe "" srInfoContent) combinedSR + liftIO $ writeFile statsFilename (render lineWidth $ toJSON stats) + if | T.isInfixOf "Savile Row timed out." combinedSR -> return (Left ["Savile Row timed out."]) | T.isInfixOf "where false" combinedSR -> diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs new file mode 100644 index 000000000..c538b60df --- /dev/null +++ b/src/Conjure/UI/SolveStats.hs @@ -0,0 +1,45 @@ +{-# LANGUAGE DeriveDataTypeable #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE RecordWildCards #-} + +module Conjure.UI.SolveStats (mkSolveStats, SolveStats (..), SolveStatus (..)) where + +import Conjure.Prelude +import Data.HashMap.Strict qualified as M -- unordered-containers +import Data.Text qualified as T (isInfixOf) -- text + +data SolveStats = SolveStats {status :: SolveStatus, totalTime :: Maybe Double, savilerowInfo :: M.HashMap String String} + deriving (Eq, Ord, Show, Data, Typeable, Generic) + +instance Hashable SolveStats + +instance ToJSON SolveStats where toJSON = genericToJSON jsonOptions + +instance FromJSON SolveStats where parseJSON = genericParseJSON jsonOptions + +data SolveStatus = OK | TimeOut | MemOut + deriving (Eq, Ord, Show, Data, Typeable, Generic) + +instance Hashable SolveStatus + +instance ToJSON SolveStatus where toJSON = genericToJSON jsonOptions + +instance FromJSON SolveStatus where parseJSON = genericParseJSON jsonOptions + +mkSolveStats :: String -> Text -> SolveStats +mkSolveStats raw stdout = + let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines raw)] + status + | info M.! "SavileRowTimeOut" == "1" = TimeOut + | info M.! "SavileRowClauseOut" == "1" = TimeOut + | info M.! "SolverTimeOut" == "1" = TimeOut + | T.isInfixOf "Savile Row timed out." stdout = TimeOut + | T.isInfixOf "java.lang.OutOfMemoryError" stdout = MemOut + | otherwise = OK + totalTime + | Just srTotalTime <- readMay $ info M.! "SavileRowTotalTime", + Just solverTotalTime <- readMay $ info M.! "SolverTotalTime" = + Just (srTotalTime + solverTotalTime) + | otherwise = Nothing + savilerowInfo = info + in SolveStats {..} From a24df107e04de26535edb58070968f0ff213ca54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 6 Mar 2024 23:21:26 +0000 Subject: [PATCH 009/124] it's a json file --- src/Conjure/UI/MainHelper.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index d16dc0eae..cbca28b71 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -1107,7 +1107,7 @@ srCleanUp outBase Solve{..} stdoutSR solutions = do _ -> return () let srInfoFilename = mkFilename ".eprime-info" - let statsFilename = mkFilename ".stats" + let statsFilename = mkFilename ".stats.json" srInfoContent <- liftIO $ readFileIfExists srInfoFilename stderrSR <- lastStderr From f5e4893dc9c5202da0b99597617cad8ffd211195 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 6 Mar 2024 23:48:39 +0000 Subject: [PATCH 010/124] double backticks --- docs/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index 50a7d9ec1..f27d23f18 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -89,7 +89,7 @@ We assume you are on a Linux system here, though steps for macOS are very simila - In the ``/home/USER/cplex-install`` directory execute: ``podman build -t cplex-image .`` -- `podman images` should now list ``localhost/cplex-image`` as well as a bunch of other images. +- ``podman images`` should now list ``localhost/cplex-image`` as well as a bunch of other images. From 4bb17ebd1e8cfc5378fb1c893fa2ebd2dd2860bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 7 Mar 2024 08:04:09 +0000 Subject: [PATCH 011/124] Revert "Merge pull request #647 from conjure-cp/stats" This reverts commit f364287712c4ffbdcf25e9f3f6d7b6aefca9c5d6, reversing changes made to f8621467643d0492ca5d159330a72fc563a1d854. --- conjure-cp.cabal | 1 - src/Conjure/UI/MainHelper.hs | 16 ++++--------- src/Conjure/UI/SolveStats.hs | 45 ------------------------------------ 3 files changed, 5 insertions(+), 57 deletions(-) delete mode 100644 src/Conjure/UI/SolveStats.hs diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 11984a46d..8f1517ed4 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -251,7 +251,6 @@ Library , Conjure.UI.ParameterGenerator , Conjure.UI.NormaliseQuantified , Conjure.UI.ErrorDisplay - , Conjure.UI.SolveStats , Conjure.LSP.LanguageServer , Conjure.LSP.Documentation diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index cbca28b71..7190cb47b 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -19,7 +19,7 @@ import Conjure.UI.Split ( outputSplittedModels, removeUnusedDecls ) import Conjure.UI.VarSymBreaking ( outputVarSymBreaking ) import Conjure.UI.ParameterGenerator ( parameterGenerator ) import Conjure.UI.NormaliseQuantified ( normaliseQuantifiedVariables ) -import Conjure.UI.SolveStats ( mkSolveStats ) + import Conjure.Language.Name ( Name(..) ) import Conjure.Language.Definition ( Model(..), ModelInfo(..), Statement(..), Declaration(..), FindOrGiven(..) ) @@ -52,6 +52,9 @@ import qualified Data.HashMap.Strict as M -- unordered-containers -- filepath import System.FilePath ( splitFileName, takeBaseName, (<.>) ) +-- system-filepath +-- import qualified Filesystem.Path as Sys ( FilePath ) + -- directory import System.Directory ( copyFile, findExecutable ) @@ -1093,30 +1096,21 @@ srStdoutHandler _ _ _ _ = bug "srStdoutHandler" srCleanUp :: FilePath -> UI -> Text -> [sols] -> Sh (Either [Doc] [sols]) srCleanUp outBase Solve{..} stdoutSR solutions = do - let mkFilename ext = outputDirectory outBase ++ ext - -- closing the array in the all solutions json file case outputFormat of JSON -> case solutionsInOneFile of False -> return () True -> do + let mkFilename ext = outputDirectory outBase ++ ext let filenameEssenceSolJSON = mkFilename ".solutions.json" case solutions of [] -> liftIO $ writeFile filenameEssenceSolJSON "[]\n" _ -> liftIO $ appendFile filenameEssenceSolJSON "]\n" _ -> return () - let srInfoFilename = mkFilename ".eprime-info" - let statsFilename = mkFilename ".stats.json" - srInfoContent <- liftIO $ readFileIfExists srInfoFilename - stderrSR <- lastStderr exitCodeSR <- lastExitCode let combinedSR = T.unlines [stdoutSR, stderrSR] - - let stats = mkSolveStats (fromMaybe "" srInfoContent) combinedSR - liftIO $ writeFile statsFilename (render lineWidth $ toJSON stats) - if | T.isInfixOf "Savile Row timed out." combinedSR -> return (Left ["Savile Row timed out."]) | T.isInfixOf "where false" combinedSR -> diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs deleted file mode 100644 index c538b60df..000000000 --- a/src/Conjure/UI/SolveStats.hs +++ /dev/null @@ -1,45 +0,0 @@ -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE RecordWildCards #-} - -module Conjure.UI.SolveStats (mkSolveStats, SolveStats (..), SolveStatus (..)) where - -import Conjure.Prelude -import Data.HashMap.Strict qualified as M -- unordered-containers -import Data.Text qualified as T (isInfixOf) -- text - -data SolveStats = SolveStats {status :: SolveStatus, totalTime :: Maybe Double, savilerowInfo :: M.HashMap String String} - deriving (Eq, Ord, Show, Data, Typeable, Generic) - -instance Hashable SolveStats - -instance ToJSON SolveStats where toJSON = genericToJSON jsonOptions - -instance FromJSON SolveStats where parseJSON = genericParseJSON jsonOptions - -data SolveStatus = OK | TimeOut | MemOut - deriving (Eq, Ord, Show, Data, Typeable, Generic) - -instance Hashable SolveStatus - -instance ToJSON SolveStatus where toJSON = genericToJSON jsonOptions - -instance FromJSON SolveStatus where parseJSON = genericParseJSON jsonOptions - -mkSolveStats :: String -> Text -> SolveStats -mkSolveStats raw stdout = - let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines raw)] - status - | info M.! "SavileRowTimeOut" == "1" = TimeOut - | info M.! "SavileRowClauseOut" == "1" = TimeOut - | info M.! "SolverTimeOut" == "1" = TimeOut - | T.isInfixOf "Savile Row timed out." stdout = TimeOut - | T.isInfixOf "java.lang.OutOfMemoryError" stdout = MemOut - | otherwise = OK - totalTime - | Just srTotalTime <- readMay $ info M.! "SavileRowTotalTime", - Just solverTotalTime <- readMay $ info M.! "SolverTotalTime" = - Just (srTotalTime + solverTotalTime) - | otherwise = Nothing - savilerowInfo = info - in SolveStats {..} From f9157fe75d69b71973137f6e2a8e14d77eaed24d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 7 Mar 2024 08:14:12 +0000 Subject: [PATCH 012/124] image name --- docs/installation.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index f27d23f18..b9383e128 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -87,9 +87,9 @@ We assume you are on a Linux system here, though steps for macOS are very simila COPY cplex /root/.local/ ENV CPLEX_PATH /root/.local/cplex/bin/x86-64_linux/libcplex2211.so -- In the ``/home/USER/cplex-install`` directory execute: ``podman build -t cplex-image .`` +- In the ``/home/USER/cplex-install`` directory execute: ``podman build -t conjure-cplex .`` -- ``podman images`` should now list ``localhost/cplex-image`` as well as a bunch of other images. +- ``podman images`` should now list ``localhost/conjure-cplex`` as well as a bunch of other images. From 0ab3b382f38fe65a97e0580972f02a845930ffe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 7 Mar 2024 08:19:10 +0000 Subject: [PATCH 013/124] docker too --- docs/installation.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/installation.rst b/docs/installation.rst index b9383e128..444eaefb1 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -91,6 +91,8 @@ We assume you are on a Linux system here, though steps for macOS are very simila - ``podman images`` should now list ``localhost/conjure-cplex`` as well as a bunch of other images. +- You can replace podman with docker in the last 2 commands to use docker instead. + From 1784f8f822c54189727aa58c46e2e938f10f2cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 7 Mar 2024 15:31:10 +0000 Subject: [PATCH 014/124] store a bit more info in the stats.json file and update the test files --- src/Conjure/UI/MainHelper.hs | 4 +-- src/Conjure/UI/SolveStats.hs | 29 ++++++++++++++----- .../basic/enum_functions/stdout.expected | 4 +++ .../basic/function_card_01/stdout.expected | 2 ++ .../basic/function_card_02/stdout.expected | 2 ++ .../basic/function_imageSet01/stdout.expected | 8 +++++ .../basic/function_inverse_01/stdout.expected | 4 +++ .../function_partial_int_01/stdout.expected | 2 ++ .../function_partial_int_02/stdout.expected | 2 ++ .../function_partial_int_03/stdout.expected | 2 ++ .../function_partial_int_04/stdout.expected | 2 ++ .../function_partial_int_05/stdout.expected | 2 ++ .../function_partial_int_06/stdout.expected | 2 ++ .../stdout.expected | 2 ++ .../function_partial_tuple_01/stdout.expected | 2 ++ .../custom/basic/restricted01/stdout.expected | 1 + .../custom/basic/restricted02/stdout.expected | 1 + .../custom/basic/restricted03/stdout.expected | 2 ++ .../custom/basic/restricted04/stdout.expected | 2 ++ .../custom/basic/streamline01/stdout.expected | 4 +++ tests/custom/issues/284/stdout.expected | 8 +++++ 21 files changed, 77 insertions(+), 10 deletions(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index cbca28b71..871496416 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -1091,7 +1091,7 @@ srStdoutHandler _ _ _ _ = bug "srStdoutHandler" srCleanUp :: FilePath -> UI -> Text -> [sols] -> Sh (Either [Doc] [sols]) -srCleanUp outBase Solve{..} stdoutSR solutions = do +srCleanUp outBase ui@Solve{..} stdoutSR solutions = do let mkFilename ext = outputDirectory outBase ++ ext @@ -1114,7 +1114,7 @@ srCleanUp outBase Solve{..} stdoutSR solutions = do exitCodeSR <- lastExitCode let combinedSR = T.unlines [stdoutSR, stderrSR] - let stats = mkSolveStats (fromMaybe "" srInfoContent) combinedSR + let stats = mkSolveStats ui (fromMaybe "" srInfoContent) combinedSR liftIO $ writeFile statsFilename (render lineWidth $ toJSON stats) if | T.isInfixOf "Savile Row timed out." combinedSR -> diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index c538b60df..e7cc07efc 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -4,11 +4,23 @@ module Conjure.UI.SolveStats (mkSolveStats, SolveStats (..), SolveStatus (..)) where +import Conjure.Bug import Conjure.Prelude +import Conjure.UI (UI (..)) import Data.HashMap.Strict qualified as M -- unordered-containers import Data.Text qualified as T (isInfixOf) -- text -data SolveStats = SolveStats {status :: SolveStatus, totalTime :: Maybe Double, savilerowInfo :: M.HashMap String String} +data SolveStats = SolveStats + { status :: SolveStatus, + totalTime :: Maybe Double, + savilerowInfo :: M.HashMap String String, + essence :: FilePath, + essenceParams :: [FilePath], + useExistingModels :: [FilePath], + savilerowOptions :: [String], + solverOptions :: [String], + solver :: String + } deriving (Eq, Ord, Show, Data, Typeable, Generic) instance Hashable SolveStats @@ -26,20 +38,21 @@ instance ToJSON SolveStatus where toJSON = genericToJSON jsonOptions instance FromJSON SolveStatus where parseJSON = genericParseJSON jsonOptions -mkSolveStats :: String -> Text -> SolveStats -mkSolveStats raw stdout = +mkSolveStats :: UI -> String -> Text -> SolveStats +mkSolveStats Solve {..} raw stdout = let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines raw)] status - | info M.! "SavileRowTimeOut" == "1" = TimeOut - | info M.! "SavileRowClauseOut" == "1" = TimeOut - | info M.! "SolverTimeOut" == "1" = TimeOut + | M.lookup "SavileRowTimeOut" info == Just "1" = TimeOut + | M.lookup "SavileRowClauseOut" info == Just "1" = TimeOut + | M.lookup "SolverTimeOut" info == Just "1" = TimeOut | T.isInfixOf "Savile Row timed out." stdout = TimeOut | T.isInfixOf "java.lang.OutOfMemoryError" stdout = MemOut | otherwise = OK totalTime - | Just srTotalTime <- readMay $ info M.! "SavileRowTotalTime", - Just solverTotalTime <- readMay $ info M.! "SolverTotalTime" = + | Just srTotalTime <- M.lookup "SavileRowTotalTime" info >>= readMay, + Just solverTotalTime <- M.lookup "SolverTotalTime" info >>= readMay = Just (srTotalTime + solverTotalTime) | otherwise = Nothing savilerowInfo = info in SolveStats {..} +mkSolveStats _ _ _ = bug "mkSolveStats" diff --git a/tests/custom/basic/enum_functions/stdout.expected b/tests/custom/basic/enum_functions/stdout.expected index c4b027791..705b34abd 100644 --- a/tests/custom/basic/enum_functions/stdout.expected +++ b/tests/custom/basic/enum_functions/stdout.expected @@ -35,6 +35,7 @@ model000001-p1.eprime-info model000001-p1.eprime-infor model000001-p1.eprime-minion model000001-p1.eprime-param +model000001-p1.stats.json model000001.eprime model000002-p1-solution000001.eprime-solution model000002-p1-solution000001.solution @@ -58,6 +59,7 @@ model000002-p1.eprime-info model000002-p1.eprime-infor model000002-p1.eprime-minion model000002-p1.eprime-param +model000002-p1.stats.json model000002.eprime model000003-p1-solution000001.eprime-solution model000003-p1-solution000001.solution @@ -81,6 +83,7 @@ model000003-p1.eprime-info model000003-p1.eprime-infor model000003-p1.eprime-minion model000003-p1.eprime-param +model000003-p1.stats.json model000003.eprime model000004-p1-solution000001.eprime-solution model000004-p1-solution000001.solution @@ -104,6 +107,7 @@ model000004-p1.eprime-info model000004-p1.eprime-infor model000004-p1.eprime-minion model000004-p1.eprime-param +model000004-p1.stats.json model000004.eprime conjure-output/model000001-p1-solution000001.solution:letting f be function(a --> b1, b --> b2, c --> b5) conjure-output/model000001-p1-solution000001.solution:letting g be function(b1 --> c, b4 --> b, b5 --> a) diff --git a/tests/custom/basic/function_card_01/stdout.expected b/tests/custom/basic/function_card_01/stdout.expected index 0b551b234..eac736e7c 100644 --- a/tests/custom/basic/function_card_01/stdout.expected +++ b/tests/custom/basic/function_card_01/stdout.expected @@ -43,6 +43,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -79,6 +80,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json conjure-output/model000001-solution000001.solution:letting x be function(2 --> 2, 3 --> 1) conjure-output/model000001-solution000002.solution:letting x be function(2 --> 2, 3 --> 2) conjure-output/model000001-solution000003.solution:letting x be function(2 --> 2, 3 --> 3) diff --git a/tests/custom/basic/function_card_02/stdout.expected b/tests/custom/basic/function_card_02/stdout.expected index af471206c..ebdaff747 100644 --- a/tests/custom/basic/function_card_02/stdout.expected +++ b/tests/custom/basic/function_card_02/stdout.expected @@ -25,6 +25,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -43,6 +44,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json conjure-output/model000001-solution000001.solution:letting x be function(2 --> 2, 3 --> 1) conjure-output/model000001-solution000002.solution:letting x be function(2 --> 2, 3 --> 3) conjure-output/model000001-solution000003.solution:letting x be function(1 --> 1) diff --git a/tests/custom/basic/function_imageSet01/stdout.expected b/tests/custom/basic/function_imageSet01/stdout.expected index 246796ee4..20d124f42 100644 --- a/tests/custom/basic/function_imageSet01/stdout.expected +++ b/tests/custom/basic/function_imageSet01/stdout.expected @@ -36,6 +36,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -46,6 +47,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json model000003-solution000001.eprime-solution model000003-solution000001.solution model000003-solution000002.eprime-solution @@ -56,6 +58,7 @@ model000003.eprime model000003.eprime-info model000003.eprime-infor model000003.eprime-minion +model000003.stats.json model000004-solution000001.eprime-solution model000004-solution000001.solution model000004-solution000002.eprime-solution @@ -66,6 +69,7 @@ model000004.eprime model000004.eprime-info model000004.eprime-infor model000004.eprime-minion +model000004.stats.json model000005-solution000001.eprime-solution model000005-solution000001.solution model000005-solution000002.eprime-solution @@ -76,6 +80,7 @@ model000005.eprime model000005.eprime-info model000005.eprime-infor model000005.eprime-minion +model000005.stats.json model000006-solution000001.eprime-solution model000006-solution000001.solution model000006-solution000002.eprime-solution @@ -86,6 +91,7 @@ model000006.eprime model000006.eprime-info model000006.eprime-infor model000006.eprime-minion +model000006.stats.json model000007-solution000001.eprime-solution model000007-solution000001.solution model000007-solution000002.eprime-solution @@ -96,6 +102,7 @@ model000007.eprime model000007.eprime-info model000007.eprime-infor model000007.eprime-minion +model000007.stats.json model000008-solution000001.eprime-solution model000008-solution000001.solution model000008-solution000002.eprime-solution @@ -106,6 +113,7 @@ model000008.eprime model000008.eprime-info model000008.eprime-infor model000008.eprime-minion +model000008.stats.json conjure-output/model000001-solution000001.solution:letting f be function() conjure-output/model000001-solution000001.solution:letting s be {} conjure-output/model000001-solution000002.solution:letting f be function(1 --> 1, 2 --> 1) diff --git a/tests/custom/basic/function_inverse_01/stdout.expected b/tests/custom/basic/function_inverse_01/stdout.expected index 0f976aaff..18052211e 100644 --- a/tests/custom/basic/function_inverse_01/stdout.expected +++ b/tests/custom/basic/function_inverse_01/stdout.expected @@ -25,6 +25,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -37,6 +38,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json model000003-solution000001.eprime-solution model000003-solution000001.solution model000003-solution000002.eprime-solution @@ -49,6 +51,7 @@ model000003.eprime model000003.eprime-info model000003.eprime-infor model000003.eprime-minion +model000003.stats.json model000004-solution000001.eprime-solution model000004-solution000001.solution model000004-solution000002.eprime-solution @@ -61,6 +64,7 @@ model000004.eprime model000004.eprime-info model000004.eprime-infor model000004.eprime-minion +model000004.stats.json conjure-output/model000001-solution000001.solution:letting x be function(1 --> 2, 2 --> 3) conjure-output/model000001-solution000001.solution:letting y be function(2 --> 1, 3 --> 2) conjure-output/model000001-solution000002.solution:letting x be function(1 --> 3, 2 --> 1) diff --git a/tests/custom/basic/function_partial_int_01/stdout.expected b/tests/custom/basic/function_partial_int_01/stdout.expected index d4d77230c..fb801a79b 100644 --- a/tests/custom/basic/function_partial_int_01/stdout.expected +++ b/tests/custom/basic/function_partial_int_01/stdout.expected @@ -29,6 +29,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -51,6 +52,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json conjure-output/model000001-solution000001.solution:letting x be function() conjure-output/model000001-solution000002.solution:letting x be function(2 --> 13) conjure-output/model000001-solution000003.solution:letting x be function(2 --> 17) diff --git a/tests/custom/basic/function_partial_int_02/stdout.expected b/tests/custom/basic/function_partial_int_02/stdout.expected index 77a17c947..0d176eb52 100644 --- a/tests/custom/basic/function_partial_int_02/stdout.expected +++ b/tests/custom/basic/function_partial_int_02/stdout.expected @@ -35,6 +35,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -63,6 +64,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json conjure-output/model000001-solution000001.solution:letting x be function(2 --> 13, 3 --> 14) conjure-output/model000001-solution000002.solution:letting x be function(2 --> 14, 3 --> 13) conjure-output/model000001-solution000003.solution:letting x be function(1 --> 13, 3 --> 14) diff --git a/tests/custom/basic/function_partial_int_03/stdout.expected b/tests/custom/basic/function_partial_int_03/stdout.expected index 09e84736a..1bac162c5 100644 --- a/tests/custom/basic/function_partial_int_03/stdout.expected +++ b/tests/custom/basic/function_partial_int_03/stdout.expected @@ -79,6 +79,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -151,6 +152,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json conjure-output/model000001-solution000001.solution:letting x be function() conjure-output/model000001-solution000002.solution:letting x be function(3 --> 13) conjure-output/model000001-solution000003.solution:letting x be function(3 --> 14) diff --git a/tests/custom/basic/function_partial_int_04/stdout.expected b/tests/custom/basic/function_partial_int_04/stdout.expected index 2d2bcc3b5..8bc5f4602 100644 --- a/tests/custom/basic/function_partial_int_04/stdout.expected +++ b/tests/custom/basic/function_partial_int_04/stdout.expected @@ -157,6 +157,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -307,6 +308,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json conjure-output/model000001-solution000001.solution:letting x be function() conjure-output/model000001-solution000002.solution:letting x be function(3 --> 13) conjure-output/model000001-solution000003.solution:letting x be function(3 --> 14) diff --git a/tests/custom/basic/function_partial_int_05/stdout.expected b/tests/custom/basic/function_partial_int_05/stdout.expected index 8cad5dbec..9d8bb1bf7 100644 --- a/tests/custom/basic/function_partial_int_05/stdout.expected +++ b/tests/custom/basic/function_partial_int_05/stdout.expected @@ -23,6 +23,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -39,6 +40,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json conjure-output/model000001-solution000001.solution:letting x be function(1 --> 13, 2 --> 14, 3 --> 15) conjure-output/model000001-solution000002.solution:letting x be function(1 --> 13, 2 --> 15, 3 --> 14) conjure-output/model000001-solution000003.solution:letting x be function(1 --> 14, 2 --> 13, 3 --> 15) diff --git a/tests/custom/basic/function_partial_int_06/stdout.expected b/tests/custom/basic/function_partial_int_06/stdout.expected index ee6f86eae..717571a70 100644 --- a/tests/custom/basic/function_partial_int_06/stdout.expected +++ b/tests/custom/basic/function_partial_int_06/stdout.expected @@ -12,7 +12,9 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json diff --git a/tests/custom/basic/function_partial_int_param/stdout.expected b/tests/custom/basic/function_partial_int_param/stdout.expected index 35e8ae3f0..b574a70cb 100644 --- a/tests/custom/basic/function_partial_int_param/stdout.expected +++ b/tests/custom/basic/function_partial_int_param/stdout.expected @@ -13,6 +13,7 @@ model000001-param000181.eprime-info model000001-param000181.eprime-infor model000001-param000181.eprime-minion model000001-param000181.eprime-param +model000001-param000181.stats.json model000001.eprime model000002-param000181-solution000001.eprime-solution model000002-param000181-solution000001.solution @@ -20,6 +21,7 @@ model000002-param000181.eprime-info model000002-param000181.eprime-infor model000002-param000181.eprime-minion model000002-param000181.eprime-param +model000002-param000181.stats.json model000002.eprime conjure-output/model000001-param000181-solution000001.solution:letting x be function(1 --> 15, 2 --> 13) conjure-output/model000002-param000181-solution000001.solution:letting x be function(1 --> 15, 2 --> 13) diff --git a/tests/custom/basic/function_partial_tuple_01/stdout.expected b/tests/custom/basic/function_partial_tuple_01/stdout.expected index 28e8fe4c1..902e89797 100644 --- a/tests/custom/basic/function_partial_tuple_01/stdout.expected +++ b/tests/custom/basic/function_partial_tuple_01/stdout.expected @@ -29,6 +29,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -51,6 +52,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json conjure-output/model000001-solution000001.solution:letting x be function((7, true) --> 13, (8, false) --> 17) conjure-output/model000001-solution000002.solution:letting x be function((7, true) --> 13, (8, false) --> 17, (8, true) --> 13) conjure-output/model000001-solution000003.solution:letting x be function((7, true) --> 13, (8, false) --> 17, (8, true) --> 17) diff --git a/tests/custom/basic/restricted01/stdout.expected b/tests/custom/basic/restricted01/stdout.expected index 3d97c1f87..ef3cf66da 100644 --- a/tests/custom/basic/restricted01/stdout.expected +++ b/tests/custom/basic/restricted01/stdout.expected @@ -32,6 +32,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json conjure-output/model000001-solution000001.solution:letting x be function((1, 1) --> 1, (1, 2) --> 2, (1, 3) --> 3, (2, 1) --> 2, (2, 2) --> 3, (2, 3) --> 1) conjure-output/model000001-solution000002.solution:letting x be function((1, 1) --> 1, (1, 2) --> 2, (1, 3) --> 3, (2, 1) --> 3, (2, 2) --> 1, (2, 3) --> 2) conjure-output/model000001-solution000003.solution:letting x be function((1, 1) --> 1, (1, 2) --> 3, (1, 3) --> 2, (2, 1) --> 2, (2, 2) --> 1, (2, 3) --> 3) diff --git a/tests/custom/basic/restricted02/stdout.expected b/tests/custom/basic/restricted02/stdout.expected index c50de176e..7183183bf 100644 --- a/tests/custom/basic/restricted02/stdout.expected +++ b/tests/custom/basic/restricted02/stdout.expected @@ -32,6 +32,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json conjure-output/model000001-solution000001.solution:letting x be function((1, 1) --> 1, (1, 2) --> 2, (1, 3) --> 3, (2, 1) --> 2, (2, 2) --> 3, (2, 3) --> 1) conjure-output/model000001-solution000002.solution:letting x be function((1, 1) --> 1, (1, 2) --> 2, (1, 3) --> 3, (2, 1) --> 3, (2, 2) --> 1, (2, 3) --> 2) conjure-output/model000001-solution000003.solution:letting x be function((1, 1) --> 1, (1, 2) --> 3, (1, 3) --> 2, (2, 1) --> 2, (2, 2) --> 1, (2, 3) --> 3) diff --git a/tests/custom/basic/restricted03/stdout.expected b/tests/custom/basic/restricted03/stdout.expected index c4785b4ac..3f9d67f44 100644 --- a/tests/custom/basic/restricted03/stdout.expected +++ b/tests/custom/basic/restricted03/stdout.expected @@ -109,6 +109,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -211,6 +212,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json conjure-output/model000001-solution000001.solution:letting x be function() conjure-output/model000001-solution000002.solution:letting x be function(4 --> 1) conjure-output/model000001-solution000003.solution:letting x be function(4 --> 3) diff --git a/tests/custom/basic/restricted04/stdout.expected b/tests/custom/basic/restricted04/stdout.expected index eec6b3278..e62b94662 100644 --- a/tests/custom/basic/restricted04/stdout.expected +++ b/tests/custom/basic/restricted04/stdout.expected @@ -125,6 +125,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -243,6 +244,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json conjure-output/model000001-solution000001.solution:letting x be function() conjure-output/model000001-solution000002.solution:letting x be function((2, 2) --> 1) conjure-output/model000001-solution000003.solution:letting x be function((2, 2) --> 2) diff --git a/tests/custom/basic/streamline01/stdout.expected b/tests/custom/basic/streamline01/stdout.expected index 925dcb7c8..a5c64bd7a 100644 --- a/tests/custom/basic/streamline01/stdout.expected +++ b/tests/custom/basic/streamline01/stdout.expected @@ -41,6 +41,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -69,6 +70,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json model000003-solution000001.eprime-solution model000003-solution000001.solution model000003-solution000002.eprime-solution @@ -97,6 +99,7 @@ model000003.eprime model000003.eprime-info model000003.eprime-infor model000003.eprime-minion +model000003.stats.json model000004-solution000001.eprime-solution model000004-solution000001.solution model000004-solution000002.eprime-solution @@ -125,6 +128,7 @@ model000004.eprime model000004.eprime-info model000004.eprime-infor model000004.eprime-minion +model000004.stats.json conjure-output/model000001-solution000001.solution:letting f be function(2 --> 1) conjure-output/model000001-solution000001.solution:letting s be {2} conjure-output/model000001-solution000002.solution:letting f be function(2 --> 2) diff --git a/tests/custom/issues/284/stdout.expected b/tests/custom/issues/284/stdout.expected index 3650c97d0..55a1b019c 100644 --- a/tests/custom/issues/284/stdout.expected +++ b/tests/custom/issues/284/stdout.expected @@ -66,6 +66,7 @@ model000001.eprime model000001.eprime-info model000001.eprime-infor model000001.eprime-minion +model000001.stats.json model000002-solution000001.eprime-solution model000002-solution000001.solution model000002-solution000002.eprime-solution @@ -106,6 +107,7 @@ model000002.eprime model000002.eprime-info model000002.eprime-infor model000002.eprime-minion +model000002.stats.json model000003-solution000001.eprime-solution model000003-solution000001.solution model000003-solution000002.eprime-solution @@ -146,6 +148,7 @@ model000003.eprime model000003.eprime-info model000003.eprime-infor model000003.eprime-minion +model000003.stats.json model000004-solution000001.eprime-solution model000004-solution000001.solution model000004-solution000002.eprime-solution @@ -186,6 +189,7 @@ model000004.eprime model000004.eprime-info model000004.eprime-infor model000004.eprime-minion +model000004.stats.json model000005-solution000001.eprime-solution model000005-solution000001.solution model000005-solution000002.eprime-solution @@ -226,6 +230,7 @@ model000005.eprime model000005.eprime-info model000005.eprime-infor model000005.eprime-minion +model000005.stats.json model000006-solution000001.eprime-solution model000006-solution000001.solution model000006-solution000002.eprime-solution @@ -266,6 +271,7 @@ model000006.eprime model000006.eprime-info model000006.eprime-infor model000006.eprime-minion +model000006.stats.json model000007-solution000001.eprime-solution model000007-solution000001.solution model000007-solution000002.eprime-solution @@ -306,6 +312,7 @@ model000007.eprime model000007.eprime-info model000007.eprime-infor model000007.eprime-minion +model000007.stats.json model000008-solution000001.eprime-solution model000008-solution000001.solution model000008-solution000002.eprime-solution @@ -346,6 +353,7 @@ model000008.eprime model000008.eprime-info model000008.eprime-infor model000008.eprime-minion +model000008.stats.json conjure-output/model000001-solution000001.solution:letting f be function(1 --> 1, 2 --> 1, 3 --> 2) conjure-output/model000001-solution000002.solution:letting f be function(1 --> 1, 2 --> 1, 3 --> 3) conjure-output/model000001-solution000003.solution:letting f be function(1 --> 1, 2 --> 2, 3 --> 1) From 2a7af561e3a999b10e208690a295af7cf0e807a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Fri, 8 Mar 2024 14:53:33 +0000 Subject: [PATCH 015/124] expanding the stats.json file --- conjure-cp.cabal | 1 + src/Conjure/UI/MainHelper.hs | 12 ++++++------ src/Conjure/UI/SolveStats.hs | 20 ++++++++++++++++---- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 11984a46d..bd626670c 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -322,6 +322,7 @@ Library , template-haskell , http-client , http-client-tls + , hostname default-extensions: FlexibleContexts diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 871496416..bb84e0e2f 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -1106,16 +1106,16 @@ srCleanUp outBase ui@Solve{..} stdoutSR solutions = do _ -> liftIO $ appendFile filenameEssenceSolJSON "]\n" _ -> return () - let srInfoFilename = mkFilename ".eprime-info" - let statsFilename = mkFilename ".stats.json" - srInfoContent <- liftIO $ readFileIfExists srInfoFilename - stderrSR <- lastStderr exitCodeSR <- lastExitCode let combinedSR = T.unlines [stdoutSR, stderrSR] - let stats = mkSolveStats ui (fromMaybe "" srInfoContent) combinedSR - liftIO $ writeFile statsFilename (render lineWidth $ toJSON stats) + liftIO $ do + let srInfoFilename = mkFilename ".eprime-info" + let statsFilename = mkFilename ".stats.json" + srInfoContent <- liftIO $ readFileIfExists srInfoFilename + stats <- mkSolveStats ui (fromMaybe "" srInfoContent) combinedSR + writeFile statsFilename (render lineWidth (toJSON stats)) if | T.isInfixOf "Savile Row timed out." combinedSR -> return (Left ["Savile Row timed out."]) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index e7cc07efc..02076b356 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -6,9 +6,13 @@ module Conjure.UI.SolveStats (mkSolveStats, SolveStats (..), SolveStatus (..)) w import Conjure.Bug import Conjure.Prelude +import Conjure.RepositoryVersion (repositoryVersion) import Conjure.UI (UI (..)) import Data.HashMap.Strict qualified as M -- unordered-containers import Data.Text qualified as T (isInfixOf) -- text +import Data.Time (UTCTime, getCurrentTime) -- time +import Network.HostName (getHostName) -- hostname +import Shelly (run) data SolveStats = SolveStats { status :: SolveStatus, @@ -19,7 +23,11 @@ data SolveStats = SolveStats useExistingModels :: [FilePath], savilerowOptions :: [String], solverOptions :: [String], - solver :: String + solver :: String, + computer :: String, + timestamp :: UTCTime, + conjureVersion :: String, + savileRowVersion :: String } deriving (Eq, Ord, Show, Data, Typeable, Generic) @@ -38,8 +46,8 @@ instance ToJSON SolveStatus where toJSON = genericToJSON jsonOptions instance FromJSON SolveStatus where parseJSON = genericParseJSON jsonOptions -mkSolveStats :: UI -> String -> Text -> SolveStats -mkSolveStats Solve {..} raw stdout = +mkSolveStats :: UI -> String -> Text -> IO SolveStats +mkSolveStats Solve {..} raw stdout = do let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines raw)] status | M.lookup "SavileRowTimeOut" info == Just "1" = TimeOut @@ -54,5 +62,9 @@ mkSolveStats Solve {..} raw stdout = Just (srTotalTime + solverTotalTime) | otherwise = Nothing savilerowInfo = info - in SolveStats {..} + computer <- getHostName + timestamp <- getCurrentTime + let conjureVersion = repositoryVersion + savileRowVersion <- head . lines . textToString <$> sh (run "savilerow" ["-help"]) + return SolveStats {..} mkSolveStats _ _ _ = bug "mkSolveStats" From a6eb8d5e29fd417b12f1050f4c1e87f81154049e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Fri, 8 Mar 2024 19:24:05 +0000 Subject: [PATCH 016/124] Revert "trying with a version of SR that doesn't handle time limits" This reverts commit 476fe8c8978bd46fba94106d88c5cd56fbc0a98e. --- etc/savilerow/savilerow.jar | Bin 806420 -> 806881 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/etc/savilerow/savilerow.jar b/etc/savilerow/savilerow.jar index acf370f68b231f71d0e15d286cf50a406dda3190..13b1bd62e749ed4236bb97a364899de797804553 100644 GIT binary patch delta 21237 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 delta 21034 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 DMmv#p From e404580dd67ee19e70b9a27d1450e6e4e4ed73dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Fri, 8 Mar 2024 20:10:57 +0000 Subject: [PATCH 017/124] capture SR non-zero exitcodes in stats.json --- src/Conjure/UI/MainHelper.hs | 2 +- src/Conjure/UI/SolveStats.hs | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index bb84e0e2f..3d99c78b9 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -1114,7 +1114,7 @@ srCleanUp outBase ui@Solve{..} stdoutSR solutions = do let srInfoFilename = mkFilename ".eprime-info" let statsFilename = mkFilename ".stats.json" srInfoContent <- liftIO $ readFileIfExists srInfoFilename - stats <- mkSolveStats ui (fromMaybe "" srInfoContent) combinedSR + stats <- mkSolveStats ui exitCodeSR (fromMaybe "" srInfoContent) combinedSR writeFile statsFilename (render lineWidth (toJSON stats)) if | T.isInfixOf "Savile Row timed out." combinedSR -> diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 02076b356..0e9b4aef8 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -37,7 +37,7 @@ instance ToJSON SolveStats where toJSON = genericToJSON jsonOptions instance FromJSON SolveStats where parseJSON = genericParseJSON jsonOptions -data SolveStatus = OK | TimeOut | MemOut +data SolveStatus = OK | TimeOut | MemOut | Error Text deriving (Eq, Ord, Show, Data, Typeable, Generic) instance Hashable SolveStatus @@ -46,15 +46,16 @@ instance ToJSON SolveStatus where toJSON = genericToJSON jsonOptions instance FromJSON SolveStatus where parseJSON = genericParseJSON jsonOptions -mkSolveStats :: UI -> String -> Text -> IO SolveStats -mkSolveStats Solve {..} raw stdout = do - let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines raw)] +mkSolveStats :: UI -> Int -> String -> Text -> IO SolveStats +mkSolveStats Solve {..} exitCodeSR rawInfo stdoutSR = do + let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines rawInfo)] status | M.lookup "SavileRowTimeOut" info == Just "1" = TimeOut | M.lookup "SavileRowClauseOut" info == Just "1" = TimeOut | M.lookup "SolverTimeOut" info == Just "1" = TimeOut - | T.isInfixOf "Savile Row timed out." stdout = TimeOut - | T.isInfixOf "java.lang.OutOfMemoryError" stdout = MemOut + | T.isInfixOf "Savile Row timed out." stdoutSR = TimeOut + | T.isInfixOf "java.lang.OutOfMemoryError" stdoutSR = MemOut + | exitCodeSR /= 0 = Error stdoutSR | otherwise = OK totalTime | Just srTotalTime <- M.lookup "SavileRowTotalTime" info >>= readMay, @@ -67,4 +68,4 @@ mkSolveStats Solve {..} raw stdout = do let conjureVersion = repositoryVersion savileRowVersion <- head . lines . textToString <$> sh (run "savilerow" ["-help"]) return SolveStats {..} -mkSolveStats _ _ _ = bug "mkSolveStats" +mkSolveStats _ _ _ _ = bug "mkSolveStats" From 0b5eab8c2840b073a2cd7602606f880e535e100c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Fri, 8 Mar 2024 21:37:29 +0000 Subject: [PATCH 018/124] change useExistingModels to work with absolute paths as well --- src/Conjure/UI/MainHelper.hs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 3d99c78b9..521d90210 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -39,6 +39,7 @@ import Conjure.Language.AdHoc ( toSimpleJSON ) -- base +import Control.Exception ( IOException, handle ) import System.IO ( Handle, hSetBuffering, stdout, BufferMode(..), hPutStrLn, stderr ) import System.Environment ( getEnvironment ) import System.Info ( os ) @@ -298,11 +299,7 @@ mainWithArgs config@Solve{..} = do if not (null useExistingModels) then do pp logLevel "Using existing models." - allEprimes <- getEprimes - let missingModels = useExistingModels \\ allEprimes - if null missingModels - then return useExistingModels - else userErr1 $ "Models not found:" <+> vcat (map pretty missingModels) + return useExistingModels else doIfNotCached -- start the show! ( sort (mStatements essenceM_beforeNR) , portfolio @@ -335,8 +332,12 @@ mainWithArgs config@Solve{..} = do conjuring eprimesParsed <- forM eprimes $ \ f -> do - p <- readModelInfoFromFile (outputDirectory f) - return (f, p) + p1 <- liftIO $ handle (\(_ :: IOException) -> return Nothing) (Just <$> readModelInfoFromFile f) + p2 <- liftIO $ handle (\(_ :: IOException) -> return Nothing) (Just <$> readModelInfoFromFile (outputDirectory f)) + case (p1, p2) of + (Just p, _) -> return (f, p) + (_, Just p) -> return (f, p) + _ -> userErr1 $ "Model not found:" <+> pretty f msolutions <- liftIO $ savileRows eprimesParsed essenceParamsParsed case msolutions of From 6957e198bd0dd951d5551edc9d9c1a59e7e327df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Fri, 8 Mar 2024 23:54:41 +0000 Subject: [PATCH 019/124] support --use-existing-models with absolute paths + add a test case --- src/Conjure/UI/MainHelper.hs | 17 ++++----- tests/custom/absoluteExistingEprimes/run.sh | 29 +++++++++++++++ .../absoluteExistingEprimes/stdout.expected | 36 +++++++++++++++++++ .../absoluteExistingEprimes/test.essence | 1 + 4 files changed, 75 insertions(+), 8 deletions(-) create mode 100755 tests/custom/absoluteExistingEprimes/run.sh create mode 100644 tests/custom/absoluteExistingEprimes/stdout.expected create mode 100644 tests/custom/absoluteExistingEprimes/test.essence diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 521d90210..754e3ae45 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -247,6 +247,7 @@ mainWithArgs Boost{..} = do boosted <- boost logLevel logRuleSuccesses model writeModel lineWidth outputFormat Nothing boosted mainWithArgs config@Solve{..} = do + liftIO $ createDirectoryIfMissing True outputDirectory -- some sanity checks (solverName, _smtLogicName) <- splitSolverName solver case lookup solverName solverExecutables of @@ -332,10 +333,10 @@ mainWithArgs config@Solve{..} = do conjuring eprimesParsed <- forM eprimes $ \ f -> do - p1 <- liftIO $ handle (\(_ :: IOException) -> return Nothing) (Just <$> readModelInfoFromFile f) - p2 <- liftIO $ handle (\(_ :: IOException) -> return Nothing) (Just <$> readModelInfoFromFile (outputDirectory f)) + p1 <- liftIO $ handle (\(_ :: IOException) -> return Nothing) (Just <$> readModelInfoFromFile (outputDirectory f)) + p2 <- liftIO $ handle (\(_ :: IOException) -> return Nothing) (Just <$> readModelInfoFromFile f) case (p1, p2) of - (Just p, _) -> return (f, p) + (Just p, _) -> return (outputDirectory f, p) (_, Just p) -> return (f, p) _ -> userErr1 $ "Model not found:" <+> pretty f @@ -444,11 +445,11 @@ mainWithArgs config@Solve{..} = do n <- mainWithArgs_Modelling "" modelling Nothing S.empty eprimes <- getEprimes when (null eprimes) $ bug "Failed to generate models." - if (S.size n == 1) + if S.size n == 1 then pp logLevel $ "Generated models:" <+> prettyList id "," eprimes else pp logLevel $ "Generated" <+> pretty (S.size n) <+> "models:" <+> prettyList id "," eprimes pp logLevel $ "Saved under:" <+> pretty outputDirectory - return eprimes + return [ outputDirectory f | f <- eprimes ] getEprimes :: m [FilePath] getEprimes = sort . filter (".eprime" `isSuffixOf`) <$> liftIO (getDirectoryContents outputDirectory) @@ -793,7 +794,7 @@ savileRowNoParam :: ) ]) savileRowNoParam ui@Solve{..} (modelPath, eprimeModel) = sh $ errExit False $ do pp logLevel $ hsep ["Savile Row:", pretty modelPath] - let outBase = dropExtension modelPath + let outBase = (dropExtension . snd . splitFileName) modelPath srArgs <- liftIO $ srMkArgs ui outBase modelPath let tr = translateSolution eprimeModel def when (logLevel >= LogDebug) $ do @@ -820,7 +821,7 @@ savileRowWithParams :: ) ]) savileRowWithParams ui@Solve{..} (modelPath, eprimeModel) (paramPath, essenceParam) = sh $ errExit False $ do pp logLevel $ hsep ["Savile Row:", pretty modelPath, pretty paramPath] - let outBase = dropExtension modelPath ++ "-" ++ dropDirs (dropExtension paramPath) + let outBase = (dropExtension . snd . splitFileName) modelPath ++ "-" ++ dropDirs (dropExtension paramPath) let -- this is a bit tricky. -- we want to preserve user-erors, and not raise them as errors using IO.fail @@ -910,7 +911,7 @@ splitSolverName solver = do srMkArgs :: UI -> FilePath -> FilePath -> IO [Text] srMkArgs Solve{..} outBase modelPath = do let genericOpts = - [ "-in-eprime" , stringToText $ outputDirectory modelPath + [ "-in-eprime" , stringToText modelPath , "-out-minion" , stringToText $ outputDirectory outBase ++ ".eprime-minion" , "-out-sat" , stringToText $ outputDirectory outBase ++ ".eprime-dimacs" , "-out-smt" , stringToText $ outputDirectory outBase ++ ".eprime-smt" diff --git a/tests/custom/absoluteExistingEprimes/run.sh b/tests/custom/absoluteExistingEprimes/run.sh new file mode 100755 index 000000000..f97d4e50a --- /dev/null +++ b/tests/custom/absoluteExistingEprimes/run.sh @@ -0,0 +1,29 @@ + +rm -rf conjure-output +conjure modelling test.essence --channelling=no -ax + +echo "" +conjure solve test.essence --use-existing-models=model000001.eprime +rm -rf conjure-output/*.solution *.solution + +echo "" +conjure solve test.essence --use-existing-models=model000002.eprime +rm -rf conjure-output/*.solution *.solution + +mkdir -p some/other/dir +cp -r conjure-output/*.eprime some/other/dir/ + +echo "" +conjure solve test.essence --use-existing-models=some/other/dir/model000001.eprime -o conjure-output-1 + +echo "" +conjure solve test.essence --use-existing-models=some/other/dir/model000002.eprime -o conjure-output-2 + +echo "" +conjure solve test.essence --use-existing-models=${PWD}/some/other/dir/model000001.eprime -o conjure-output-2-1 + +echo "" +conjure solve test.essence --use-existing-models=${PWD}/some/other/dir/model000002.eprime -o conjure-output-2-2 + +rm -rf conjure-output* some *.solution + diff --git a/tests/custom/absoluteExistingEprimes/stdout.expected b/tests/custom/absoluteExistingEprimes/stdout.expected new file mode 100644 index 000000000..579f878b1 --- /dev/null +++ b/tests/custom/absoluteExistingEprimes/stdout.expected @@ -0,0 +1,36 @@ + +Using existing models. +Savile Row: conjure-output/model000001.eprime +Running minion for domain filtering. +Running solver: minion +Copying solution to: test.solution + +Using existing models. +Savile Row: conjure-output/model000002.eprime +Running minion for domain filtering. +Running solver: minion +Copying solution to: test.solution + +Using existing models. +Savile Row: some/other/dir/model000001.eprime +Running minion for domain filtering. +Running solver: minion +Copying solution to: test.solution + +Using existing models. +Savile Row: some/other/dir/model000002.eprime +Running minion for domain filtering. +Running solver: minion +Copying solution to: test.solution + +Using existing models. +Savile Row: /Users/ozgurakgun/repos/github/conjure/tests/custom/absoluteExistingEprimes/some/other/dir/model000001.eprime +Running minion for domain filtering. +Running solver: minion +Copying solution to: test.solution + +Using existing models. +Savile Row: /Users/ozgurakgun/repos/github/conjure/tests/custom/absoluteExistingEprimes/some/other/dir/model000002.eprime +Running minion for domain filtering. +Running solver: minion +Copying solution to: test.solution diff --git a/tests/custom/absoluteExistingEprimes/test.essence b/tests/custom/absoluteExistingEprimes/test.essence new file mode 100644 index 000000000..8ba752902 --- /dev/null +++ b/tests/custom/absoluteExistingEprimes/test.essence @@ -0,0 +1 @@ +find x : set (size 2) of int(1..2) From 195f5e2e35794c5057585d65aa4e90a145a0f3cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 00:30:12 +0000 Subject: [PATCH 020/124] Update test files --- .../basic/bool-xor/stdout.expected | 2 +- .../decision-where-error/stdout.expected | 2 +- .../basic/enum-directions/stdout.expected | 2 +- .../enum-operators/pred-basic/stdout.expected | 2 +- .../enum-operators/succ-basic/stdout.expected | 2 +- .../STARIS_2022/basic/factor/stdout.expected | 2 +- .../greatest-common-factor/stdout.expected | 2 +- .../basic/letting-arithmetic/stdout.expected | 2 +- .../list-operations/exists/stdout.expected | 2 +- .../list-operations/forAll/stdout.expected | 2 +- .../list-operations/sum-basic/stdout.expected | 2 +- .../sum-matrix/stdout.expected | 2 +- .../matrices/allDiff-basic/stdout.expected | 2 +- .../alldifferent_except/stdout.expected | 2 +- .../basic/matrices/flatten/stdout.expected | 2 +- .../matrices/matrix-basic/stdout.expected | 2 +- .../matrices/matrix-bool/stdout.expected | 2 +- .../matrices/matrix-flatten/stdout.expected | 2 +- .../basic/maximising/stdout.expected | 2 +- .../STARIS_2022/basic/modulus/stdout.expected | 2 +- .../hist-basic/stdout.expected | 2 +- .../multiset-operators/max/stdout.expected | 2 +- .../multiset-operators/min/stdout.expected | 2 +- .../multiset-basic/stdout.expected | 2 +- .../basic/parameter-error/stdout.expected | 2 +- .../basic/parameter-simple/stdout.expected | 2 +- .../partitions/partition-01/stdout.expected | 2 +- .../partitions/partition-02/stdout.expected | 2 +- .../partitions/partition-03/stdout.expected | 2 +- .../basic/record-simple/stdout.expected | 2 +- .../basic/set-comprehension/stdout.expected | 2 +- .../set-operators/basic-set/stdout.expected | 2 +- .../in-type-error-01/stdout.expected | 2 +- .../basic/set-with-attributes/stdout.expected | 2 +- .../STARIS_2022/basic/set01/stdout.expected | 2 +- .../basic/simple-assignment/stdout.expected | 2 +- .../basic/such-that/stdout.expected | 2 +- .../basic/tuples/tuple-basic/stdout.expected | 2 +- .../basic/tuples/tuple-index/stdout.expected | 2 +- .../toInt-basic/stdout.expected | 2 +- .../toMSet/stdout.expected | 2 +- .../toSet-basic/stdout.expected | 2 +- .../toSet-sum/stdout.expected | 2 +- .../demo/first_test/stdout.expected | 2 +- .../party-type-error-01/stdout.expected | 2 +- tests/custom/allDiff-chuffed/stdout.expected | 2 +- tests/custom/allDiffDecomp/1/stdout.expected | 2 +- tests/custom/allDiffDecomp/2/stdout.expected | 2 +- .../custom/astjson-roundtrip/stdout.expected | 2 +- .../comprehension-cardinality/stdout.expected | 2 +- .../custom/basic/concatenate/stdout.expected | 2 +- .../basic/enum_functions/stdout.expected | 8 ++--- .../enumerate_enum_domain/stdout.expected | 2 +- .../stdout.expected | 2 +- .../basic/function_card_01/stdout.expected | 4 +-- .../basic/function_card_02/stdout.expected | 4 +-- .../basic/function_imageSet01/stdout.expected | 16 +++++----- .../basic/function_inverse_01/stdout.expected | 8 ++--- .../function_partial_int_01/stdout.expected | 4 +-- .../function_partial_int_02/stdout.expected | 4 +-- .../function_partial_int_03/stdout.expected | 4 +-- .../function_partial_int_04/stdout.expected | 4 +-- .../function_partial_int_05/stdout.expected | 4 +-- .../function_partial_int_06/stdout.expected | 4 +-- .../stdout.expected | 4 +-- .../function_partial_tuple_01/stdout.expected | 4 +-- .../basic/given-seq-seq/stdout.expected | 2 +- .../basic/matrix-slicing/stdout.expected | 2 +- .../basic/modelling-cache/stdout.expected | 2 +- .../parsing-enums-in-param/stdout.expected | 2 +- .../basic/parsing-imply/stdout.expected | 4 +-- .../partition_together_apart/stdout.expected | 2 +- .../custom/basic/restricted01/stdout.expected | 2 +- .../custom/basic/restricted02/stdout.expected | 2 +- .../custom/basic/restricted03/stdout.expected | 4 +-- .../custom/basic/restricted04/stdout.expected | 4 +-- .../basic/sat-branching-on/stdout.expected | 4 +-- tests/custom/basic/seqset/stdout.expected | 2 +- .../basic/sequence-injective/stdout.expected | 2 +- .../set-of-tuples-of-enum/stdout.expected | 2 +- .../set-of-tuples-of-int/stdout.expected | 2 +- .../set-of-tuples-of-unnamed/stdout.expected | 2 +- .../stdout.expected | 2 +- .../basic/solutionsInOneFile/stdout.expected | 2 +- .../custom/basic/streamline01/stdout.expected | 8 ++--- .../custom/enum-in-partition/stdout.expected | 2 +- .../graphs/shortest_path/01/stdout.expected | 2 +- .../graphs/shortest_path/02/stdout.expected | 2 +- .../graphs/shortest_path/03/stdout.expected | 2 +- .../graphs/shortest_path/04/stdout.expected | 2 +- tests/custom/issues/119/1/stdout.expected | 8 ++--- tests/custom/issues/119/2/stdout.expected | 6 ++-- tests/custom/issues/284/stdout.expected | 16 +++++----- tests/custom/issues/345/stdout.expected | 2 +- tests/custom/issues/351/stdout.expected | 4 +-- tests/custom/issues/358/stdout.expected | 2 +- tests/custom/issues/370/01/stdout.expected | 16 +++++----- tests/custom/issues/370/02/stdout.expected | 8 ++--- tests/custom/issues/370/03/stdout.expected | 8 ++--- tests/custom/issues/387/int01/stdout.expected | 2 +- tests/custom/issues/387/int02/stdout.expected | 2 +- tests/custom/issues/387/int03/stdout.expected | 8 ++--- tests/custom/issues/387/int04/stdout.expected | 8 ++--- tests/custom/issues/388/1/stdout.expected | 8 ++--- tests/custom/issues/388/2/stdout.expected | 32 +++++++++---------- tests/custom/issues/395/stdout.expected | 2 +- tests/custom/issues/400/stdout.expected | 2 +- tests/custom/issues/401/stdout.expected | 6 ++-- tests/custom/issues/404/stdout.expected | 2 +- tests/custom/issues/408/stdout.expected | 8 ++--- tests/custom/issues/430/stdout.expected | 2 +- tests/custom/issues/432/stdout.expected | 2 +- tests/custom/issues/438/stdout.expected | 2 +- tests/custom/issues/440/stdout.expected | 2 +- tests/custom/issues/443/stdout.expected | 8 ++--- tests/custom/issues/446/stdout.expected | 4 +-- tests/custom/issues/448/stdout.expected | 6 ++-- tests/custom/issues/453/stdout.expected | 2 +- tests/custom/issues/473/stdout.expected | 4 +-- tests/custom/issues/479/stdout.expected | 2 +- tests/custom/issues/480/stdout.expected | 2 +- tests/custom/issues/486/stdout.expected | 2 +- tests/custom/issues/501/stdout.expected | 2 +- tests/custom/issues/503/stdout.expected | 6 ++-- tests/custom/issues/506/stdout.expected | 2 +- tests/custom/issues/511/stdout.expected | 2 +- tests/custom/issues/548/1/stdout.expected | 2 +- tests/custom/issues/548/2/stdout.expected | 2 +- tests/custom/issues/549/1/stdout.expected | 2 +- tests/custom/issues/549/2/stdout.expected | 2 +- tests/custom/issues/578/stdout.expected | 4 +-- .../json-integration/json-in/stdout.expected | 2 +- .../json-integration/json-out/stdout.expected | 2 +- .../json-solution/stdout.expected | 2 +- .../jsons-out/stdout.expected | 2 +- .../jsons-streaming-out/stdout.expected | 2 +- .../json-integration/nosols/stdout.expected | 2 +- .../custom/matrixNoIndexedBy/stdout.expected | 2 +- .../footballtennis_riddle/stdout.expected | 8 ++--- .../solution-copy-dashed/stdout.expected | 4 +-- .../function/matrix/const_01/stdout.expected | 2 +- .../function/matrix/var_01/stdout.expected | 2 +- .../partition/const_01/stdout.expected | 2 +- .../function/partition/var_01/stdout.expected | 2 +- .../function/record/const_01/stdout.expected | 2 +- .../function/record/var_01/stdout.expected | 2 +- .../function/record/var_02/stdout.expected | 2 +- .../sequence/const_01/stdout.expected | 2 +- .../function/sequence/var_01/stdout.expected | 2 +- .../function/set/const_01/stdout.expected | 2 +- .../function/set/var_01/stdout.expected | 2 +- .../function/set/var_02/stdout.expected | 2 +- .../function/tuple/const_01/stdout.expected | 2 +- .../function/tuple/var_01/stdout.expected | 2 +- .../function/variant/const_01/stdout.expected | 2 +- .../function/variant/var_01/stdout.expected | 2 +- .../function/variant/var_02/stdout.expected | 2 +- .../function/variant/var_03/stdout.expected | 2 +- .../function/variant/var_04/stdout.expected | 2 +- tests/custom/tugce_1/stdout.expected | 2 +- tests/custom/variant-motif/stdout.expected | 2 +- 161 files changed, 260 insertions(+), 260 deletions(-) diff --git a/tests/custom/STARIS_2022/basic/bool-xor/stdout.expected b/tests/custom/STARIS_2022/basic/bool-xor/stdout.expected index cecd8f09a..38e690cad 100644 --- a/tests/custom/STARIS_2022/basic/bool-xor/stdout.expected +++ b/tests/custom/STARIS_2022/basic/bool-xor/stdout.expected @@ -1,7 +1,7 @@ Generating models for xor.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: xor.solution diff --git a/tests/custom/STARIS_2022/basic/decision-where-error/stdout.expected b/tests/custom/STARIS_2022/basic/decision-where-error/stdout.expected index fd92b9ab1..899dc467c 100644 --- a/tests/custom/STARIS_2022/basic/decision-where-error/stdout.expected +++ b/tests/custom/STARIS_2022/basic/decision-where-error/stdout.expected @@ -1,4 +1,4 @@ Generating models for decision-where.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime diff --git a/tests/custom/STARIS_2022/basic/enum-directions/stdout.expected b/tests/custom/STARIS_2022/basic/enum-directions/stdout.expected index ae38be1f0..3c151f2d5 100644 --- a/tests/custom/STARIS_2022/basic/enum-directions/stdout.expected +++ b/tests/custom/STARIS_2022/basic/enum-directions/stdout.expected @@ -1,7 +1,7 @@ Generating models for directions.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: directions.solution diff --git a/tests/custom/STARIS_2022/basic/enum-operators/pred-basic/stdout.expected b/tests/custom/STARIS_2022/basic/enum-operators/pred-basic/stdout.expected index 0121d325b..79b13629b 100644 --- a/tests/custom/STARIS_2022/basic/enum-operators/pred-basic/stdout.expected +++ b/tests/custom/STARIS_2022/basic/enum-operators/pred-basic/stdout.expected @@ -1,7 +1,7 @@ Generating models for pred-basic.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: pred-basic.solution diff --git a/tests/custom/STARIS_2022/basic/enum-operators/succ-basic/stdout.expected b/tests/custom/STARIS_2022/basic/enum-operators/succ-basic/stdout.expected index 9b0e8549b..2750edcb9 100644 --- a/tests/custom/STARIS_2022/basic/enum-operators/succ-basic/stdout.expected +++ b/tests/custom/STARIS_2022/basic/enum-operators/succ-basic/stdout.expected @@ -1,7 +1,7 @@ Generating models for succ-basic.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: succ-basic.solution diff --git a/tests/custom/STARIS_2022/basic/factor/stdout.expected b/tests/custom/STARIS_2022/basic/factor/stdout.expected index c0a11665f..5f726de4c 100644 --- a/tests/custom/STARIS_2022/basic/factor/stdout.expected +++ b/tests/custom/STARIS_2022/basic/factor/stdout.expected @@ -1,7 +1,7 @@ Generating models for factor.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: factor.solution diff --git a/tests/custom/STARIS_2022/basic/greatest-common-factor/stdout.expected b/tests/custom/STARIS_2022/basic/greatest-common-factor/stdout.expected index 18fc2eaff..958e52e86 100644 --- a/tests/custom/STARIS_2022/basic/greatest-common-factor/stdout.expected +++ b/tests/custom/STARIS_2022/basic/greatest-common-factor/stdout.expected @@ -1,7 +1,7 @@ Generating models for gcf.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime inputs.param +Savile Row: conjure-output/model000001.eprime inputs.param Running minion for domain filtering. Running solver: minion Copying solution to: gcf-inputs.solution diff --git a/tests/custom/STARIS_2022/basic/letting-arithmetic/stdout.expected b/tests/custom/STARIS_2022/basic/letting-arithmetic/stdout.expected index 1639bc511..a16067d59 100644 --- a/tests/custom/STARIS_2022/basic/letting-arithmetic/stdout.expected +++ b/tests/custom/STARIS_2022/basic/letting-arithmetic/stdout.expected @@ -1,7 +1,7 @@ Generating models for letting.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: letting.solution diff --git a/tests/custom/STARIS_2022/basic/list-operations/exists/stdout.expected b/tests/custom/STARIS_2022/basic/list-operations/exists/stdout.expected index ca2c0f652..c049ed221 100644 --- a/tests/custom/STARIS_2022/basic/list-operations/exists/stdout.expected +++ b/tests/custom/STARIS_2022/basic/list-operations/exists/stdout.expected @@ -1,7 +1,7 @@ Generating models for exists.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: exists.solution diff --git a/tests/custom/STARIS_2022/basic/list-operations/forAll/stdout.expected b/tests/custom/STARIS_2022/basic/list-operations/forAll/stdout.expected index 0b9e68c74..9978c3e0b 100644 --- a/tests/custom/STARIS_2022/basic/list-operations/forAll/stdout.expected +++ b/tests/custom/STARIS_2022/basic/list-operations/forAll/stdout.expected @@ -1,7 +1,7 @@ Generating models for forAll.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: forAll.solution diff --git a/tests/custom/STARIS_2022/basic/list-operations/sum-basic/stdout.expected b/tests/custom/STARIS_2022/basic/list-operations/sum-basic/stdout.expected index 14eb33e2c..1c48ee1e8 100644 --- a/tests/custom/STARIS_2022/basic/list-operations/sum-basic/stdout.expected +++ b/tests/custom/STARIS_2022/basic/list-operations/sum-basic/stdout.expected @@ -1,7 +1,7 @@ Generating models for sum.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: sum.solution diff --git a/tests/custom/STARIS_2022/basic/list-operations/sum-matrix/stdout.expected b/tests/custom/STARIS_2022/basic/list-operations/sum-matrix/stdout.expected index 6fb3400ba..f07a5c54d 100644 --- a/tests/custom/STARIS_2022/basic/list-operations/sum-matrix/stdout.expected +++ b/tests/custom/STARIS_2022/basic/list-operations/sum-matrix/stdout.expected @@ -1,7 +1,7 @@ Generating models for sum-matrix.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: sum-matrix.solution diff --git a/tests/custom/STARIS_2022/basic/matrices/allDiff-basic/stdout.expected b/tests/custom/STARIS_2022/basic/matrices/allDiff-basic/stdout.expected index 8bd90c82a..b354d2ff0 100644 --- a/tests/custom/STARIS_2022/basic/matrices/allDiff-basic/stdout.expected +++ b/tests/custom/STARIS_2022/basic/matrices/allDiff-basic/stdout.expected @@ -1,7 +1,7 @@ Generating models for allDiff.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: allDiff.solution diff --git a/tests/custom/STARIS_2022/basic/matrices/alldifferent_except/stdout.expected b/tests/custom/STARIS_2022/basic/matrices/alldifferent_except/stdout.expected index c253074da..979333c57 100644 --- a/tests/custom/STARIS_2022/basic/matrices/alldifferent_except/stdout.expected +++ b/tests/custom/STARIS_2022/basic/matrices/alldifferent_except/stdout.expected @@ -1,7 +1,7 @@ Generating models for alldifferent_except.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: alldifferent_except.solution diff --git a/tests/custom/STARIS_2022/basic/matrices/flatten/stdout.expected b/tests/custom/STARIS_2022/basic/matrices/flatten/stdout.expected index cc378a2a4..ff99da81a 100644 --- a/tests/custom/STARIS_2022/basic/matrices/flatten/stdout.expected +++ b/tests/custom/STARIS_2022/basic/matrices/flatten/stdout.expected @@ -1,7 +1,7 @@ Generating models for flatten.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: flatten.solution diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-basic/stdout.expected b/tests/custom/STARIS_2022/basic/matrices/matrix-basic/stdout.expected index 15066294c..3ebf60e43 100644 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-basic/stdout.expected +++ b/tests/custom/STARIS_2022/basic/matrices/matrix-basic/stdout.expected @@ -1,7 +1,7 @@ Generating models for matrix-basic.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: matrix-basic.solution diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-bool/stdout.expected b/tests/custom/STARIS_2022/basic/matrices/matrix-bool/stdout.expected index bdd65965b..843ccfaf2 100644 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-bool/stdout.expected +++ b/tests/custom/STARIS_2022/basic/matrices/matrix-bool/stdout.expected @@ -1,7 +1,7 @@ Generating models for matrix-bool.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: matrix-bool.solution diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-flatten/stdout.expected b/tests/custom/STARIS_2022/basic/matrices/matrix-flatten/stdout.expected index fa1a85caf..8e7ae8379 100644 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-flatten/stdout.expected +++ b/tests/custom/STARIS_2022/basic/matrices/matrix-flatten/stdout.expected @@ -1,7 +1,7 @@ Generating models for matrix-flatten.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: matrix-flatten.solution diff --git a/tests/custom/STARIS_2022/basic/maximising/stdout.expected b/tests/custom/STARIS_2022/basic/maximising/stdout.expected index e7e37ffc5..d219cc745 100644 --- a/tests/custom/STARIS_2022/basic/maximising/stdout.expected +++ b/tests/custom/STARIS_2022/basic/maximising/stdout.expected @@ -1,7 +1,7 @@ Generating models for max.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: max.solution diff --git a/tests/custom/STARIS_2022/basic/modulus/stdout.expected b/tests/custom/STARIS_2022/basic/modulus/stdout.expected index 3da7a3c7d..3a5e4bd26 100644 --- a/tests/custom/STARIS_2022/basic/modulus/stdout.expected +++ b/tests/custom/STARIS_2022/basic/modulus/stdout.expected @@ -1,7 +1,7 @@ Generating models for mod01.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: mod01-000001.solution diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/stdout.expected b/tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/stdout.expected index 98655b98b..8f0dce0c0 100644 --- a/tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/stdout.expected +++ b/tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/stdout.expected @@ -1,7 +1,7 @@ Generating models for hist.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: hist.solution diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/max/stdout.expected b/tests/custom/STARIS_2022/basic/multiset-operators/max/stdout.expected index 599f91a35..0a35f5763 100644 --- a/tests/custom/STARIS_2022/basic/multiset-operators/max/stdout.expected +++ b/tests/custom/STARIS_2022/basic/multiset-operators/max/stdout.expected @@ -1,7 +1,7 @@ Generating models for max.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: max.solution diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/min/stdout.expected b/tests/custom/STARIS_2022/basic/multiset-operators/min/stdout.expected index 369edf4d4..b44e3fbfe 100644 --- a/tests/custom/STARIS_2022/basic/multiset-operators/min/stdout.expected +++ b/tests/custom/STARIS_2022/basic/multiset-operators/min/stdout.expected @@ -1,7 +1,7 @@ Generating models for min.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: min.solution diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/stdout.expected b/tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/stdout.expected index 4665e2dc4..30faad356 100644 --- a/tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/stdout.expected +++ b/tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/stdout.expected @@ -1,7 +1,7 @@ Generating models for multiset-basic.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: multiset-basic.solution diff --git a/tests/custom/STARIS_2022/basic/parameter-error/stdout.expected b/tests/custom/STARIS_2022/basic/parameter-error/stdout.expected index a8a271d48..8a90b616e 100644 --- a/tests/custom/STARIS_2022/basic/parameter-error/stdout.expected +++ b/tests/custom/STARIS_2022/basic/parameter-error/stdout.expected @@ -1,4 +1,4 @@ Generating models for parameter-error.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime input.param +Savile Row: conjure-output/model000001.eprime input.param diff --git a/tests/custom/STARIS_2022/basic/parameter-simple/stdout.expected b/tests/custom/STARIS_2022/basic/parameter-simple/stdout.expected index d75019b85..011c4ac0d 100644 --- a/tests/custom/STARIS_2022/basic/parameter-simple/stdout.expected +++ b/tests/custom/STARIS_2022/basic/parameter-simple/stdout.expected @@ -1,7 +1,7 @@ Generating models for simple.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime parameter.param +Savile Row: conjure-output/model000001.eprime parameter.param Running minion for domain filtering. Running solver: minion Copying solution to: simple-parameter.solution diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-01/stdout.expected b/tests/custom/STARIS_2022/basic/partitions/partition-01/stdout.expected index be0fa8b94..a178b32e7 100644 --- a/tests/custom/STARIS_2022/basic/partitions/partition-01/stdout.expected +++ b/tests/custom/STARIS_2022/basic/partitions/partition-01/stdout.expected @@ -1,7 +1,7 @@ Generating models for apart.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: apart.solution diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-02/stdout.expected b/tests/custom/STARIS_2022/basic/partitions/partition-02/stdout.expected index 220e77377..c6f1d1c8a 100644 --- a/tests/custom/STARIS_2022/basic/partitions/partition-02/stdout.expected +++ b/tests/custom/STARIS_2022/basic/partitions/partition-02/stdout.expected @@ -1,7 +1,7 @@ Generating models for union.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: union.solution diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-03/stdout.expected b/tests/custom/STARIS_2022/basic/partitions/partition-03/stdout.expected index e63fb0594..948e7351f 100644 --- a/tests/custom/STARIS_2022/basic/partitions/partition-03/stdout.expected +++ b/tests/custom/STARIS_2022/basic/partitions/partition-03/stdout.expected @@ -1,7 +1,7 @@ Generating models for union-nosolution.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion No solutions found. diff --git a/tests/custom/STARIS_2022/basic/record-simple/stdout.expected b/tests/custom/STARIS_2022/basic/record-simple/stdout.expected index 2853a3f54..36b130968 100644 --- a/tests/custom/STARIS_2022/basic/record-simple/stdout.expected +++ b/tests/custom/STARIS_2022/basic/record-simple/stdout.expected @@ -1,7 +1,7 @@ Generating models for record.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: record.solution diff --git a/tests/custom/STARIS_2022/basic/set-comprehension/stdout.expected b/tests/custom/STARIS_2022/basic/set-comprehension/stdout.expected index 5818e72ca..2822b4ea0 100644 --- a/tests/custom/STARIS_2022/basic/set-comprehension/stdout.expected +++ b/tests/custom/STARIS_2022/basic/set-comprehension/stdout.expected @@ -1,7 +1,7 @@ Generating models for set.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: set.solution diff --git a/tests/custom/STARIS_2022/basic/set-operators/basic-set/stdout.expected b/tests/custom/STARIS_2022/basic/set-operators/basic-set/stdout.expected index f947561e9..b6c8a4d19 100644 --- a/tests/custom/STARIS_2022/basic/set-operators/basic-set/stdout.expected +++ b/tests/custom/STARIS_2022/basic/set-operators/basic-set/stdout.expected @@ -1,7 +1,7 @@ Generating models for basic-set.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: basic-set.solution diff --git a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/stdout.expected b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/stdout.expected index 41438e748..a0bda7ebd 100644 --- a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/stdout.expected +++ b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/stdout.expected @@ -1,4 +1,4 @@ Generating models for in-type-error.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime diff --git a/tests/custom/STARIS_2022/basic/set-with-attributes/stdout.expected b/tests/custom/STARIS_2022/basic/set-with-attributes/stdout.expected index 5818e72ca..2822b4ea0 100644 --- a/tests/custom/STARIS_2022/basic/set-with-attributes/stdout.expected +++ b/tests/custom/STARIS_2022/basic/set-with-attributes/stdout.expected @@ -1,7 +1,7 @@ Generating models for set.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: set.solution diff --git a/tests/custom/STARIS_2022/basic/set01/stdout.expected b/tests/custom/STARIS_2022/basic/set01/stdout.expected index cc5834464..683f0a0dd 100644 --- a/tests/custom/STARIS_2022/basic/set01/stdout.expected +++ b/tests/custom/STARIS_2022/basic/set01/stdout.expected @@ -1,7 +1,7 @@ Generating models for set.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: set.solution diff --git a/tests/custom/STARIS_2022/basic/simple-assignment/stdout.expected b/tests/custom/STARIS_2022/basic/simple-assignment/stdout.expected index 72d1c984f..789ce3de6 100644 --- a/tests/custom/STARIS_2022/basic/simple-assignment/stdout.expected +++ b/tests/custom/STARIS_2022/basic/simple-assignment/stdout.expected @@ -1,7 +1,7 @@ Generating models for simple.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: simple.solution diff --git a/tests/custom/STARIS_2022/basic/such-that/stdout.expected b/tests/custom/STARIS_2022/basic/such-that/stdout.expected index 07f87e659..0277c4994 100644 --- a/tests/custom/STARIS_2022/basic/such-that/stdout.expected +++ b/tests/custom/STARIS_2022/basic/such-that/stdout.expected @@ -1,7 +1,7 @@ Generating models for such-that.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: such-that.solution diff --git a/tests/custom/STARIS_2022/basic/tuples/tuple-basic/stdout.expected b/tests/custom/STARIS_2022/basic/tuples/tuple-basic/stdout.expected index 248482335..f02d866e9 100644 --- a/tests/custom/STARIS_2022/basic/tuples/tuple-basic/stdout.expected +++ b/tests/custom/STARIS_2022/basic/tuples/tuple-basic/stdout.expected @@ -1,7 +1,7 @@ Generating models for tuple.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: tuple.solution diff --git a/tests/custom/STARIS_2022/basic/tuples/tuple-index/stdout.expected b/tests/custom/STARIS_2022/basic/tuples/tuple-index/stdout.expected index 875bff7db..787be3137 100644 --- a/tests/custom/STARIS_2022/basic/tuples/tuple-index/stdout.expected +++ b/tests/custom/STARIS_2022/basic/tuples/tuple-index/stdout.expected @@ -1,7 +1,7 @@ Generating models for tuple.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: tuple.solution diff --git a/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/stdout.expected b/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/stdout.expected index fa381facc..31dd7bece 100644 --- a/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/stdout.expected +++ b/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/stdout.expected @@ -1,7 +1,7 @@ Generating models for toInt.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: toInt.solution diff --git a/tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/stdout.expected b/tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/stdout.expected index fd135dc8a..05c2af989 100644 --- a/tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/stdout.expected +++ b/tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/stdout.expected @@ -1,7 +1,7 @@ Generating models for toMSet.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: toMSet.solution diff --git a/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/stdout.expected b/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/stdout.expected index ce5acfef1..c2f38409a 100644 --- a/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/stdout.expected +++ b/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/stdout.expected @@ -1,7 +1,7 @@ Generating models for toSet.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: toSet.solution diff --git a/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/stdout.expected b/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/stdout.expected index 71b33cf81..067ab2534 100644 --- a/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/stdout.expected +++ b/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/stdout.expected @@ -1,7 +1,7 @@ Generating models for toSet-sum.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: toSet-sum.solution diff --git a/tests/custom/STARIS_2022/demo/first_test/stdout.expected b/tests/custom/STARIS_2022/demo/first_test/stdout.expected index 3b2a95105..ce471d870 100644 --- a/tests/custom/STARIS_2022/demo/first_test/stdout.expected +++ b/tests/custom/STARIS_2022/demo/first_test/stdout.expected @@ -1,7 +1,7 @@ Generating models for first.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: first.solution diff --git a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/stdout.expected index 9d9637ab5..00c12b540 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/stdout.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/stdout.expected @@ -1,7 +1,7 @@ Generating models for party-type-error.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: party-type-error.solution diff --git a/tests/custom/allDiff-chuffed/stdout.expected b/tests/custom/allDiff-chuffed/stdout.expected index 2bee65467..34f846910 100644 --- a/tests/custom/allDiff-chuffed/stdout.expected +++ b/tests/custom/allDiff-chuffed/stdout.expected @@ -1,7 +1,7 @@ Generating models for model.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: chuffed Copying solution to: model.solution diff --git a/tests/custom/allDiffDecomp/1/stdout.expected b/tests/custom/allDiffDecomp/1/stdout.expected index 931b4afd6..6ceeb2e79 100644 --- a/tests/custom/allDiffDecomp/1/stdout.expected +++ b/tests/custom/allDiffDecomp/1/stdout.expected @@ -1,7 +1,7 @@ Generating models for allDiffDecomp.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion conjure-output/model000001-solution000001.solution:letting x be [(1, 6), (1, 7), (1, 8); int(1..3)] diff --git a/tests/custom/allDiffDecomp/2/stdout.expected b/tests/custom/allDiffDecomp/2/stdout.expected index 4ec95a6ca..4b860c0c3 100644 --- a/tests/custom/allDiffDecomp/2/stdout.expected +++ b/tests/custom/allDiffDecomp/2/stdout.expected @@ -1,7 +1,7 @@ Generating models for allDiffDecomp.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion conjure-output/model000001-solution000001.solution:letting y be sequence() diff --git a/tests/custom/astjson-roundtrip/stdout.expected b/tests/custom/astjson-roundtrip/stdout.expected index a9a5b9379..0dd71eb16 100644 --- a/tests/custom/astjson-roundtrip/stdout.expected +++ b/tests/custom/astjson-roundtrip/stdout.expected @@ -1,7 +1,7 @@ Generating models for sample.json Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: sample.solution diff --git a/tests/custom/basic/comprehension-cardinality/stdout.expected b/tests/custom/basic/comprehension-cardinality/stdout.expected index d4da7b518..b14240b25 100644 --- a/tests/custom/basic/comprehension-cardinality/stdout.expected +++ b/tests/custom/basic/comprehension-cardinality/stdout.expected @@ -1,7 +1,7 @@ Generating models for comp.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: comp.solution diff --git a/tests/custom/basic/concatenate/stdout.expected b/tests/custom/basic/concatenate/stdout.expected index 12762b53f..92ca924a2 100644 --- a/tests/custom/basic/concatenate/stdout.expected +++ b/tests/custom/basic/concatenate/stdout.expected @@ -1,7 +1,7 @@ Generating models for concatenate.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: concatenate.solutions diff --git a/tests/custom/basic/enum_functions/stdout.expected b/tests/custom/basic/enum_functions/stdout.expected index 705b34abd..883b91402 100644 --- a/tests/custom/basic/enum_functions/stdout.expected +++ b/tests/custom/basic/enum_functions/stdout.expected @@ -1,16 +1,16 @@ Generating models for enum_functions.essence Generated 4 models: model000001.eprime, model000002.eprime, model000003.eprime, model000004.eprime Saved under: conjure-output -Savile Row: model000001.eprime p1.param +Savile Row: conjure-output/model000001.eprime p1.param Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime p1.param +Savile Row: conjure-output/model000002.eprime p1.param Running minion for domain filtering. Running solver: minion -Savile Row: model000003.eprime p1.param +Savile Row: conjure-output/model000003.eprime p1.param Running minion for domain filtering. Running solver: minion -Savile Row: model000004.eprime p1.param +Savile Row: conjure-output/model000004.eprime p1.param Running minion for domain filtering. Running solver: minion model000001-p1-solution000001.eprime-solution diff --git a/tests/custom/basic/enumerate_enum_domain/stdout.expected b/tests/custom/basic/enumerate_enum_domain/stdout.expected index 33730790f..d6dcec779 100644 --- a/tests/custom/basic/enumerate_enum_domain/stdout.expected +++ b/tests/custom/basic/enumerate_enum_domain/stdout.expected @@ -1,7 +1,7 @@ Generating models for e.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: e.solution diff --git a/tests/custom/basic/function-literal-suggestion/stdout.expected b/tests/custom/basic/function-literal-suggestion/stdout.expected index 5b00a977e..fe9d7ebe8 100644 --- a/tests/custom/basic/function-literal-suggestion/stdout.expected +++ b/tests/custom/basic/function-literal-suggestion/stdout.expected @@ -1,4 +1,4 @@ Generating models for func.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime p.param +Savile Row: conjure-output/model000001.eprime p.param diff --git a/tests/custom/basic/function_card_01/stdout.expected b/tests/custom/basic/function_card_01/stdout.expected index eac736e7c..571ef97be 100644 --- a/tests/custom/basic/function_card_01/stdout.expected +++ b/tests/custom/basic/function_card_01/stdout.expected @@ -1,10 +1,10 @@ Generating models for function_card_01.essence Generated 2 models: model000001.eprime, model000002.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/function_card_02/stdout.expected b/tests/custom/basic/function_card_02/stdout.expected index ebdaff747..d10c08359 100644 --- a/tests/custom/basic/function_card_02/stdout.expected +++ b/tests/custom/basic/function_card_02/stdout.expected @@ -1,10 +1,10 @@ Generating models for function_card_02.essence Generated 2 models: model000001.eprime, model000002.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/function_imageSet01/stdout.expected b/tests/custom/basic/function_imageSet01/stdout.expected index 20d124f42..c973c9585 100644 --- a/tests/custom/basic/function_imageSet01/stdout.expected +++ b/tests/custom/basic/function_imageSet01/stdout.expected @@ -2,28 +2,28 @@ Generating models for function_imageSet01.essence Generated 8 models: model000001.eprime, model000002.eprime, model000003.eprime, model000004.eprime, model000005.eprime, model000006.eprime, model000007.eprime, model000008.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000003.eprime +Savile Row: conjure-output/model000003.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000004.eprime +Savile Row: conjure-output/model000004.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000005.eprime +Savile Row: conjure-output/model000005.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000006.eprime +Savile Row: conjure-output/model000006.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000007.eprime +Savile Row: conjure-output/model000007.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000008.eprime +Savile Row: conjure-output/model000008.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/function_inverse_01/stdout.expected b/tests/custom/basic/function_inverse_01/stdout.expected index 18052211e..e92e6793b 100644 --- a/tests/custom/basic/function_inverse_01/stdout.expected +++ b/tests/custom/basic/function_inverse_01/stdout.expected @@ -1,16 +1,16 @@ Generating models for function_inverse_01.essence Generated 4 models: model000001.eprime, model000002.eprime, model000003.eprime, model000004.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000003.eprime +Savile Row: conjure-output/model000003.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000004.eprime +Savile Row: conjure-output/model000004.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/function_partial_int_01/stdout.expected b/tests/custom/basic/function_partial_int_01/stdout.expected index fb801a79b..325a646ff 100644 --- a/tests/custom/basic/function_partial_int_01/stdout.expected +++ b/tests/custom/basic/function_partial_int_01/stdout.expected @@ -1,10 +1,10 @@ Generating models for function_partial_int_01.essence Generated 2 models: model000001.eprime, model000002.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/function_partial_int_02/stdout.expected b/tests/custom/basic/function_partial_int_02/stdout.expected index 0d176eb52..766dad2d6 100644 --- a/tests/custom/basic/function_partial_int_02/stdout.expected +++ b/tests/custom/basic/function_partial_int_02/stdout.expected @@ -1,10 +1,10 @@ Generating models for function_partial_int_02.essence Generated 2 models: model000001.eprime, model000002.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/function_partial_int_03/stdout.expected b/tests/custom/basic/function_partial_int_03/stdout.expected index 1bac162c5..4d98fa897 100644 --- a/tests/custom/basic/function_partial_int_03/stdout.expected +++ b/tests/custom/basic/function_partial_int_03/stdout.expected @@ -1,10 +1,10 @@ Generating models for function_partial_int_03.essence Generated 2 models: model000001.eprime, model000002.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/function_partial_int_04/stdout.expected b/tests/custom/basic/function_partial_int_04/stdout.expected index 8bc5f4602..8d86518c0 100644 --- a/tests/custom/basic/function_partial_int_04/stdout.expected +++ b/tests/custom/basic/function_partial_int_04/stdout.expected @@ -1,10 +1,10 @@ Generating models for function_partial_int_04.essence Generated 2 models: model000001.eprime, model000002.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/function_partial_int_05/stdout.expected b/tests/custom/basic/function_partial_int_05/stdout.expected index 9d8bb1bf7..b3e4acfcc 100644 --- a/tests/custom/basic/function_partial_int_05/stdout.expected +++ b/tests/custom/basic/function_partial_int_05/stdout.expected @@ -1,10 +1,10 @@ Generating models for function_partial_int_05.essence Generated 2 models: model000001.eprime, model000002.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/function_partial_int_06/stdout.expected b/tests/custom/basic/function_partial_int_06/stdout.expected index 717571a70..86ce0e3d3 100644 --- a/tests/custom/basic/function_partial_int_06/stdout.expected +++ b/tests/custom/basic/function_partial_int_06/stdout.expected @@ -1,10 +1,10 @@ Generating models for function_partial_int_06.essence Generated 2 models: model000001.eprime, model000002.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion No solutions found. diff --git a/tests/custom/basic/function_partial_int_param/stdout.expected b/tests/custom/basic/function_partial_int_param/stdout.expected index b574a70cb..49c0eb2da 100644 --- a/tests/custom/basic/function_partial_int_param/stdout.expected +++ b/tests/custom/basic/function_partial_int_param/stdout.expected @@ -1,10 +1,10 @@ Generating models for function_partial_int_param.essence Generated 2 models: model000001.eprime, model000002.eprime Saved under: conjure-output -Savile Row: model000001.eprime param000181.param +Savile Row: conjure-output/model000001.eprime param000181.param Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime param000181.param +Savile Row: conjure-output/model000002.eprime param000181.param Running minion for domain filtering. Running solver: minion model000001-param000181-solution000001.eprime-solution diff --git a/tests/custom/basic/function_partial_tuple_01/stdout.expected b/tests/custom/basic/function_partial_tuple_01/stdout.expected index 902e89797..80e72c42a 100644 --- a/tests/custom/basic/function_partial_tuple_01/stdout.expected +++ b/tests/custom/basic/function_partial_tuple_01/stdout.expected @@ -1,10 +1,10 @@ Generating models for function_partial_tuple_01.essence Generated 2 models: model000001.eprime, model000002.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/given-seq-seq/stdout.expected b/tests/custom/basic/given-seq-seq/stdout.expected index 5ffe05e36..c5f10eb45 100644 --- a/tests/custom/basic/given-seq-seq/stdout.expected +++ b/tests/custom/basic/given-seq-seq/stdout.expected @@ -1,7 +1,7 @@ Generating models for seqseq.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime seqseq.param +Savile Row: conjure-output/model000001.eprime seqseq.param Running minion for domain filtering. Running solver: minion Validating solution: seqseq.param conjure-output/model000001-seqseq-solution000001.solution diff --git a/tests/custom/basic/matrix-slicing/stdout.expected b/tests/custom/basic/matrix-slicing/stdout.expected index 47684d60e..ba3ced8dd 100644 --- a/tests/custom/basic/matrix-slicing/stdout.expected +++ b/tests/custom/basic/matrix-slicing/stdout.expected @@ -1,7 +1,7 @@ Generating models for slice.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: slice.solution diff --git a/tests/custom/basic/modelling-cache/stdout.expected b/tests/custom/basic/modelling-cache/stdout.expected index d175a7b4d..7c09bfa33 100644 --- a/tests/custom/basic/modelling-cache/stdout.expected +++ b/tests/custom/basic/modelling-cache/stdout.expected @@ -25,7 +25,7 @@ Response: 2 .conjure-checksum model000001.eprime Using cached models. -Savile Row: model000001.eprime 2.param +Savile Row: conjure-output/model000001.eprime 2.param Running minion for domain filtering. Running solver: minion Copying solution to: example-2.solution diff --git a/tests/custom/basic/parsing-enums-in-param/stdout.expected b/tests/custom/basic/parsing-enums-in-param/stdout.expected index da5e63e36..a649b21c5 100644 --- a/tests/custom/basic/parsing-enums-in-param/stdout.expected +++ b/tests/custom/basic/parsing-enums-in-param/stdout.expected @@ -1,7 +1,7 @@ Generating models for knapsack.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime knapsack.param +Savile Row: conjure-output/model000001.eprime knapsack.param Running minion for domain filtering. Running solver: minion Copying solution to: knapsack-knapsack-000001.solution diff --git a/tests/custom/basic/parsing-imply/stdout.expected b/tests/custom/basic/parsing-imply/stdout.expected index 47e9e92e3..096be9e40 100644 --- a/tests/custom/basic/parsing-imply/stdout.expected +++ b/tests/custom/basic/parsing-imply/stdout.expected @@ -14,7 +14,7 @@ Generating models for 2_leftparens.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 2_leftparens.solutions @@ -122,7 +122,7 @@ letting d be true Generating models for 3_rightparens.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 3_rightparens.solutions diff --git a/tests/custom/basic/partition_together_apart/stdout.expected b/tests/custom/basic/partition_together_apart/stdout.expected index 52d2bfa94..b77775c71 100644 --- a/tests/custom/basic/partition_together_apart/stdout.expected +++ b/tests/custom/basic/partition_together_apart/stdout.expected @@ -1,7 +1,7 @@ Generating models for partition_together_apart.essence Generated models: model_1_1.eprime Saved under: conjure-output -Savile Row: model_1_1.eprime +Savile Row: conjure-output/model_1_1.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model_1_1-solution000001.solution diff --git a/tests/custom/basic/restricted01/stdout.expected b/tests/custom/basic/restricted01/stdout.expected index ef3cf66da..e160b0102 100644 --- a/tests/custom/basic/restricted01/stdout.expected +++ b/tests/custom/basic/restricted01/stdout.expected @@ -1,7 +1,7 @@ Generating models for restricted01.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/restricted02/stdout.expected b/tests/custom/basic/restricted02/stdout.expected index 7183183bf..4a448781d 100644 --- a/tests/custom/basic/restricted02/stdout.expected +++ b/tests/custom/basic/restricted02/stdout.expected @@ -1,7 +1,7 @@ Generating models for restricted02.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/restricted03/stdout.expected b/tests/custom/basic/restricted03/stdout.expected index 3f9d67f44..6d2c09453 100644 --- a/tests/custom/basic/restricted03/stdout.expected +++ b/tests/custom/basic/restricted03/stdout.expected @@ -1,10 +1,10 @@ Generating models for restricted03.essence Generated 2 models: model000001.eprime, model000002.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/restricted04/stdout.expected b/tests/custom/basic/restricted04/stdout.expected index e62b94662..3ffdfc81c 100644 --- a/tests/custom/basic/restricted04/stdout.expected +++ b/tests/custom/basic/restricted04/stdout.expected @@ -1,10 +1,10 @@ Generating models for restricted04.essence Generated 2 models: model000001.eprime, model000002.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/basic/sat-branching-on/stdout.expected b/tests/custom/basic/sat-branching-on/stdout.expected index b92f4a7dc..d779826d5 100644 --- a/tests/custom/basic/sat-branching-on/stdout.expected +++ b/tests/custom/basic/sat-branching-on/stdout.expected @@ -1,7 +1,7 @@ Generating models for sbo.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion letting a be {1, 2, 3, 4} @@ -20,7 +20,7 @@ letting a be {3, 4} letting a be {3} letting a be {4} Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: kissat letting a be {1, 2, 3, 4} diff --git a/tests/custom/basic/seqset/stdout.expected b/tests/custom/basic/seqset/stdout.expected index fe4e4a863..1be108a8a 100644 --- a/tests/custom/basic/seqset/stdout.expected +++ b/tests/custom/basic/seqset/stdout.expected @@ -1,7 +1,7 @@ Generating models for seqset.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: kissat Validating solution: conjure-output/model000001-solution000001.solution diff --git a/tests/custom/basic/sequence-injective/stdout.expected b/tests/custom/basic/sequence-injective/stdout.expected index a3e80d846..92abc952d 100644 --- a/tests/custom/basic/sequence-injective/stdout.expected +++ b/tests/custom/basic/sequence-injective/stdout.expected @@ -1,7 +1,7 @@ Generating models for sequence-injective.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion language ESSENCE' 1.0 diff --git a/tests/custom/basic/set-of-tuples-of-enum/stdout.expected b/tests/custom/basic/set-of-tuples-of-enum/stdout.expected index 19db7c615..06484b056 100644 --- a/tests/custom/basic/set-of-tuples-of-enum/stdout.expected +++ b/tests/custom/basic/set-of-tuples-of-enum/stdout.expected @@ -1,7 +1,7 @@ Generating models for set-of-tuples.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model000001-solution000001.solution diff --git a/tests/custom/basic/set-of-tuples-of-int/stdout.expected b/tests/custom/basic/set-of-tuples-of-int/stdout.expected index 19db7c615..06484b056 100644 --- a/tests/custom/basic/set-of-tuples-of-int/stdout.expected +++ b/tests/custom/basic/set-of-tuples-of-int/stdout.expected @@ -1,7 +1,7 @@ Generating models for set-of-tuples.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model000001-solution000001.solution diff --git a/tests/custom/basic/set-of-tuples-of-unnamed/stdout.expected b/tests/custom/basic/set-of-tuples-of-unnamed/stdout.expected index 102e8a3c9..9a96368f8 100644 --- a/tests/custom/basic/set-of-tuples-of-unnamed/stdout.expected +++ b/tests/custom/basic/set-of-tuples-of-unnamed/stdout.expected @@ -1,7 +1,7 @@ Generating models for set-of-tuples.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model000001-solution000001.solution diff --git a/tests/custom/basic/set-size-fixed-of-tuples-of-enum/stdout.expected b/tests/custom/basic/set-size-fixed-of-tuples-of-enum/stdout.expected index ce798364f..8ecae2a9b 100644 --- a/tests/custom/basic/set-size-fixed-of-tuples-of-enum/stdout.expected +++ b/tests/custom/basic/set-size-fixed-of-tuples-of-enum/stdout.expected @@ -1,7 +1,7 @@ Generating models for set-of-tuples.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model000001-solution000001.solution diff --git a/tests/custom/basic/solutionsInOneFile/stdout.expected b/tests/custom/basic/solutionsInOneFile/stdout.expected index 8dd2ca907..fe949cd8d 100644 --- a/tests/custom/basic/solutionsInOneFile/stdout.expected +++ b/tests/custom/basic/solutionsInOneFile/stdout.expected @@ -1,7 +1,7 @@ Generating models for test.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: test.solutions diff --git a/tests/custom/basic/streamline01/stdout.expected b/tests/custom/basic/streamline01/stdout.expected index a5c64bd7a..fe8e2f0e7 100644 --- a/tests/custom/basic/streamline01/stdout.expected +++ b/tests/custom/basic/streamline01/stdout.expected @@ -1,16 +1,16 @@ Generating models for streamline01.essence Generated 4 models: model000001.eprime, model000002.eprime, model000003.eprime, model000004.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000003.eprime +Savile Row: conjure-output/model000003.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000004.eprime +Savile Row: conjure-output/model000004.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/enum-in-partition/stdout.expected b/tests/custom/enum-in-partition/stdout.expected index ec53a0564..f9f0cbcb5 100644 --- a/tests/custom/enum-in-partition/stdout.expected +++ b/tests/custom/enum-in-partition/stdout.expected @@ -1,7 +1,7 @@ Generating models for eip.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: eip.solution diff --git a/tests/custom/graphs/shortest_path/01/stdout.expected b/tests/custom/graphs/shortest_path/01/stdout.expected index 367a0c743..2b3e14129 100644 --- a/tests/custom/graphs/shortest_path/01/stdout.expected +++ b/tests/custom/graphs/shortest_path/01/stdout.expected @@ -1,7 +1,7 @@ Generating models for graph_connected.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: graph_connected.solution diff --git a/tests/custom/graphs/shortest_path/02/stdout.expected b/tests/custom/graphs/shortest_path/02/stdout.expected index e1b551283..0139d716e 100644 --- a/tests/custom/graphs/shortest_path/02/stdout.expected +++ b/tests/custom/graphs/shortest_path/02/stdout.expected @@ -1,7 +1,7 @@ Generating models for graph_connected.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: graph_connected.solution diff --git a/tests/custom/graphs/shortest_path/03/stdout.expected b/tests/custom/graphs/shortest_path/03/stdout.expected index b93f413d8..b78892c78 100644 --- a/tests/custom/graphs/shortest_path/03/stdout.expected +++ b/tests/custom/graphs/shortest_path/03/stdout.expected @@ -1,7 +1,7 @@ Generating models for graph_connected.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: graph_connected.solution diff --git a/tests/custom/graphs/shortest_path/04/stdout.expected b/tests/custom/graphs/shortest_path/04/stdout.expected index eaac7bb83..31a40ae0b 100644 --- a/tests/custom/graphs/shortest_path/04/stdout.expected +++ b/tests/custom/graphs/shortest_path/04/stdout.expected @@ -1,7 +1,7 @@ Generating models for graph_connected.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: graph_connected.solution diff --git a/tests/custom/issues/119/1/stdout.expected b/tests/custom/issues/119/1/stdout.expected index f7cfabf17..9b2ccb8d9 100644 --- a/tests/custom/issues/119/1/stdout.expected +++ b/tests/custom/issues/119/1/stdout.expected @@ -1,16 +1,16 @@ Generating models for _old_issues_118_smaller.essence Generated 4 models: model_1.eprime, model_2.eprime, model_3.eprime, model_4.eprime Saved under: conjure-output -Savile Row: model_1.eprime +Savile Row: conjure-output/model_1.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_2.eprime +Savile Row: conjure-output/model_2.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_3.eprime +Savile Row: conjure-output/model_3.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_4.eprime +Savile Row: conjure-output/model_4.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model_1-solution000001.solution diff --git a/tests/custom/issues/119/2/stdout.expected b/tests/custom/issues/119/2/stdout.expected index 12ef3569e..0fd5c801b 100644 --- a/tests/custom/issues/119/2/stdout.expected +++ b/tests/custom/issues/119/2/stdout.expected @@ -1,13 +1,13 @@ Generating models for _old_issues_118_smaller2.essence Generated 3 models: model_1.eprime, model_2.eprime, model_3.eprime Saved under: conjure-output -Savile Row: model_1.eprime +Savile Row: conjure-output/model_1.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_2.eprime +Savile Row: conjure-output/model_2.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_3.eprime +Savile Row: conjure-output/model_3.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model_1-solution000001.solution diff --git a/tests/custom/issues/284/stdout.expected b/tests/custom/issues/284/stdout.expected index 55a1b019c..bc2063248 100644 --- a/tests/custom/issues/284/stdout.expected +++ b/tests/custom/issues/284/stdout.expected @@ -2,28 +2,28 @@ Generating models for _issue_13.essence Generated 8 models: model000001.eprime, model000002.eprime, model000003.eprime, model000004.eprime, model000005.eprime, model000006.eprime, model000007.eprime, model000008.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000003.eprime +Savile Row: conjure-output/model000003.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000004.eprime +Savile Row: conjure-output/model000004.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000005.eprime +Savile Row: conjure-output/model000005.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000006.eprime +Savile Row: conjure-output/model000006.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000007.eprime +Savile Row: conjure-output/model000007.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000008.eprime +Savile Row: conjure-output/model000008.eprime Running minion for domain filtering. Running solver: minion model000001-solution000001.eprime-solution diff --git a/tests/custom/issues/345/stdout.expected b/tests/custom/issues/345/stdout.expected index c2b1b7e01..51198173a 100644 --- a/tests/custom/issues/345/stdout.expected +++ b/tests/custom/issues/345/stdout.expected @@ -1,4 +1,4 @@ Generating models for 345.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime p.param +Savile Row: conjure-output/model000001.eprime p.param diff --git a/tests/custom/issues/351/stdout.expected b/tests/custom/issues/351/stdout.expected index bd9fa1408..72c9a846f 100644 --- a/tests/custom/issues/351/stdout.expected +++ b/tests/custom/issues/351/stdout.expected @@ -1,14 +1,14 @@ Generating models for 351.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 351.solution Generating models for 351.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 351.solution diff --git a/tests/custom/issues/358/stdout.expected b/tests/custom/issues/358/stdout.expected index a515102c7..7da2a600f 100644 --- a/tests/custom/issues/358/stdout.expected +++ b/tests/custom/issues/358/stdout.expected @@ -1,7 +1,7 @@ Generating models for 358.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 358.solution diff --git a/tests/custom/issues/370/01/stdout.expected b/tests/custom/issues/370/01/stdout.expected index 433cbb45a..526da7d2d 100644 --- a/tests/custom/issues/370/01/stdout.expected +++ b/tests/custom/issues/370/01/stdout.expected @@ -2,28 +2,28 @@ Generating models for 370.essence Generated 8 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 +Savile Row: conjure-output/model_1.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_2.eprime +Savile Row: conjure-output/model_2.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_3.eprime +Savile Row: conjure-output/model_3.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_4.eprime +Savile Row: conjure-output/model_4.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_5.eprime +Savile Row: conjure-output/model_5.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_6.eprime +Savile Row: conjure-output/model_6.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_7.eprime +Savile Row: conjure-output/model_7.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_8.eprime +Savile Row: conjure-output/model_8.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model_1-solution000001.solution diff --git a/tests/custom/issues/370/02/stdout.expected b/tests/custom/issues/370/02/stdout.expected index 581008ab0..c309ae346 100644 --- a/tests/custom/issues/370/02/stdout.expected +++ b/tests/custom/issues/370/02/stdout.expected @@ -1,16 +1,16 @@ Generating models for 370.essence Generated 4 models: model_1.eprime, model_2.eprime, model_3.eprime, model_4.eprime Saved under: conjure-output -Savile Row: model_1.eprime +Savile Row: conjure-output/model_1.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_2.eprime +Savile Row: conjure-output/model_2.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_3.eprime +Savile Row: conjure-output/model_3.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_4.eprime +Savile Row: conjure-output/model_4.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model_1-solution000001.solution diff --git a/tests/custom/issues/370/03/stdout.expected b/tests/custom/issues/370/03/stdout.expected index 581008ab0..c309ae346 100644 --- a/tests/custom/issues/370/03/stdout.expected +++ b/tests/custom/issues/370/03/stdout.expected @@ -1,16 +1,16 @@ Generating models for 370.essence Generated 4 models: model_1.eprime, model_2.eprime, model_3.eprime, model_4.eprime Saved under: conjure-output -Savile Row: model_1.eprime +Savile Row: conjure-output/model_1.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_2.eprime +Savile Row: conjure-output/model_2.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_3.eprime +Savile Row: conjure-output/model_3.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_4.eprime +Savile Row: conjure-output/model_4.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model_1-solution000001.solution diff --git a/tests/custom/issues/387/int01/stdout.expected b/tests/custom/issues/387/int01/stdout.expected index 12279140d..f2bc3d8cd 100644 --- a/tests/custom/issues/387/int01/stdout.expected +++ b/tests/custom/issues/387/int01/stdout.expected @@ -1,7 +1,7 @@ Generating models for 387.essence Generated models: model.eprime Saved under: conjure-output -Savile Row: model.eprime +Savile Row: conjure-output/model.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model-solution000001.solution diff --git a/tests/custom/issues/387/int02/stdout.expected b/tests/custom/issues/387/int02/stdout.expected index d78c2d2fd..43e2257ef 100644 --- a/tests/custom/issues/387/int02/stdout.expected +++ b/tests/custom/issues/387/int02/stdout.expected @@ -1,7 +1,7 @@ Generating models for 387.essence Generated models: model.eprime Saved under: conjure-output -Savile Row: model.eprime +Savile Row: conjure-output/model.eprime Running minion for domain filtering. Running solver: minion No solutions found. diff --git a/tests/custom/issues/387/int03/stdout.expected b/tests/custom/issues/387/int03/stdout.expected index e195b84f9..32242bfeb 100644 --- a/tests/custom/issues/387/int03/stdout.expected +++ b/tests/custom/issues/387/int03/stdout.expected @@ -1,16 +1,16 @@ Generating models for 387.essence Generated 4 models: model_1.eprime, model_2.eprime, model_3.eprime, model_4.eprime Saved under: conjure-output -Savile Row: model_1.eprime +Savile Row: conjure-output/model_1.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_2.eprime +Savile Row: conjure-output/model_2.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_3.eprime +Savile Row: conjure-output/model_3.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_4.eprime +Savile Row: conjure-output/model_4.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model_1-solution000001.solution diff --git a/tests/custom/issues/387/int04/stdout.expected b/tests/custom/issues/387/int04/stdout.expected index dd1df2e30..7ffb0e7ce 100644 --- a/tests/custom/issues/387/int04/stdout.expected +++ b/tests/custom/issues/387/int04/stdout.expected @@ -1,16 +1,16 @@ Generating models for 387.essence Generated 4 models: model_1.eprime, model_2.eprime, model_3.eprime, model_4.eprime Saved under: conjure-output -Savile Row: model_1.eprime +Savile Row: conjure-output/model_1.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_2.eprime +Savile Row: conjure-output/model_2.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_3.eprime +Savile Row: conjure-output/model_3.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_4.eprime +Savile Row: conjure-output/model_4.eprime Running minion for domain filtering. Running solver: minion No solutions found. diff --git a/tests/custom/issues/388/1/stdout.expected b/tests/custom/issues/388/1/stdout.expected index cc90e7699..383f4ca07 100644 --- a/tests/custom/issues/388/1/stdout.expected +++ b/tests/custom/issues/388/1/stdout.expected @@ -1,16 +1,16 @@ Generating models for 388-1.essence Generated 4 models: model_1.eprime, model_2.eprime, model_3.eprime, model_4.eprime Saved under: conjure-output -Savile Row: model_1.eprime +Savile Row: conjure-output/model_1.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_2.eprime +Savile Row: conjure-output/model_2.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_3.eprime +Savile Row: conjure-output/model_3.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_4.eprime +Savile Row: conjure-output/model_4.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model_1-solution000001.solution diff --git a/tests/custom/issues/388/2/stdout.expected b/tests/custom/issues/388/2/stdout.expected index 1af9f5204..c897101ef 100644 --- a/tests/custom/issues/388/2/stdout.expected +++ b/tests/custom/issues/388/2/stdout.expected @@ -4,52 +4,52 @@ Generated 16 models: model_1_1.eprime, model_1_2.eprime, model_1_3.eprime, model 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 +Savile Row: conjure-output/model_1_1.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_1_2.eprime +Savile Row: conjure-output/model_1_2.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_1_3.eprime +Savile Row: conjure-output/model_1_3.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_1_4.eprime +Savile Row: conjure-output/model_1_4.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_2_1.eprime +Savile Row: conjure-output/model_2_1.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_2_2.eprime +Savile Row: conjure-output/model_2_2.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_2_3.eprime +Savile Row: conjure-output/model_2_3.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_2_4.eprime +Savile Row: conjure-output/model_2_4.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_3_1.eprime +Savile Row: conjure-output/model_3_1.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_3_2.eprime +Savile Row: conjure-output/model_3_2.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_3_3.eprime +Savile Row: conjure-output/model_3_3.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_3_4.eprime +Savile Row: conjure-output/model_3_4.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_4_1.eprime +Savile Row: conjure-output/model_4_1.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_4_2.eprime +Savile Row: conjure-output/model_4_2.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_4_3.eprime +Savile Row: conjure-output/model_4_3.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model_4_4.eprime +Savile Row: conjure-output/model_4_4.eprime Running minion for domain filtering. Running solver: minion Validating solution: conjure-output/model_1_1-solution000001.solution diff --git a/tests/custom/issues/395/stdout.expected b/tests/custom/issues/395/stdout.expected index 1cffe22cf..7b4a9e0db 100644 --- a/tests/custom/issues/395/stdout.expected +++ b/tests/custom/issues/395/stdout.expected @@ -68,7 +68,7 @@ such that Generating models for 3.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime m_is_3.param +Savile Row: conjure-output/model000001.eprime m_is_3.param Running minion for domain filtering. Running solver: minion Copying solution to: 3-m_is_3.solution diff --git a/tests/custom/issues/400/stdout.expected b/tests/custom/issues/400/stdout.expected index 5ee66f666..728da0f5d 100644 --- a/tests/custom/issues/400/stdout.expected +++ b/tests/custom/issues/400/stdout.expected @@ -1,7 +1,7 @@ Generating models for 400.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 400.solution diff --git a/tests/custom/issues/401/stdout.expected b/tests/custom/issues/401/stdout.expected index 09aa62f47..0a8767dd7 100644 --- a/tests/custom/issues/401/stdout.expected +++ b/tests/custom/issues/401/stdout.expected @@ -1,7 +1,7 @@ Generating models for 401-1.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 401-1.solution @@ -18,7 +18,7 @@ letting m be [1, 1, 1, 1, 1; int(1..5)] Generating models for 401-2.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 401-2.solution @@ -44,7 +44,7 @@ $ 1 2 3 Generating models for 401-3.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 401-3.solution diff --git a/tests/custom/issues/404/stdout.expected b/tests/custom/issues/404/stdout.expected index 783b427bc..857e53c14 100644 --- a/tests/custom/issues/404/stdout.expected +++ b/tests/custom/issues/404/stdout.expected @@ -1,4 +1,4 @@ Generating models for test.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime test.param +Savile Row: conjure-output/model000001.eprime test.param diff --git a/tests/custom/issues/408/stdout.expected b/tests/custom/issues/408/stdout.expected index 1b974ae7c..2f6adbe42 100644 --- a/tests/custom/issues/408/stdout.expected +++ b/tests/custom/issues/408/stdout.expected @@ -31,7 +31,7 @@ Response: 1 Response: 1 Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 408.solution @@ -76,7 +76,7 @@ Response: 2 Response: 2 Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 408.solution @@ -121,7 +121,7 @@ Response: 3 Response: 3 Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 408.solution @@ -166,7 +166,7 @@ Response: 4 Response: 4 Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 408.solution diff --git a/tests/custom/issues/430/stdout.expected b/tests/custom/issues/430/stdout.expected index f9f7266cf..31620f54f 100644 --- a/tests/custom/issues/430/stdout.expected +++ b/tests/custom/issues/430/stdout.expected @@ -1,7 +1,7 @@ Generating models for 430.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime p.param +Savile Row: conjure-output/model000001.eprime p.param Running minion for domain filtering. Running solver: minion Copying solution to: 430-p-000001.solution diff --git a/tests/custom/issues/432/stdout.expected b/tests/custom/issues/432/stdout.expected index fb987144e..6b573dfa7 100644 --- a/tests/custom/issues/432/stdout.expected +++ b/tests/custom/issues/432/stdout.expected @@ -1,4 +1,4 @@ Generating models for 4col.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime p.param +Savile Row: conjure-output/model000001.eprime p.param diff --git a/tests/custom/issues/438/stdout.expected b/tests/custom/issues/438/stdout.expected index 7f4ef0d4b..b281b2f5a 100644 --- a/tests/custom/issues/438/stdout.expected +++ b/tests/custom/issues/438/stdout.expected @@ -1,7 +1,7 @@ Generating models for 1.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime 1.param +Savile Row: conjure-output/model000001.eprime 1.param Running minion for domain filtering. Running solver: minion Copying solution to: 1-1.solution diff --git a/tests/custom/issues/440/stdout.expected b/tests/custom/issues/440/stdout.expected index cdfe5b433..4b17df809 100644 --- a/tests/custom/issues/440/stdout.expected +++ b/tests/custom/issues/440/stdout.expected @@ -1,4 +1,4 @@ Generating models for 440.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime p.param +Savile Row: conjure-output/model000001.eprime p.param diff --git a/tests/custom/issues/443/stdout.expected b/tests/custom/issues/443/stdout.expected index ce6c3fe75..1a940a4f1 100644 --- a/tests/custom/issues/443/stdout.expected +++ b/tests/custom/issues/443/stdout.expected @@ -1,7 +1,7 @@ Generating models for 443-workaround.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion No solutions found. @@ -14,7 +14,7 @@ such that a = ([] : `matrix indexed by [int()] of int`)[1] Generating models for 443.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion No solutions found. @@ -27,7 +27,7 @@ such that a = [][1] Generating models for 443-bool.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 443-bool.solution @@ -43,7 +43,7 @@ letting a be false Generating models for 443-bool-typed.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 443-bool-typed.solution diff --git a/tests/custom/issues/446/stdout.expected b/tests/custom/issues/446/stdout.expected index cba9a6f5f..0419b1972 100644 --- a/tests/custom/issues/446/stdout.expected +++ b/tests/custom/issues/446/stdout.expected @@ -1,7 +1,7 @@ Generating models for model.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime inst.param +Savile Row: conjure-output/model000001.eprime inst.param Error: The value is not a member of the domain. Value : sequence(1, 2, 3, 4, 5) @@ -11,7 +11,7 @@ Error: Generating models for model.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime inst2.param +Savile Row: conjure-output/model000001.eprime inst2.param Error: The value is not a member of the domain. Value : sequence(1, 2, 3, 4) diff --git a/tests/custom/issues/448/stdout.expected b/tests/custom/issues/448/stdout.expected index 61da7cc3b..8da0ddb57 100644 --- a/tests/custom/issues/448/stdout.expected +++ b/tests/custom/issues/448/stdout.expected @@ -1,7 +1,7 @@ Generating models for 448-1.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 448-1.solution @@ -42,7 +42,7 @@ letting s be Generating models for 448-2.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 448-2.solution @@ -69,7 +69,7 @@ letting s be Generating models for 448-3.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 448-3.solution diff --git a/tests/custom/issues/453/stdout.expected b/tests/custom/issues/453/stdout.expected index d543dd614..20667fc46 100644 --- a/tests/custom/issues/453/stdout.expected +++ b/tests/custom/issues/453/stdout.expected @@ -1,7 +1,7 @@ Generating models for test.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime test.param +Savile Row: conjure-output/model000001.eprime test.param Running minion for domain filtering. Running solver: minion Copying solution to: test-test.solution diff --git a/tests/custom/issues/473/stdout.expected b/tests/custom/issues/473/stdout.expected index 4ded4ca75..7bf2c45ee 100644 --- a/tests/custom/issues/473/stdout.expected +++ b/tests/custom/issues/473/stdout.expected @@ -1,7 +1,7 @@ Generating models for works.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime test.param +Savile Row: conjure-output/model000001.eprime test.param Running minion for domain filtering. Running solver: minion Copying solution to: works-test.solution @@ -13,7 +13,7 @@ letting x be {a1, a2, a3} Generating models for regression.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime test.param +Savile Row: conjure-output/model000001.eprime test.param Running minion for domain filtering. Running solver: minion Copying solution to: regression-test.solution diff --git a/tests/custom/issues/479/stdout.expected b/tests/custom/issues/479/stdout.expected index ddec3538a..23f81d8b5 100644 --- a/tests/custom/issues/479/stdout.expected +++ b/tests/custom/issues/479/stdout.expected @@ -1,7 +1,7 @@ Generating models for model-instanceGenerator.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime p.param +Savile Row: conjure-output/model000001.eprime p.param Running minion for domain filtering. Running solver: minion Copying solution to: model-instanceGenerator-p.solution diff --git a/tests/custom/issues/480/stdout.expected b/tests/custom/issues/480/stdout.expected index 983846978..7f3a2a5a0 100644 --- a/tests/custom/issues/480/stdout.expected +++ b/tests/custom/issues/480/stdout.expected @@ -1,7 +1,7 @@ Generating models for model-instanceGenerator.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime p.param +Savile Row: conjure-output/model000001.eprime p.param Running minion for domain filtering. Running solver: minion Copying solution to: model-instanceGenerator-p.solution diff --git a/tests/custom/issues/486/stdout.expected b/tests/custom/issues/486/stdout.expected index 6daf8ba73..968d57360 100644 --- a/tests/custom/issues/486/stdout.expected +++ b/tests/custom/issues/486/stdout.expected @@ -1,7 +1,7 @@ Generating models for model.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion language Essence 1.3 diff --git a/tests/custom/issues/501/stdout.expected b/tests/custom/issues/501/stdout.expected index d785e437f..798631cc4 100644 --- a/tests/custom/issues/501/stdout.expected +++ b/tests/custom/issues/501/stdout.expected @@ -1,7 +1,7 @@ Generating models for 501.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime 501.param +Savile Row: conjure-output/model000001.eprime 501.param Running minion for domain filtering. Running solver: minion Copying solution to: 501-501.solution diff --git a/tests/custom/issues/503/stdout.expected b/tests/custom/issues/503/stdout.expected index a42ddf71f..42bb463d8 100644 --- a/tests/custom/issues/503/stdout.expected +++ b/tests/custom/issues/503/stdout.expected @@ -1,13 +1,13 @@ Generating models for 503.essence Generated 3 models: model000001.eprime, model000002.eprime, model000003.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000002.eprime +Savile Row: conjure-output/model000002.eprime Running minion for domain filtering. Running solver: minion -Savile Row: model000003.eprime +Savile Row: conjure-output/model000003.eprime Running minion for domain filtering. Running solver: minion conjure-output/model000001.eprime:find S_ExplicitR8_ExplicitWithFlags_Flags: matrix indexed by [int(1..10), int(1..20)] of int(0..20) diff --git a/tests/custom/issues/506/stdout.expected b/tests/custom/issues/506/stdout.expected index 9ac9fe147..144653332 100644 --- a/tests/custom/issues/506/stdout.expected +++ b/tests/custom/issues/506/stdout.expected @@ -1,7 +1,7 @@ Generating models for model.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime test.param +Savile Row: conjure-output/model000001.eprime test.param Running minion for domain filtering. Running solver: minion Copying solution to: model-test.solution diff --git a/tests/custom/issues/511/stdout.expected b/tests/custom/issues/511/stdout.expected index 9819f4912..ee42a9570 100644 --- a/tests/custom/issues/511/stdout.expected +++ b/tests/custom/issues/511/stdout.expected @@ -1,7 +1,7 @@ Generating models for 511.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: 511-000001.solution diff --git a/tests/custom/issues/548/1/stdout.expected b/tests/custom/issues/548/1/stdout.expected index 5f8d78d53..73bdd116e 100644 --- a/tests/custom/issues/548/1/stdout.expected +++ b/tests/custom/issues/548/1/stdout.expected @@ -1,7 +1,7 @@ Generating models for 548.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime p.json +Savile Row: conjure-output/model000001.eprime p.json Running minion for domain filtering. Running solver: minion Copying solution to: 548-p.solution diff --git a/tests/custom/issues/548/2/stdout.expected b/tests/custom/issues/548/2/stdout.expected index 947d3c74f..4a6d5eff6 100644 --- a/tests/custom/issues/548/2/stdout.expected +++ b/tests/custom/issues/548/2/stdout.expected @@ -1,7 +1,7 @@ Generating models for variant.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime param.json +Savile Row: conjure-output/model000001.eprime param.json Running minion for domain filtering. Running solver: minion Copying solution to: variant-param.solution diff --git a/tests/custom/issues/549/1/stdout.expected b/tests/custom/issues/549/1/stdout.expected index aef9e84cb..fdfb81948 100644 --- a/tests/custom/issues/549/1/stdout.expected +++ b/tests/custom/issues/549/1/stdout.expected @@ -1,7 +1,7 @@ Generating models for 549_1.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime p.json +Savile Row: conjure-output/model000001.eprime p.json Running minion for domain filtering. Running solver: minion Copying solution to: 549_1-p.solution diff --git a/tests/custom/issues/549/2/stdout.expected b/tests/custom/issues/549/2/stdout.expected index 1e9e8310f..e7b0e67e7 100644 --- a/tests/custom/issues/549/2/stdout.expected +++ b/tests/custom/issues/549/2/stdout.expected @@ -1,7 +1,7 @@ Generating models for 549_2.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime param.json +Savile Row: conjure-output/model000001.eprime param.json Running minion for domain filtering. Running solver: minion Copying solution to: 549_2-param.solution diff --git a/tests/custom/issues/578/stdout.expected b/tests/custom/issues/578/stdout.expected index f4956ae92..08abf0f13 100644 --- a/tests/custom/issues/578/stdout.expected +++ b/tests/custom/issues/578/stdout.expected @@ -1,14 +1,14 @@ Generating models for e.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime q.param +Savile Row: conjure-output/model000001.eprime q.param Running minion for domain filtering. Running solver: minion Copying solution to: e-q.solution Generating models for e.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime d/p.param +Savile Row: conjure-output/model000001.eprime d/p.param Running minion for domain filtering. Running solver: minion Copying solution to: e-p.solution diff --git a/tests/custom/json-integration/json-in/stdout.expected b/tests/custom/json-integration/json-in/stdout.expected index e5229b00c..f6e532be4 100644 --- a/tests/custom/json-integration/json-in/stdout.expected +++ b/tests/custom/json-integration/json-in/stdout.expected @@ -1,7 +1,7 @@ Generating models for test.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime param.json +Savile Row: conjure-output/model000001.eprime param.json Running solver: minion {"fCard": 2, "ff": {"1": 2, "2": 3}, "mCard": 6, "qCard": 6, "rCard": 2, diff --git a/tests/custom/json-integration/json-out/stdout.expected b/tests/custom/json-integration/json-out/stdout.expected index 4ddd63da3..0004519a0 100644 --- a/tests/custom/json-integration/json-out/stdout.expected +++ b/tests/custom/json-integration/json-out/stdout.expected @@ -1,7 +1,7 @@ Generating models for test.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion {"b": false, diff --git a/tests/custom/json-integration/json-solution/stdout.expected b/tests/custom/json-integration/json-solution/stdout.expected index 1d052aeec..f5f98cc11 100644 --- a/tests/custom/json-integration/json-solution/stdout.expected +++ b/tests/custom/json-integration/json-solution/stdout.expected @@ -1,7 +1,7 @@ Generating models for json-solution.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime n4.param +Savile Row: conjure-output/model000001.eprime n4.param Running minion for domain filtering. Running solver: minion Copying solution to: json-solution-n4.solution diff --git a/tests/custom/json-integration/jsons-out/stdout.expected b/tests/custom/json-integration/jsons-out/stdout.expected index 1baae5ce1..65b12764b 100644 --- a/tests/custom/json-integration/jsons-out/stdout.expected +++ b/tests/custom/json-integration/jsons-out/stdout.expected @@ -1,7 +1,7 @@ Generating models for jsons.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion [ diff --git a/tests/custom/json-integration/jsons-streaming-out/stdout.expected b/tests/custom/json-integration/jsons-streaming-out/stdout.expected index 65fb9eeec..2f3ce8e32 100644 --- a/tests/custom/json-integration/jsons-streaming-out/stdout.expected +++ b/tests/custom/json-integration/jsons-streaming-out/stdout.expected @@ -1,7 +1,7 @@ Generating models for jsons.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion {"x": [3, 4]} diff --git a/tests/custom/json-integration/nosols/stdout.expected b/tests/custom/json-integration/nosols/stdout.expected index 6055d089a..07d60fce0 100644 --- a/tests/custom/json-integration/nosols/stdout.expected +++ b/tests/custom/json-integration/nosols/stdout.expected @@ -1,7 +1,7 @@ Generating models for nosols.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion No solutions found. diff --git a/tests/custom/matrixNoIndexedBy/stdout.expected b/tests/custom/matrixNoIndexedBy/stdout.expected index 230760621..1284201b3 100644 --- a/tests/custom/matrixNoIndexedBy/stdout.expected +++ b/tests/custom/matrixNoIndexedBy/stdout.expected @@ -1,7 +1,7 @@ Generating models for matrixQ.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: matrixQ.solution diff --git a/tests/custom/mildly_interesting/footballtennis_riddle/stdout.expected b/tests/custom/mildly_interesting/footballtennis_riddle/stdout.expected index bb154d763..aee81520e 100644 --- a/tests/custom/mildly_interesting/footballtennis_riddle/stdout.expected +++ b/tests/custom/mildly_interesting/footballtennis_riddle/stdout.expected @@ -1,24 +1,24 @@ Generating models for riddle1.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: riddle1.solution Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: kissat Copying solution to: riddle1.solution Generating models for riddle2.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: riddle2.solution Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: kissat Copying solution to: riddle2.solution diff --git a/tests/custom/solution-copy-dashed/stdout.expected b/tests/custom/solution-copy-dashed/stdout.expected index 0fd97cecd..5fa63c499 100644 --- a/tests/custom/solution-copy-dashed/stdout.expected +++ b/tests/custom/solution-copy-dashed/stdout.expected @@ -1,13 +1,13 @@ Generating models for sumplete-2023053102.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime p.param +Savile Row: conjure-output/model000001.eprime p.param Running minion for domain filtering. Running solver: minion Copying solution to: sumplete-2023053102-p.solution sumplete-2023053102-p.solution Using cached models. -Savile Row: model000001.eprime sumplete-1x1-42.param +Savile Row: conjure-output/model000001.eprime sumplete-1x1-42.param Running minion for domain filtering. Running solver: minion Copying solution to: sumplete-2023053102-sumplete-1x1-42.solution diff --git a/tests/custom/transform/function/matrix/const_01/stdout.expected b/tests/custom/transform/function/matrix/const_01/stdout.expected index 363e0cc55..25ac41549 100644 --- a/tests/custom/transform/function/matrix/const_01/stdout.expected +++ b/tests/custom/transform/function/matrix/const_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/matrix/var_01/stdout.expected b/tests/custom/transform/function/matrix/var_01/stdout.expected index 07284b2a0..593def260 100644 --- a/tests/custom/transform/function/matrix/var_01/stdout.expected +++ b/tests/custom/transform/function/matrix/var_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/partition/const_01/stdout.expected b/tests/custom/transform/function/partition/const_01/stdout.expected index f8f1b087a..4b20e13c8 100644 --- a/tests/custom/transform/function/partition/const_01/stdout.expected +++ b/tests/custom/transform/function/partition/const_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/partition/var_01/stdout.expected b/tests/custom/transform/function/partition/var_01/stdout.expected index 29af8f549..ac1540693 100644 --- a/tests/custom/transform/function/partition/var_01/stdout.expected +++ b/tests/custom/transform/function/partition/var_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/record/const_01/stdout.expected b/tests/custom/transform/function/record/const_01/stdout.expected index dd6fee3ee..94c6032df 100644 --- a/tests/custom/transform/function/record/const_01/stdout.expected +++ b/tests/custom/transform/function/record/const_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/record/var_01/stdout.expected b/tests/custom/transform/function/record/var_01/stdout.expected index 2e6fcba9d..02b22ae13 100644 --- a/tests/custom/transform/function/record/var_01/stdout.expected +++ b/tests/custom/transform/function/record/var_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/record/var_02/stdout.expected b/tests/custom/transform/function/record/var_02/stdout.expected index 06794c62f..e91807d77 100644 --- a/tests/custom/transform/function/record/var_02/stdout.expected +++ b/tests/custom/transform/function/record/var_02/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/sequence/const_01/stdout.expected b/tests/custom/transform/function/sequence/const_01/stdout.expected index 5d0bbcd30..5d20c8ceb 100644 --- a/tests/custom/transform/function/sequence/const_01/stdout.expected +++ b/tests/custom/transform/function/sequence/const_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/sequence/var_01/stdout.expected b/tests/custom/transform/function/sequence/var_01/stdout.expected index f71c819b6..2a17a567c 100644 --- a/tests/custom/transform/function/sequence/var_01/stdout.expected +++ b/tests/custom/transform/function/sequence/var_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/set/const_01/stdout.expected b/tests/custom/transform/function/set/const_01/stdout.expected index f293b042b..9bd989e7e 100644 --- a/tests/custom/transform/function/set/const_01/stdout.expected +++ b/tests/custom/transform/function/set/const_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/set/var_01/stdout.expected b/tests/custom/transform/function/set/var_01/stdout.expected index f293b042b..9bd989e7e 100644 --- a/tests/custom/transform/function/set/var_01/stdout.expected +++ b/tests/custom/transform/function/set/var_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/set/var_02/stdout.expected b/tests/custom/transform/function/set/var_02/stdout.expected index f293b042b..9bd989e7e 100644 --- a/tests/custom/transform/function/set/var_02/stdout.expected +++ b/tests/custom/transform/function/set/var_02/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/tuple/const_01/stdout.expected b/tests/custom/transform/function/tuple/const_01/stdout.expected index b80358b0d..be0dcb71a 100644 --- a/tests/custom/transform/function/tuple/const_01/stdout.expected +++ b/tests/custom/transform/function/tuple/const_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/tuple/var_01/stdout.expected b/tests/custom/transform/function/tuple/var_01/stdout.expected index c246af9a4..b83d5abb5 100644 --- a/tests/custom/transform/function/tuple/var_01/stdout.expected +++ b/tests/custom/transform/function/tuple/var_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/variant/const_01/stdout.expected b/tests/custom/transform/function/variant/const_01/stdout.expected index 373a742d5..48dbea4cf 100644 --- a/tests/custom/transform/function/variant/const_01/stdout.expected +++ b/tests/custom/transform/function/variant/const_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/variant/var_01/stdout.expected b/tests/custom/transform/function/variant/var_01/stdout.expected index 373a742d5..48dbea4cf 100644 --- a/tests/custom/transform/function/variant/var_01/stdout.expected +++ b/tests/custom/transform/function/variant/var_01/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/variant/var_02/stdout.expected b/tests/custom/transform/function/variant/var_02/stdout.expected index 373a742d5..48dbea4cf 100644 --- a/tests/custom/transform/function/variant/var_02/stdout.expected +++ b/tests/custom/transform/function/variant/var_02/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/variant/var_03/stdout.expected b/tests/custom/transform/function/variant/var_03/stdout.expected index f960ed15d..b5b2d922d 100644 --- a/tests/custom/transform/function/variant/var_03/stdout.expected +++ b/tests/custom/transform/function/variant/var_03/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/transform/function/variant/var_04/stdout.expected b/tests/custom/transform/function/variant/var_04/stdout.expected index 18c365b35..7f2d40440 100644 --- a/tests/custom/transform/function/variant/var_04/stdout.expected +++ b/tests/custom/transform/function/variant/var_04/stdout.expected @@ -1,7 +1,7 @@ Generating models for function.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: function.solution diff --git a/tests/custom/tugce_1/stdout.expected b/tests/custom/tugce_1/stdout.expected index c9088e59f..36da754d3 100644 --- a/tests/custom/tugce_1/stdout.expected +++ b/tests/custom/tugce_1/stdout.expected @@ -1,7 +1,7 @@ Generating models for tugce_1.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running solver: chuffed Copying solution to: tugce_1.solution language Essence 1.3 diff --git a/tests/custom/variant-motif/stdout.expected b/tests/custom/variant-motif/stdout.expected index 548ed9425..d766f6653 100644 --- a/tests/custom/variant-motif/stdout.expected +++ b/tests/custom/variant-motif/stdout.expected @@ -1,7 +1,7 @@ Generating models for motif.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime data/zkc.param +Savile Row: conjure-output/model000001.eprime data/zkc.param Running minion for domain filtering. Running solver: minion edges: [(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (1, 11), (1, 12), (1, 13), (1, 14), (1, 18), (1, 20), (1, 22), (1, 32), (2, 3), (2, 4), (2, 8), (2, 14), (2, 18), (2, 20), (2, 22), (2, 31), (3, 4), (3, 8), (3, 9), (3, 10), (3, 14), (3, 28), (3, 29), (3, 33), (4, 8), (4, 13), (4, 14), (5, 7), (5, 11), (6, 7), (6, 11), (6, 17), (7, 17), (9, 33), (10, 34), (14, 34), (15, 33), (15, 34), (16, 33), (16, 34), (19, 33), (19, 34), (20, 34), (21, 33), (21, 34), (24, 26), (25, 28), (31, 33), (32, 33)] From a09cf29cfcf7e3114cd0210f5c94b7238fd84816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 00:31:01 +0000 Subject: [PATCH 021/124] save logs separately in stats.json --- src/Conjure/UI/SolveStats.hs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 0e9b4aef8..e72b82cbc 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -27,7 +27,8 @@ data SolveStats = SolveStats computer :: String, timestamp :: UTCTime, conjureVersion :: String, - savileRowVersion :: String + savileRowVersion :: String, + logs :: Maybe String } deriving (Eq, Ord, Show, Data, Typeable, Generic) @@ -37,7 +38,7 @@ instance ToJSON SolveStats where toJSON = genericToJSON jsonOptions instance FromJSON SolveStats where parseJSON = genericParseJSON jsonOptions -data SolveStatus = OK | TimeOut | MemOut | Error Text +data SolveStatus = OK | TimeOut | MemOut | Error deriving (Eq, Ord, Show, Data, Typeable, Generic) instance Hashable SolveStatus @@ -55,7 +56,7 @@ mkSolveStats Solve {..} exitCodeSR rawInfo stdoutSR = do | M.lookup "SolverTimeOut" info == Just "1" = TimeOut | T.isInfixOf "Savile Row timed out." stdoutSR = TimeOut | T.isInfixOf "java.lang.OutOfMemoryError" stdoutSR = MemOut - | exitCodeSR /= 0 = Error stdoutSR + | exitCodeSR /= 0 = Error | otherwise = OK totalTime | Just srTotalTime <- M.lookup "SavileRowTotalTime" info >>= readMay, @@ -67,5 +68,6 @@ mkSolveStats Solve {..} exitCodeSR rawInfo stdoutSR = do timestamp <- getCurrentTime let conjureVersion = repositoryVersion savileRowVersion <- head . lines . textToString <$> sh (run "savilerow" ["-help"]) + let logs = if status == Error then Just (textToString stdoutSR) else Nothing return SolveStats {..} mkSolveStats _ _ _ _ = bug "mkSolveStats" From 1837dba1fa509507fa5928d184ca47554c4507f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 07:58:33 +0000 Subject: [PATCH 022/124] always keep SR logs --- src/Conjure/UI/SolveStats.hs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index e72b82cbc..b9f8608b2 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -9,10 +9,10 @@ import Conjure.Prelude import Conjure.RepositoryVersion (repositoryVersion) import Conjure.UI (UI (..)) import Data.HashMap.Strict qualified as M -- unordered-containers -import Data.Text qualified as T (isInfixOf) -- text +import Data.Text qualified as T (isInfixOf, unlines) -- text import Data.Time (UTCTime, getCurrentTime) -- time import Network.HostName (getHostName) -- hostname -import Shelly (run) +import Shelly (run) -- shelly data SolveStats = SolveStats { status :: SolveStatus, @@ -28,7 +28,7 @@ data SolveStats = SolveStats timestamp :: UTCTime, conjureVersion :: String, savileRowVersion :: String, - logs :: Maybe String + savileRowLogs :: M.HashMap String String } deriving (Eq, Ord, Show, Data, Typeable, Generic) @@ -47,15 +47,16 @@ instance ToJSON SolveStatus where toJSON = genericToJSON jsonOptions instance FromJSON SolveStatus where parseJSON = genericParseJSON jsonOptions -mkSolveStats :: UI -> Int -> String -> Text -> IO SolveStats -mkSolveStats Solve {..} exitCodeSR rawInfo stdoutSR = do +mkSolveStats :: UI -> (Int, Text, Text) -> String -> IO SolveStats +mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do + let combinedSR = T.unlines [stdoutSR, stderrSR] let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines rawInfo)] status | M.lookup "SavileRowTimeOut" info == Just "1" = TimeOut | M.lookup "SavileRowClauseOut" info == Just "1" = TimeOut | M.lookup "SolverTimeOut" info == Just "1" = TimeOut - | T.isInfixOf "Savile Row timed out." stdoutSR = TimeOut - | T.isInfixOf "java.lang.OutOfMemoryError" stdoutSR = MemOut + | T.isInfixOf "Savile Row timed out." combinedSR = TimeOut + | T.isInfixOf "java.lang.OutOfMemoryError" combinedSR = MemOut | exitCodeSR /= 0 = Error | otherwise = OK totalTime @@ -68,6 +69,11 @@ mkSolveStats Solve {..} exitCodeSR rawInfo stdoutSR = do timestamp <- getCurrentTime let conjureVersion = repositoryVersion savileRowVersion <- head . lines . textToString <$> sh (run "savilerow" ["-help"]) - let logs = if status == Error then Just (textToString stdoutSR) else Nothing + let savileRowLogs = + M.fromList + [ ("exitCode", show exitCodeSR), + ("stdout", textToString stdoutSR), + ("stderr", textToString stderrSR) + ] return SolveStats {..} -mkSolveStats _ _ _ _ = bug "mkSolveStats" +mkSolveStats _ _ _ = bug "mkSolveStats" From c3b2e2f6e46b48f9586adca395b96a7ab7d92ede Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 08:09:46 +0000 Subject: [PATCH 023/124] always keep SR logs - oops --- src/Conjure/UI/MainHelper.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 754e3ae45..469e1a31f 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -1116,7 +1116,7 @@ srCleanUp outBase ui@Solve{..} stdoutSR solutions = do let srInfoFilename = mkFilename ".eprime-info" let statsFilename = mkFilename ".stats.json" srInfoContent <- liftIO $ readFileIfExists srInfoFilename - stats <- mkSolveStats ui exitCodeSR (fromMaybe "" srInfoContent) combinedSR + stats <- mkSolveStats ui (exitCodeSR, stdoutSR, stderrSR) (fromMaybe "" srInfoContent) writeFile statsFilename (render lineWidth (toJSON stats)) if | T.isInfixOf "Savile Row timed out." combinedSR -> From ea6b31bd5abe4aa33619af9bb535ecdfab300d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 09:34:52 +0000 Subject: [PATCH 024/124] avoid absolute path in testing --- tests/custom/absoluteExistingEprimes/run.sh | 8 ++++---- tests/custom/absoluteExistingEprimes/stdout.expected | 12 ------------ 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/tests/custom/absoluteExistingEprimes/run.sh b/tests/custom/absoluteExistingEprimes/run.sh index f97d4e50a..4a1eb8a3c 100755 --- a/tests/custom/absoluteExistingEprimes/run.sh +++ b/tests/custom/absoluteExistingEprimes/run.sh @@ -19,11 +19,11 @@ conjure solve test.essence --use-existing-models=some/other/dir/model000001.epri echo "" conjure solve test.essence --use-existing-models=some/other/dir/model000002.eprime -o conjure-output-2 -echo "" -conjure solve test.essence --use-existing-models=${PWD}/some/other/dir/model000001.eprime -o conjure-output-2-1 +# echo "" +# conjure solve test.essence --use-existing-models=${PWD}/some/other/dir/model000001.eprime -o conjure-output-2-1 -echo "" -conjure solve test.essence --use-existing-models=${PWD}/some/other/dir/model000002.eprime -o conjure-output-2-2 +# echo "" +# conjure solve test.essence --use-existing-models=${PWD}/some/other/dir/model000002.eprime -o conjure-output-2-2 rm -rf conjure-output* some *.solution diff --git a/tests/custom/absoluteExistingEprimes/stdout.expected b/tests/custom/absoluteExistingEprimes/stdout.expected index 579f878b1..2ab923482 100644 --- a/tests/custom/absoluteExistingEprimes/stdout.expected +++ b/tests/custom/absoluteExistingEprimes/stdout.expected @@ -22,15 +22,3 @@ Savile Row: some/other/dir/model000002.eprime Running minion for domain filtering. Running solver: minion Copying solution to: test.solution - -Using existing models. -Savile Row: /Users/ozgurakgun/repos/github/conjure/tests/custom/absoluteExistingEprimes/some/other/dir/model000001.eprime -Running minion for domain filtering. -Running solver: minion -Copying solution to: test.solution - -Using existing models. -Savile Row: /Users/ozgurakgun/repos/github/conjure/tests/custom/absoluteExistingEprimes/some/other/dir/model000002.eprime -Running minion for domain filtering. -Running solver: minion -Copying solution to: test.solution From 64d10a74c083dd48713d63a3d39c5894c788f88c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 09:45:00 +0000 Subject: [PATCH 025/124] rename to Containerfile --- .github/workflows/{docker-publish.yml => publish-ghcr.yml} | 6 +++--- .github/workflows/test.yml | 2 +- Dockerfile => Containerfile | 0 docs/installation.rst | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) rename .github/workflows/{docker-publish.yml => publish-ghcr.yml} (96%) rename Dockerfile => Containerfile (100%) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/publish-ghcr.yml similarity index 96% rename from .github/workflows/docker-publish.yml rename to .github/workflows/publish-ghcr.yml index e60979ec6..ee34380ed 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/publish-ghcr.yml @@ -1,4 +1,4 @@ -name: Publishing Docker image to ghcr.io +name: Publishing container on ghcr.io # This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by @@ -19,8 +19,8 @@ on: - "v*.*.*" pull_request: # and for PRs that edit the docker files paths: - - Dockerfile - - .github/workflows/docker-publish.yml + - Containerfile + - .github/workflows/publish-ghcr.yml # other branches that want testing must create a PR diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5915c794a..db7d2681d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,7 +8,7 @@ on: paths: - conjure-cp.cabal - Makefile - - Dockerfile # this is here because the docker-publish.yml depends on successful completion of this action + - Containerfile # this is here because publish-ghcr.yml depends on successful completion of this action - src/** - tests/** - etc/build/** diff --git a/Dockerfile b/Containerfile similarity index 100% rename from Dockerfile rename to Containerfile diff --git a/docs/installation.rst b/docs/installation.rst index 444eaefb1..6a4044ed5 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -79,7 +79,7 @@ We assume you are on a Linux system here, though steps for macOS are very simila - Download the installer. A file called ``cplex_studio2211.linux_x86_64.bin``. - Run the installer and follow the instructions. - You can install CPLEX to its default location, however a user-level install is also possible. Assuming you installed it at: ``/home/USER/cplex-install`` for the remaining instructions -- Create a file called ``/home/USER/cplex-install/Dockerfile`` with the following contents +- Create a file called ``/home/USER/cplex-install/Containerfile`` with the following contents .. code-block:: bash From 3e4370194cfe09d7fe05e71b3e186934d186fdea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 09:49:12 +0000 Subject: [PATCH 026/124] update github action versions --- .github/workflows/build.yml | 4 ++-- .github/workflows/publish-ghcr.yml | 10 +++++----- .github/workflows/release.yml | 4 ++-- .github/workflows/solvers.yml | 2 +- .github/workflows/test-coverage.yml | 4 ++-- .github/workflows/test.yml | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 32800a6e1..0090e612b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -38,14 +38,14 @@ jobs: steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 name: Checkout repository - name: Stack version shell: bash run: GHC_VERSION=${{ matrix.GHC_VERSION }} make stack.yaml - - uses: actions/cache@v3 + - uses: actions/cache@v4 name: Cache stack with: path: | diff --git a/.github/workflows/publish-ghcr.yml b/.github/workflows/publish-ghcr.yml index ee34380ed..9da172eca 100644 --- a/.github/workflows/publish-ghcr.yml +++ b/.github/workflows/publish-ghcr.yml @@ -50,16 +50,16 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Set up buildx (Docker CLI plugin for extended build capabilities with BuildKit) - name: Setup Docker buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 # Login against a Docker registry except on PR - name: Log into registry if: github.event_name != 'pull_request' - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -68,14 +68,14 @@ jobs: # Extract metadata (tags, labels) for Docker - name: Extract Docker metadata id: meta - uses: docker/metadata-action@v4 + uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} # Build and push Docker image with Buildx (don't push on PR) - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: context: . push: ${{ github.event_name != 'pull_request' }} # do not push if this was triggered by a PR diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 776414e7f..a09de21a3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,14 +40,14 @@ jobs: steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 name: Checkout repository - name: Stack version shell: bash run: GHC_VERSION=${{ matrix.GHC_VERSION }} make stack.yaml - - uses: actions/cache@v3 + - uses: actions/cache@v4 name: Cache stack with: path: | diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index 799918c48..8997bfd6e 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -36,7 +36,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 name: Checkout repository - name: Run sccache-cache diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index 6d2d47daa..28b5d638e 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -29,14 +29,14 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 name: Checkout repository - name: Stack version shell: bash run: make stack.yaml - - uses: actions/cache@v3 + - uses: actions/cache@v4 name: Cache stack with: path: | diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index db7d2681d..910303c45 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,14 +42,14 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 name: Checkout repository - name: Stack version shell: bash run: make stack.yaml - - uses: actions/cache@v3 + - uses: actions/cache@v4 name: Cache stack with: path: | From ecf16d5cbf8be688273f582d3566c32b9ff4abe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 09:54:03 +0000 Subject: [PATCH 027/124] use Dockerfile --- .github/workflows/test.yml | 2 +- Containerfile => Dockerfile | 0 docs/installation.rst | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename Containerfile => Dockerfile (100%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 910303c45..25d773bbd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,7 +8,7 @@ on: paths: - conjure-cp.cabal - Makefile - - Containerfile # this is here because publish-ghcr.yml depends on successful completion of this action + - Dockerfile # this is here because publish-ghcr.yml depends on successful completion of this action - src/** - tests/** - etc/build/** diff --git a/Containerfile b/Dockerfile similarity index 100% rename from Containerfile rename to Dockerfile diff --git a/docs/installation.rst b/docs/installation.rst index 6a4044ed5..444eaefb1 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -79,7 +79,7 @@ We assume you are on a Linux system here, though steps for macOS are very simila - Download the installer. A file called ``cplex_studio2211.linux_x86_64.bin``. - Run the installer and follow the instructions. - You can install CPLEX to its default location, however a user-level install is also possible. Assuming you installed it at: ``/home/USER/cplex-install`` for the remaining instructions -- Create a file called ``/home/USER/cplex-install/Containerfile`` with the following contents +- Create a file called ``/home/USER/cplex-install/Dockerfile`` with the following contents .. code-block:: bash From a479e1b048b83e412726ef86d89d31f00c62930c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 10:04:20 +0000 Subject: [PATCH 028/124] attempting to make the docker build faster by allowing dependency caching --- Dockerfile | 1 + Makefile | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/Dockerfile b/Dockerfile index 3749b52da..3df743bf9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -56,6 +56,7 @@ RUN PROCESSES=2 etc/build/install-z3.sh COPY . . # Building Conjure and copying Savile Row +RUN make installdeps RUN make install # List the binaries diff --git a/Makefile b/Makefile index b039e5c44..6dcf1f6b8 100644 --- a/Makefile +++ b/Makefile @@ -53,6 +53,15 @@ install: @echo @echo +# mainly for CI +.PHONY: installdeps +installdeps: + stack --local-bin-path ${BIN_DIR} setup; + bash etc/build/version.sh + stack runhaskell etc/build/gen_Operator.hs + stack runhaskell etc/build/gen_Expression.hs + stack build --only-dependencies + .PHONY: test test: @if ${COVERAGE}; then \ From eade4da535ef3edd5e4f17d957c5467171606b94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 10:09:08 +0000 Subject: [PATCH 029/124] do not generate repo version as that would limit caching --- Makefile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Makefile b/Makefile index 6dcf1f6b8..cb23e39c6 100644 --- a/Makefile +++ b/Makefile @@ -57,9 +57,6 @@ install: .PHONY: installdeps installdeps: stack --local-bin-path ${BIN_DIR} setup; - bash etc/build/version.sh - stack runhaskell etc/build/gen_Operator.hs - stack runhaskell etc/build/gen_Expression.hs stack build --only-dependencies .PHONY: test From b7eaea6171482bb64b09c7ba87b6ec85a4333b33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 10:18:35 +0000 Subject: [PATCH 030/124] update test file --- tests/allsolvers/stdout.expected | 48 ++++++++++++++++---------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/tests/allsolvers/stdout.expected b/tests/allsolvers/stdout.expected index 96130c07e..b70ac2536 100644 --- a/tests/allsolvers/stdout.expected +++ b/tests/allsolvers/stdout.expected @@ -2,7 +2,7 @@ default, minion Generating models for test.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: test.solution @@ -11,7 +11,7 @@ Copying solution to: test.solution ======================================== minion Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: test.solution @@ -20,7 +20,7 @@ Copying solution to: test.solution ======================================== chuffed Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: chuffed Copying solution to: test.solution @@ -29,7 +29,7 @@ Copying solution to: test.solution ======================================== or-tools Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: or-tools Copying solution to: test.solution @@ -38,7 +38,7 @@ Copying solution to: test.solution ======================================== glucose Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: glucose Copying solution to: test.solution @@ -47,7 +47,7 @@ Copying solution to: test.solution ======================================== glucose-syrup Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: glucose-syrup Copying solution to: test.solution @@ -56,7 +56,7 @@ Copying solution to: test.solution ======================================== lingeling Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: lingeling Copying solution to: test.solution @@ -65,7 +65,7 @@ Copying solution to: test.solution ======================================== plingeling Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: plingeling Copying solution to: test.solution @@ -74,7 +74,7 @@ Copying solution to: test.solution ======================================== treengeling Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: treengeling Copying solution to: test.solution @@ -83,7 +83,7 @@ Copying solution to: test.solution ======================================== cadical Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: cadical Copying solution to: test.solution @@ -92,7 +92,7 @@ Copying solution to: test.solution ======================================== bc_minisat_all --number-of-solutions=all Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: bc_minisat_all Copying solution to: test-000001.solution @@ -107,7 +107,7 @@ Copying solution to: test-000007.solution ======================================== nbc_minisat_all --number-of-solutions=all Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: nbc_minisat_all Copying solution to: test-000001.solution @@ -124,7 +124,7 @@ open-wbo Generating models for testo.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: open-wbo Copying solution to: testo.solution @@ -135,7 +135,7 @@ boolector Generating models for test.essence Generated models: model000001.eprime Saved under: conjure-output -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: boolector Copying solution to: test.solution @@ -144,7 +144,7 @@ Copying solution to: test.solution ======================================== boolector-bv Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: boolector-bv Copying solution to: test.solution @@ -153,7 +153,7 @@ Copying solution to: test.solution ======================================== yices Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: yices Copying solution to: test.solution @@ -162,7 +162,7 @@ Copying solution to: test.solution ======================================== yices-bv Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: yices-bv Copying solution to: test.solution @@ -171,7 +171,7 @@ Copying solution to: test.solution ======================================== yices-lia Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: yices-lia Copying solution to: test.solution @@ -180,7 +180,7 @@ Copying solution to: test.solution ======================================== yices-idl Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: yices-idl Copying solution to: test.solution @@ -189,7 +189,7 @@ Copying solution to: test.solution ======================================== z3 Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: z3 Copying solution to: test.solution @@ -198,7 +198,7 @@ Copying solution to: test.solution ======================================== z3-bv Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: z3-bv Copying solution to: test.solution @@ -207,7 +207,7 @@ Copying solution to: test.solution ======================================== z3-lia Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: z3-lia Copying solution to: test.solution @@ -216,7 +216,7 @@ Copying solution to: test.solution ======================================== z3-nia Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: z3-nia Copying solution to: test.solution @@ -225,7 +225,7 @@ Copying solution to: test.solution ======================================== z3-idl Using cached models. -Savile Row: model000001.eprime +Savile Row: conjure-output/model000001.eprime Running minion for domain filtering. Running solver: z3-idl No solutions found. From bf9a6c75357128dcaacb9a7193d9500766a3a579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 10:20:46 +0000 Subject: [PATCH 031/124] need stack for installdeps --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index cb23e39c6..6ba770b86 100644 --- a/Makefile +++ b/Makefile @@ -56,6 +56,8 @@ install: # mainly for CI .PHONY: installdeps installdeps: + bash etc/build/install-stack.sh + make stack.yaml stack --local-bin-path ${BIN_DIR} setup; stack build --only-dependencies From 0880bac89c5986ae90caaa5e940d21ce3080e976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 14:08:05 +0000 Subject: [PATCH 032/124] renamed to Dockerfile --- .github/workflows/publish-ghcr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-ghcr.yml b/.github/workflows/publish-ghcr.yml index 9da172eca..e32384622 100644 --- a/.github/workflows/publish-ghcr.yml +++ b/.github/workflows/publish-ghcr.yml @@ -19,7 +19,7 @@ on: - "v*.*.*" pull_request: # and for PRs that edit the docker files paths: - - Containerfile + - Dockerfile - .github/workflows/publish-ghcr.yml # other branches that want testing must create a PR From befa46578396caf45f76e6d6f7fea3e0fd1f2748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 14:15:46 +0000 Subject: [PATCH 033/124] change how we report version info --- src/Conjure/UI.hs | 7 ++++--- src/Conjure/UI/SolveStats.hs | 5 ++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Conjure/UI.hs b/src/Conjure/UI.hs index ead32143f..ac90e8c27 100644 --- a/src/Conjure/UI.hs +++ b/src/Conjure/UI.hs @@ -1,7 +1,7 @@ {-# LANGUAGE DeriveDataTypeable, DeriveGeneric #-} {-# OPTIONS_GHC -fno-cse #-} -- stupid cmdargs -module Conjure.UI ( UI(..), OutputFormat(..), ui ) where +module Conjure.UI ( UI(..), OutputFormat(..), ui, versionLine ) where -- conjure import Conjure.Prelude @@ -1462,8 +1462,7 @@ ui = modes &= helpArg [explicit, name "help"] &= versionArg [explicit, name "version"] &= summary (unlines [ "Conjure: The Automated Constraint Modelling Tool" - , "Release version " ++ showVersion version - , "Repository version " ++ repositoryVersion + , versionLine ]) &= help "The command line interface of Conjure takes a command name as the first argument \ \followed by more arguments depending on the command.\n\ @@ -1471,3 +1470,5 @@ ui = modes \For details of a command, pass the --help flag after the command name.\n\ \For example: 'conjure translate-solution --help'" +versionLine :: String +versionLine = "Conjure v" ++ showVersion version ++ " (Repository version " ++ repositoryVersion ++ ")" diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index b9f8608b2..41c9f34cc 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -6,8 +6,7 @@ module Conjure.UI.SolveStats (mkSolveStats, SolveStats (..), SolveStatus (..)) w import Conjure.Bug import Conjure.Prelude -import Conjure.RepositoryVersion (repositoryVersion) -import Conjure.UI (UI (..)) +import Conjure.UI (UI (..), versionLine) import Data.HashMap.Strict qualified as M -- unordered-containers import Data.Text qualified as T (isInfixOf, unlines) -- text import Data.Time (UTCTime, getCurrentTime) -- time @@ -67,7 +66,7 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do savilerowInfo = info computer <- getHostName timestamp <- getCurrentTime - let conjureVersion = repositoryVersion + let conjureVersion = versionLine savileRowVersion <- head . lines . textToString <$> sh (run "savilerow" ["-help"]) let savileRowLogs = M.fromList From 8a29b2fe33e5bd913c3dce250fdbb71038c1b822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 14:22:02 +0000 Subject: [PATCH 034/124] attempting to cache more --- Dockerfile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3df743bf9..4f171cb34 100644 --- a/Dockerfile +++ b/Dockerfile @@ -52,11 +52,13 @@ RUN PROCESSES=2 etc/build/install-ortools.sh RUN PROCESSES=2 etc/build/install-yices.sh RUN PROCESSES=2 etc/build/install-z3.sh -# Copy everything -COPY . . - -# Building Conjure and copying Savile Row +# An attempt to cache more +COPY Makefile Makefile RUN make installdeps + +# Copy the rest +COPY etc etc +COPY src src RUN make install # List the binaries From dfd90707d6c45791ec6799c66acbda6caf0dfc57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 16:22:25 +0000 Subject: [PATCH 035/124] installdeps needs etc/hs-deps too --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 4f171cb34..cd05973dc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -54,6 +54,7 @@ RUN PROCESSES=2 etc/build/install-z3.sh # An attempt to cache more COPY Makefile Makefile +COPY etc/hs-deps etc/hs-deps RUN make installdeps # Copy the rest From 734889aa0a232669b154deb3f298873179bbe8c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 16:22:53 +0000 Subject: [PATCH 036/124] tidier way of storing sr stdout/stderr --- src/Conjure/UI/SolveStats.hs | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 41c9f34cc..d58daea44 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -8,7 +8,7 @@ import Conjure.Bug import Conjure.Prelude import Conjure.UI (UI (..), versionLine) import Data.HashMap.Strict qualified as M -- unordered-containers -import Data.Text qualified as T (isInfixOf, unlines) -- text +import Data.Text qualified as T (isInfixOf, null, unlines) -- text import Data.Time (UTCTime, getCurrentTime) -- time import Network.HostName (getHostName) -- hostname import Shelly (run) -- shelly @@ -27,7 +27,7 @@ data SolveStats = SolveStats timestamp :: UTCTime, conjureVersion :: String, savileRowVersion :: String, - savileRowLogs :: M.HashMap String String + savileRowLogs :: SavileRowLogs } deriving (Eq, Ord, Show, Data, Typeable, Generic) @@ -46,16 +46,29 @@ instance ToJSON SolveStatus where toJSON = genericToJSON jsonOptions instance FromJSON SolveStatus where parseJSON = genericParseJSON jsonOptions +data SavileRowLogs = SavileRowLogs + { exitCode :: Int, + stderr :: Maybe [String], + stdout :: Maybe [String] + } + deriving (Eq, Ord, Show, Data, Typeable, Generic) + +instance Hashable SavileRowLogs + +instance ToJSON SavileRowLogs where toJSON = genericToJSON jsonOptions + +instance FromJSON SavileRowLogs where parseJSON = genericParseJSON jsonOptions + mkSolveStats :: UI -> (Int, Text, Text) -> String -> IO SolveStats mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do let combinedSR = T.unlines [stdoutSR, stderrSR] let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines rawInfo)] status + | T.isInfixOf "java.lang.OutOfMemoryError" combinedSR = MemOut + | T.isInfixOf "Savile Row timed out." combinedSR = TimeOut | M.lookup "SavileRowTimeOut" info == Just "1" = TimeOut | M.lookup "SavileRowClauseOut" info == Just "1" = TimeOut | M.lookup "SolverTimeOut" info == Just "1" = TimeOut - | T.isInfixOf "Savile Row timed out." combinedSR = TimeOut - | T.isInfixOf "java.lang.OutOfMemoryError" combinedSR = MemOut | exitCodeSR /= 0 = Error | otherwise = OK totalTime @@ -69,10 +82,10 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do let conjureVersion = versionLine savileRowVersion <- head . lines . textToString <$> sh (run "savilerow" ["-help"]) let savileRowLogs = - M.fromList - [ ("exitCode", show exitCodeSR), - ("stdout", textToString stdoutSR), - ("stderr", textToString stderrSR) - ] + SavileRowLogs + { exitCode = exitCodeSR, + stdout = if T.null stdoutSR then Nothing else Just (lines (textToString stdoutSR)), + stderr = if T.null stderrSR then Nothing else Just (lines (textToString stderrSR)) + } return SolveStats {..} mkSolveStats _ _ _ = bug "mkSolveStats" From 1877c6a8484efc8c231185d93cc1ac5946e6e45b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 16:56:08 +0000 Subject: [PATCH 037/124] savilerow -XX:+UseSerialGC --- etc/savilerow/savilerow | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/savilerow/savilerow b/etc/savilerow/savilerow index f3a037c6c..962baf884 100755 --- a/etc/savilerow/savilerow +++ b/etc/savilerow/savilerow @@ -17,11 +17,11 @@ case "$@" in cgcreate -g cpu:/$GROUP_NAME cgset -r cpu.cfs_quota_us=1000000 $GROUP_NAME cgset -r cpu.cfs_period_us=1000000 $GROUP_NAME - cgexec -g cpu:$GROUP_NAME java -ea -XX:ParallelGCThreads=1 -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" "$@" + cgexec -g cpu:$GROUP_NAME java -ea -XX:+UseSerialGC -Djava.security.egd=file:/dev/urandom -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" "$@" cgdelete -g cpu:/$GROUP_NAME fi ;; *) - java -ea -XX:ParallelGCThreads=1 -Djava.security.egd=file:/dev/urandom -Djava.library.path=$DIR/lib/ -Xmx8G -Xms8G -Xss1G -jar "$DIR/savilerow.jar" "$@" + java -ea -XX:+UseSerialGC -Djava.security.egd=file:/dev/urandom -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" "$@" ;; esac From 590f1283377a6301d9a26942b4bf692ded96ab08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 17:04:52 +0000 Subject: [PATCH 038/124] installdeps: copy the conjure-cp.cabal file --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index cd05973dc..b38e562c7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -55,6 +55,7 @@ RUN PROCESSES=2 etc/build/install-z3.sh # An attempt to cache more COPY Makefile Makefile COPY etc/hs-deps etc/hs-deps +COPY conjure-cp.cabal conjure-cp.cabal RUN make installdeps # Copy the rest From 18411fd7653b9160fcf16e4a7fdd75298d5f356b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 17:25:19 +0000 Subject: [PATCH 039/124] copy the license file too --- Dockerfile | 1 + LICENSE | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b38e562c7..fa507365e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -61,6 +61,7 @@ RUN make installdeps # Copy the rest COPY etc etc COPY src src +COPY LICENSE LICENSE RUN make install # List the binaries diff --git a/LICENSE b/LICENSE index e8ae984e2..4f3372824 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2009-2023 Özgür Akgün +Copyright 2009-2024 Özgür Akgün School of Computer Science, University of St Andrews All rights reserved. From 8f52ebdd9dabd8a29a886a03c78474845db65e5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 17:46:16 +0000 Subject: [PATCH 040/124] Copy the allsolvers test case --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index fa507365e..b43a86020 100644 --- a/Dockerfile +++ b/Dockerfile @@ -68,6 +68,10 @@ RUN make install RUN ls -l /root/.local/bin RUN du -sh /root/.local/bin +# Copy the allsolvers test case +RUN mkdir -p tests +COPY tests/allsolvers tests/allsolvers + # a test to see if all solvers work as expected RUN tests/allsolvers/test.sh From 69bc71ffa6e1a4e1a0a2e22681867fef61f7b122 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 9 Mar 2024 21:18:57 +0000 Subject: [PATCH 041/124] savilerow back to the G1GC garbage collector --- etc/savilerow/savilerow | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/savilerow/savilerow b/etc/savilerow/savilerow index 962baf884..d57cb4cbc 100755 --- a/etc/savilerow/savilerow +++ b/etc/savilerow/savilerow @@ -17,11 +17,11 @@ case "$@" in cgcreate -g cpu:/$GROUP_NAME cgset -r cpu.cfs_quota_us=1000000 $GROUP_NAME cgset -r cpu.cfs_period_us=1000000 $GROUP_NAME - cgexec -g cpu:$GROUP_NAME java -ea -XX:+UseSerialGC -Djava.security.egd=file:/dev/urandom -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" "$@" + cgexec -g cpu:$GROUP_NAME java -ea -XX:+UseG1GC -XX:ParallelGCThreads=1 -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" "$@" cgdelete -g cpu:/$GROUP_NAME fi ;; *) - java -ea -XX:+UseSerialGC -Djava.security.egd=file:/dev/urandom -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" "$@" + java -ea -XX:+UseG1GC -XX:ParallelGCThreads=1 -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" "$@" ;; esac From 8015548320f3dfdb1fdd82be44dd1ec0429cafb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sun, 10 Mar 2024 08:44:24 +0000 Subject: [PATCH 042/124] run etc/build/version.sh before building the docker container --- .github/workflows/publish-ghcr.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/publish-ghcr.yml b/.github/workflows/publish-ghcr.yml index e32384622..49f4a54c2 100644 --- a/.github/workflows/publish-ghcr.yml +++ b/.github/workflows/publish-ghcr.yml @@ -72,6 +72,10 @@ jobs: with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + - name: Extract git version + shell: bash + run: bash etc/build/version.sh + # Build and push Docker image with Buildx (don't push on PR) - name: Build and push Docker image id: build-and-push From 4397a6e3d7bfc3ef7f899debe401c35c8db0dec9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sun, 10 Mar 2024 10:58:31 +0000 Subject: [PATCH 043/124] Update SR version to 1aded299f (2024-03-10 10:56:22 +0000) -- better handling OOM --- etc/savilerow/savilerow.jar | Bin 806881 -> 807972 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/etc/savilerow/savilerow.jar b/etc/savilerow/savilerow.jar index 13b1bd62e749ed4236bb97a364899de797804553..a877b1bb94e853fe7c867d48bfc1a3cf42f966f5 100644 GIT binary patch delta 22721 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�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 From 1928657fd7fe65a29a963800680eec2c18bf85c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sun, 10 Mar 2024 11:08:59 +0000 Subject: [PATCH 044/124] Update installation.rst --- docs/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index 444eaefb1..f727f507b 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -84,7 +84,7 @@ We assume you are on a Linux system here, though steps for macOS are very simila .. code-block:: bash FROM ghcr.io/conjure-cp/conjure@sha256:VERSION - COPY cplex /root/.local/ + COPY cplex /root/.local/cplex ENV CPLEX_PATH /root/.local/cplex/bin/x86-64_linux/libcplex2211.so - In the ``/home/USER/cplex-install`` directory execute: ``podman build -t conjure-cplex .`` From 8908533aec17d6c879816d9cdecc67acdecd0a6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sun, 10 Mar 2024 11:44:33 +0000 Subject: [PATCH 045/124] SR OOM --- src/Conjure/UI/SolveStats.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index d58daea44..2feec8f28 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -65,6 +65,7 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines rawInfo)] status | T.isInfixOf "java.lang.OutOfMemoryError" combinedSR = MemOut + | T.isInfixOf "Out of Memory" combinedSR = MemOut | T.isInfixOf "Savile Row timed out." combinedSR = TimeOut | M.lookup "SavileRowTimeOut" info == Just "1" = TimeOut | M.lookup "SavileRowClauseOut" info == Just "1" = TimeOut From 6d955d78f3d7a3165b1cbd603ef28fb498cdd7ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 11 Mar 2024 08:18:56 +0000 Subject: [PATCH 046/124] catch another specific error message from SR "type error: undefined identifier" --- src/Conjure/UI/SolveStats.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 2feec8f28..6aa37690f 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -67,6 +67,7 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do | T.isInfixOf "java.lang.OutOfMemoryError" combinedSR = MemOut | T.isInfixOf "Out of Memory" combinedSR = MemOut | T.isInfixOf "Savile Row timed out." combinedSR = TimeOut + | T.isInfixOf "type error: undefined identifier" combinedSR = Error | M.lookup "SavileRowTimeOut" info == Just "1" = TimeOut | M.lookup "SavileRowClauseOut" info == Just "1" = TimeOut | M.lookup "SolverTimeOut" info == Just "1" = TimeOut From 22fb0f149f7a000fe75761df1d1890553e1e4b7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 11 Mar 2024 08:29:57 +0000 Subject: [PATCH 047/124] catch another mesage: time out: time limit reached --- src/Conjure/UI/SolveStats.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 6aa37690f..69f08e6ec 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -64,10 +64,11 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do let combinedSR = T.unlines [stdoutSR, stderrSR] let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines rawInfo)] status + | T.isInfixOf "type error: undefined identifier" combinedSR = Error | T.isInfixOf "java.lang.OutOfMemoryError" combinedSR = MemOut | T.isInfixOf "Out of Memory" combinedSR = MemOut | T.isInfixOf "Savile Row timed out." combinedSR = TimeOut - | T.isInfixOf "type error: undefined identifier" combinedSR = Error + | T.isInfixOf "time out: time limit reached" combinedSR = TimeOut | M.lookup "SavileRowTimeOut" info == Just "1" = TimeOut | M.lookup "SavileRowClauseOut" info == Just "1" = TimeOut | M.lookup "SolverTimeOut" info == Just "1" = TimeOut From 0f15a03aa924a10e79d9178d1df57b3fe1b6cce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 11 Mar 2024 10:19:46 +0000 Subject: [PATCH 048/124] consistent spelling of sr --- src/Conjure/UI/SolveStats.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 69f08e6ec..50ae690d8 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -26,8 +26,8 @@ data SolveStats = SolveStats computer :: String, timestamp :: UTCTime, conjureVersion :: String, - savileRowVersion :: String, - savileRowLogs :: SavileRowLogs + savilerowVersion :: String, + savilerowLogs :: SavileRowLogs } deriving (Eq, Ord, Show, Data, Typeable, Generic) From c50d7bfdcd728f21f6973c1ee4dea4e261737137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 11 Mar 2024 14:49:01 +0000 Subject: [PATCH 049/124] consistent spelling of sr (2) --- src/Conjure/UI/SolveStats.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 50ae690d8..7911d070f 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -83,8 +83,8 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do computer <- getHostName timestamp <- getCurrentTime let conjureVersion = versionLine - savileRowVersion <- head . lines . textToString <$> sh (run "savilerow" ["-help"]) - let savileRowLogs = + savilerowVersion <- head . lines . textToString <$> sh (run "savilerow" ["-help"]) + let savilerowLogs = SavileRowLogs { exitCode = exitCodeSR, stdout = if T.null stdoutSR then Nothing else Just (lines (textToString stdoutSR)), From 6cb0e9795a8efe4ff387070db0e2859a70753e79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 11 Mar 2024 14:54:46 +0000 Subject: [PATCH 050/124] catch MiniZinc errors as well --- src/Conjure/UI/SolveStats.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 7911d070f..791135ef2 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -65,6 +65,7 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines rawInfo)] status | T.isInfixOf "type error: undefined identifier" combinedSR = Error + | T.isInfixOf "MiniZinc error" combinedSR = Error | T.isInfixOf "java.lang.OutOfMemoryError" combinedSR = MemOut | T.isInfixOf "Out of Memory" combinedSR = MemOut | T.isInfixOf "Savile Row timed out." combinedSR = TimeOut From a5163f00ab6c3201e0e4804a2aa2ba2b3d84009a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 12 Mar 2024 11:17:10 +0000 Subject: [PATCH 051/124] capture more error messages --- src/Conjure/UI/SolveStats.hs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 791135ef2..0bf709856 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -64,8 +64,18 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do let combinedSR = T.unlines [stdoutSR, stderrSR] let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines rawInfo)] status - | T.isInfixOf "type error: undefined identifier" combinedSR = Error - | T.isInfixOf "MiniZinc error" combinedSR = Error + | or + [ T.isInfixOf msg combinedSR + | msg <- + [ "type error: undefined identifier", + "MiniZinc error", + "Check failed: ParseFlatzincFile", + "parse error: unexpected end-of-file after parsing number of clauses", + "error: Cannot open file", + "kissat: error: can not read" + ] + ] = + Error | T.isInfixOf "java.lang.OutOfMemoryError" combinedSR = MemOut | T.isInfixOf "Out of Memory" combinedSR = MemOut | T.isInfixOf "Savile Row timed out." combinedSR = TimeOut From 197fd8bf2d266b03044a53ad290faa95b7e4e113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 16 Mar 2024 10:35:05 +0000 Subject: [PATCH 052/124] catch one more kissat error message --- src/Conjure/UI/SolveStats.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 0bf709856..843259cb7 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -72,7 +72,8 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do "Check failed: ParseFlatzincFile", "parse error: unexpected end-of-file after parsing number of clauses", "error: Cannot open file", - "kissat: error: can not read" + "kissat: error: can not read", + "kissat: fatal error: maximum arena capacity" ] ] = Error From 591406fd270d779b01f0a5bd9ee543db6d5b1529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sun, 17 Mar 2024 14:05:02 +0000 Subject: [PATCH 053/124] catching another cplex error message (Error: syntax error, unexpected ]]) --- src/Conjure/UI/SolveStats.hs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 843259cb7..a8e83c118 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -68,12 +68,13 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do [ T.isInfixOf msg combinedSR | msg <- [ "type error: undefined identifier", - "MiniZinc error", + "MiniZinc error", -- minizinc "Check failed: ParseFlatzincFile", "parse error: unexpected end-of-file after parsing number of clauses", "error: Cannot open file", - "kissat: error: can not read", - "kissat: fatal error: maximum arena capacity" + "kissat: error: can not read", -- kissat + "kissat: fatal error: maximum arena capacity", -- kissat + "Error: syntax error, unexpected ]]" -- cplex ] ] = Error From 2388a5021064397c72f267e18bb8147028bca9e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sun, 17 Mar 2024 23:33:15 +0000 Subject: [PATCH 054/124] Update installation.rst --- docs/installation.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index f727f507b..32e8a08f4 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -67,8 +67,8 @@ See all available images on `Github Date: Wed, 20 Mar 2024 09:16:39 +0000 Subject: [PATCH 055/124] one more error message to catch (Check failure stack trace) --- src/Conjure/UI/SolveStats.hs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index a8e83c118..df1b4fefa 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -68,13 +68,14 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do [ T.isInfixOf msg combinedSR | msg <- [ "type error: undefined identifier", - "MiniZinc error", -- minizinc + "MiniZinc error: Memory violation detected and error message", -- minizinc "Check failed: ParseFlatzincFile", - "parse error: unexpected end-of-file after parsing number of clauses", + "parse error: unexpected end-of-file after parsing number of clauses", -- kissat "error: Cannot open file", "kissat: error: can not read", -- kissat "kissat: fatal error: maximum arena capacity", -- kissat - "Error: syntax error, unexpected ]]" -- cplex + "Error: syntax error, unexpected ]]", -- cplex + "*** Check failure stack trace: ***" -- or-tools ] ] = Error From a7e04a10b7bdd43e2d19c547e0099eb895d9f479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 23 Mar 2024 21:12:37 +0000 Subject: [PATCH 056/124] catching more mzn error messages --- src/Conjure/UI/SolveStats.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index df1b4fefa..db05b86bf 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -68,7 +68,7 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do [ T.isInfixOf msg combinedSR | msg <- [ "type error: undefined identifier", - "MiniZinc error: Memory violation detected and error message", -- minizinc + "MiniZinc error: Memory violation detected", -- minizinc "Check failed: ParseFlatzincFile", "parse error: unexpected end-of-file after parsing number of clauses", -- kissat "error: Cannot open file", From 42c8484fc431fae8115e9c86a67e1f9992e69205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 25 Mar 2024 11:15:00 +0000 Subject: [PATCH 057/124] install script for runsolver --- etc/build/install-runsolver.sh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100755 etc/build/install-runsolver.sh diff --git a/etc/build/install-runsolver.sh b/etc/build/install-runsolver.sh new file mode 100755 index 000000000..0c980d8b2 --- /dev/null +++ b/etc/build/install-runsolver.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# version as of 25 March 2024 +# alas, none of the published releases compile correctly +VERSION='3f923c08285bdc5186f995296e1c6bffa0588710' + +set -o errexit +set -o nounset + +export BIN_DIR=${BIN_DIR:-${HOME}/.local/bin} +export PROCESSES=${PROCESSES:-1} + + +rm -rf tmp-install-runsolver +mkdir tmp-install-runsolver +pushd tmp-install-runsolver +git clone https://github.com/utpalbora/runsolver.git +cd runsolver +git checkout $VERSION +cd src +make -j${PROCESSES} +cp runsolver +echo "runsolver executable is at ${BIN_DIR}/runsolver" +ls -l ${BIN_DIR}/runsolver +popd +rm -rf tmp-install-runsolver + From 9b76b02343b6c9c2c0cbb83074de68dbb5b83854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 25 Mar 2024 11:18:05 +0000 Subject: [PATCH 058/124] runsolver in Makefile and Dockerfile --- Dockerfile | 1 + Makefile | 1 + etc/build/install-runsolver.sh | 32 ++++++++++++++++++-------------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index b43a86020..bcea49efb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,6 +51,7 @@ RUN PROCESSES=2 etc/build/install-open-wbo.sh RUN PROCESSES=2 etc/build/install-ortools.sh RUN PROCESSES=2 etc/build/install-yices.sh RUN PROCESSES=2 etc/build/install-z3.sh +RUN PROCESSES=2 etc/build/install-runsolver.sh # An attempt to cache more COPY Makefile Makefile diff --git a/Makefile b/Makefile index 6ba770b86..729101097 100644 --- a/Makefile +++ b/Makefile @@ -157,4 +157,5 @@ solvers: @etc/build/silent-wrapper.sh etc/build/install-minizinc.sh @etc/build/silent-wrapper.sh etc/build/install-yices.sh @etc/build/silent-wrapper.sh etc/build/install-z3.sh + @etc/build/silent-wrapper.sh etc/build/install-runsolver.sh @if ls make-solvers-*.stderr make-solvers-*.stdout > /dev/null 2> /dev/null; then echo "At least one solver didn't build successfully."; exit 1; fi diff --git a/etc/build/install-runsolver.sh b/etc/build/install-runsolver.sh index 0c980d8b2..b63053bb5 100755 --- a/etc/build/install-runsolver.sh +++ b/etc/build/install-runsolver.sh @@ -10,18 +10,22 @@ set -o nounset export BIN_DIR=${BIN_DIR:-${HOME}/.local/bin} export PROCESSES=${PROCESSES:-1} +OS=$(uname) -rm -rf tmp-install-runsolver -mkdir tmp-install-runsolver -pushd tmp-install-runsolver -git clone https://github.com/utpalbora/runsolver.git -cd runsolver -git checkout $VERSION -cd src -make -j${PROCESSES} -cp runsolver -echo "runsolver executable is at ${BIN_DIR}/runsolver" -ls -l ${BIN_DIR}/runsolver -popd -rm -rf tmp-install-runsolver - +if [ "$OS" == "Linux" ]; then + rm -rf tmp-install-runsolver + mkdir tmp-install-runsolver + pushd tmp-install-runsolver + git clone https://github.com/utpalbora/runsolver.git + cd runsolver + git checkout $VERSION + cd src + make -j${PROCESSES} + cp runsolver + echo "runsolver executable is at ${BIN_DIR}/runsolver" + ls -l ${BIN_DIR}/runsolver + popd + rm -rf tmp-install-runsolver +else + echo "Your OS is (according to uname): ${OS} -- runsolver only works on linux." +fi From 562ff9e8b2ea4f81252090670140b4cc7bb6794c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 25 Mar 2024 11:47:14 +0000 Subject: [PATCH 059/124] refactor --- src/Conjure/UI/MainHelper.hs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 469e1a31f..022942a6e 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -800,10 +800,10 @@ savileRowNoParam ui@Solve{..} (modelPath, eprimeModel) = sh $ errExit False $ do when (logLevel >= LogDebug) $ do liftIO $ putStrLn "Using the following options for Savile Row:" liftIO $ putStrLn $ " savilerow " ++ unwords (map (quoteMultiWord . textToString) srArgs) - (stdoutSR, solutions) <- partitionEithers <$> runHandle savilerowScriptName srArgs - (liftIO . srStdoutHandler - (outBase, modelPath, "", ui) - tr (1::Int)) + let handler = liftIO . srStdoutHandler + (outBase, modelPath, "", ui) + tr (1::Int) + (stdoutSR, solutions) <- partitionEithers <$> runHandle savilerowScriptName srArgs handler srCleanUp outBase ui (stringToText $ unlines stdoutSR) solutions savileRowNoParam _ _ = bug "savileRowNoParam" @@ -841,10 +841,10 @@ savileRowWithParams ui@Solve{..} (modelPath, eprimeModel) (paramPath, essencePar when (logLevel >= LogDebug) $ do liftIO $ putStrLn "Using the following options for Savile Row:" liftIO $ putStrLn $ " savilerow " ++ unwords (map (quoteMultiWord . textToString) srArgs) - (stdoutSR, solutions) <- partitionEithers <$> runHandle savilerowScriptName srArgs - (liftIO . srStdoutHandler - (outBase, modelPath, paramPath, ui) - tr (1::Int)) + let handler = liftIO . srStdoutHandler + (outBase, modelPath, paramPath, ui) + tr (1::Int) + (stdoutSR, solutions) <- partitionEithers <$> runHandle savilerowScriptName srArgs handler srCleanUp outBase ui (stringToText $ unlines stdoutSR) solutions savileRowWithParams _ _ _ = bug "savileRowWithParams" From c5a005fe9c48bcb750efef62a92916a02de1e7c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 25 Mar 2024 12:08:06 +0000 Subject: [PATCH 060/124] add runsolver command line options --- docs/conjure-help.html | 3 +++ docs/conjure-help.txt | 4 ++++ src/Conjure/UI.hs | 15 +++++++++++++++ src/Conjure/UI/MainHelper.hs | 15 +++++++++++++-- 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/docs/conjure-help.html b/docs/conjure-help.html index 51b247958..c57234302 100644 --- a/docs/conjure-help.html +++ b/docs/conjure-help.html @@ -134,6 +134,9 @@  --seed=INTRandom number generator seed.  --limit-models=INTMaximum number of models to generate.  --use-existing-models=FILEFile 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). +runsolver: + --runsolver-cpu-time-limit=INTUse runsolver to limit total CPU time (in seconds) + --runsolver-memory-limit=INTUse runsolver to limit total memory usage (in megabytes).
This is the total memory usage: both RAM and swap space. Options for other tools:  --savilerow-options=ITEMOptions passed to Savile Row.  --solver-options=ITEMOptions passed to the backend solver. diff --git a/docs/conjure-help.txt b/docs/conjure-help.txt index 729e539ec..5c70d8f56 100644 --- a/docs/conjure-help.txt +++ b/docs/conjure-help.txt @@ -261,6 +261,10 @@ If given, Conjure skips the modelling phase and uses the existing models for solving. The models should be inside the output directory (See -o). + runsolver: + --runsolver-cpu-time-limit=INT Use runsolver to limit total CPU time (in seconds) + --runsolver-memory-limit=INT Use runsolver to limit total memory usage (in megabytes). + This is the total memory usage: both RAM and swap space. Options for other tools: --savilerow-options=ITEM Options passed to Savile Row. --solver-options=ITEM Options passed to the backend solver. diff --git a/src/Conjure/UI.hs b/src/Conjure/UI.hs index ac90e8c27..119cd93aa 100644 --- a/src/Conjure/UI.hs +++ b/src/Conjure/UI.hs @@ -99,6 +99,8 @@ data UI , responses :: String , responsesRepresentation :: String , solutionsInOneFile :: Bool + , runsolverCPUTimeLimit :: Maybe Int + , runsolverMemoryLimit :: Maybe Int -- flags related to logging , logLevel :: LogLevel , verboseTrail :: Bool @@ -739,6 +741,19 @@ ui = modes &= explicit &= help "Place all solutions in a single file instead of generating a separate file per solution.\n\ \Off by default." + , runsolverCPUTimeLimit + = def + &= name "runsolver-cpu-time-limit" + &= groupname "runsolver" + &= explicit + &= help "Use runsolver to limit total CPU time (in seconds)" + , runsolverMemoryLimit + = def + &= name "runsolver-memory-limit" + &= groupname "runsolver" + &= explicit + &= help "Use runsolver to limit total memory usage (in megabytes). \n\ + \This is the total memory usage: both RAM and swap space." , logLevel = def &= name "log-level" diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 022942a6e..b1c35c19c 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -803,7 +803,12 @@ savileRowNoParam ui@Solve{..} (modelPath, eprimeModel) = sh $ errExit False $ do let handler = liftIO . srStdoutHandler (outBase, modelPath, "", ui) tr (1::Int) - (stdoutSR, solutions) <- partitionEithers <$> runHandle savilerowScriptName srArgs handler + let runsolverArgs = maybe [] (\ limit -> ["-C", show limit]) runsolverCPUTimeLimit ++ + maybe [] (\ limit -> ["-V", show limit]) runsolverMemoryLimit + (stdoutSR, solutions) <- partitionEithers <$> + if null runsolverArgs + then runHandle savilerowScriptName srArgs handler + else runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler srCleanUp outBase ui (stringToText $ unlines stdoutSR) solutions savileRowNoParam _ _ = bug "savileRowNoParam" @@ -844,7 +849,13 @@ savileRowWithParams ui@Solve{..} (modelPath, eprimeModel) (paramPath, essencePar let handler = liftIO . srStdoutHandler (outBase, modelPath, paramPath, ui) tr (1::Int) - (stdoutSR, solutions) <- partitionEithers <$> runHandle savilerowScriptName srArgs handler + let runsolverArgs = maybe [] (\ limit -> ["-C", show limit]) runsolverCPUTimeLimit ++ + maybe [] (\ limit -> ["-V", show limit]) runsolverMemoryLimit + (stdoutSR, solutions) <- partitionEithers <$> + if null runsolverArgs + then runHandle savilerowScriptName srArgs handler + else runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler + srCleanUp outBase ui (stringToText $ unlines stdoutSR) solutions savileRowWithParams _ _ _ = bug "savileRowWithParams" From af6674a8943ca0aa74d229bbb26646113f36e700 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 25 Mar 2024 12:50:46 +0000 Subject: [PATCH 061/124] typo --- etc/build/install-runsolver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/build/install-runsolver.sh b/etc/build/install-runsolver.sh index b63053bb5..87c9646b9 100755 --- a/etc/build/install-runsolver.sh +++ b/etc/build/install-runsolver.sh @@ -21,7 +21,7 @@ if [ "$OS" == "Linux" ]; then git checkout $VERSION cd src make -j${PROCESSES} - cp runsolver + cp runsolver ${BIN_DIR}/runsolver echo "runsolver executable is at ${BIN_DIR}/runsolver" ls -l ${BIN_DIR}/runsolver popd From 8e3d780e3fcf8807f9b4f1e662e6b772cfbf52ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 25 Mar 2024 12:54:11 +0000 Subject: [PATCH 062/124] compilation warnings --- src/Conjure/Process/Enumerate.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Conjure/Process/Enumerate.hs b/src/Conjure/Process/Enumerate.hs index cb006fb71..5160fec4f 100644 --- a/src/Conjure/Process/Enumerate.hs +++ b/src/Conjure/Process/Enumerate.hs @@ -143,6 +143,8 @@ enumerateDomain d = liftIO' $ withSystemTempDirectory ("conjure-enumerateDomain- , nbSolutions = show enumerateDomainMax , copySolutions = False , solutionsInOneFile = False + , runsolverCPUTimeLimit = Nothing + , runsolverMemoryLimit = Nothing , logLevel = LogNone -- default values for the rest , essenceParams = [] From 89d3296b47f6aa74ca24bfff983f99a05b0ddd88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 25 Mar 2024 20:24:07 +0000 Subject: [PATCH 063/124] better error message on non-linux --- src/Conjure/UI/MainHelper.hs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index b1c35c19c..0a615e9d8 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -808,7 +808,10 @@ savileRowNoParam ui@Solve{..} (modelPath, eprimeModel) = sh $ errExit False $ do (stdoutSR, solutions) <- partitionEithers <$> if null runsolverArgs then runHandle savilerowScriptName srArgs handler - else runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler + else + if os /= "linux" + then return [Left "runsolver is only supported on linux"] + else runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler srCleanUp outBase ui (stringToText $ unlines stdoutSR) solutions savileRowNoParam _ _ = bug "savileRowNoParam" @@ -854,7 +857,10 @@ savileRowWithParams ui@Solve{..} (modelPath, eprimeModel) (paramPath, essencePar (stdoutSR, solutions) <- partitionEithers <$> if null runsolverArgs then runHandle savilerowScriptName srArgs handler - else runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler + else + if os /= "linux" + then return [Left "runsolver is only supported on linux"] + else runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler srCleanUp outBase ui (stringToText $ unlines stdoutSR) solutions savileRowWithParams _ _ _ = bug "savileRowWithParams" From 9a6edfa81e9bf804c8835f6acaf5bcdf750f7338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 25 Mar 2024 20:24:17 +0000 Subject: [PATCH 064/124] libnuva-dev --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index bcea49efb..6af6c5994 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,6 +30,7 @@ RUN apt-get install -y --no-install-recommends autoconf # needed RUN apt-get install -y --no-install-recommends gperf # needed when building some solvers (for example yices) RUN apt-get install -y --no-install-recommends python3 # needed when building some solvers (for example z3) RUN apt-get install -y --no-install-recommends default-jre-headless # savilerow +RUN apt-get install -y --no-install-recommends libnuma-dev # runsolver # Only copying the install*.sh scripts RUN mkdir -p etc From 3273a052c2fef13c03992bf06a82571a99c0dd91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 25 Mar 2024 21:33:18 +0000 Subject: [PATCH 065/124] libnuva-dev on github actions --- .github/workflows/release.yml | 5 +++++ .github/workflows/solvers.yml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a09de21a3..a83b6e5a8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -82,6 +82,11 @@ jobs: run: brew install gperf if: runner.os == 'macOS' + - name: Installing dependencies (libnuva-dev) on Linux + shell: bash + run: sudo apt-get install -y libnuva-dev + if: runner.os == 'Linux' + - name: Build solvers shell: bash run: | diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index 8997bfd6e..f836bab74 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -57,6 +57,11 @@ jobs: run: brew install gperf if: runner.os == 'macOS' + - name: Installing dependencies (libnuva-dev) on Linux + shell: bash + run: sudo apt-get install -y libnuva-dev + if: runner.os == 'Linux' + - name: Building solvers shell: bash run: BIN_DIR=${HOME}/.local/bin PROCESSES=2 make solvers From bd76c1e0a1eb93684a8b66a1b86898d57ab7b296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 25 Mar 2024 21:49:57 +0000 Subject: [PATCH 066/124] libnuma-dev on github actions: typo --- .github/workflows/release.yml | 4 ++-- .github/workflows/solvers.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a83b6e5a8..2b5f2ca63 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -82,9 +82,9 @@ jobs: run: brew install gperf if: runner.os == 'macOS' - - name: Installing dependencies (libnuva-dev) on Linux + - name: Installing dependencies (libnuma-dev) on Linux shell: bash - run: sudo apt-get install -y libnuva-dev + run: sudo apt-get install -y libnuma-dev if: runner.os == 'Linux' - name: Build solvers diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index f836bab74..8ca3fa27c 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -57,9 +57,9 @@ jobs: run: brew install gperf if: runner.os == 'macOS' - - name: Installing dependencies (libnuva-dev) on Linux + - name: Installing dependencies (libnuma-dev) on Linux shell: bash - run: sudo apt-get install -y libnuva-dev + run: sudo apt-get install -y libnuma-dev if: runner.os == 'Linux' - name: Building solvers From 1a759047a3b8524e8b08a5965f51bef91e0bbabb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 25 Mar 2024 22:11:24 +0000 Subject: [PATCH 067/124] change memory limit to max RSS --- docs/conjure-help.html | 2 +- docs/conjure-help.txt | 3 +-- src/Conjure/UI.hs | 3 +-- src/Conjure/UI/MainHelper.hs | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/docs/conjure-help.html b/docs/conjure-help.html index c57234302..a6f0c2967 100644 --- a/docs/conjure-help.html +++ b/docs/conjure-help.html @@ -136,7 +136,7 @@  --use-existing-models=FILEFile 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). runsolver:  --runsolver-cpu-time-limit=INTUse runsolver to limit total CPU time (in seconds) - --runsolver-memory-limit=INTUse runsolver to limit total memory usage (in megabytes).
This is the total memory usage: both RAM and swap space. + --runsolver-memory-limit=INTUse runsolver to limit total memory usage (Maximum RSS - in megabytes). Options for other tools:  --savilerow-options=ITEMOptions passed to Savile Row.  --solver-options=ITEMOptions passed to the backend solver. diff --git a/docs/conjure-help.txt b/docs/conjure-help.txt index 5c70d8f56..fad98d45b 100644 --- a/docs/conjure-help.txt +++ b/docs/conjure-help.txt @@ -263,8 +263,7 @@ The models should be inside the output directory (See -o). runsolver: --runsolver-cpu-time-limit=INT Use runsolver to limit total CPU time (in seconds) - --runsolver-memory-limit=INT Use runsolver to limit total memory usage (in megabytes). - This is the total memory usage: both RAM and swap space. + --runsolver-memory-limit=INT Use runsolver to limit total memory usage (Maximum RSS - in megabytes). Options for other tools: --savilerow-options=ITEM Options passed to Savile Row. --solver-options=ITEM Options passed to the backend solver. diff --git a/src/Conjure/UI.hs b/src/Conjure/UI.hs index 119cd93aa..a596eeab0 100644 --- a/src/Conjure/UI.hs +++ b/src/Conjure/UI.hs @@ -752,8 +752,7 @@ ui = modes &= name "runsolver-memory-limit" &= groupname "runsolver" &= explicit - &= help "Use runsolver to limit total memory usage (in megabytes). \n\ - \This is the total memory usage: both RAM and swap space." + &= help "Use runsolver to limit total memory usage (Maximum RSS - in megabytes)." , logLevel = def &= name "log-level" diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 0a615e9d8..c6d4c9a81 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -804,7 +804,7 @@ savileRowNoParam ui@Solve{..} (modelPath, eprimeModel) = sh $ errExit False $ do (outBase, modelPath, "", ui) tr (1::Int) let runsolverArgs = maybe [] (\ limit -> ["-C", show limit]) runsolverCPUTimeLimit ++ - maybe [] (\ limit -> ["-V", show limit]) runsolverMemoryLimit + maybe [] (\ limit -> ["-R", show limit]) runsolverMemoryLimit (stdoutSR, solutions) <- partitionEithers <$> if null runsolverArgs then runHandle savilerowScriptName srArgs handler From 8ed7351af0af921de3a85c7eb3146b58ff6f8570 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 26 Mar 2024 08:37:38 +0000 Subject: [PATCH 068/124] print the entire log if in CI --- etc/build/silent-wrapper.sh | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/etc/build/silent-wrapper.sh b/etc/build/silent-wrapper.sh index 2cb14d3e3..791fea121 100755 --- a/etc/build/silent-wrapper.sh +++ b/etc/build/silent-wrapper.sh @@ -24,11 +24,19 @@ else echo " Exit code: ${EXITCODE}" echo " Outputs saved to: make-solvers-${PID}.stdout and make-solvers-${PID}.stderr" echo "" - echo "Last 10 lines of the stdout was:" - tail -n10 make-solvers-${PID}.stdout - echo "" - echo "Last 10 lines of the stderr was:" - tail -n10 make-solvers-${PID}.stderr + if [ -z ${GITHUB_ACTIONS} ]; then + echo "stdout was:" + cat make-solvers-${PID}.stdout + echo "" + echo "stderr was:" + cat make-solvers-${PID}.stderr + else + echo "Last 10 lines of the stdout was:" + tail -n10 make-solvers-${PID}.stdout + echo "" + echo "Last 10 lines of the stderr was:" + tail -n10 make-solvers-${PID}.stderr + fi echo "" echo "" echo "" From ed92e5f128b152d877ee1c41ec3c015179ef4d73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 26 Mar 2024 09:32:14 +0000 Subject: [PATCH 069/124] remove the if - always print the entire message --- etc/build/silent-wrapper.sh | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/etc/build/silent-wrapper.sh b/etc/build/silent-wrapper.sh index 791fea121..b0a4a72a8 100755 --- a/etc/build/silent-wrapper.sh +++ b/etc/build/silent-wrapper.sh @@ -24,19 +24,11 @@ else echo " Exit code: ${EXITCODE}" echo " Outputs saved to: make-solvers-${PID}.stdout and make-solvers-${PID}.stderr" echo "" - if [ -z ${GITHUB_ACTIONS} ]; then - echo "stdout was:" - cat make-solvers-${PID}.stdout - echo "" - echo "stderr was:" - cat make-solvers-${PID}.stderr - else - echo "Last 10 lines of the stdout was:" - tail -n10 make-solvers-${PID}.stdout - echo "" - echo "Last 10 lines of the stderr was:" - tail -n10 make-solvers-${PID}.stderr - fi + echo "stdout was:" + cat make-solvers-${PID}.stdout + echo "" + echo "stderr was:" + cat make-solvers-${PID}.stderr echo "" echo "" echo "" From dbe1c6a8379fb8cedb80bbc5e9a383d4e576b795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 26 Mar 2024 10:51:06 +0000 Subject: [PATCH 070/124] try installing a specific version of libnuma --- .github/workflows/release.yml | 4 ++-- .github/workflows/solvers.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2b5f2ca63..27c1824ab 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -82,9 +82,9 @@ jobs: run: brew install gperf if: runner.os == 'macOS' - - name: Installing dependencies (libnuma-dev) on Linux + - name: Installing dependencies (libnuma-dev) on Linux - needed for runsolver shell: bash - run: sudo apt-get install -y libnuma-dev + run: sudo apt-get install -y libnuma-dev=2.0.16-1 if: runner.os == 'Linux' - name: Build solvers diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index 8ca3fa27c..1e0425f34 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -57,9 +57,9 @@ jobs: run: brew install gperf if: runner.os == 'macOS' - - name: Installing dependencies (libnuma-dev) on Linux + - name: Installing dependencies (libnuma-dev) on Linux - needed for runsolver shell: bash - run: sudo apt-get install -y libnuma-dev + run: sudo apt-get install -y libnuma-dev=2.0.16-1 if: runner.os == 'Linux' - name: Building solvers From 17b0749b20a2d182ee9fc524c50ab907a623fab6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 26 Mar 2024 11:29:39 +0000 Subject: [PATCH 071/124] trying with a local patch for libnuma-dev --- .github/workflows/release.yml | 2 +- .github/workflows/solvers.yml | 2 +- etc/build/install-runsolver.sh | 9 ++++++++- etc/build/runsolver.patch | 13 +++++++++++++ 4 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 etc/build/runsolver.patch diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 27c1824ab..fe6d829bc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -84,7 +84,7 @@ jobs: - name: Installing dependencies (libnuma-dev) on Linux - needed for runsolver shell: bash - run: sudo apt-get install -y libnuma-dev=2.0.16-1 + run: sudo apt-get install -y libnuma-dev if: runner.os == 'Linux' - name: Build solvers diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index 1e0425f34..6601a370f 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -59,7 +59,7 @@ jobs: - name: Installing dependencies (libnuma-dev) on Linux - needed for runsolver shell: bash - run: sudo apt-get install -y libnuma-dev=2.0.16-1 + run: sudo apt-get install -y libnuma-dev if: runner.os == 'Linux' - name: Building solvers diff --git a/etc/build/install-runsolver.sh b/etc/build/install-runsolver.sh index 87c9646b9..6ad1ac3d2 100755 --- a/etc/build/install-runsolver.sh +++ b/etc/build/install-runsolver.sh @@ -20,7 +20,14 @@ if [ "$OS" == "Linux" ]; then cd runsolver git checkout $VERSION cd src - make -j${PROCESSES} + if make -j${PROCESSES} ; then + echo "Built." + else + echo "Build failed, trying again with a local patch" + echo "This might happen when building with an old version of libnuma-dev" + patch runsolver.cc ../../runsolver.patch + make -j${PROCESSES} + fi cp runsolver ${BIN_DIR}/runsolver echo "runsolver executable is at ${BIN_DIR}/runsolver" ls -l ${BIN_DIR}/runsolver diff --git a/etc/build/runsolver.patch b/etc/build/runsolver.patch new file mode 100644 index 000000000..24d695b01 --- /dev/null +++ b/etc/build/runsolver.patch @@ -0,0 +1,13 @@ +diff --git a/src/runsolver.cc b/src/runsolver.cc +index f42c9a1..312c985 100644 +--- a/src/runsolver.cc ++++ b/src/runsolver.cc +@@ -906,7 +906,7 @@ void numaInfo() { + return; + + int nbNodes = numa_num_configured_nodes(); +- long mem, memFree; ++ long long mem, memFree; + + cout << "NUMA information:\n"; + cout << " number of nodes: " << nbNodes << endl; From 2d3959f297136e7f4a3247052c10dbba1c2a300b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 26 Mar 2024 11:45:04 +0000 Subject: [PATCH 072/124] catching another error mesagge --- src/Conjure/UI/SolveStats.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index db05b86bf..91c4b5ba7 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -75,7 +75,8 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do "kissat: error: can not read", -- kissat "kissat: fatal error: maximum arena capacity", -- kissat "Error: syntax error, unexpected ]]", -- cplex - "*** Check failure stack trace: ***" -- or-tools + "*** Check failure stack trace: ***", -- or-tools + "Error: evaluation error: Index set mismatch." ] ] = Error From c3c22a27b86e6b2d0aa2d868c83940fe286dfe87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 26 Mar 2024 14:13:44 +0000 Subject: [PATCH 073/124] bugfix --- etc/build/install-runsolver.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/etc/build/install-runsolver.sh b/etc/build/install-runsolver.sh index 6ad1ac3d2..5832e7a24 100755 --- a/etc/build/install-runsolver.sh +++ b/etc/build/install-runsolver.sh @@ -7,6 +7,8 @@ VERSION='3f923c08285bdc5186f995296e1c6bffa0588710' set -o errexit set -o nounset +DIR="$( cd "$( dirname "$0" )" && pwd )" + export BIN_DIR=${BIN_DIR:-${HOME}/.local/bin} export PROCESSES=${PROCESSES:-1} @@ -25,7 +27,7 @@ if [ "$OS" == "Linux" ]; then else echo "Build failed, trying again with a local patch" echo "This might happen when building with an old version of libnuma-dev" - patch runsolver.cc ../../runsolver.patch + patch runsolver.cc ${DIR}/etc/build/runsolver.patch make -j${PROCESSES} fi cp runsolver ${BIN_DIR}/runsolver From 6fcd2789d382a0185ae761f31d730c7fccb7b7c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 26 Mar 2024 20:01:15 +0000 Subject: [PATCH 074/124] bugfix --- etc/build/install-runsolver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/build/install-runsolver.sh b/etc/build/install-runsolver.sh index 5832e7a24..450512061 100755 --- a/etc/build/install-runsolver.sh +++ b/etc/build/install-runsolver.sh @@ -27,7 +27,7 @@ if [ "$OS" == "Linux" ]; then else echo "Build failed, trying again with a local patch" echo "This might happen when building with an old version of libnuma-dev" - patch runsolver.cc ${DIR}/etc/build/runsolver.patch + patch runsolver.cc ${DIR}/runsolver.patch make -j${PROCESSES} fi cp runsolver ${BIN_DIR}/runsolver From e83100998086a9ba26cb6d9ac2f631f7d88e23ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 26 Mar 2024 20:47:32 +0000 Subject: [PATCH 075/124] use the CI variable --- etc/build/silent-wrapper.sh | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/etc/build/silent-wrapper.sh b/etc/build/silent-wrapper.sh index b0a4a72a8..0e47345e8 100755 --- a/etc/build/silent-wrapper.sh +++ b/etc/build/silent-wrapper.sh @@ -1,13 +1,15 @@ #!/bin/bash -# set -o errexit -# set -o nounset +set -o errexit +set -o nounset if [ $# -ne 1 ]; then echo "Only provide a single argument, the path to a bash script." exit 1 fi +export CI=${CI:-false} + echo "Running $1" PID=$$ @@ -24,11 +26,19 @@ else echo " Exit code: ${EXITCODE}" echo " Outputs saved to: make-solvers-${PID}.stdout and make-solvers-${PID}.stderr" echo "" - echo "stdout was:" - cat make-solvers-${PID}.stdout - echo "" - echo "stderr was:" - cat make-solvers-${PID}.stderr + if ${CI}; then + echo "stdout was:" + cat make-solvers-${PID}.stdout + echo "" + echo "stderr was:" + cat make-solvers-${PID}.stderr + else + echo "Last 10 lines of the stdout was:" + tail -n10 make-solvers-${PID}.stdout + echo "" + echo "Last 10 lines of the stderr was:" + tail -n10 make-solvers-${PID}.stderr + fi echo "" echo "" echo "" From 5e8b55b73b13f7a311d787065d231ad903da4481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 27 Mar 2024 08:20:39 +0000 Subject: [PATCH 076/124] libnuma-dev is needed in the runtime image too --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 6af6c5994..4d786b04e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -88,5 +88,6 @@ ENV LD_LIBRARY_PATH /root/.local/bin/lib:$LD_LIBRARY_PATH ENV MZN_STDLIB_DIR /root/.local/bin/share/minizinc/ RUN apt-get update RUN apt-get install -y --no-install-recommends default-jre-headless # savilerow +RUN apt-get install -y --no-install-recommends libnuma-dev # runsolver RUN mkdir -p /root/.local/bin/lib COPY --from=builder /root/.local/bin /root/.local/bin From 22fcc5b02aef0e9fdc0ef836251ee8e1aef99ce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 27 Mar 2024 08:25:07 +0000 Subject: [PATCH 077/124] build-essential for libnuma-dev --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 4d786b04e..3fe0d5ed5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -87,6 +87,7 @@ ENV PATH /root/.local/bin:$PATH ENV LD_LIBRARY_PATH /root/.local/bin/lib:$LD_LIBRARY_PATH ENV MZN_STDLIB_DIR /root/.local/bin/share/minizinc/ RUN apt-get update +RUN apt-get install -y --no-install-recommends build-essential # so we can compile stuff RUN apt-get install -y --no-install-recommends default-jre-headless # savilerow RUN apt-get install -y --no-install-recommends libnuma-dev # runsolver RUN mkdir -p /root/.local/bin/lib From 85fb42c450f843d64facd623c13bf58290834c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 27 Mar 2024 08:31:16 +0000 Subject: [PATCH 078/124] apt-get update on the same line - docker recommends this apparently --- Dockerfile | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3fe0d5ed5..d3067b96a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,13 +9,13 @@ # Setting up FROM ubuntu:23.10 AS builder ENV DEBIAN_FRONTEND noninteractive -WORKDIR /conjure/ +WORKDIR /conjure # All binaries will end up in /root/.local/bin RUN mkdir -p /root/.local/bin ENV PATH /root/.local/bin:$PATH ENV LD_LIBRARY_PATH /root/.local/bin/lib:$LD_LIBRARY_PATH -ENV MZN_STDLIB_DIR /root/.local/bin/share/minizinc/ +ENV MZN_STDLIB_DIR /root/.local/bin/share/minizinc # Dependencies RUN apt-get update RUN apt-get install -y --no-install-recommends build-essential # so we can compile stuff @@ -85,10 +85,9 @@ FROM ubuntu:23.10 WORKDIR /conjure ENV PATH /root/.local/bin:$PATH ENV LD_LIBRARY_PATH /root/.local/bin/lib:$LD_LIBRARY_PATH -ENV MZN_STDLIB_DIR /root/.local/bin/share/minizinc/ -RUN apt-get update -RUN apt-get install -y --no-install-recommends build-essential # so we can compile stuff -RUN apt-get install -y --no-install-recommends default-jre-headless # savilerow -RUN apt-get install -y --no-install-recommends libnuma-dev # runsolver +ENV MZN_STDLIB_DIR /root/.local/bin/share/minizinc +RUN apt-get update && apt-get install -y --no-install-recommends build-essential # so we can compile stuff +RUN apt-get update && apt-get install -y --no-install-recommends default-jre-headless # savilerow +RUN apt-get update && apt-get install -y --no-install-recommends libnuma-dev # runsolver RUN mkdir -p /root/.local/bin/lib COPY --from=builder /root/.local/bin /root/.local/bin From a6d42fa77a3ac3ae587acbe9187e5e013bb8d5f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 27 Mar 2024 10:03:14 +0000 Subject: [PATCH 079/124] save runsolver logs in a file --- src/Conjure/UI/MainHelper.hs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index c6d4c9a81..5f0cf1a32 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -804,11 +804,12 @@ savileRowNoParam ui@Solve{..} (modelPath, eprimeModel) = sh $ errExit False $ do (outBase, modelPath, "", ui) tr (1::Int) let runsolverArgs = maybe [] (\ limit -> ["-C", show limit]) runsolverCPUTimeLimit ++ - maybe [] (\ limit -> ["-R", show limit]) runsolverMemoryLimit + maybe [] (\ limit -> ["-R", show limit]) runsolverMemoryLimit ++ + ["-v", outputDirectory outBase ++ ".runsolver.logs"] (stdoutSR, solutions) <- partitionEithers <$> - if null runsolverArgs - then runHandle savilerowScriptName srArgs handler - else + case (runsolverCPUTimeLimit, runsolverMemoryLimit) of + (Nothing, Nothing) -> runHandle savilerowScriptName srArgs handler + _ -> if os /= "linux" then return [Left "runsolver is only supported on linux"] else runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler @@ -853,11 +854,12 @@ savileRowWithParams ui@Solve{..} (modelPath, eprimeModel) (paramPath, essencePar (outBase, modelPath, paramPath, ui) tr (1::Int) let runsolverArgs = maybe [] (\ limit -> ["-C", show limit]) runsolverCPUTimeLimit ++ - maybe [] (\ limit -> ["-V", show limit]) runsolverMemoryLimit + maybe [] (\ limit -> ["-V", show limit]) runsolverMemoryLimit ++ + ["-v", outputDirectory outBase ++ ".runsolver.logs"] (stdoutSR, solutions) <- partitionEithers <$> - if null runsolverArgs - then runHandle savilerowScriptName srArgs handler - else + case (runsolverCPUTimeLimit, runsolverMemoryLimit) of + (Nothing, Nothing) -> runHandle savilerowScriptName srArgs handler + _ -> if os /= "linux" then return [Left "runsolver is only supported on linux"] else runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler From a3f565b4f76cf818b0fd58135a854c71eee54441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 27 Mar 2024 10:25:07 +0000 Subject: [PATCH 080/124] saving the runsolver-logs file in stats.json --- src/Conjure/UI/MainHelper.hs | 13 +++++++------ src/Conjure/UI/SolveStats.hs | 29 ++++++++++++++++++----------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 5f0cf1a32..ba3fa9b43 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -19,7 +19,6 @@ import Conjure.UI.Split ( outputSplittedModels, removeUnusedDecls ) import Conjure.UI.VarSymBreaking ( outputVarSymBreaking ) import Conjure.UI.ParameterGenerator ( parameterGenerator ) import Conjure.UI.NormaliseQuantified ( normaliseQuantifiedVariables ) -import Conjure.UI.SolveStats ( mkSolveStats ) import Conjure.Language.Name ( Name(..) ) import Conjure.Language.Definition ( Model(..), ModelInfo(..), Statement(..), Declaration(..), FindOrGiven(..) ) @@ -805,7 +804,7 @@ savileRowNoParam ui@Solve{..} (modelPath, eprimeModel) = sh $ errExit False $ do tr (1::Int) let runsolverArgs = maybe [] (\ limit -> ["-C", show limit]) runsolverCPUTimeLimit ++ maybe [] (\ limit -> ["-R", show limit]) runsolverMemoryLimit ++ - ["-v", outputDirectory outBase ++ ".runsolver.logs"] + ["-v", outputDirectory outBase ++ ".runsolver-info"] (stdoutSR, solutions) <- partitionEithers <$> case (runsolverCPUTimeLimit, runsolverMemoryLimit) of (Nothing, Nothing) -> runHandle savilerowScriptName srArgs handler @@ -855,7 +854,7 @@ savileRowWithParams ui@Solve{..} (modelPath, eprimeModel) (paramPath, essencePar tr (1::Int) let runsolverArgs = maybe [] (\ limit -> ["-C", show limit]) runsolverCPUTimeLimit ++ maybe [] (\ limit -> ["-V", show limit]) runsolverMemoryLimit ++ - ["-v", outputDirectory outBase ++ ".runsolver.logs"] + ["-v", outputDirectory outBase ++ ".runsolver-info"] (stdoutSR, solutions) <- partitionEithers <$> case (runsolverCPUTimeLimit, runsolverMemoryLimit) of (Nothing, Nothing) -> runHandle savilerowScriptName srArgs handler @@ -1132,10 +1131,12 @@ srCleanUp outBase ui@Solve{..} stdoutSR solutions = do let combinedSR = T.unlines [stdoutSR, stderrSR] liftIO $ do - let srInfoFilename = mkFilename ".eprime-info" + let savilerowInfoFilename = mkFilename ".eprime-info" + let runsolverInfoFilename = mkFilename ".runsolver-info" let statsFilename = mkFilename ".stats.json" - srInfoContent <- liftIO $ readFileIfExists srInfoFilename - stats <- mkSolveStats ui (exitCodeSR, stdoutSR, stderrSR) (fromMaybe "" srInfoContent) + savilerowInfoContent <- liftIO $ readFileIfExists savilerowInfoFilename + runsolverInfoContent <- liftIO $ readFileIfExists runsolverInfoFilename + stats <- mkSolveStats ui (exitCodeSR, stdoutSR, stderrSR) (fromMaybe "" savilerowInfoContent) (fromMaybe "" runsolverInfoContent) writeFile statsFilename (render lineWidth (toJSON stats)) if | T.isInfixOf "Savile Row timed out." combinedSR -> diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 91c4b5ba7..5ff3d718f 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -17,6 +17,7 @@ data SolveStats = SolveStats { status :: SolveStatus, totalTime :: Maybe Double, savilerowInfo :: M.HashMap String String, + runsolverInfo :: M.HashMap String String, essence :: FilePath, essenceParams :: [FilePath], useExistingModels :: [FilePath], @@ -59,10 +60,15 @@ instance ToJSON SavileRowLogs where toJSON = genericToJSON jsonOptions instance FromJSON SavileRowLogs where parseJSON = genericParseJSON jsonOptions -mkSolveStats :: UI -> (Int, Text, Text) -> String -> IO SolveStats -mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do - let combinedSR = T.unlines [stdoutSR, stderrSR] - let info = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines rawInfo)] +mkSolveStats :: UI -> (Int, Text, Text) -> String -> String -> IO SolveStats +mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) savilerowInfoText runsolverInfoText = do + let + combinedSR = T.unlines [stdoutSR, stderrSR] + + savilerowInfo = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines savilerowInfoText)] + + runsolverInfo = M.fromList [(k, v) | [k, v] <- map (splitOn "=") (lines runsolverInfoText)] + status | or [ T.isInfixOf msg combinedSR @@ -84,17 +90,18 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do | T.isInfixOf "Out of Memory" combinedSR = MemOut | T.isInfixOf "Savile Row timed out." combinedSR = TimeOut | T.isInfixOf "time out: time limit reached" combinedSR = TimeOut - | M.lookup "SavileRowTimeOut" info == Just "1" = TimeOut - | M.lookup "SavileRowClauseOut" info == Just "1" = TimeOut - | M.lookup "SolverTimeOut" info == Just "1" = TimeOut + | M.lookup "SavileRowTimeOut" savilerowInfo == Just "1" = TimeOut + | M.lookup "SavileRowClauseOut" savilerowInfo == Just "1" = TimeOut + | M.lookup "SolverTimeOut" savilerowInfo == Just "1" = TimeOut | exitCodeSR /= 0 = Error | otherwise = OK + totalTime - | Just srTotalTime <- M.lookup "SavileRowTotalTime" info >>= readMay, - Just solverTotalTime <- M.lookup "SolverTotalTime" info >>= readMay = + | Just srTotalTime <- M.lookup "SavileRowTotalTime" savilerowInfo >>= readMay, + Just solverTotalTime <- M.lookup "SolverTotalTime" savilerowInfo >>= readMay = Just (srTotalTime + solverTotalTime) | otherwise = Nothing - savilerowInfo = info + computer <- getHostName timestamp <- getCurrentTime let conjureVersion = versionLine @@ -106,4 +113,4 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) rawInfo = do stderr = if T.null stderrSR then Nothing else Just (lines (textToString stderrSR)) } return SolveStats {..} -mkSolveStats _ _ _ = bug "mkSolveStats" +mkSolveStats _ _ _ _ = bug "mkSolveStats" From 45e07dff7faf9e56df9abe6b5f10302292084d9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 27 Mar 2024 10:28:03 +0000 Subject: [PATCH 081/124] using runsolver-logs to set the value of status --- src/Conjure/UI/SolveStats.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 5ff3d718f..534c86c2e 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -93,6 +93,8 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) savilerowInfoText runso | M.lookup "SavileRowTimeOut" savilerowInfo == Just "1" = TimeOut | M.lookup "SavileRowClauseOut" savilerowInfo == Just "1" = TimeOut | M.lookup "SolverTimeOut" savilerowInfo == Just "1" = TimeOut + | M.lookup "MEMOUT" runsolverInfo == Just "true" = MemOut + | M.lookup "TIMEOUT" runsolverInfo == Just "true" = TimeOut | exitCodeSR /= 0 = Error | otherwise = OK From 951e2d738a7b70fe1606112292a44b3382d12a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 27 Mar 2024 10:44:31 +0000 Subject: [PATCH 082/124] oops --- src/Conjure/UI/MainHelper.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index ba3fa9b43..181a5f1ac 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -19,6 +19,7 @@ import Conjure.UI.Split ( outputSplittedModels, removeUnusedDecls ) import Conjure.UI.VarSymBreaking ( outputVarSymBreaking ) import Conjure.UI.ParameterGenerator ( parameterGenerator ) import Conjure.UI.NormaliseQuantified ( normaliseQuantifiedVariables ) +import Conjure.UI.SolveStats ( mkSolveStats ) import Conjure.Language.Name ( Name(..) ) import Conjure.Language.Definition ( Model(..), ModelInfo(..), Statement(..), Declaration(..), FindOrGiven(..) ) From 8ad1d6198b49afe7465afc0fb5a34504b6c9c7cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 28 Mar 2024 15:57:12 +0000 Subject: [PATCH 083/124] use oz's mirror of runsolver that has a hacky --quiet mode --- etc/build/install-runsolver.sh | 4 ++-- etc/build/runsolver.patch | 6 +++--- src/Conjure/UI/MainHelper.hs | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/etc/build/install-runsolver.sh b/etc/build/install-runsolver.sh index 450512061..3beff029a 100755 --- a/etc/build/install-runsolver.sh +++ b/etc/build/install-runsolver.sh @@ -2,7 +2,7 @@ # version as of 25 March 2024 # alas, none of the published releases compile correctly -VERSION='3f923c08285bdc5186f995296e1c6bffa0588710' +VERSION='add1db71b5ecbeb9d2b1329d242dff0ada18809f' set -o errexit set -o nounset @@ -18,7 +18,7 @@ if [ "$OS" == "Linux" ]; then rm -rf tmp-install-runsolver mkdir tmp-install-runsolver pushd tmp-install-runsolver - git clone https://github.com/utpalbora/runsolver.git + git clone https://github.com/ozgurakgun/runsolver.git cd runsolver git checkout $VERSION cd src diff --git a/etc/build/runsolver.patch b/etc/build/runsolver.patch index 24d695b01..974909ba4 100644 --- a/etc/build/runsolver.patch +++ b/etc/build/runsolver.patch @@ -1,13 +1,13 @@ diff --git a/src/runsolver.cc b/src/runsolver.cc -index f42c9a1..312c985 100644 +index e2a7902..5696a34 100644 --- a/src/runsolver.cc +++ b/src/runsolver.cc -@@ -906,7 +906,7 @@ void numaInfo() { +@@ -916,7 +916,7 @@ void numaInfo() { return; int nbNodes = numa_num_configured_nodes(); - long mem, memFree; + long long mem, memFree; + if (!quiet_progress) { cout << "NUMA information:\n"; - cout << " number of nodes: " << nbNodes << endl; diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 181a5f1ac..9056e5a9e 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -805,7 +805,7 @@ savileRowNoParam ui@Solve{..} (modelPath, eprimeModel) = sh $ errExit False $ do tr (1::Int) let runsolverArgs = maybe [] (\ limit -> ["-C", show limit]) runsolverCPUTimeLimit ++ maybe [] (\ limit -> ["-R", show limit]) runsolverMemoryLimit ++ - ["-v", outputDirectory outBase ++ ".runsolver-info"] + ["--quiet", "-v", outputDirectory outBase ++ ".runsolver-info"] (stdoutSR, solutions) <- partitionEithers <$> case (runsolverCPUTimeLimit, runsolverMemoryLimit) of (Nothing, Nothing) -> runHandle savilerowScriptName srArgs handler @@ -855,7 +855,7 @@ savileRowWithParams ui@Solve{..} (modelPath, eprimeModel) (paramPath, essencePar tr (1::Int) let runsolverArgs = maybe [] (\ limit -> ["-C", show limit]) runsolverCPUTimeLimit ++ maybe [] (\ limit -> ["-V", show limit]) runsolverMemoryLimit ++ - ["-v", outputDirectory outBase ++ ".runsolver-info"] + ["--quiet", "-v", outputDirectory outBase ++ ".runsolver-info"] (stdoutSR, solutions) <- partitionEithers <$> case (runsolverCPUTimeLimit, runsolverMemoryLimit) of (Nothing, Nothing) -> runHandle savilerowScriptName srArgs handler From 78f2b3f09c0d49ba63cb8d9288712d3c5dd487a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Fri, 29 Mar 2024 21:58:25 +0000 Subject: [PATCH 084/124] add --runsolver-wall-time-limit --- docs/conjure-help.html | 1 + docs/conjure-help.txt | 1 + src/Conjure/Process/Enumerate.hs | 1 + src/Conjure/UI.hs | 7 +++++++ src/Conjure/UI/MainHelper.hs | 16 +++++++++------- 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/docs/conjure-help.html b/docs/conjure-help.html index a6f0c2967..e07ea2b48 100644 --- a/docs/conjure-help.html +++ b/docs/conjure-help.html @@ -136,6 +136,7 @@  --use-existing-models=FILEFile 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). runsolver:  --runsolver-cpu-time-limit=INTUse runsolver to limit total CPU time (in seconds) + --runsolver-wall-time-limit=INTUse runsolver to limit total elapsed time (in seconds)  --runsolver-memory-limit=INTUse runsolver to limit total memory usage (Maximum RSS - in megabytes). Options for other tools:  --savilerow-options=ITEMOptions passed to Savile Row. diff --git a/docs/conjure-help.txt b/docs/conjure-help.txt index fad98d45b..655caff4b 100644 --- a/docs/conjure-help.txt +++ b/docs/conjure-help.txt @@ -263,6 +263,7 @@ The models should be inside the output directory (See -o). runsolver: --runsolver-cpu-time-limit=INT Use runsolver to limit total CPU time (in seconds) + --runsolver-wall-time-limit=INT Use runsolver to limit total elapsed time (in seconds) --runsolver-memory-limit=INT Use runsolver to limit total memory usage (Maximum RSS - in megabytes). Options for other tools: --savilerow-options=ITEM Options passed to Savile Row. diff --git a/src/Conjure/Process/Enumerate.hs b/src/Conjure/Process/Enumerate.hs index 5160fec4f..604efb8a7 100644 --- a/src/Conjure/Process/Enumerate.hs +++ b/src/Conjure/Process/Enumerate.hs @@ -144,6 +144,7 @@ enumerateDomain d = liftIO' $ withSystemTempDirectory ("conjure-enumerateDomain- , copySolutions = False , solutionsInOneFile = False , runsolverCPUTimeLimit = Nothing + , runsolverWallTimeLimit = Nothing , runsolverMemoryLimit = Nothing , logLevel = LogNone -- default values for the rest diff --git a/src/Conjure/UI.hs b/src/Conjure/UI.hs index a596eeab0..b17a89afb 100644 --- a/src/Conjure/UI.hs +++ b/src/Conjure/UI.hs @@ -100,6 +100,7 @@ data UI , responsesRepresentation :: String , solutionsInOneFile :: Bool , runsolverCPUTimeLimit :: Maybe Int + , runsolverWallTimeLimit :: Maybe Int , runsolverMemoryLimit :: Maybe Int -- flags related to logging , logLevel :: LogLevel @@ -747,6 +748,12 @@ ui = modes &= groupname "runsolver" &= explicit &= help "Use runsolver to limit total CPU time (in seconds)" + , runsolverWallTimeLimit + = def + &= name "runsolver-wall-time-limit" + &= groupname "runsolver" + &= explicit + &= help "Use runsolver to limit total elapsed time (in seconds)" , runsolverMemoryLimit = def &= name "runsolver-memory-limit" diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 9056e5a9e..1609cf1f9 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -804,11 +804,12 @@ savileRowNoParam ui@Solve{..} (modelPath, eprimeModel) = sh $ errExit False $ do (outBase, modelPath, "", ui) tr (1::Int) let runsolverArgs = maybe [] (\ limit -> ["-C", show limit]) runsolverCPUTimeLimit ++ - maybe [] (\ limit -> ["-R", show limit]) runsolverMemoryLimit ++ + maybe [] (\ limit -> ["-W", show limit]) runsolverWallTimeLimit ++ + maybe [] (\ limit -> ["-R", show limit]) runsolverMemoryLimit ++ ["--quiet", "-v", outputDirectory outBase ++ ".runsolver-info"] (stdoutSR, solutions) <- partitionEithers <$> - case (runsolverCPUTimeLimit, runsolverMemoryLimit) of - (Nothing, Nothing) -> runHandle savilerowScriptName srArgs handler + case (runsolverCPUTimeLimit, runsolverWallTimeLimit, runsolverMemoryLimit) of + (Nothing, Nothing, Nothing) -> runHandle savilerowScriptName srArgs handler _ -> if os /= "linux" then return [Left "runsolver is only supported on linux"] @@ -854,11 +855,12 @@ savileRowWithParams ui@Solve{..} (modelPath, eprimeModel) (paramPath, essencePar (outBase, modelPath, paramPath, ui) tr (1::Int) let runsolverArgs = maybe [] (\ limit -> ["-C", show limit]) runsolverCPUTimeLimit ++ - maybe [] (\ limit -> ["-V", show limit]) runsolverMemoryLimit ++ - ["--quiet", "-v", outputDirectory outBase ++ ".runsolver-info"] + maybe [] (\ limit -> ["-W", show limit]) runsolverWallTimeLimit ++ + maybe [] (\ limit -> ["-R", show limit]) runsolverMemoryLimit ++ + ["--quiet", "-v", outputDirectory outBase ++ ".runsolver-info"] (stdoutSR, solutions) <- partitionEithers <$> - case (runsolverCPUTimeLimit, runsolverMemoryLimit) of - (Nothing, Nothing) -> runHandle savilerowScriptName srArgs handler + case (runsolverCPUTimeLimit, runsolverWallTimeLimit, runsolverMemoryLimit) of + (Nothing, Nothing, Nothing) -> runHandle savilerowScriptName srArgs handler _ -> if os /= "linux" then return [Left "runsolver is only supported on linux"] From 647990ca661ebdf55405b46cb8d52c4e87ce1b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 30 Mar 2024 21:44:00 +0000 Subject: [PATCH 085/124] print the SR command together with runsolver in verbose mode --- src/Conjure/UI/MainHelper.hs | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 1609cf1f9..57747592b 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -797,9 +797,6 @@ savileRowNoParam ui@Solve{..} (modelPath, eprimeModel) = sh $ errExit False $ do let outBase = (dropExtension . snd . splitFileName) modelPath srArgs <- liftIO $ srMkArgs ui outBase modelPath let tr = translateSolution eprimeModel def - when (logLevel >= LogDebug) $ do - liftIO $ putStrLn "Using the following options for Savile Row:" - liftIO $ putStrLn $ " savilerow " ++ unwords (map (quoteMultiWord . textToString) srArgs) let handler = liftIO . srStdoutHandler (outBase, modelPath, "", ui) tr (1::Int) @@ -809,11 +806,20 @@ savileRowNoParam ui@Solve{..} (modelPath, eprimeModel) = sh $ errExit False $ do ["--quiet", "-v", outputDirectory outBase ++ ".runsolver-info"] (stdoutSR, solutions) <- partitionEithers <$> case (runsolverCPUTimeLimit, runsolverWallTimeLimit, runsolverMemoryLimit) of - (Nothing, Nothing, Nothing) -> runHandle savilerowScriptName srArgs handler + (Nothing, Nothing, Nothing) -> do + when (logLevel >= LogDebug) $ do + liftIO $ putStrLn "Using the following options for Savile Row:" + liftIO $ putStrLn $ " savilerow " ++ unwords (map (quoteMultiWord . textToString) srArgs) + runHandle savilerowScriptName srArgs handler _ -> if os /= "linux" then return [Left "runsolver is only supported on linux"] - else runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler + else do + when (logLevel >= LogDebug) $ do + liftIO $ putStrLn "Using the following options for Savile Row:" + liftIO $ putStrLn $ " runsolver " ++ unwords (map quoteMultiWord runsolverArgs) + ++ "savilerow " ++ unwords (map (quoteMultiWord . textToString) srArgs) + runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler srCleanUp outBase ui (stringToText $ unlines stdoutSR) solutions savileRowNoParam _ _ = bug "savileRowNoParam" @@ -848,9 +854,6 @@ savileRowWithParams ui@Solve{..} (modelPath, eprimeModel) (paramPath, essencePar : stringToText (outputDirectory outBase ++ ".eprime-param") : srArgsBase let tr = translateSolution eprimeModel essenceParam - when (logLevel >= LogDebug) $ do - liftIO $ putStrLn "Using the following options for Savile Row:" - liftIO $ putStrLn $ " savilerow " ++ unwords (map (quoteMultiWord . textToString) srArgs) let handler = liftIO . srStdoutHandler (outBase, modelPath, paramPath, ui) tr (1::Int) @@ -860,11 +863,20 @@ savileRowWithParams ui@Solve{..} (modelPath, eprimeModel) (paramPath, essencePar ["--quiet", "-v", outputDirectory outBase ++ ".runsolver-info"] (stdoutSR, solutions) <- partitionEithers <$> case (runsolverCPUTimeLimit, runsolverWallTimeLimit, runsolverMemoryLimit) of - (Nothing, Nothing, Nothing) -> runHandle savilerowScriptName srArgs handler + (Nothing, Nothing, Nothing) -> do + when (logLevel >= LogDebug) $ do + liftIO $ putStrLn "Using the following options for Savile Row:" + liftIO $ putStrLn $ " savilerow " ++ unwords (map (quoteMultiWord . textToString) srArgs) + runHandle savilerowScriptName srArgs handler _ -> if os /= "linux" then return [Left "runsolver is only supported on linux"] - else runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler + else do + when (logLevel >= LogDebug) $ do + liftIO $ putStrLn "Using the following options for Savile Row:" + liftIO $ putStrLn $ " runsolver " ++ unwords (map quoteMultiWord runsolverArgs) + ++ "savilerow " ++ unwords (map (quoteMultiWord . textToString) srArgs) + runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler srCleanUp outBase ui (stringToText $ unlines stdoutSR) solutions savileRowWithParams _ _ _ = bug "savileRowWithParams" From e28622052ca9ee8e25018a59a7c5624219532b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 30 Mar 2024 22:00:35 +0000 Subject: [PATCH 086/124] typo --- src/Conjure/UI/MainHelper.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 57747592b..beb94683a 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -818,7 +818,7 @@ savileRowNoParam ui@Solve{..} (modelPath, eprimeModel) = sh $ errExit False $ do when (logLevel >= LogDebug) $ do liftIO $ putStrLn "Using the following options for Savile Row:" liftIO $ putStrLn $ " runsolver " ++ unwords (map quoteMultiWord runsolverArgs) - ++ "savilerow " ++ unwords (map (quoteMultiWord . textToString) srArgs) + ++ " savilerow " ++ unwords (map (quoteMultiWord . textToString) srArgs) runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler srCleanUp outBase ui (stringToText $ unlines stdoutSR) solutions savileRowNoParam _ _ = bug "savileRowNoParam" @@ -875,7 +875,7 @@ savileRowWithParams ui@Solve{..} (modelPath, eprimeModel) (paramPath, essencePar when (logLevel >= LogDebug) $ do liftIO $ putStrLn "Using the following options for Savile Row:" liftIO $ putStrLn $ " runsolver " ++ unwords (map quoteMultiWord runsolverArgs) - ++ "savilerow " ++ unwords (map (quoteMultiWord . textToString) srArgs) + ++ " savilerow " ++ unwords (map (quoteMultiWord . textToString) srArgs) runHandle "runsolver" (map stringToText runsolverArgs ++ [stringToText savilerowScriptName] ++ srArgs) handler srCleanUp outBase ui (stringToText $ unlines stdoutSR) solutions From 09e312f6f4a0155a036024a72ef7cda50fbca4ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 30 Mar 2024 22:17:55 +0000 Subject: [PATCH 087/124] update runsolver version --- etc/build/install-runsolver.sh | 2 +- etc/build/runsolver.patch | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/etc/build/install-runsolver.sh b/etc/build/install-runsolver.sh index 3beff029a..6254bdd54 100755 --- a/etc/build/install-runsolver.sh +++ b/etc/build/install-runsolver.sh @@ -2,7 +2,7 @@ # version as of 25 March 2024 # alas, none of the published releases compile correctly -VERSION='add1db71b5ecbeb9d2b1329d242dff0ada18809f' +VERSION='42f77c75fc511341f475f378f7bc1e5b3d708afb' set -o errexit set -o nounset diff --git a/etc/build/runsolver.patch b/etc/build/runsolver.patch index 974909ba4..dcbf65222 100644 --- a/etc/build/runsolver.patch +++ b/etc/build/runsolver.patch @@ -1,8 +1,8 @@ diff --git a/src/runsolver.cc b/src/runsolver.cc -index e2a7902..5696a34 100644 +index 5128a9b..a4c3e67 100644 --- a/src/runsolver.cc +++ b/src/runsolver.cc -@@ -916,7 +916,7 @@ void numaInfo() { +@@ -915,7 +915,7 @@ void numaInfo() { return; int nbNodes = numa_num_configured_nodes(); From 4870b33429f4daeaf8a13a9a86bc47774c9b43b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 2 Apr 2024 06:43:35 +0100 Subject: [PATCH 088/124] catch invalid instances --- src/Conjure/UI/SolveStats.hs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 534c86c2e..3c4d2590e 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -38,7 +38,11 @@ instance ToJSON SolveStats where toJSON = genericToJSON jsonOptions instance FromJSON SolveStats where parseJSON = genericParseJSON jsonOptions -data SolveStatus = OK | TimeOut | MemOut | Error +-- OK: solved, can be sat or unsat. +-- Invalid: instance is not valid. +-- TimeOut/MemOut: what they sound like. +-- Error: could be a bug, but could also be to do with a very large encoding. +data SolveStatus = OK | Invalid | TimeOut | MemOut | Error deriving (Eq, Ord, Show, Data, Typeable, Generic) instance Hashable SolveStatus @@ -90,6 +94,7 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) savilerowInfoText runso | T.isInfixOf "Out of Memory" combinedSR = MemOut | T.isInfixOf "Savile Row timed out." combinedSR = TimeOut | T.isInfixOf "time out: time limit reached" combinedSR = TimeOut + | T.isInfixOf "ERROR: In statement: where false" combinedSR = Invalid | M.lookup "SavileRowTimeOut" savilerowInfo == Just "1" = TimeOut | M.lookup "SavileRowClauseOut" savilerowInfo == Just "1" = TimeOut | M.lookup "SolverTimeOut" savilerowInfo == Just "1" = TimeOut From e04222166c7e39bf34657dcd9b679ae6fff0e398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 2 Apr 2024 07:10:13 +0100 Subject: [PATCH 089/124] catch a runsolver memout message --- src/Conjure/UI/SolveStats.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 3c4d2590e..2edc2b71d 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -86,7 +86,8 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) savilerowInfoText runso "kissat: fatal error: maximum arena capacity", -- kissat "Error: syntax error, unexpected ]]", -- cplex "*** Check failure stack trace: ***", -- or-tools - "Error: evaluation error: Index set mismatch." + "Error: evaluation error: Index set mismatch.", + "Maximum memory exceeded" -- for when runsolver prints this message but won't set MEMOUT=true for some reason ] ] = Error From 80b2703f11a63899f978eb1e258df664231b4f27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 4 Apr 2024 11:32:05 +0100 Subject: [PATCH 090/124] SR AssertionError --- src/Conjure/UI/SolveStats.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 2edc2b71d..647633bde 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -87,7 +87,8 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) savilerowInfoText runso "Error: syntax error, unexpected ]]", -- cplex "*** Check failure stack trace: ***", -- or-tools "Error: evaluation error: Index set mismatch.", - "Maximum memory exceeded" -- for when runsolver prints this message but won't set MEMOUT=true for some reason + "Maximum memory exceeded", -- for when runsolver prints this message but won't set MEMOUT=true for some reason + "Savile Row killed by: java.lang.AssertionError" ] ] = Error From c1d1a6c3b1e9f716708162fac5798bb8d0480955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 4 Apr 2024 11:32:36 +0100 Subject: [PATCH 091/124] tidy --- src/Conjure/Process/Streamlining.hs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Conjure/Process/Streamlining.hs b/src/Conjure/Process/Streamlining.hs index 823155043..e95ac44de 100644 --- a/src/Conjure/Process/Streamlining.hs +++ b/src/Conjure/Process/Streamlining.hs @@ -31,7 +31,7 @@ streamliningToStdout model = do showStr :: String -> Doc showStr = pretty . show - + streamliners <- streamlining model liftIO $ print $ prettyList prBraces "," @@ -371,7 +371,7 @@ setAll innerStreamliner x = do case dom of DomainSet _ _ innerDom -> Just (innerDom, "SetCardinality") DomainMSet _ _ innerDom -> Just (innerDom, "MSetCardinality") - DomainRelation _ _ innerDoms -> Just ((DomainTuple innerDoms), "RelationCardinality") + DomainRelation _ _ innerDoms -> Just (DomainTuple innerDoms, "RelationCardinality") _ -> Nothing case minnerDom of Just (innerDom, newTag) -> do @@ -397,7 +397,7 @@ setAtMostOne innerStreamliner x = do case dom of DomainSet _ _ innerDom -> Just (innerDom, "SetCardinality") DomainMSet _ _ innerDom -> Just (innerDom, "MSetCardinality") - DomainRelation _ _ innerDoms -> Just ((DomainTuple innerDoms), "RelationCardinality") + DomainRelation _ _ innerDoms -> Just (DomainTuple innerDoms, "RelationCardinality") _ -> Nothing case minnerDom of Just (innerDom, newTag) -> do @@ -421,7 +421,7 @@ setHalf innerStreamliner x = do case dom of DomainSet _ _ innerDom -> Just (innerDom, "SetCardinality") DomainMSet _ _ innerDom -> Just (innerDom, "MSetCardinality") - DomainRelation _ _ innerDoms -> Just ((DomainTuple innerDoms), "RelationCardinality") + DomainRelation _ _ innerDoms -> Just (DomainTuple innerDoms, "RelationCardinality") _ -> Nothing case minnerDom of Just (innerDom, newTag) -> do @@ -446,7 +446,7 @@ setApproxHalf innerStreamliner x = do case dom of DomainSet _ _ innerDom -> Just (innerDom, "SetCardinality") DomainMSet _ _ innerDom -> Just (innerDom, "MSetCardinality") - DomainRelation _ _ innerDoms -> Just ((DomainTuple innerDoms), "RelationCardinality") + DomainRelation _ _ innerDoms -> Just (DomainTuple innerDoms, "RelationCardinality") _ -> Nothing case minnerDom of Just (innerDom, newTag) -> do @@ -474,7 +474,7 @@ setMoreThanHalf innerStreamliner x = do case dom of DomainSet _ _ innerDom -> Just (innerDom, "SetCardinality") DomainMSet _ _ innerDom -> Just (innerDom, "MSetCardinality") - DomainRelation _ _ innerDoms -> Just ((DomainTuple innerDoms), "RelationCardinality") + DomainRelation _ _ innerDoms -> Just (DomainTuple innerDoms, "RelationCardinality") _ -> Nothing case minnerDom of Just (innerDom, newTag) -> do @@ -501,7 +501,7 @@ setLessThanHalf innerStreamliner x = do case dom of DomainSet _ _ innerDom -> Just (innerDom, "SetCardinality") DomainMSet _ _ innerDom -> Just (innerDom, "MSetCardinality") - DomainRelation _ _ innerDoms -> Just ((DomainTuple innerDoms), "RelationCardinality") + DomainRelation _ _ innerDoms -> Just (DomainTuple innerDoms, "RelationCardinality") _ -> Nothing case minnerDom of Just (innerDom, newTag) -> do @@ -569,8 +569,8 @@ binRelAttributes x = do , ( BinRelAttr_Equivalence , [essence| |`&inner`| * |`&inner`| * |`&inner`| |] ) , ( BinRelAttr_PartialOrder , [essence| |`&inner`| * |`&inner`| * |`&inner`| |] ) ] - , softness <- [Nothing, Just 2, Just 4, Just 8, Just 16, Just 32] , let grp = show attr + , softness <- [Nothing, Just 2, Just 4, Just 8, Just 16, Just 32] ] _ -> noStreamliner From 6aceb4f2ec523e6264d2c2e6139dcecc64a7a45f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 9 Apr 2024 16:49:24 +0100 Subject: [PATCH 092/124] SR ClassCastException --- src/Conjure/UI/SolveStats.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 647633bde..aeb66a33c 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -88,7 +88,8 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) savilerowInfoText runso "*** Check failure stack trace: ***", -- or-tools "Error: evaluation error: Index set mismatch.", "Maximum memory exceeded", -- for when runsolver prints this message but won't set MEMOUT=true for some reason - "Savile Row killed by: java.lang.AssertionError" + "Savile Row killed by: java.lang.AssertionError", + "java.lang.ClassCastException" ] ] = Error From 57d384561a17b34e7af6a3d006e61aa5d5523c37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 9 Apr 2024 16:53:11 +0100 Subject: [PATCH 093/124] stats.json reorg --- src/Conjure/UI/SolveStats.hs | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index aeb66a33c..f81d589b4 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -66,8 +66,7 @@ instance FromJSON SavileRowLogs where parseJSON = genericParseJSON jsonOptions mkSolveStats :: UI -> (Int, Text, Text) -> String -> String -> IO SolveStats mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) savilerowInfoText runsolverInfoText = do - let - combinedSR = T.unlines [stdoutSR, stderrSR] + let combinedSR = T.unlines [stdoutSR, stderrSR] savilerowInfo = M.fromList [(k, v) | [k, v] <- map (splitOn ":") (lines savilerowInfoText)] @@ -87,22 +86,34 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) savilerowInfoText runso "Error: syntax error, unexpected ]]", -- cplex "*** Check failure stack trace: ***", -- or-tools "Error: evaluation error: Index set mismatch.", - "Maximum memory exceeded", -- for when runsolver prints this message but won't set MEMOUT=true for some reason "Savile Row killed by: java.lang.AssertionError", "java.lang.ClassCastException" ] ] = Error - | T.isInfixOf "java.lang.OutOfMemoryError" combinedSR = MemOut - | T.isInfixOf "Out of Memory" combinedSR = MemOut - | T.isInfixOf "Savile Row timed out." combinedSR = TimeOut - | T.isInfixOf "time out: time limit reached" combinedSR = TimeOut + | or + [ T.isInfixOf msg combinedSR + | msg <- + [ "java.lang.OutOfMemoryError", + "ERROR: Out of Memory", + "Maximum memory exceeded" -- for when runsolver prints this message but won't set MEMOUT=true for some reason + ] + ] = + MemOut + | or + [ T.isInfixOf msg combinedSR + | msg <- + [ "Savile Row timed out.", + "time out: time limit reached" + ] + ] = + TimeOut | T.isInfixOf "ERROR: In statement: where false" combinedSR = Invalid + | M.lookup "MEMOUT" runsolverInfo == Just "true" = MemOut + | M.lookup "TIMEOUT" runsolverInfo == Just "true" = TimeOut | M.lookup "SavileRowTimeOut" savilerowInfo == Just "1" = TimeOut | M.lookup "SavileRowClauseOut" savilerowInfo == Just "1" = TimeOut | M.lookup "SolverTimeOut" savilerowInfo == Just "1" = TimeOut - | M.lookup "MEMOUT" runsolverInfo == Just "true" = MemOut - | M.lookup "TIMEOUT" runsolverInfo == Just "true" = TimeOut | exitCodeSR /= 0 = Error | otherwise = OK From de6d9823dd673c229f4ac73fc972d4883a3378ac Mon Sep 17 00:00:00 2001 From: mocher72 <40542735+mocher72@users.noreply.github.com> Date: Wed, 10 Apr 2024 12:25:13 +0200 Subject: [PATCH 094/124] Update installation.rst Added command line install for wsl including addition of path --- docs/installation.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/installation.rst b/docs/installation.rst index 32e8a08f4..cfa4560d9 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -16,6 +16,16 @@ It may be useful to save the binary under a directory that is in your search PAT For Windows, please use the Linux binaries with the `Windows Subsystem for Linux `_. +To Install into wsl2 on Windows then use the following commands + +.. code-block:: bash + + cd + wget https://github.com/conjure-cp/conjure/releases/download/v2.5.1/conjure-v2.5.1-linux-with-solvers.zip + unzip conjure-v2.5.1-linux-with-solvers.zip + echo 'export PATH="$HOME/conjure-v2.5.1-linux-with-solvers:$PATH"' >> ~/.zshrc + +Then restart your shell ! Compiling from source --------------------- From 1cf7f33e437ffac46ab880a34855c15bae04c6f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Fri, 12 Apr 2024 10:47:49 +0100 Subject: [PATCH 095/124] catch a runsolver message --- src/Conjure/UI/SolveStats.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index f81d589b4..4c788d1bd 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -104,7 +104,8 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) savilerowInfoText runso [ T.isInfixOf msg combinedSR | msg <- [ "Savile Row timed out.", - "time out: time limit reached" + "time out: time limit reached", + "Received SIGTERM or SIGINT, killing child" -- for when runsolver prints this message but won't set MEMOUT=true or TIMEOUT=true for some reason ] ] = TimeOut From 59048872386efd521750acdd4690f40d905d7936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 13 Apr 2024 23:10:28 +0100 Subject: [PATCH 096/124] bugfix: bubbling up through comprehensions that contain lettings --- src/Conjure/Rules/BubbleUp.hs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Conjure/Rules/BubbleUp.hs b/src/Conjure/Rules/BubbleUp.hs index 45eaeb360..86efcbb87 100644 --- a/src/Conjure/Rules/BubbleUp.hs +++ b/src/Conjure/Rules/BubbleUp.hs @@ -192,13 +192,12 @@ rule_LiftVars = "bubble-up-LiftVars" `namedRule` theRule where -- discard for now (_conditions, generators) <- fmap mconcat $ forM gensOrConds $ \ goc -> case goc of Condition{} -> return ([goc], []) - ComprehensionLetting{} -> return ([goc], []) - Generator (GenDomainHasRepr patName domain) -> return ([], [(patName, domain)]) + ComprehensionLetting{} -> return ([], [goc]) + Generator (GenDomainHasRepr _ _) -> return ([], [goc]) _ -> na "rule_LiftVars" - - let patRefs = [ Reference patName Nothing | (patName, _) <- generators ] - let indexDomains = map snd generators + let patRefs = [ Reference patName Nothing | Generator (GenDomainHasRepr patName _domain) <- generators ] + let indexDomains = [domain | Generator (GenDomainHasRepr _patName domain) <- generators ] let upd (Reference nm _) | nm `elem` map fst decls = let r = Reference nm Nothing @@ -212,7 +211,7 @@ rule_LiftVars = "bubble-up-LiftVars" `namedRule` theRule where ] let consLifted = - [ make opAnd $ Comprehension c [Generator (GenDomainHasRepr n d) | (n,d) <- generators] + [ make opAnd $ Comprehension c generators | c <- transformBi upd cons ] From e15c3342aa7bc84b6537c349c3e507df92db5bed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 20 Apr 2024 23:25:02 +0100 Subject: [PATCH 097/124] file not found is an error --- src/Conjure/UI/SolveStats.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 4c788d1bd..83c07a4a1 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -87,7 +87,8 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) savilerowInfoText runso "*** Check failure stack trace: ***", -- or-tools "Error: evaluation error: Index set mismatch.", "Savile Row killed by: java.lang.AssertionError", - "java.lang.ClassCastException" + "java.lang.ClassCastException", + "ERROR: File not found" -- savilerow ] ] = Error From 25e9bc6efe8bba503b431dce4d54f5c8a406c986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 20 Apr 2024 23:25:14 +0100 Subject: [PATCH 098/124] lint --- src/Conjure/Process/Streamlining.hs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/Conjure/Process/Streamlining.hs b/src/Conjure/Process/Streamlining.hs index e95ac44de..4f1264f68 100644 --- a/src/Conjure/Process/Streamlining.hs +++ b/src/Conjure/Process/Streamlining.hs @@ -35,10 +35,10 @@ streamliningToStdout model = do streamliners <- streamlining model liftIO $ print $ prettyList prBraces "," - [ (showStr $ show i) <> ":" <+> prBraces (vcat + [ showStr (show i) <> ":" <+> prBraces (vcat [ showStr "onVariable" <> ":" <+> showStr (show (pretty nm)) <> "," - , showStr "groups" <> ":" <+> prettyList prBrackets "," (map showStr groups) <> "," - , showStr "constraint" <> ":" <+> (showStr $ map whitespace $ show $ pretty cons) + , showStr "groups" <> ":" <+> prettyList prBrackets "," (map showStr (nub groups)) <> "," + , showStr "constraint" <> ":" <+> showStr (map whitespace $ show $ pretty cons) ]) | (i, (nm, (cons, groups))) <- zip allNats streamliners ] @@ -53,16 +53,15 @@ streamlining :: (?typeCheckerMode :: TypeCheckerMode) => Model -> m [(Name, Streamliner)] streamlining model = do - concatForM (mStatements model) $ \ statement -> - case statement of - Declaration (FindOrGiven Find nm domain) -> do - let ref = Reference nm (Just (DeclNoRepr Find nm domain NoRegion)) - streamliners <- streamlinersForSingleVariable ref - -- traceM $ show $ vcat [ "Streamliners for --" <+> pretty statement - -- , vcat [ nest 4 (vcat (pretty x : map pretty gs)) | (x,gs) <- streamliners ] - -- ] - return [ (nm, s) | s <- streamliners ] - _ -> noStreamliner + concatForM (mStatements model) $ \case + Declaration (FindOrGiven Find nm domain) -> do + let ref = Reference nm (Just (DeclNoRepr Find nm domain NoRegion)) + streamliners <- streamlinersForSingleVariable ref + -- traceM $ show $ vcat [ "Streamliners for --" <+> pretty statement + -- , vcat [ nest 4 (vcat (pretty x : map pretty gs)) | (x,gs) <- streamliners ] + -- ] + return [ (nm, s) | s <- streamliners ] + _ -> noStreamliner type StreamlinerGroup = String From 3a1a8caf343b61ca342a9b4cf5bf3d215e2fca51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 23 Apr 2024 11:22:08 +0100 Subject: [PATCH 099/124] adding row and col bucket based streamliners for 2d matrices --- src/Conjure/Process/Streamlining.hs | 65 + .../covering-array/CoveringArray.essence | 74 + .../custom/streamlining/covering-array/run.sh | 2 + .../covering-array/stderr.expected | 1 + .../covering-array/stdout.expected | 3634 +++++++++++++++++ 5 files changed, 3776 insertions(+) create mode 100644 tests/custom/streamlining/covering-array/CoveringArray.essence create mode 100755 tests/custom/streamlining/covering-array/run.sh create mode 100644 tests/custom/streamlining/covering-array/stderr.expected create mode 100644 tests/custom/streamlining/covering-array/stdout.expected diff --git a/src/Conjure/Process/Streamlining.hs b/src/Conjure/Process/Streamlining.hs index 4f1264f68..eeeb8ee4c 100644 --- a/src/Conjure/Process/Streamlining.hs +++ b/src/Conjure/Process/Streamlining.hs @@ -105,6 +105,9 @@ streamlinersForSingleVariable x = concatMapM ($ x) , onTuple 3 streamlinersForSingleVariable , onTuple 4 streamlinersForSingleVariable + , matrixByRowBucket streamlinersForSingleVariable + , matrixByColBucket streamlinersForSingleVariable + , matrixAll streamlinersForSingleVariable , matrixHalf streamlinersForSingleVariable , matrixAtMostOne streamlinersForSingleVariable @@ -354,6 +357,68 @@ matrixLessThanHalf innerStreamliner x = do _ -> noStreamliner +matrixByRowBucket :: + MonadFailDoc m => + NameGen m => + (?typeCheckerMode :: TypeCheckerMode) => + StreamlinerGen m -> StreamlinerGen m +matrixByRowBucket innerStreamliner x = do + dom <- expandDomainReference <$> domainOf x + case dom of + DomainMatrix (DomainInt _ [RangeBounded lb ub]) innerDom@(DomainMatrix _ DomainInt{}) -> do + let size = [essence| &ub - &lb + 1 |] + let bucketSize = [essence| &size / 10 |] + nm <- nextName "q" + let pat = Single nm + ref = Reference nm (Just (DeclNoRepr Find nm innerDom NoRegion)) + + liftMatrix (Reference n _) | n == nm = [essence| &x[&ref] |] + liftMatrix p = p + + innerConstraints <- transformBi liftMatrix <$> innerStreamliner ref + concatForM [0..9] $ \ (bucketInt :: Integer) -> let bucket = fromInt bucketInt in + forM innerConstraints $ \ (innerConstraint, grps) -> + attachGroup (("MatrixByRowBucket-" ++ show bucketInt) : grps) [essence| + forAll &pat : int(&lb + &bucket * &bucketSize .. &lb + (&bucket+1) * &bucketSize) . &innerConstraint + |] + _ -> noStreamliner + + + +matrixByColBucket :: + MonadFailDoc m => + NameGen m => + (?typeCheckerMode :: TypeCheckerMode) => + StreamlinerGen m -> StreamlinerGen m +matrixByColBucket innerStreamliner x = do + dom <- expandDomainReference <$> domainOf x + case dom of + DomainMatrix outerIndex (DomainMatrix (DomainInt _ [RangeBounded lb ub]) innerDom) -> do + let size = [essence| &ub - &lb + 1 |] + let bucketSize = [essence| &size / 10 |] + + nmO <- nextName "q" + let patO = Single nmO + let refO = Reference nmO Nothing + + nm <- nextName "q" + let pat = Single nm + ref = Reference nm (Just (DeclNoRepr Find nm innerDom NoRegion)) + + liftMatrix (Reference n _) | n == nm = [essence| &x[&refO, &ref] |] + liftMatrix p = p + + innerConstraints <- transformBi liftMatrix <$> innerStreamliner ref + concatForM [0..9] $ \ (bucketInt :: Integer) -> let bucket = fromInt bucketInt in + forM innerConstraints $ \ (innerConstraint, grps) -> + attachGroup (("MatrixByColBucket-" ++ show bucketInt) : grps) [essence| + forAll &patO : &outerIndex . + forAll &pat : int(&lb + &bucket * &bucketSize .. &lb + (&bucket+1) * &bucketSize) . + &innerConstraint + |] + _ -> noStreamliner + + ------------------------------------------------------------------------------ -- Sets and MSets ------------------------------------------------------------------------------ diff --git a/tests/custom/streamlining/covering-array/CoveringArray.essence b/tests/custom/streamlining/covering-array/CoveringArray.essence new file mode 100644 index 000000000..d857f3ff8 --- /dev/null +++ b/tests/custom/streamlining/covering-array/CoveringArray.essence @@ -0,0 +1,74 @@ +language Essence 1.3 + +$ This is the decision version of the cover test problem + +given t : int(1..) $ strength (size of subset of rows) +given k : int(1..) $ rows +given g : int(2..) $ number of values +given b : int(1..) $ columns + +where k>=t, b>=g**t + +$ TODO: +$ - Look into the second model from https://link.springer.com/content/pdf/10.1007/s10601-006-7094-9.pdf +$ - Can we break the symmetry via unnamed types? + +$ k * b of 1..g +find CA: matrix indexed by [int(1..k), int(1..b)] of int(1..g) + +such that + forAll rows : sequence (size t) of int(1..k) . + (forAll i : int(2..t) . rows(i-1) < rows(i)) -> + forAll values : sequence (size t) of int(1..g) . + exists column : int(1..b) . + forAll i : int(1..t) . + CA[rows(i), column] = values(i) + +$ $ row & col symmetry breaking +$ such that forAll i : int(2..k) . CA[i-1,..] <=lex CA[i,..] +$ such that forAll i : int(2..b) . CA[..,i-1] <=lex CA[..,i] + +$ $ ============================================================================= +$ $ EXAMPLE +$ $ g=2 values +$ $ k=5 rows +$ $ b=10 columns +$ $ any subset of t=3 rows selected will contain all full-factorial assignments +$ $ 0 0 0 0 0 1 1 1 1 1 +$ $ 0 0 0 1 1 0 0 1 1 1 +$ $ 0 0 1 0 1 0 1 0 1 1 +$ $ 0 1 0 0 1 0 1 1 0 1 +$ $ 0 1 1 1 0 1 0 0 0 1 + +$ $ ============================================================================= +$ $ INSTANCES +$ $ +$ $ Note: These are all easy in that they can be solved by MiniZinc in under 2 minutes. +$ $ The paper cited below uses Ilog Solver, which is tens of times faster. +$ $ +$ $ These are easy and unsat +$ $ letting t be 3, g be 2, k be 5, b be 8 +$ $ letting t be 3, g be 2, k be 5, b be 9 +$ $ letting t be 3, g be 2, k be 6, b be 8 +$ $ letting t be 3, g be 2, k be 6, b be 9 +$ $ letting t be 3, g be 2, k be 6, b be 10 +$ $ letting t be 3, g be 2, k be 7, b be 8 +$ $ letting t be 3, g be 2, k be 7, b be 9 +$ $ letting t be 3, g be 2, k be 8, b be 8 +$ $ letting t be 3, g be 2, k be 8, b be 11 +$ $ letting t be 3, g be 2, k be 9, b be 11 +$ $ letting t be 3, g be 2, k be 10, b be 11 +$ $ letting t be 3, g be 2, k be 11, b be 11 +$ $ letting t be 3, g be 2, k be 12, b be 11 +$ $ +$ $ These are easy and sat +$ $ letting t be 3, g be 2, k be 4, b be 8 +$ $ letting t be 3, g be 2, k be 4, b be 9 +$ $ letting t be 3, g be 2, k be 5, b be 10 +$ $ letting t be 3, g be 2, k be 6, b be 12 +$ $ letting t be 3, g be 2, k be 7, b be 12 +$ $ letting t be 3, g be 2, k be 8, b be 12 +$ $ letting t be 3, g be 2, k be 9, b be 12 +$ $ letting t be 3, g be 2, k be 10, b be 12 +$ $ letting t be 3, g be 2, k be 11, b be 12 + diff --git a/tests/custom/streamlining/covering-array/run.sh b/tests/custom/streamlining/covering-array/run.sh new file mode 100755 index 000000000..ddc49374c --- /dev/null +++ b/tests/custom/streamlining/covering-array/run.sh @@ -0,0 +1,2 @@ + +conjure streamlining *.essence diff --git a/tests/custom/streamlining/covering-array/stderr.expected b/tests/custom/streamlining/covering-array/stderr.expected new file mode 100644 index 000000000..a596c317b --- /dev/null +++ b/tests/custom/streamlining/covering-array/stderr.expected @@ -0,0 +1 @@ +Number of streamliners: 424 diff --git a/tests/custom/streamlining/covering-array/stdout.expected b/tests/custom/streamlining/covering-array/stdout.expected new file mode 100644 index 000000000..b9247ed6d --- /dev/null +++ b/tests/custom/streamlining/covering-array/stdout.expected @@ -0,0 +1,3634 @@ +{ + "1": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "2": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "3": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "4": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "5": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "6": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "7": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "8": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "9": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "10": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "11": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "12": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "13": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "14": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "15": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "16": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "17": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "18": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "19": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "20": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "21": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "22": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "23": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "24": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-0", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" + }, + "25": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "26": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "27": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "28": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "29": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "30": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "31": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "32": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "33": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "34": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "35": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "36": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "37": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "38": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "39": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "40": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "41": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "42": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "43": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "44": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "45": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "46": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "47": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "48": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-1", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" + }, + "49": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "50": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "51": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "52": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "53": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "54": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "55": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "56": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "57": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "58": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "59": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "60": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "61": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "62": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "63": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "64": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "65": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "66": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "67": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "68": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "69": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "70": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "71": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "72": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-2", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" + }, + "73": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "74": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "75": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "76": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "77": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "78": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "79": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "80": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "81": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "82": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "83": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "84": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "85": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "86": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "87": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "88": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "89": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "90": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "91": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "92": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "93": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "94": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "95": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "96": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-3", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" + }, + "97": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "98": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "99": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "100": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "101": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "102": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "103": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "104": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "105": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "106": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "107": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "108": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "109": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "110": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "111": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "112": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "113": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "114": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "115": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "116": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "117": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "118": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "119": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "120": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-4", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" + }, + "121": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "122": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "123": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "124": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "125": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "126": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "127": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "128": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "129": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "130": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "131": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "132": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "133": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "134": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "135": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "136": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "137": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "138": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "139": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "140": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "141": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "142": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "143": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "144": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-5", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" + }, + "145": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "146": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "147": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "148": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "149": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "150": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "151": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "152": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "153": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "154": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "155": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "156": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "157": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "158": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "159": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "160": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "161": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "162": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "163": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "164": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "165": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "166": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "167": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "168": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-6", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" + }, + "169": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "170": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "171": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "172": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "173": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "174": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "175": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "176": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "177": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "178": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "179": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "180": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "181": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "182": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "183": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "184": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "185": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "186": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "187": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "188": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "189": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "190": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "191": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "192": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-7", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" + }, + "193": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "194": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "195": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "196": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "197": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "198": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "199": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "200": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "201": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "202": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "203": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "204": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "205": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "206": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "207": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "208": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "209": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "210": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "211": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "212": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "213": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "214": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "215": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "216": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-8", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" + }, + "217": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "218": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "219": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "220": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "221": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "222": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "223": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "224": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "225": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "226": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "227": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "228": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "229": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "230": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "231": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "232": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "233": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "234": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "235": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "236": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "237": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "238": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "239": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "240": { + "onVariable": "CA", + "groups": [ + "MatrixByRowBucket-9", + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" + }, + "241": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-0", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "242": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-0", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "243": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-0", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "244": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-0", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "245": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-1", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "246": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-1", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "247": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-1", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "248": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-1", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "249": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-2", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "250": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-2", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "251": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-2", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "252": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-2", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "253": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-3", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "254": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-3", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "255": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-3", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "256": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-3", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "257": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-4", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "258": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-4", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "259": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-4", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "260": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-4", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "261": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-5", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "262": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-5", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "263": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-5", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "264": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-5", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "265": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-6", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "266": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-6", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "267": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-6", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "268": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-6", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "269": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-7", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "270": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-7", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "271": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-7", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "272": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-7", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "273": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-8", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "274": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-8", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "275": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-8", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "276": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-8", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "277": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-9", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "278": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-9", + "IntOddEven" + ], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "279": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-9", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "280": { + "onVariable": "CA", + "groups": [ + "MatrixByColBucket-9", + "IntLowHigh" + ], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" + }, + "281": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q10, q11] % 2 = 1 | q11 : int(1..b)]) | q10 : int(1..k)])" + }, + "282": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([and([CA[q10, q11] % 2 = 0 | q11 : int(1..b)]) | q10 : int(1..k)])" + }, + "283": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q10, q11] < 1 + (g - 1) / 2 | q11 : int(1..b)]) | q10 : int(1..k)])" + }, + "284": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([and([CA[q10, q11] > 1 + (g - 1) / 2 | q11 : int(1..b)]) | q10 : int(1..k)])" + }, + "285": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] % 2 = 1) | q12 : int(1..b)]) | q10 : int(1..k)])" + }, + "286": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] % 2 = 0) | q12 : int(1..b)]) | q10 : int(1..k)])" + }, + "287": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] < 1 + (g - 1) / 2) | q12 : int(1..b)]) | q10 : int(1..k)])" + }, + "288": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] > 1 + (g - 1) / 2) | q12 : int(1..b)]) | q10 : int(1..k)])" + }, + "289": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q10, q13] % 2 = 1) | q13 : int(1..b)]) | q10 : int(1..k)])" + }, + "290": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([1 >= sum([toInt(CA[q10, q13] % 2 = 0) | q13 : int(1..b)]) | q10 : int(1..k)])" + }, + "291": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q10, q13] < 1 + (g - 1) / 2) | q13 : int(1..b)]) | q10 : int(1..k)])" + }, + "292": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([1 >= sum([toInt(CA[q10, q13] > 1 + (g - 1) / 2) | q13 : int(1..b)]) | q10 : int(1..k)])" + }, + "293": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] % 2 = 1) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] % 2 = 1) | q14 : int(1..b)]) | q10 : int(1..k)])" + }, + "294": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] % 2 = 0) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] % 2 = 0) | q14 : int(1..b)]) | q10 : int(1..k)])" + }, + "295": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] < 1 + (g - 1) / 2) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] < 1 + (g - 1) / 2) | q14 : int(1..b)]) | q10 : int(1..k)])" + }, + "296": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] > 1 + (g - 1) / 2) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] > 1 + (g - 1) / 2) | q14 : int(1..b)]) | q10 : int(1..k)])" + }, + "297": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] % 2 = 1) | q15 : int(1..b)]) | q10 : int(1..k)])" + }, + "298": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] % 2 = 0) | q15 : int(1..b)]) | q10 : int(1..k)])" + }, + "299": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] < 1 + (g - 1) / 2) | q15 : int(1..b)]) | q10 : int(1..k)])" + }, + "300": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] > 1 + (g - 1) / 2) | q15 : int(1..b)]) | q10 : int(1..k)])" + }, + "301": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] % 2 = 1) | q16 : int(1..b)]) | q10 : int(1..k)])" + }, + "302": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] % 2 = 0) | q16 : int(1..b)]) | q10 : int(1..k)])" + }, + "303": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] < 1 + (g - 1) / 2) | q16 : int(1..b)]) | q10 : int(1..k)])" + }, + "304": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] > 1 + (g - 1) / 2) | q16 : int(1..b)]) | q10 : int(1..k)])" + }, + "305": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] % 2 = 1 | q18 : int(1..b)])) | q17 : int(1..k)])" + }, + "306": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] % 2 = 0 | q18 : int(1..b)])) | q17 : int(1..k)])" + }, + "307": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] < 1 + (g - 1) / 2 | q18 : int(1..b)])) | q17 : int(1..k)])" + }, + "308": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] > 1 + (g - 1) / 2 | q18 : int(1..b)])) | q17 : int(1..k)])" + }, + "309": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] % 2 = 1) | q19 : int(1..b)])) | q17 : int(1..k)])" + }, + "310": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] % 2 = 0) | q19 : int(1..b)])) | q17 : int(1..k)])" + }, + "311": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] < 1 + (g - 1) / 2) | q19 : int(1..b)])) | q17 : int(1..k)])" + }, + "312": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] > 1 + (g - 1) / 2) | q19 : int(1..b)])) | q17 : int(1..k)])" + }, + "313": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] % 2 = 1) | q20 : int(1..b)])) | q17 : int(1..k)])" + }, + "314": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] % 2 = 0) | q20 : int(1..b)])) | q17 : int(1..k)])" + }, + "315": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] < 1 + (g - 1) / 2) | q20 : int(1..b)])) | q17 : int(1..k)])" + }, + "316": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] > 1 + (g - 1) / 2) | q20 : int(1..b)])) | q17 : int(1..k)])" + }, + "317": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] % 2 = 1) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] % 2 = 1) | q21 : int(1..b)])) | q17 : int(1..k)])" + }, + "318": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] % 2 = 0) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] % 2 = 0) | q21 : int(1..b)])) | q17 : int(1..k)])" + }, + "319": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] < 1 + (g - 1) / 2) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] < 1 + (g - 1) / 2) | q21 : int(1..b)])) | q17 : int(1..k)])" + }, + "320": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] > 1 + (g - 1) / 2) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] > 1 + (g - 1) / 2) | q21 : int(1..b)])) | q17 : int(1..k)])" + }, + "321": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] % 2 = 1) | q22 : int(1..b)])) | q17 : int(1..k)])" + }, + "322": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] % 2 = 0) | q22 : int(1..b)])) | q17 : int(1..k)])" + }, + "323": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] < 1 + (g - 1) / 2) | q22 : int(1..b)])) | q17 : int(1..k)])" + }, + "324": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] > 1 + (g - 1) / 2) | q22 : int(1..b)])) | q17 : int(1..k)])" + }, + "325": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] % 2 = 1) | q23 : int(1..b)])) | q17 : int(1..k)])" + }, + "326": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] % 2 = 0) | q23 : int(1..b)])) | q17 : int(1..k)])" + }, + "327": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] < 1 + (g - 1) / 2) | q23 : int(1..b)])) | q17 : int(1..k)])" + }, + "328": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] > 1 + (g - 1) / 2) | q23 : int(1..b)])) | q17 : int(1..k)])" + }, + "329": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "1 >= sum([toInt(and([CA[q24, q25] % 2 = 1 | q25 : int(1..b)])) | q24 : int(1..k)])" + }, + "330": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "1 >= sum([toInt(and([CA[q24, q25] % 2 = 0 | q25 : int(1..b)])) | q24 : int(1..k)])" + }, + "331": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "1 >= sum([toInt(and([CA[q24, q25] < 1 + (g - 1) / 2 | q25 : int(1..b)])) | q24 : int(1..k)])" + }, + "332": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "1 >= sum([toInt(and([CA[q24, q25] > 1 + (g - 1) / 2 | q25 : int(1..b)])) | q24 : int(1..k)])" + }, + "333": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] % 2 = 1) | q26 : int(1..b)])) | q24 : int(1..k)])" + }, + "334": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] % 2 = 0) | q26 : int(1..b)])) | q24 : int(1..k)])" + }, + "335": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] < 1 + (g - 1) / 2) | q26 : int(1..b)])) | q24 : int(1..k)])" + }, + "336": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] > 1 + (g - 1) / 2) | q26 : int(1..b)])) | q24 : int(1..k)])" + }, + "337": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] % 2 = 1) | q27 : int(1..b)])) | q24 : int(1..k)])" + }, + "338": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] % 2 = 0) | q27 : int(1..b)])) | q24 : int(1..k)])" + }, + "339": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] < 1 + (g - 1) / 2) | q27 : int(1..b)])) | q24 : int(1..k)])" + }, + "340": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] > 1 + (g - 1) / 2) | q27 : int(1..b)])) | q24 : int(1..k)])" + }, + "341": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] % 2 = 1) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] % 2 = 1) | q28 : int(1..b)])) | q24 : int(1..k)])" + }, + "342": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] % 2 = 0) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] % 2 = 0) | q28 : int(1..b)])) | q24 : int(1..k)])" + }, + "343": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] < 1 + (g - 1) / 2) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] < 1 + (g - 1) / 2) | q28 : int(1..b)])) | q24 : int(1..k)])" + }, + "344": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] > 1 + (g - 1) / 2) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] > 1 + (g - 1) / 2) | q28 : int(1..b)])) | q24 : int(1..k)])" + }, + "345": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] % 2 = 1) | q29 : int(1..b)])) | q24 : int(1..k)])" + }, + "346": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] % 2 = 0) | q29 : int(1..b)])) | q24 : int(1..k)])" + }, + "347": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] < 1 + (g - 1) / 2) | q29 : int(1..b)])) | q24 : int(1..k)])" + }, + "348": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] > 1 + (g - 1) / 2) | q29 : int(1..b)])) | q24 : int(1..k)])" + }, + "349": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] % 2 = 1) | q30 : int(1..b)])) | q24 : int(1..k)])" + }, + "350": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] % 2 = 0) | q30 : int(1..b)])) | q24 : int(1..k)])" + }, + "351": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] < 1 + (g - 1) / 2) | q30 : int(1..b)])) | q24 : int(1..k)])" + }, + "352": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] > 1 + (g - 1) / 2) | q30 : int(1..b)])) | q24 : int(1..k)])" + }, + "353": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] % 2 = 1 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] % 2 = 1 | q32 : int(1..b)])) | q31 : int(1..k)])" + }, + "354": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] % 2 = 0 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] % 2 = 0 | q32 : int(1..b)])) | q31 : int(1..k)])" + }, + "355": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] < 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] < 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)])" + }, + "356": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] > 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] > 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)])" + }, + "357": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 1) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 1) | q33 : int(1..b)])) | q31 : int(1..k)])" + }, + "358": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 0) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 0) | q33 : int(1..b)])) | q31 : int(1..k)])" + }, + "359": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] < 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] < 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)])" + }, + "360": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] > 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] > 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)])" + }, + "361": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 1) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 1) | q34 : int(1..b)])) | q31 : int(1..k)])" + }, + "362": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 0) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 0) | q34 : int(1..b)])) | q31 : int(1..k)])" + }, + "363": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] < 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] < 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)])" + }, + "364": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] > 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] > 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)])" + }, + "365": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 1) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 1) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 1) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 1) | q35 : int(1..b)])) | q31 : int(1..k)])" + }, + "366": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)])) | q31 : int(1..k)])" + }, + "367": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)])" + }, + "368": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)])" + }, + "369": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 1) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 1) | q36 : int(1..b)])) | q31 : int(1..k)])" + }, + "370": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 0) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 0) | q36 : int(1..b)])) | q31 : int(1..k)])" + }, + "371": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] < 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] < 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)])" + }, + "372": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] > 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] > 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)])" + }, + "373": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 1) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 1) | q37 : int(1..b)])) | q31 : int(1..k)])" + }, + "374": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 0) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 0) | q37 : int(1..b)])) | q31 : int(1..k)])" + }, + "375": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] < 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] < 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)])" + }, + "376": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] > 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] > 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)])" + }, + "377": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] % 2 = 1 | q39 : int(1..b)])) | q38 : int(1..k)])" + }, + "378": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] % 2 = 0 | q39 : int(1..b)])) | q38 : int(1..k)])" + }, + "379": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] < 1 + (g - 1) / 2 | q39 : int(1..b)])) | q38 : int(1..k)])" + }, + "380": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] > 1 + (g - 1) / 2 | q39 : int(1..b)])) | q38 : int(1..k)])" + }, + "381": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] % 2 = 1) | q40 : int(1..b)])) | q38 : int(1..k)])" + }, + "382": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] % 2 = 0) | q40 : int(1..b)])) | q38 : int(1..k)])" + }, + "383": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] < 1 + (g - 1) / 2) | q40 : int(1..b)])) | q38 : int(1..k)])" + }, + "384": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] > 1 + (g - 1) / 2) | q40 : int(1..b)])) | q38 : int(1..k)])" + }, + "385": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] % 2 = 1) | q41 : int(1..b)])) | q38 : int(1..k)])" + }, + "386": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] % 2 = 0) | q41 : int(1..b)])) | q38 : int(1..k)])" + }, + "387": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] < 1 + (g - 1) / 2) | q41 : int(1..b)])) | q38 : int(1..k)])" + }, + "388": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] > 1 + (g - 1) / 2) | q41 : int(1..b)])) | q38 : int(1..k)])" + }, + "389": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] % 2 = 1) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] % 2 = 1) | q42 : int(1..b)])) | q38 : int(1..k)])" + }, + "390": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] % 2 = 0) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] % 2 = 0) | q42 : int(1..b)])) | q38 : int(1..k)])" + }, + "391": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] < 1 + (g - 1) / 2) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] < 1 + (g - 1) / 2) | q42 : int(1..b)])) | q38 : int(1..k)])" + }, + "392": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] > 1 + (g - 1) / 2) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] > 1 + (g - 1) / 2) | q42 : int(1..b)])) | q38 : int(1..k)])" + }, + "393": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] % 2 = 1) | q43 : int(1..b)])) | q38 : int(1..k)])" + }, + "394": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] % 2 = 0) | q43 : int(1..b)])) | q38 : int(1..k)])" + }, + "395": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] < 1 + (g - 1) / 2) | q43 : int(1..b)])) | q38 : int(1..k)])" + }, + "396": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] > 1 + (g - 1) / 2) | q43 : int(1..b)])) | q38 : int(1..k)])" + }, + "397": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] % 2 = 1) | q44 : int(1..b)])) | q38 : int(1..k)])" + }, + "398": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] % 2 = 0) | q44 : int(1..b)])) | q38 : int(1..k)])" + }, + "399": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] < 1 + (g - 1) / 2) | q44 : int(1..b)])) | q38 : int(1..k)])" + }, + "400": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] > 1 + (g - 1) / 2) | q44 : int(1..b)])) | q38 : int(1..k)])" + }, + "401": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] % 2 = 1 | q46 : int(1..b)])) | q45 : int(1..k)])" + }, + "402": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] % 2 = 0 | q46 : int(1..b)])) | q45 : int(1..k)])" + }, + "403": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] < 1 + (g - 1) / 2 | q46 : int(1..b)])) | q45 : int(1..k)])" + }, + "404": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] > 1 + (g - 1) / 2 | q46 : int(1..b)])) | q45 : int(1..k)])" + }, + "405": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] % 2 = 1) | q47 : int(1..b)])) | q45 : int(1..k)])" + }, + "406": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] % 2 = 0) | q47 : int(1..b)])) | q45 : int(1..k)])" + }, + "407": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] < 1 + (g - 1) / 2) | q47 : int(1..b)])) | q45 : int(1..k)])" + }, + "408": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] > 1 + (g - 1) / 2) | q47 : int(1..b)])) | q45 : int(1..k)])" + }, + "409": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] % 2 = 1) | q48 : int(1..b)])) | q45 : int(1..k)])" + }, + "410": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] % 2 = 0) | q48 : int(1..b)])) | q45 : int(1..k)])" + }, + "411": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] < 1 + (g - 1) / 2) | q48 : int(1..b)])) | q45 : int(1..k)])" + }, + "412": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] > 1 + (g - 1) / 2) | q48 : int(1..b)])) | q45 : int(1..k)])" + }, + "413": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] % 2 = 1) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] % 2 = 1) | q49 : int(1..b)])) | q45 : int(1..k)])" + }, + "414": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] % 2 = 0) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] % 2 = 0) | q49 : int(1..b)])) | q45 : int(1..k)])" + }, + "415": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] < 1 + (g - 1) / 2) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] < 1 + (g - 1) / 2) | q49 : int(1..b)])) | q45 : int(1..k)])" + }, + "416": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] > 1 + (g - 1) / 2) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] > 1 + (g - 1) / 2) | q49 : int(1..b)])) | q45 : int(1..k)])" + }, + "417": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] % 2 = 1) | q50 : int(1..b)])) | q45 : int(1..k)])" + }, + "418": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] % 2 = 0) | q50 : int(1..b)])) | q45 : int(1..k)])" + }, + "419": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] < 1 + (g - 1) / 2) | q50 : int(1..b)])) | q45 : int(1..k)])" + }, + "420": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] > 1 + (g - 1) / 2) | q50 : int(1..b)])) | q45 : int(1..k)])" + }, + "421": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] % 2 = 1) | q51 : int(1..b)])) | q45 : int(1..k)])" + }, + "422": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntOddEven" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] % 2 = 0) | q51 : int(1..b)])) | q45 : int(1..k)])" + }, + "423": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] < 1 + (g - 1) / 2) | q51 : int(1..b)])) | q45 : int(1..k)])" + }, + "424": { + "onVariable": "CA", + "groups": [ + "MatrixCardinality", + "IntLowHigh" + ], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] > 1 + (g - 1) / 2) | q51 : int(1..b)])) | q45 : int(1..k)])" + } +} \ No newline at end of file From 8f79eff06b4cd2f41ba31e112f0fb240cbfc5a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 23 Apr 2024 11:26:19 +0100 Subject: [PATCH 100/124] remove "pretty" json --- .../covering-array/stdout.expected | 5146 +++++------------ 1 file changed, 1512 insertions(+), 3634 deletions(-) diff --git a/tests/custom/streamlining/covering-array/stdout.expected b/tests/custom/streamlining/covering-array/stdout.expected index b9247ed6d..5a88b8784 100644 --- a/tests/custom/streamlining/covering-array/stdout.expected +++ b/tests/custom/streamlining/covering-array/stdout.expected @@ -1,3634 +1,1512 @@ -{ - "1": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "2": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "3": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "4": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "5": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "6": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "7": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "8": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "9": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "10": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "11": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "12": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "13": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "14": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "15": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "16": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "17": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "18": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "19": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "20": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "21": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "22": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "23": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "24": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-0", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])" - }, - "25": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "26": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "27": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "28": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "29": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "30": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "31": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "32": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "33": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "34": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "35": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "36": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "37": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "38": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "39": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "40": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "41": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "42": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "43": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "44": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "45": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "46": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "47": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "48": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-1", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])" - }, - "49": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "50": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "51": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "52": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "53": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "54": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "55": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "56": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "57": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "58": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "59": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "60": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "61": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "62": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "63": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "64": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "65": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "66": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "67": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "68": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "69": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "70": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "71": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "72": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-2", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])" - }, - "73": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "74": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "75": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "76": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "77": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "78": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "79": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "80": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "81": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "82": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "83": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "84": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "85": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "86": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "87": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "88": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "89": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "90": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "91": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "92": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "93": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "94": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "95": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "96": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-3", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])" - }, - "97": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "98": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "99": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "100": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "101": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "102": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "103": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "104": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "105": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "106": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "107": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "108": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "109": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "110": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "111": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "112": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "113": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "114": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "115": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "116": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "117": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "118": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "119": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "120": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-4", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])" - }, - "121": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "122": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "123": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "124": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "125": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "126": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "127": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "128": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "129": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "130": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "131": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "132": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "133": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "134": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "135": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "136": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "137": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "138": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "139": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "140": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "141": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "142": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "143": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "144": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-5", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])" - }, - "145": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "146": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "147": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "148": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "149": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "150": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "151": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "152": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "153": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "154": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "155": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "156": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "157": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "158": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "159": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "160": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "161": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "162": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "163": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "164": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "165": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "166": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "167": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "168": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-6", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])" - }, - "169": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "170": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "171": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "172": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "173": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "174": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "175": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "176": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "177": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "178": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "179": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "180": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "181": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "182": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "183": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "184": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "185": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "186": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "187": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "188": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "189": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "190": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "191": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "192": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-7", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])" - }, - "193": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "194": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "195": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "196": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "197": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "198": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "199": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "200": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "201": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "202": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "203": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "204": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "205": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "206": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "207": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "208": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "209": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "210": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "211": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "212": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "213": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "214": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "215": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "216": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-8", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])" - }, - "217": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "218": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "219": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "220": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "221": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "222": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "223": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "224": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "225": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "226": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "227": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "228": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "229": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "230": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "231": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "232": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "233": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "234": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "235": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "236": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "237": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "238": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "239": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "240": { - "onVariable": "CA", - "groups": [ - "MatrixByRowBucket-9", - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])" - }, - "241": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-0", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "242": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-0", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "243": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-0", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "244": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-0", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "245": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-1", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "246": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-1", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "247": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-1", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "248": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-1", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "249": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-2", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "250": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-2", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "251": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-2", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "252": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-2", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "253": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-3", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "254": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-3", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "255": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-3", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "256": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-3", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "257": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-4", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "258": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-4", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "259": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-4", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "260": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-4", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "261": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-5", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "262": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-5", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "263": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-5", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "264": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-5", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "265": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-6", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "266": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-6", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "267": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-6", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "268": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-6", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "269": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-7", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "270": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-7", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "271": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-7", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "272": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-7", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "273": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-8", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "274": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-8", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "275": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-8", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "276": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-8", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "277": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-9", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "278": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-9", - "IntOddEven" - ], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "279": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-9", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "280": { - "onVariable": "CA", - "groups": [ - "MatrixByColBucket-9", - "IntLowHigh" - ], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])" - }, - "281": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q10, q11] % 2 = 1 | q11 : int(1..b)]) | q10 : int(1..k)])" - }, - "282": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([and([CA[q10, q11] % 2 = 0 | q11 : int(1..b)]) | q10 : int(1..k)])" - }, - "283": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q10, q11] < 1 + (g - 1) / 2 | q11 : int(1..b)]) | q10 : int(1..k)])" - }, - "284": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([and([CA[q10, q11] > 1 + (g - 1) / 2 | q11 : int(1..b)]) | q10 : int(1..k)])" - }, - "285": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] % 2 = 1) | q12 : int(1..b)]) | q10 : int(1..k)])" - }, - "286": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] % 2 = 0) | q12 : int(1..b)]) | q10 : int(1..k)])" - }, - "287": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] < 1 + (g - 1) / 2) | q12 : int(1..b)]) | q10 : int(1..k)])" - }, - "288": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] > 1 + (g - 1) / 2) | q12 : int(1..b)]) | q10 : int(1..k)])" - }, - "289": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q10, q13] % 2 = 1) | q13 : int(1..b)]) | q10 : int(1..k)])" - }, - "290": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([1 >= sum([toInt(CA[q10, q13] % 2 = 0) | q13 : int(1..b)]) | q10 : int(1..k)])" - }, - "291": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q10, q13] < 1 + (g - 1) / 2) | q13 : int(1..b)]) | q10 : int(1..k)])" - }, - "292": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([1 >= sum([toInt(CA[q10, q13] > 1 + (g - 1) / 2) | q13 : int(1..b)]) | q10 : int(1..k)])" - }, - "293": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] % 2 = 1) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] % 2 = 1) | q14 : int(1..b)]) | q10 : int(1..k)])" - }, - "294": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] % 2 = 0) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] % 2 = 0) | q14 : int(1..b)]) | q10 : int(1..k)])" - }, - "295": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] < 1 + (g - 1) / 2) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] < 1 + (g - 1) / 2) | q14 : int(1..b)]) | q10 : int(1..k)])" - }, - "296": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] > 1 + (g - 1) / 2) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] > 1 + (g - 1) / 2) | q14 : int(1..b)]) | q10 : int(1..k)])" - }, - "297": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] % 2 = 1) | q15 : int(1..b)]) | q10 : int(1..k)])" - }, - "298": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] % 2 = 0) | q15 : int(1..b)]) | q10 : int(1..k)])" - }, - "299": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] < 1 + (g - 1) / 2) | q15 : int(1..b)]) | q10 : int(1..k)])" - }, - "300": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] > 1 + (g - 1) / 2) | q15 : int(1..b)]) | q10 : int(1..k)])" - }, - "301": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] % 2 = 1) | q16 : int(1..b)]) | q10 : int(1..k)])" - }, - "302": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] % 2 = 0) | q16 : int(1..b)]) | q10 : int(1..k)])" - }, - "303": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] < 1 + (g - 1) / 2) | q16 : int(1..b)]) | q10 : int(1..k)])" - }, - "304": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] > 1 + (g - 1) / 2) | q16 : int(1..b)]) | q10 : int(1..k)])" - }, - "305": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] % 2 = 1 | q18 : int(1..b)])) | q17 : int(1..k)])" - }, - "306": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] % 2 = 0 | q18 : int(1..b)])) | q17 : int(1..k)])" - }, - "307": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] < 1 + (g - 1) / 2 | q18 : int(1..b)])) | q17 : int(1..k)])" - }, - "308": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] > 1 + (g - 1) / 2 | q18 : int(1..b)])) | q17 : int(1..k)])" - }, - "309": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] % 2 = 1) | q19 : int(1..b)])) | q17 : int(1..k)])" - }, - "310": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] % 2 = 0) | q19 : int(1..b)])) | q17 : int(1..k)])" - }, - "311": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] < 1 + (g - 1) / 2) | q19 : int(1..b)])) | q17 : int(1..k)])" - }, - "312": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] > 1 + (g - 1) / 2) | q19 : int(1..b)])) | q17 : int(1..k)])" - }, - "313": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] % 2 = 1) | q20 : int(1..b)])) | q17 : int(1..k)])" - }, - "314": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] % 2 = 0) | q20 : int(1..b)])) | q17 : int(1..k)])" - }, - "315": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] < 1 + (g - 1) / 2) | q20 : int(1..b)])) | q17 : int(1..k)])" - }, - "316": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] > 1 + (g - 1) / 2) | q20 : int(1..b)])) | q17 : int(1..k)])" - }, - "317": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] % 2 = 1) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] % 2 = 1) | q21 : int(1..b)])) | q17 : int(1..k)])" - }, - "318": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] % 2 = 0) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] % 2 = 0) | q21 : int(1..b)])) | q17 : int(1..k)])" - }, - "319": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] < 1 + (g - 1) / 2) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] < 1 + (g - 1) / 2) | q21 : int(1..b)])) | q17 : int(1..k)])" - }, - "320": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] > 1 + (g - 1) / 2) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] > 1 + (g - 1) / 2) | q21 : int(1..b)])) | q17 : int(1..k)])" - }, - "321": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] % 2 = 1) | q22 : int(1..b)])) | q17 : int(1..k)])" - }, - "322": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] % 2 = 0) | q22 : int(1..b)])) | q17 : int(1..k)])" - }, - "323": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] < 1 + (g - 1) / 2) | q22 : int(1..b)])) | q17 : int(1..k)])" - }, - "324": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] > 1 + (g - 1) / 2) | q22 : int(1..b)])) | q17 : int(1..k)])" - }, - "325": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] % 2 = 1) | q23 : int(1..b)])) | q17 : int(1..k)])" - }, - "326": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] % 2 = 0) | q23 : int(1..b)])) | q17 : int(1..k)])" - }, - "327": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] < 1 + (g - 1) / 2) | q23 : int(1..b)])) | q17 : int(1..k)])" - }, - "328": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] > 1 + (g - 1) / 2) | q23 : int(1..b)])) | q17 : int(1..k)])" - }, - "329": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "1 >= sum([toInt(and([CA[q24, q25] % 2 = 1 | q25 : int(1..b)])) | q24 : int(1..k)])" - }, - "330": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "1 >= sum([toInt(and([CA[q24, q25] % 2 = 0 | q25 : int(1..b)])) | q24 : int(1..k)])" - }, - "331": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "1 >= sum([toInt(and([CA[q24, q25] < 1 + (g - 1) / 2 | q25 : int(1..b)])) | q24 : int(1..k)])" - }, - "332": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "1 >= sum([toInt(and([CA[q24, q25] > 1 + (g - 1) / 2 | q25 : int(1..b)])) | q24 : int(1..k)])" - }, - "333": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] % 2 = 1) | q26 : int(1..b)])) | q24 : int(1..k)])" - }, - "334": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] % 2 = 0) | q26 : int(1..b)])) | q24 : int(1..k)])" - }, - "335": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] < 1 + (g - 1) / 2) | q26 : int(1..b)])) | q24 : int(1..k)])" - }, - "336": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] > 1 + (g - 1) / 2) | q26 : int(1..b)])) | q24 : int(1..k)])" - }, - "337": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] % 2 = 1) | q27 : int(1..b)])) | q24 : int(1..k)])" - }, - "338": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] % 2 = 0) | q27 : int(1..b)])) | q24 : int(1..k)])" - }, - "339": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] < 1 + (g - 1) / 2) | q27 : int(1..b)])) | q24 : int(1..k)])" - }, - "340": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] > 1 + (g - 1) / 2) | q27 : int(1..b)])) | q24 : int(1..k)])" - }, - "341": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] % 2 = 1) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] % 2 = 1) | q28 : int(1..b)])) | q24 : int(1..k)])" - }, - "342": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] % 2 = 0) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] % 2 = 0) | q28 : int(1..b)])) | q24 : int(1..k)])" - }, - "343": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] < 1 + (g - 1) / 2) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] < 1 + (g - 1) / 2) | q28 : int(1..b)])) | q24 : int(1..k)])" - }, - "344": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] > 1 + (g - 1) / 2) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] > 1 + (g - 1) / 2) | q28 : int(1..b)])) | q24 : int(1..k)])" - }, - "345": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] % 2 = 1) | q29 : int(1..b)])) | q24 : int(1..k)])" - }, - "346": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] % 2 = 0) | q29 : int(1..b)])) | q24 : int(1..k)])" - }, - "347": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] < 1 + (g - 1) / 2) | q29 : int(1..b)])) | q24 : int(1..k)])" - }, - "348": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] > 1 + (g - 1) / 2) | q29 : int(1..b)])) | q24 : int(1..k)])" - }, - "349": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] % 2 = 1) | q30 : int(1..b)])) | q24 : int(1..k)])" - }, - "350": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] % 2 = 0) | q30 : int(1..b)])) | q24 : int(1..k)])" - }, - "351": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] < 1 + (g - 1) / 2) | q30 : int(1..b)])) | q24 : int(1..k)])" - }, - "352": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] > 1 + (g - 1) / 2) | q30 : int(1..b)])) | q24 : int(1..k)])" - }, - "353": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] % 2 = 1 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] % 2 = 1 | q32 : int(1..b)])) | q31 : int(1..k)])" - }, - "354": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] % 2 = 0 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] % 2 = 0 | q32 : int(1..b)])) | q31 : int(1..k)])" - }, - "355": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] < 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] < 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)])" - }, - "356": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] > 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] > 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)])" - }, - "357": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 1) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 1) | q33 : int(1..b)])) | q31 : int(1..k)])" - }, - "358": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 0) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 0) | q33 : int(1..b)])) | q31 : int(1..k)])" - }, - "359": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] < 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] < 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)])" - }, - "360": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] > 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] > 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)])" - }, - "361": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 1) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 1) | q34 : int(1..b)])) | q31 : int(1..k)])" - }, - "362": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 0) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 0) | q34 : int(1..b)])) | q31 : int(1..k)])" - }, - "363": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] < 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] < 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)])" - }, - "364": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] > 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] > 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)])" - }, - "365": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 1) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 1) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 1) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 1) | q35 : int(1..b)])) | q31 : int(1..k)])" - }, - "366": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)])) | q31 : int(1..k)])" - }, - "367": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)])" - }, - "368": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)])" - }, - "369": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 1) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 1) | q36 : int(1..b)])) | q31 : int(1..k)])" - }, - "370": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 0) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 0) | q36 : int(1..b)])) | q31 : int(1..k)])" - }, - "371": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] < 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] < 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)])" - }, - "372": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] > 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] > 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)])" - }, - "373": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 1) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 1) | q37 : int(1..b)])) | q31 : int(1..k)])" - }, - "374": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 0) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 0) | q37 : int(1..b)])) | q31 : int(1..k)])" - }, - "375": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] < 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] < 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)])" - }, - "376": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] > 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] > 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)])" - }, - "377": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] % 2 = 1 | q39 : int(1..b)])) | q38 : int(1..k)])" - }, - "378": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] % 2 = 0 | q39 : int(1..b)])) | q38 : int(1..k)])" - }, - "379": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] < 1 + (g - 1) / 2 | q39 : int(1..b)])) | q38 : int(1..k)])" - }, - "380": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] > 1 + (g - 1) / 2 | q39 : int(1..b)])) | q38 : int(1..k)])" - }, - "381": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] % 2 = 1) | q40 : int(1..b)])) | q38 : int(1..k)])" - }, - "382": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] % 2 = 0) | q40 : int(1..b)])) | q38 : int(1..k)])" - }, - "383": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] < 1 + (g - 1) / 2) | q40 : int(1..b)])) | q38 : int(1..k)])" - }, - "384": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] > 1 + (g - 1) / 2) | q40 : int(1..b)])) | q38 : int(1..k)])" - }, - "385": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] % 2 = 1) | q41 : int(1..b)])) | q38 : int(1..k)])" - }, - "386": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] % 2 = 0) | q41 : int(1..b)])) | q38 : int(1..k)])" - }, - "387": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] < 1 + (g - 1) / 2) | q41 : int(1..b)])) | q38 : int(1..k)])" - }, - "388": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] > 1 + (g - 1) / 2) | q41 : int(1..b)])) | q38 : int(1..k)])" - }, - "389": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] % 2 = 1) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] % 2 = 1) | q42 : int(1..b)])) | q38 : int(1..k)])" - }, - "390": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] % 2 = 0) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] % 2 = 0) | q42 : int(1..b)])) | q38 : int(1..k)])" - }, - "391": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] < 1 + (g - 1) / 2) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] < 1 + (g - 1) / 2) | q42 : int(1..b)])) | q38 : int(1..k)])" - }, - "392": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] > 1 + (g - 1) / 2) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] > 1 + (g - 1) / 2) | q42 : int(1..b)])) | q38 : int(1..k)])" - }, - "393": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] % 2 = 1) | q43 : int(1..b)])) | q38 : int(1..k)])" - }, - "394": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] % 2 = 0) | q43 : int(1..b)])) | q38 : int(1..k)])" - }, - "395": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] < 1 + (g - 1) / 2) | q43 : int(1..b)])) | q38 : int(1..k)])" - }, - "396": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] > 1 + (g - 1) / 2) | q43 : int(1..b)])) | q38 : int(1..k)])" - }, - "397": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] % 2 = 1) | q44 : int(1..b)])) | q38 : int(1..k)])" - }, - "398": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] % 2 = 0) | q44 : int(1..b)])) | q38 : int(1..k)])" - }, - "399": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] < 1 + (g - 1) / 2) | q44 : int(1..b)])) | q38 : int(1..k)])" - }, - "400": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] > 1 + (g - 1) / 2) | q44 : int(1..b)])) | q38 : int(1..k)])" - }, - "401": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] % 2 = 1 | q46 : int(1..b)])) | q45 : int(1..k)])" - }, - "402": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] % 2 = 0 | q46 : int(1..b)])) | q45 : int(1..k)])" - }, - "403": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] < 1 + (g - 1) / 2 | q46 : int(1..b)])) | q45 : int(1..k)])" - }, - "404": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] > 1 + (g - 1) / 2 | q46 : int(1..b)])) | q45 : int(1..k)])" - }, - "405": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] % 2 = 1) | q47 : int(1..b)])) | q45 : int(1..k)])" - }, - "406": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] % 2 = 0) | q47 : int(1..b)])) | q45 : int(1..k)])" - }, - "407": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] < 1 + (g - 1) / 2) | q47 : int(1..b)])) | q45 : int(1..k)])" - }, - "408": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] > 1 + (g - 1) / 2) | q47 : int(1..b)])) | q45 : int(1..k)])" - }, - "409": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] % 2 = 1) | q48 : int(1..b)])) | q45 : int(1..k)])" - }, - "410": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] % 2 = 0) | q48 : int(1..b)])) | q45 : int(1..k)])" - }, - "411": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] < 1 + (g - 1) / 2) | q48 : int(1..b)])) | q45 : int(1..k)])" - }, - "412": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] > 1 + (g - 1) / 2) | q48 : int(1..b)])) | q45 : int(1..k)])" - }, - "413": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] % 2 = 1) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] % 2 = 1) | q49 : int(1..b)])) | q45 : int(1..k)])" - }, - "414": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] % 2 = 0) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] % 2 = 0) | q49 : int(1..b)])) | q45 : int(1..k)])" - }, - "415": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] < 1 + (g - 1) / 2) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] < 1 + (g - 1) / 2) | q49 : int(1..b)])) | q45 : int(1..k)])" - }, - "416": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] > 1 + (g - 1) / 2) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] > 1 + (g - 1) / 2) | q49 : int(1..b)])) | q45 : int(1..k)])" - }, - "417": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] % 2 = 1) | q50 : int(1..b)])) | q45 : int(1..k)])" - }, - "418": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] % 2 = 0) | q50 : int(1..b)])) | q45 : int(1..k)])" - }, - "419": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] < 1 + (g - 1) / 2) | q50 : int(1..b)])) | q45 : int(1..k)])" - }, - "420": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] > 1 + (g - 1) / 2) | q50 : int(1..b)])) | q45 : int(1..k)])" - }, - "421": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] % 2 = 1) | q51 : int(1..b)])) | q45 : int(1..k)])" - }, - "422": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntOddEven" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] % 2 = 0) | q51 : int(1..b)])) | q45 : int(1..k)])" - }, - "423": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] < 1 + (g - 1) / 2) | q51 : int(1..b)])) | q45 : int(1..k)])" - }, - "424": { - "onVariable": "CA", - "groups": [ - "MatrixCardinality", - "IntLowHigh" - ], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] > 1 + (g - 1) / 2) | q51 : int(1..b)])) | q45 : int(1..k)])" - } -} \ No newline at end of file +{"1": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "2": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "3": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "4": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "5": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "6": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "7": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "8": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "9": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "10": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "11": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "12": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "13": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "14": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "15": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "16": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "17": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "18": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "19": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "20": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "21": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "22": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "23": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "24": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-0", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "25": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "26": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "27": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "28": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "29": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "30": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "31": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "32": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "33": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "34": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "35": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "36": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "37": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "38": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "39": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "40": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "41": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "42": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "43": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "44": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "45": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "46": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "47": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "48": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-1", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "49": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "50": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "51": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "52": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "53": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "54": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "55": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "56": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "57": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "58": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "59": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "60": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "61": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "62": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "63": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "64": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "65": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "66": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "67": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "68": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "69": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "70": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "71": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "72": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-2", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "73": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "74": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "75": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "76": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "77": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "78": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "79": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "80": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "81": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "82": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "83": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "84": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "85": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "86": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "87": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "88": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "89": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "90": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "91": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "92": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "93": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "94": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "95": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "96": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-3", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "97": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "98": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "99": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "100": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "101": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "102": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "103": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "104": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "105": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "106": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "107": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "108": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "109": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "110": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "111": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "112": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "113": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "114": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "115": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "116": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "117": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "118": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "119": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "120": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-4", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "121": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "122": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "123": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "124": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "125": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "126": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "127": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "128": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "129": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "130": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "131": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "132": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "133": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "134": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "135": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "136": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "137": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "138": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "139": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "140": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "141": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "142": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "143": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "144": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-5", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "145": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "146": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "147": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "148": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "149": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "150": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "151": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "152": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "153": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "154": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "155": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "156": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "157": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "158": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "159": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "160": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "161": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "162": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "163": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "164": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "165": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "166": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "167": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "168": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-6", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "169": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "170": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "171": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "172": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "173": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "174": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "175": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "176": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "177": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "178": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "179": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "180": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "181": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "182": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "183": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "184": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "185": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "186": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "187": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "188": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "189": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "190": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "191": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "192": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-7", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "193": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "194": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "195": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "196": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "197": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "198": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "199": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "200": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "201": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "202": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "203": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "204": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "205": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "206": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "207": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "208": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "209": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "210": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "211": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "212": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "213": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "214": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "215": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "216": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-8", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "217": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "218": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "219": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "220": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "221": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "222": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "223": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "224": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "225": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "226": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "227": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "228": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "229": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "230": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "231": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "232": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "233": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "234": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "235": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "236": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "237": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "238": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "239": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "240": {"onVariable": "CA", + "groups": ["MatrixByRowBucket-9", "MatrixCardinality", + "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "241": {"onVariable": "CA", + "groups": ["MatrixByColBucket-0", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "242": {"onVariable": "CA", + "groups": ["MatrixByColBucket-0", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "243": {"onVariable": "CA", + "groups": ["MatrixByColBucket-0", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "244": {"onVariable": "CA", + "groups": ["MatrixByColBucket-0", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "245": {"onVariable": "CA", + "groups": ["MatrixByColBucket-1", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "246": {"onVariable": "CA", + "groups": ["MatrixByColBucket-1", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "247": {"onVariable": "CA", + "groups": ["MatrixByColBucket-1", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "248": {"onVariable": "CA", + "groups": ["MatrixByColBucket-1", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "249": {"onVariable": "CA", + "groups": ["MatrixByColBucket-2", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "250": {"onVariable": "CA", + "groups": ["MatrixByColBucket-2", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "251": {"onVariable": "CA", + "groups": ["MatrixByColBucket-2", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "252": {"onVariable": "CA", + "groups": ["MatrixByColBucket-2", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "253": {"onVariable": "CA", + "groups": ["MatrixByColBucket-3", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "254": {"onVariable": "CA", + "groups": ["MatrixByColBucket-3", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "255": {"onVariable": "CA", + "groups": ["MatrixByColBucket-3", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "256": {"onVariable": "CA", + "groups": ["MatrixByColBucket-3", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "257": {"onVariable": "CA", + "groups": ["MatrixByColBucket-4", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "258": {"onVariable": "CA", + "groups": ["MatrixByColBucket-4", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "259": {"onVariable": "CA", + "groups": ["MatrixByColBucket-4", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "260": {"onVariable": "CA", + "groups": ["MatrixByColBucket-4", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "261": {"onVariable": "CA", + "groups": ["MatrixByColBucket-5", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "262": {"onVariable": "CA", + "groups": ["MatrixByColBucket-5", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "263": {"onVariable": "CA", + "groups": ["MatrixByColBucket-5", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "264": {"onVariable": "CA", + "groups": ["MatrixByColBucket-5", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "265": {"onVariable": "CA", + "groups": ["MatrixByColBucket-6", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "266": {"onVariable": "CA", + "groups": ["MatrixByColBucket-6", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "267": {"onVariable": "CA", + "groups": ["MatrixByColBucket-6", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "268": {"onVariable": "CA", + "groups": ["MatrixByColBucket-6", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "269": {"onVariable": "CA", + "groups": ["MatrixByColBucket-7", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "270": {"onVariable": "CA", + "groups": ["MatrixByColBucket-7", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "271": {"onVariable": "CA", + "groups": ["MatrixByColBucket-7", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "272": {"onVariable": "CA", + "groups": ["MatrixByColBucket-7", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "273": {"onVariable": "CA", + "groups": ["MatrixByColBucket-8", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "274": {"onVariable": "CA", + "groups": ["MatrixByColBucket-8", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "275": {"onVariable": "CA", + "groups": ["MatrixByColBucket-8", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "276": {"onVariable": "CA", + "groups": ["MatrixByColBucket-8", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "277": {"onVariable": "CA", + "groups": ["MatrixByColBucket-9", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "278": {"onVariable": "CA", + "groups": ["MatrixByColBucket-9", "IntOddEven"], + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "279": {"onVariable": "CA", + "groups": ["MatrixByColBucket-9", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "280": {"onVariable": "CA", + "groups": ["MatrixByColBucket-9", "IntLowHigh"], + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "281": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "and([and([CA[q10, q11] % 2 = 1 | q11 : int(1..b)]) | q10 : int(1..k)])"}, + "282": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "and([and([CA[q10, q11] % 2 = 0 | q11 : int(1..b)]) | q10 : int(1..k)])"}, + "283": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "and([and([CA[q10, q11] < 1 + (g - 1) / 2 | q11 : int(1..b)]) | q10 : int(1..k)])"}, + "284": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "and([and([CA[q10, q11] > 1 + (g - 1) / 2 | q11 : int(1..b)]) | q10 : int(1..k)])"}, + "285": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] % 2 = 1) | q12 : int(1..b)]) | q10 : int(1..k)])"}, + "286": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] % 2 = 0) | q12 : int(1..b)]) | q10 : int(1..k)])"}, + "287": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] < 1 + (g - 1) / 2) | q12 : int(1..b)]) | q10 : int(1..k)])"}, + "288": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] > 1 + (g - 1) / 2) | q12 : int(1..b)]) | q10 : int(1..k)])"}, + "289": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q10, q13] % 2 = 1) | q13 : int(1..b)]) | q10 : int(1..k)])"}, + "290": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "and([1 >= sum([toInt(CA[q10, q13] % 2 = 0) | q13 : int(1..b)]) | q10 : int(1..k)])"}, + "291": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q10, q13] < 1 + (g - 1) / 2) | q13 : int(1..b)]) | q10 : int(1..k)])"}, + "292": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "and([1 >= sum([toInt(CA[q10, q13] > 1 + (g - 1) / 2) | q13 : int(1..b)]) | q10 : int(1..k)])"}, + "293": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] % 2 = 1) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] % 2 = 1) | q14 : int(1..b)]) | q10 : int(1..k)])"}, + "294": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] % 2 = 0) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] % 2 = 0) | q14 : int(1..b)]) | q10 : int(1..k)])"}, + "295": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] < 1 + (g - 1) / 2) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] < 1 + (g - 1) / 2) | q14 : int(1..b)]) | q10 : int(1..k)])"}, + "296": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] > 1 + (g - 1) / 2) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] > 1 + (g - 1) / 2) | q14 : int(1..b)]) | q10 : int(1..k)])"}, + "297": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] % 2 = 1) | q15 : int(1..b)]) | q10 : int(1..k)])"}, + "298": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] % 2 = 0) | q15 : int(1..b)]) | q10 : int(1..k)])"}, + "299": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] < 1 + (g - 1) / 2) | q15 : int(1..b)]) | q10 : int(1..k)])"}, + "300": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] > 1 + (g - 1) / 2) | q15 : int(1..b)]) | q10 : int(1..k)])"}, + "301": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] % 2 = 1) | q16 : int(1..b)]) | q10 : int(1..k)])"}, + "302": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] % 2 = 0) | q16 : int(1..b)]) | q10 : int(1..k)])"}, + "303": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] < 1 + (g - 1) / 2) | q16 : int(1..b)]) | q10 : int(1..k)])"}, + "304": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] > 1 + (g - 1) / 2) | q16 : int(1..b)]) | q10 : int(1..k)])"}, + "305": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] % 2 = 1 | q18 : int(1..b)])) | q17 : int(1..k)])"}, + "306": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] % 2 = 0 | q18 : int(1..b)])) | q17 : int(1..k)])"}, + "307": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] < 1 + (g - 1) / 2 | q18 : int(1..b)])) | q17 : int(1..k)])"}, + "308": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] > 1 + (g - 1) / 2 | q18 : int(1..b)])) | q17 : int(1..k)])"}, + "309": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] % 2 = 1) | q19 : int(1..b)])) | q17 : int(1..k)])"}, + "310": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] % 2 = 0) | q19 : int(1..b)])) | q17 : int(1..k)])"}, + "311": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] < 1 + (g - 1) / 2) | q19 : int(1..b)])) | q17 : int(1..k)])"}, + "312": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] > 1 + (g - 1) / 2) | q19 : int(1..b)])) | q17 : int(1..k)])"}, + "313": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] % 2 = 1) | q20 : int(1..b)])) | q17 : int(1..k)])"}, + "314": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] % 2 = 0) | q20 : int(1..b)])) | q17 : int(1..k)])"}, + "315": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] < 1 + (g - 1) / 2) | q20 : int(1..b)])) | q17 : int(1..k)])"}, + "316": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] > 1 + (g - 1) / 2) | q20 : int(1..b)])) | q17 : int(1..k)])"}, + "317": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] % 2 = 1) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] % 2 = 1) | q21 : int(1..b)])) | q17 : int(1..k)])"}, + "318": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] % 2 = 0) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] % 2 = 0) | q21 : int(1..b)])) | q17 : int(1..k)])"}, + "319": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] < 1 + (g - 1) / 2) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] < 1 + (g - 1) / 2) | q21 : int(1..b)])) | q17 : int(1..k)])"}, + "320": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] > 1 + (g - 1) / 2) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] > 1 + (g - 1) / 2) | q21 : int(1..b)])) | q17 : int(1..k)])"}, + "321": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] % 2 = 1) | q22 : int(1..b)])) | q17 : int(1..k)])"}, + "322": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] % 2 = 0) | q22 : int(1..b)])) | q17 : int(1..k)])"}, + "323": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] < 1 + (g - 1) / 2) | q22 : int(1..b)])) | q17 : int(1..k)])"}, + "324": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] > 1 + (g - 1) / 2) | q22 : int(1..b)])) | q17 : int(1..k)])"}, + "325": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] % 2 = 1) | q23 : int(1..b)])) | q17 : int(1..k)])"}, + "326": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] % 2 = 0) | q23 : int(1..b)])) | q17 : int(1..k)])"}, + "327": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] < 1 + (g - 1) / 2) | q23 : int(1..b)])) | q17 : int(1..k)])"}, + "328": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] > 1 + (g - 1) / 2) | q23 : int(1..b)])) | q17 : int(1..k)])"}, + "329": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "1 >= sum([toInt(and([CA[q24, q25] % 2 = 1 | q25 : int(1..b)])) | q24 : int(1..k)])"}, + "330": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "1 >= sum([toInt(and([CA[q24, q25] % 2 = 0 | q25 : int(1..b)])) | q24 : int(1..k)])"}, + "331": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "1 >= sum([toInt(and([CA[q24, q25] < 1 + (g - 1) / 2 | q25 : int(1..b)])) | q24 : int(1..k)])"}, + "332": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "1 >= sum([toInt(and([CA[q24, q25] > 1 + (g - 1) / 2 | q25 : int(1..b)])) | q24 : int(1..k)])"}, + "333": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] % 2 = 1) | q26 : int(1..b)])) | q24 : int(1..k)])"}, + "334": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] % 2 = 0) | q26 : int(1..b)])) | q24 : int(1..k)])"}, + "335": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] < 1 + (g - 1) / 2) | q26 : int(1..b)])) | q24 : int(1..k)])"}, + "336": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] > 1 + (g - 1) / 2) | q26 : int(1..b)])) | q24 : int(1..k)])"}, + "337": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] % 2 = 1) | q27 : int(1..b)])) | q24 : int(1..k)])"}, + "338": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] % 2 = 0) | q27 : int(1..b)])) | q24 : int(1..k)])"}, + "339": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] < 1 + (g - 1) / 2) | q27 : int(1..b)])) | q24 : int(1..k)])"}, + "340": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] > 1 + (g - 1) / 2) | q27 : int(1..b)])) | q24 : int(1..k)])"}, + "341": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] % 2 = 1) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] % 2 = 1) | q28 : int(1..b)])) | q24 : int(1..k)])"}, + "342": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] % 2 = 0) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] % 2 = 0) | q28 : int(1..b)])) | q24 : int(1..k)])"}, + "343": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] < 1 + (g - 1) / 2) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] < 1 + (g - 1) / 2) | q28 : int(1..b)])) | q24 : int(1..k)])"}, + "344": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] > 1 + (g - 1) / 2) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] > 1 + (g - 1) / 2) | q28 : int(1..b)])) | q24 : int(1..k)])"}, + "345": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] % 2 = 1) | q29 : int(1..b)])) | q24 : int(1..k)])"}, + "346": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] % 2 = 0) | q29 : int(1..b)])) | q24 : int(1..k)])"}, + "347": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] < 1 + (g - 1) / 2) | q29 : int(1..b)])) | q24 : int(1..k)])"}, + "348": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] > 1 + (g - 1) / 2) | q29 : int(1..b)])) | q24 : int(1..k)])"}, + "349": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] % 2 = 1) | q30 : int(1..b)])) | q24 : int(1..k)])"}, + "350": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] % 2 = 0) | q30 : int(1..b)])) | q24 : int(1..k)])"}, + "351": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] < 1 + (g - 1) / 2) | q30 : int(1..b)])) | q24 : int(1..k)])"}, + "352": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] > 1 + (g - 1) / 2) | q30 : int(1..b)])) | q24 : int(1..k)])"}, + "353": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] % 2 = 1 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] % 2 = 1 | q32 : int(1..b)])) | q31 : int(1..k)])"}, + "354": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] % 2 = 0 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] % 2 = 0 | q32 : int(1..b)])) | q31 : int(1..k)])"}, + "355": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] < 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] < 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)])"}, + "356": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] > 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] > 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)])"}, + "357": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 1) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 1) | q33 : int(1..b)])) | q31 : int(1..k)])"}, + "358": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 0) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 0) | q33 : int(1..b)])) | q31 : int(1..k)])"}, + "359": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] < 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] < 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)])"}, + "360": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] > 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] > 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)])"}, + "361": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 1) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 1) | q34 : int(1..b)])) | q31 : int(1..k)])"}, + "362": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 0) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 0) | q34 : int(1..b)])) | q31 : int(1..k)])"}, + "363": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] < 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] < 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)])"}, + "364": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] > 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] > 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)])"}, + "365": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 1) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 1) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 1) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 1) | q35 : int(1..b)])) | q31 : int(1..k)])"}, + "366": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)])) | q31 : int(1..k)])"}, + "367": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)])"}, + "368": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)])"}, + "369": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 1) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 1) | q36 : int(1..b)])) | q31 : int(1..k)])"}, + "370": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 0) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 0) | q36 : int(1..b)])) | q31 : int(1..k)])"}, + "371": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] < 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] < 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)])"}, + "372": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] > 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] > 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)])"}, + "373": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 1) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 1) | q37 : int(1..b)])) | q31 : int(1..k)])"}, + "374": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 0) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 0) | q37 : int(1..b)])) | q31 : int(1..k)])"}, + "375": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] < 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] < 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)])"}, + "376": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] > 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] > 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)])"}, + "377": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] % 2 = 1 | q39 : int(1..b)])) | q38 : int(1..k)])"}, + "378": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] % 2 = 0 | q39 : int(1..b)])) | q38 : int(1..k)])"}, + "379": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] < 1 + (g - 1) / 2 | q39 : int(1..b)])) | q38 : int(1..k)])"}, + "380": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] > 1 + (g - 1) / 2 | q39 : int(1..b)])) | q38 : int(1..k)])"}, + "381": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] % 2 = 1) | q40 : int(1..b)])) | q38 : int(1..k)])"}, + "382": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] % 2 = 0) | q40 : int(1..b)])) | q38 : int(1..k)])"}, + "383": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] < 1 + (g - 1) / 2) | q40 : int(1..b)])) | q38 : int(1..k)])"}, + "384": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] > 1 + (g - 1) / 2) | q40 : int(1..b)])) | q38 : int(1..k)])"}, + "385": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] % 2 = 1) | q41 : int(1..b)])) | q38 : int(1..k)])"}, + "386": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] % 2 = 0) | q41 : int(1..b)])) | q38 : int(1..k)])"}, + "387": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] < 1 + (g - 1) / 2) | q41 : int(1..b)])) | q38 : int(1..k)])"}, + "388": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] > 1 + (g - 1) / 2) | q41 : int(1..b)])) | q38 : int(1..k)])"}, + "389": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] % 2 = 1) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] % 2 = 1) | q42 : int(1..b)])) | q38 : int(1..k)])"}, + "390": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] % 2 = 0) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] % 2 = 0) | q42 : int(1..b)])) | q38 : int(1..k)])"}, + "391": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] < 1 + (g - 1) / 2) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] < 1 + (g - 1) / 2) | q42 : int(1..b)])) | q38 : int(1..k)])"}, + "392": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] > 1 + (g - 1) / 2) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] > 1 + (g - 1) / 2) | q42 : int(1..b)])) | q38 : int(1..k)])"}, + "393": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] % 2 = 1) | q43 : int(1..b)])) | q38 : int(1..k)])"}, + "394": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] % 2 = 0) | q43 : int(1..b)])) | q38 : int(1..k)])"}, + "395": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] < 1 + (g - 1) / 2) | q43 : int(1..b)])) | q38 : int(1..k)])"}, + "396": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] > 1 + (g - 1) / 2) | q43 : int(1..b)])) | q38 : int(1..k)])"}, + "397": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] % 2 = 1) | q44 : int(1..b)])) | q38 : int(1..k)])"}, + "398": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] % 2 = 0) | q44 : int(1..b)])) | q38 : int(1..k)])"}, + "399": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] < 1 + (g - 1) / 2) | q44 : int(1..b)])) | q38 : int(1..k)])"}, + "400": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] > 1 + (g - 1) / 2) | q44 : int(1..b)])) | q38 : int(1..k)])"}, + "401": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] % 2 = 1 | q46 : int(1..b)])) | q45 : int(1..k)])"}, + "402": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] % 2 = 0 | q46 : int(1..b)])) | q45 : int(1..k)])"}, + "403": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] < 1 + (g - 1) / 2 | q46 : int(1..b)])) | q45 : int(1..k)])"}, + "404": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] > 1 + (g - 1) / 2 | q46 : int(1..b)])) | q45 : int(1..k)])"}, + "405": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] % 2 = 1) | q47 : int(1..b)])) | q45 : int(1..k)])"}, + "406": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] % 2 = 0) | q47 : int(1..b)])) | q45 : int(1..k)])"}, + "407": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] < 1 + (g - 1) / 2) | q47 : int(1..b)])) | q45 : int(1..k)])"}, + "408": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] > 1 + (g - 1) / 2) | q47 : int(1..b)])) | q45 : int(1..k)])"}, + "409": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] % 2 = 1) | q48 : int(1..b)])) | q45 : int(1..k)])"}, + "410": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] % 2 = 0) | q48 : int(1..b)])) | q45 : int(1..k)])"}, + "411": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] < 1 + (g - 1) / 2) | q48 : int(1..b)])) | q45 : int(1..k)])"}, + "412": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] > 1 + (g - 1) / 2) | q48 : int(1..b)])) | q45 : int(1..k)])"}, + "413": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] % 2 = 1) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] % 2 = 1) | q49 : int(1..b)])) | q45 : int(1..k)])"}, + "414": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] % 2 = 0) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] % 2 = 0) | q49 : int(1..b)])) | q45 : int(1..k)])"}, + "415": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] < 1 + (g - 1) / 2) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] < 1 + (g - 1) / 2) | q49 : int(1..b)])) | q45 : int(1..k)])"}, + "416": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] > 1 + (g - 1) / 2) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] > 1 + (g - 1) / 2) | q49 : int(1..b)])) | q45 : int(1..k)])"}, + "417": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] % 2 = 1) | q50 : int(1..b)])) | q45 : int(1..k)])"}, + "418": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] % 2 = 0) | q50 : int(1..b)])) | q45 : int(1..k)])"}, + "419": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] < 1 + (g - 1) / 2) | q50 : int(1..b)])) | q45 : int(1..k)])"}, + "420": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] > 1 + (g - 1) / 2) | q50 : int(1..b)])) | q45 : int(1..k)])"}, + "421": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] % 2 = 1) | q51 : int(1..b)])) | q45 : int(1..k)])"}, + "422": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntOddEven"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] % 2 = 0) | q51 : int(1..b)])) | q45 : int(1..k)])"}, + "423": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] < 1 + (g - 1) / 2) | q51 : int(1..b)])) | q45 : int(1..k)])"}, + "424": {"onVariable": "CA", + "groups": ["MatrixCardinality", "IntLowHigh"], + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] > 1 + (g - 1) / 2) | q51 : int(1..b)])) | q45 : int(1..k)])"}} From f878ba5df8637c5925f8c03b0300094741932a38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 23 Apr 2024 11:35:00 +0100 Subject: [PATCH 101/124] bounded by &ub --- src/Conjure/Process/Streamlining.hs | 4 +- .../covering-array/stdout.expected | 560 +++++++++--------- 2 files changed, 282 insertions(+), 282 deletions(-) diff --git a/src/Conjure/Process/Streamlining.hs b/src/Conjure/Process/Streamlining.hs index eeeb8ee4c..a4d3b5c3d 100644 --- a/src/Conjure/Process/Streamlining.hs +++ b/src/Conjure/Process/Streamlining.hs @@ -379,7 +379,7 @@ matrixByRowBucket innerStreamliner x = do concatForM [0..9] $ \ (bucketInt :: Integer) -> let bucket = fromInt bucketInt in forM innerConstraints $ \ (innerConstraint, grps) -> attachGroup (("MatrixByRowBucket-" ++ show bucketInt) : grps) [essence| - forAll &pat : int(&lb + &bucket * &bucketSize .. &lb + (&bucket+1) * &bucketSize) . &innerConstraint + forAll &pat : int(&lb + &bucket * &bucketSize .. min([&ub, &lb + (&bucket+1) * &bucketSize])) . &innerConstraint |] _ -> noStreamliner @@ -413,7 +413,7 @@ matrixByColBucket innerStreamliner x = do forM innerConstraints $ \ (innerConstraint, grps) -> attachGroup (("MatrixByColBucket-" ++ show bucketInt) : grps) [essence| forAll &patO : &outerIndex . - forAll &pat : int(&lb + &bucket * &bucketSize .. &lb + (&bucket+1) * &bucketSize) . + forAll &pat : int(&lb + &bucket * &bucketSize .. min([&ub, &lb + (&bucket+1) * &bucketSize])) . &innerConstraint |] _ -> noStreamliner diff --git a/tests/custom/streamlining/covering-array/stdout.expected b/tests/custom/streamlining/covering-array/stdout.expected index 5a88b8784..45318bbea 100644 --- a/tests/custom/streamlining/covering-array/stdout.expected +++ b/tests/custom/streamlining/covering-array/stdout.expected @@ -1,1083 +1,1083 @@ {"1": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "2": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "3": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "4": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "5": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "6": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "7": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "8": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "9": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "10": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "11": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "12": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "13": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "14": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "15": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "16": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "17": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "18": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "19": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "20": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "21": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "22": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "23": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "24": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..1 + (0 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "25": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "26": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "27": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "28": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "29": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "30": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "31": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "32": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "33": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "34": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "35": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "36": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "37": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "38": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "39": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "40": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "41": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "42": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "43": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "44": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "45": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "46": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "47": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "48": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..1 + (1 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "49": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "50": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "51": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "52": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "53": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "54": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "55": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "56": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "57": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "58": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "59": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "60": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "61": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "62": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "63": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "64": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "65": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "66": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "67": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "68": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "69": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "70": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "71": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "72": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..1 + (2 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "73": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "74": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "75": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "76": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "77": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "78": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "79": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "80": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "81": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "82": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "83": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "84": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "85": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "86": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "87": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "88": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "89": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "90": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "91": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "92": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "93": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "94": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "95": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "96": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..1 + (3 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "97": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "98": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "99": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "100": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "101": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "102": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "103": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "104": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "105": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "106": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "107": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "108": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "109": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "110": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "111": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "112": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "113": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "114": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "115": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "116": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "117": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "118": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "119": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "120": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..1 + (4 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "121": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "122": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "123": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "124": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "125": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "126": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "127": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "128": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "129": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "130": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "131": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "132": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "133": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "134": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "135": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "136": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "137": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "138": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "139": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "140": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "141": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "142": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "143": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "144": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..1 + (5 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "145": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "146": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "147": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "148": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "149": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "150": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "151": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "152": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "153": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "154": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "155": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "156": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "157": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "158": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "159": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "160": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "161": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "162": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "163": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "164": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "165": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "166": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "167": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "168": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..1 + (6 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "169": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "170": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "171": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "172": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "173": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "174": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "175": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "176": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "177": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "178": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "179": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "180": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "181": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "182": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "183": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "184": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "185": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "186": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "187": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "188": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "189": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "190": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "191": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "192": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..1 + (7 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "193": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "194": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "195": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "196": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "197": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "198": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "199": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "200": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "201": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "202": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "203": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "204": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "205": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "206": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "207": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "208": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "209": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "210": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "211": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "212": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "213": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "214": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "215": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "216": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..1 + (8 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "217": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 1 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "218": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntOddEven"], - "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] % 2 = 0 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "219": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "220": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([and([CA[q1, q2] > 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "221": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 1) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "222": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] % 2 = 0) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "223": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "224": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] > 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "225": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 1) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "226": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntOddEven"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] % 2 = 0) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "227": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "228": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] > 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "229": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 1) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "230": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] % 2 = 0) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "231": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "232": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] > 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "233": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 1) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "234": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] % 2 = 0) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "235": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "236": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] > 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "237": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 1) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "238": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntOddEven"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] % 2 = 0) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "239": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "240": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..1 + (9 + 1) * ((k - 1 + 1) / 10))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] > 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "241": {"onVariable": "CA", "groups": ["MatrixByColBucket-0", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..min([b, 1 + (0 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "242": {"onVariable": "CA", "groups": ["MatrixByColBucket-0", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..min([b, 1 + (0 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "243": {"onVariable": "CA", "groups": ["MatrixByColBucket-0", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..min([b, 1 + (0 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "244": {"onVariable": "CA", "groups": ["MatrixByColBucket-0", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..1 + (0 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..min([b, 1 + (0 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "245": {"onVariable": "CA", "groups": ["MatrixByColBucket-1", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..min([b, 1 + (1 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "246": {"onVariable": "CA", "groups": ["MatrixByColBucket-1", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..min([b, 1 + (1 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "247": {"onVariable": "CA", "groups": ["MatrixByColBucket-1", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..min([b, 1 + (1 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "248": {"onVariable": "CA", "groups": ["MatrixByColBucket-1", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..1 + (1 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..min([b, 1 + (1 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "249": {"onVariable": "CA", "groups": ["MatrixByColBucket-2", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..min([b, 1 + (2 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "250": {"onVariable": "CA", "groups": ["MatrixByColBucket-2", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..min([b, 1 + (2 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "251": {"onVariable": "CA", "groups": ["MatrixByColBucket-2", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..min([b, 1 + (2 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "252": {"onVariable": "CA", "groups": ["MatrixByColBucket-2", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..1 + (2 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..min([b, 1 + (2 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "253": {"onVariable": "CA", "groups": ["MatrixByColBucket-3", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..min([b, 1 + (3 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "254": {"onVariable": "CA", "groups": ["MatrixByColBucket-3", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..min([b, 1 + (3 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "255": {"onVariable": "CA", "groups": ["MatrixByColBucket-3", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..min([b, 1 + (3 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "256": {"onVariable": "CA", "groups": ["MatrixByColBucket-3", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..1 + (3 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..min([b, 1 + (3 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "257": {"onVariable": "CA", "groups": ["MatrixByColBucket-4", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..min([b, 1 + (4 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "258": {"onVariable": "CA", "groups": ["MatrixByColBucket-4", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..min([b, 1 + (4 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "259": {"onVariable": "CA", "groups": ["MatrixByColBucket-4", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..min([b, 1 + (4 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "260": {"onVariable": "CA", "groups": ["MatrixByColBucket-4", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..1 + (4 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..min([b, 1 + (4 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "261": {"onVariable": "CA", "groups": ["MatrixByColBucket-5", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..min([b, 1 + (5 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "262": {"onVariable": "CA", "groups": ["MatrixByColBucket-5", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..min([b, 1 + (5 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "263": {"onVariable": "CA", "groups": ["MatrixByColBucket-5", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..min([b, 1 + (5 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "264": {"onVariable": "CA", "groups": ["MatrixByColBucket-5", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..1 + (5 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..min([b, 1 + (5 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "265": {"onVariable": "CA", "groups": ["MatrixByColBucket-6", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..min([b, 1 + (6 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "266": {"onVariable": "CA", "groups": ["MatrixByColBucket-6", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..min([b, 1 + (6 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "267": {"onVariable": "CA", "groups": ["MatrixByColBucket-6", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..min([b, 1 + (6 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "268": {"onVariable": "CA", "groups": ["MatrixByColBucket-6", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..1 + (6 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..min([b, 1 + (6 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "269": {"onVariable": "CA", "groups": ["MatrixByColBucket-7", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..min([b, 1 + (7 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "270": {"onVariable": "CA", "groups": ["MatrixByColBucket-7", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..min([b, 1 + (7 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "271": {"onVariable": "CA", "groups": ["MatrixByColBucket-7", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..min([b, 1 + (7 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "272": {"onVariable": "CA", "groups": ["MatrixByColBucket-7", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..1 + (7 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..min([b, 1 + (7 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "273": {"onVariable": "CA", "groups": ["MatrixByColBucket-8", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..min([b, 1 + (8 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "274": {"onVariable": "CA", "groups": ["MatrixByColBucket-8", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..min([b, 1 + (8 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "275": {"onVariable": "CA", "groups": ["MatrixByColBucket-8", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..min([b, 1 + (8 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "276": {"onVariable": "CA", "groups": ["MatrixByColBucket-8", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..1 + (8 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..min([b, 1 + (8 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "277": {"onVariable": "CA", "groups": ["MatrixByColBucket-9", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 1 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..min([b, 1 + (9 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "278": {"onVariable": "CA", "groups": ["MatrixByColBucket-9", "IntOddEven"], - "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..min([b, 1 + (9 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "279": {"onVariable": "CA", "groups": ["MatrixByColBucket-9", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..min([b, 1 + (9 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "280": {"onVariable": "CA", "groups": ["MatrixByColBucket-9", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..1 + (9 + 1) * ((b - 1 + 1) / 10))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..min([b, 1 + (9 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "281": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntOddEven"], "constraint": "and([and([CA[q10, q11] % 2 = 1 | q11 : int(1..b)]) | q10 : int(1..k)])"}, From a63f6fd3be92ac2d01df8e04ffd4a2ada5e7b363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 27 Apr 2024 21:52:43 +0100 Subject: [PATCH 102/124] remove preImage validator to support sequences --- src/Conjure/Language/Validator.hs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index b3c7d05bd..e756787b2 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -2343,14 +2343,15 @@ functionOps l = case l of b' <- unifyTypesFailing t (r2, b) return $ if null a' || null b' then Nothing else Just () preImageArgs :: SArg -> SArg -> Validator () - preImageArgs (r1, a) (r2, b) = do - let t = case (typeOf_ a, typeOf_ b) of - (TypeFunction _ i, tb) -> mostDefinedS [i, tb] - (TypeSequence i, _) -> i - (_, tb) -> tb - a' <- unifyTypesFailing (TypeFunction TypeAny t) (r1, a) - b' <- unifyTypesFailing t (r2, b) - return $ if null a' || null b' then Nothing else Just () + preImageArgs _ _ = return $ Just () + -- preImageArgs (r1, a) (r2, b) = do + -- let t = case (typeOf_ a, typeOf_ b) of + -- (TypeFunction _ i, tb) -> mostDefinedS [i, tb] + -- (TypeSequence i, _) -> i + -- (_, tb) -> tb + -- a' <- unifyTypesFailing (TypeFunction TypeAny t) (r1, a) + -- b' <- unifyTypesFailing t (r2, b) + -- return $ if null a' || null b' then Nothing else Just () partyArgs :: SArg -> SArg -> Validator () partyArgs (r1, a) (r2, b) = do From a5ea345bbb9c81677471a194980e16226e48575e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 27 Apr 2024 21:58:36 +0100 Subject: [PATCH 103/124] add preImage seq test case --- .../custom/preImageSeq/LangfordDirect.essence | 34 +++++++++++++++++++ tests/custom/preImageSeq/run.sh | 4 +++ tests/custom/preImageSeq/stdout.expected | 20 +++++++++++ 3 files changed, 58 insertions(+) create mode 100644 tests/custom/preImageSeq/LangfordDirect.essence create mode 100755 tests/custom/preImageSeq/run.sh create mode 100644 tests/custom/preImageSeq/stdout.expected diff --git a/tests/custom/preImageSeq/LangfordDirect.essence b/tests/custom/preImageSeq/LangfordDirect.essence new file mode 100644 index 000000000..408b99e01 --- /dev/null +++ b/tests/custom/preImageSeq/LangfordDirect.essence @@ -0,0 +1,34 @@ +language Essence 1.3 +$ prob024.essence: Langford's Number Problem +$ Problem details available at http://www.csplib.org/Problems/prob024 + +$ numbers 1 to n, each appearing k times in a sequence (of length k*n) +given k : int(2..) +given n : int(1..) + +letting seqLength be k * n + +$ The sequence of numbers +find seq : sequence (size seqLength) of int(1..n) + +$ symmetry breaking +such that seq(1) < seq(seqLength) + +$ Each number from 1 to n appear exactly k times in seq. +$ This constraint is implied, and it probably doesn't help search either. +such that + forAll i : int(1..n) . |preImage(seq, i)| = k + +$ Each occurrence of a number N is N positions apart. +$ +$ So if the number 4 is at position 1 and if k=3, +$ then there has to be a 4 at position 6 and 11 as well. +such that + $ for each number + forAll number : int(1..n) . + $ there exists a starting position + $ (i.e. the first position where number occurs) + exists start : int(1..seqLength) . + $ positions start, start+(number+1), start+2*(number+1), ... + $ all contain the value "number" + forAll i : int(1..k) . seq(start + (i-1) * (number+1)) = number diff --git a/tests/custom/preImageSeq/run.sh b/tests/custom/preImageSeq/run.sh new file mode 100755 index 000000000..ecfe28be9 --- /dev/null +++ b/tests/custom/preImageSeq/run.sh @@ -0,0 +1,4 @@ +rm -rf conjure-output +conjure modelling *.essence +head -n20 conjure-output/model000001.eprime +rm -rf conjure-output diff --git a/tests/custom/preImageSeq/stdout.expected b/tests/custom/preImageSeq/stdout.expected new file mode 100644 index 000000000..e370f9eef --- /dev/null +++ b/tests/custom/preImageSeq/stdout.expected @@ -0,0 +1,20 @@ +language ESSENCE' 1.0 + +given k: int(2..) +given n: int(1..) +letting seqLength be k * n +find seq_ExplicitBounded_Length: int(seqLength) +find seq_ExplicitBounded_Values: matrix indexed by [int(1..seqLength)] of int(1..n) +branching on [seq_ExplicitBounded_Length, seq_ExplicitBounded_Values] +such that + seq_ExplicitBounded_Values[1] < seq_ExplicitBounded_Values[seqLength], + 1 <= seqLength, + and([sum([toInt(seq_ExplicitBounded_Values[q4] = i) | q4 : int(1..seqLength), q4 <= seqLength]) = k + | i : int(1..n)]), + and([or([and([seq_ExplicitBounded_Values[start + (i - 1) * (number + 1)] = number /\ + start + (i - 1) * (number + 1) <= seqLength + | i : int(1..k)]) + | start : int(1..seqLength)]) + | number : int(1..n)]) + +$ Conjure's From f237199d4f5944cc5aac029f192a8989cd9c6ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sat, 4 May 2024 14:09:52 +0100 Subject: [PATCH 104/124] catch another SR error message: ERROR: Failed when writing SAT encoding to file --- src/Conjure/UI/SolveStats.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Conjure/UI/SolveStats.hs b/src/Conjure/UI/SolveStats.hs index 83c07a4a1..f94eea3d6 100644 --- a/src/Conjure/UI/SolveStats.hs +++ b/src/Conjure/UI/SolveStats.hs @@ -88,7 +88,8 @@ mkSolveStats Solve {..} (exitCodeSR, stdoutSR, stderrSR) savilerowInfoText runso "Error: evaluation error: Index set mismatch.", "Savile Row killed by: java.lang.AssertionError", "java.lang.ClassCastException", - "ERROR: File not found" -- savilerow + "ERROR: File not found", -- savilerow + "ERROR: Failed when writing SAT encoding to file." -- savilerow ] ] = Error From 3bc6a8f292acbe50bd655924d326389676fdf941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 6 May 2024 15:39:24 +0100 Subject: [PATCH 105/124] format --- src/Conjure/Language/RepresentationOf.hs | 43 +++++++++++++----------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/Conjure/Language/RepresentationOf.hs b/src/Conjure/Language/RepresentationOf.hs index 01c5ea1f1..c42feae25 100644 --- a/src/Conjure/Language/RepresentationOf.hs +++ b/src/Conjure/Language/RepresentationOf.hs @@ -1,39 +1,42 @@ module Conjure.Language.RepresentationOf where -- conjure -import Conjure.Prelude -import Conjure.Language.Domain -import Conjure.Language.Type ( TypeCheckerMode ) +import Conjure.Language.Domain +import Conjure.Language.Type (TypeCheckerMode) +import Conjure.Prelude class RepresentationOf a where - representationTreeOf - :: (MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) - => a -> m (Tree (Maybe HasRepresentation)) + representationTreeOf :: + (MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) => + a -> + m (Tree (Maybe HasRepresentation)) representationOf :: (RepresentationOf a, MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) => a -> m HasRepresentation -representationOf a = do - tree <- representationTreeOf a - case rootLabel tree of - Nothing -> failDoc "doesn't seem to have a representation" +representationOf a = + case representationTreeOf a of + Nothing -> failDoc "doesn't seem to have a representation tree" + Just tree -> + case rootLabel tree of + Nothing -> failDoc "doesn't seem to have a representation" Just NoRepresentation -> failDoc "doesn't seem to have a representation" Just r -> return r hasRepresentation :: (RepresentationOf a, MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) => a -> m () hasRepresentation x = - case representationOf x of - Nothing -> failDoc "doesn't seem to have a representation" - Just _ -> return () + case representationTreeOf x of + Nothing -> failDoc "doesn't seem to have a representation" + Just _ -> return () sameRepresentation :: (RepresentationOf a, MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) => a -> a -> m () sameRepresentation x y = - case (representationOf x, representationOf y) of - (Just rx, Just ry) | rx == ry -> return () - _ -> failDoc "doesn't seem to have the same representation" + case (representationOf x, representationOf y) of + (Just rx, Just ry) | rx == ry -> return () + _ -> failDoc "doesn't seem to have the same representation" sameRepresentationTree :: (RepresentationOf a, MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) => a -> a -> m () sameRepresentationTree x y = do - xTree <- representationTreeOf x - yTree <- representationTreeOf y - unless (xTree == yTree) $ - failDoc "doesn't seem to have the same representation tree" + xTree <- representationTreeOf x + yTree <- representationTreeOf y + unless (xTree == yTree) + $ failDoc "doesn't seem to have the same representation tree" From 6b4fcd27a69942313f3baf6cd0bc1d7f4d1cd2b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 6 May 2024 15:40:01 +0100 Subject: [PATCH 106/124] remove 3 horizontal sequence rules - these were copied over from functions and are not required for sequences --- src/Conjure/Rules/Horizontal/Sequence.hs | 131 ----------------------- src/Conjure/UI/Model.hs | 3 - 2 files changed, 134 deletions(-) diff --git a/src/Conjure/Rules/Horizontal/Sequence.hs b/src/Conjure/Rules/Horizontal/Sequence.hs index 317563151..8cb4401c3 100644 --- a/src/Conjure/Rules/Horizontal/Sequence.hs +++ b/src/Conjure/Rules/Horizontal/Sequence.hs @@ -379,137 +379,6 @@ rule_Restrict_Comprehension = "sequence-restrict-comprehension" `namedRule` theR theRule _ = na "rule_Restrict_Comprehension" --- | image(f,x) can be nasty for non-total sequences. --- 1. if f is a total sequence, it can readily be replaced by a set expression. --- 2.1. if f isn't total, and if the return type is right, it will always end up as a generator for a comprehension. --- a vertical rule is needed for such cases. --- 2.2. if the return type is not "right", i.e. it is a bool or an int, i.e. sth we cannot quantify over, --- the vertical rule is harder. - -rule_Image_Bool :: Rule -rule_Image_Bool = "sequence-image-bool" `namedRule` theRule where - theRule Reference{} = na "rule_Image_Int" - theRule p = do - let - onChildren - :: MonadState (Maybe (Expression, Expression)) m - => Expression - -> m (Expression -> Expression) - onChildren ch = do - let - try = do - (func, arg) <- match opImage ch - case match opRestrict func of - Nothing -> return () - Just{} -> na "rule_Image_Bool" -- do not use this rule for restricted sequences - TypeSequence TypeBool <- typeOf func - return (func, arg) - case try of - Nothing -> return (const ch) -- do not failDoc if a child is not of proper form - Just (func, arg) -> do -- just return it back unchanged - seenBefore <- gets id - case seenBefore of - Nothing -> do - modify $ const $ Just (func, arg) - return id - Just{} -> - return (const ch) - - let (children_, gen) = uniplate p - (genChildren, mFunc) <- runStateT (mapM onChildren children_) Nothing - let - mkP :: Expression -> Expression - mkP new = gen $ fmap ($ new) genChildren - (func, arg) <- maybe (na "rule_Image_Bool") return mFunc -- Nothing signifies no relevant children - return - ( "Sequence image, bool." - , do - (iPat, i) <- quantifiedVar - return $ mkP $ make opOr $ Comprehension [essence| &i[2] |] - [ Generator (GenInExpr iPat func) - , Condition [essence| &i[1] = &arg |] - ] - ) - - -rule_Image_Int :: Rule -rule_Image_Int = "sequence-image-int" `namedRule` theRule where - theRule Reference{} = na "rule_Image_Int" - theRule p = do - let - onChildren - :: MonadState (Maybe (Expression, Expression)) m - => Expression - -> m (Expression -> Expression) - onChildren ch = do - let - try = do - (func, arg) <- match opImage ch - case match opRestrict func of - Nothing -> return () - Just{} -> na "rule_Image_Int" -- do not use this rule for restricted sequences - TypeSequence (TypeInt _) <- typeOf func - return (func, arg) - case try of - Nothing -> return (const ch) -- do not failDoc if a child is not of proper form - Just (func, arg) -> do -- just return it back unchanged - seenBefore <- gets id - case seenBefore of - Nothing -> do - modify $ const $ Just (func, arg) - return id - Just{} -> - return (const ch) - - let (children_, gen) = uniplate p - (genChildren, mFunc) <- runStateT (mapM onChildren children_) Nothing - let - mkP :: Expression -> Expression - mkP new = gen $ fmap ($ new) genChildren - (func, arg) <- maybe (na "rule_Image_Int") return mFunc -- Nothing signifies no relevant children - return - ( "Sequence image, int." - , do - (iPat, i) <- quantifiedVar - let val = make opSum $ Comprehension [essence| &i[2] |] - [ Generator (GenInExpr iPat func) - , Condition [essence| &i[1] = &arg |] - ] - isDefined = [essence| &arg in defined(&func) |] - return $ mkP $ WithLocals val (DefinednessConstraints [isDefined]) - ) - - -rule_Comprehension_Image :: Rule -rule_Comprehension_Image = "sequence-image-comprehension" `namedRule` theRule where - theRule (Comprehension body gensOrConds) = do - (gofBefore, (pat, expr), gofAfter) <- matchFirst gensOrConds $ \ gof -> case gof of - Generator (GenInExpr pat@Single{} expr) -> return (pat, expr) - _ -> na "rule_Comprehension_Image" - (mkModifier, expr2) <- match opModifier expr - (func, arg) <- match opImage expr2 - TypeSequence{} <- typeOf func - case match opRestrict func of - Nothing -> return () - Just{} -> na "rule_Image_Bool" -- do not use this rule for restricted sequences - let upd val old = lambdaToFunction pat old val - return - ( "Mapping over the image of a sequence" - , do - (iPat, i) <- quantifiedVar - (jPat, j) <- quantifiedVar - return $ Comprehension - (upd j body) - $ gofBefore - ++ [ Generator (GenInExpr iPat (mkModifier func)) - , Condition [essence| &i[1] = &arg |] - , Generator (GenInExpr jPat [essence| &i[2] |]) - ] - ++ transformBi (upd j) gofAfter - ) - theRule _ = na "rule_Comprehension_Image" - - rule_Substring :: Rule rule_Substring = "substring" `namedRule` theRule where theRule [essence| &a substring &b |] = do diff --git a/src/Conjure/UI/Model.hs b/src/Conjure/UI/Model.hs index baf8cb057..7d13a3021 100644 --- a/src/Conjure/UI/Model.hs +++ b/src/Conjure/UI/Model.hs @@ -1575,9 +1575,6 @@ horizontalRules = , 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 From e68ec78dc313e8339b9025e60b9c0a849b4d4b19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 6 May 2024 16:08:25 +0100 Subject: [PATCH 107/124] say this is CI --- etc/build/silent-wrapper.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/etc/build/silent-wrapper.sh b/etc/build/silent-wrapper.sh index 0e47345e8..b226cea34 100755 --- a/etc/build/silent-wrapper.sh +++ b/etc/build/silent-wrapper.sh @@ -10,7 +10,11 @@ fi export CI=${CI:-false} -echo "Running $1" +if ${CI}; then + echo "Running $1 in CI" +else + echo "Running $1" +fi PID=$$ export STARTTIME=$(date +%s) From 2c6a1b566edf0ad1f50c596a2f59a987077100b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 6 May 2024 16:17:08 +0100 Subject: [PATCH 108/124] run when any *.sh file changes in etc/build --- .github/workflows/solvers.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index 6601a370f..2bc7a7c40 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -10,12 +10,12 @@ on: branches: - main # run for the main branch paths: - - etc/build/install*.sh + - etc/build/*.sh - Makefile - .github/workflows/solvers.yml pull_request: # and for PRs paths: - - etc/build/install*.sh + - etc/build/*.sh - Makefile - .github/workflows/solvers.yml # other branches that want testing must create a PR From fff415cb411f5469bae4c4669e80ef57af2d19bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 6 May 2024 20:09:37 +0100 Subject: [PATCH 109/124] just print everything when run in CI --- etc/build/silent-wrapper.sh | 67 +++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/etc/build/silent-wrapper.sh b/etc/build/silent-wrapper.sh index b226cea34..abdec114d 100755 --- a/etc/build/silent-wrapper.sh +++ b/etc/build/silent-wrapper.sh @@ -16,37 +16,48 @@ else echo "Running $1" fi -PID=$$ -export STARTTIME=$(date +%s) -bash $1 > make-solvers-${PID}.stdout 2> make-solvers-${PID}.stderr -EXITCODE=$? -export ELAPSED=$(($(date +%s) - ${STARTTIME})) - -if [ ${EXITCODE} -eq 0 ] ; then +if ${CI}; then + export STARTTIME=$(date +%s) + bash $1 + EXITCODE=$? + export ELAPSED=$(($(date +%s) - ${STARTTIME})) echo " Done (took ${ELAPSED} seconds)" - rm -f make-solvers-${PID}.stdout make-solvers-${PID}.stderr + echo " Exit code: ${EXIT_CODE}" + exit ${EXIT_CODE} else - echo " Failed (took ${ELAPSED} seconds)" - echo " Exit code: ${EXITCODE}" - echo " Outputs saved to: make-solvers-${PID}.stdout and make-solvers-${PID}.stderr" - echo "" - if ${CI}; then - echo "stdout was:" - cat make-solvers-${PID}.stdout - echo "" - echo "stderr was:" - cat make-solvers-${PID}.stderr + + PID=$$ + export STARTTIME=$(date +%s) + bash $1 > make-solvers-${PID}.stdout 2> make-solvers-${PID}.stderr + EXITCODE=$? + export ELAPSED=$(($(date +%s) - ${STARTTIME})) + + if [ ${EXITCODE} -eq 0 ] ; then + echo " Done (took ${ELAPSED} seconds)" + rm -f make-solvers-${PID}.stdout make-solvers-${PID}.stderr else - echo "Last 10 lines of the stdout was:" - tail -n10 make-solvers-${PID}.stdout + echo " Failed (took ${ELAPSED} seconds)" + echo " Exit code: ${EXITCODE}" + echo " Outputs saved to: make-solvers-${PID}.stdout and make-solvers-${PID}.stderr" + echo "" + if ${CI}; then + echo "stdout was:" + cat make-solvers-${PID}.stdout + echo "" + echo "stderr was:" + cat make-solvers-${PID}.stderr + else + echo "Last 10 lines of the stdout was:" + tail -n10 make-solvers-${PID}.stdout + echo "" + echo "Last 10 lines of the stderr was:" + tail -n10 make-solvers-${PID}.stderr + fi + echo "" + echo "" echo "" - echo "Last 10 lines of the stderr was:" - tail -n10 make-solvers-${PID}.stderr fi - echo "" - echo "" - echo "" -fi -# exit ${EXITCODE} -exit 0 + # exit ${EXITCODE} + exit 0 +fi \ No newline at end of file From 87542133562cf07339090e4f2934358c10a93190 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 6 May 2024 20:33:42 +0100 Subject: [PATCH 110/124] bash typo --- etc/build/silent-wrapper.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/build/silent-wrapper.sh b/etc/build/silent-wrapper.sh index abdec114d..41b028432 100755 --- a/etc/build/silent-wrapper.sh +++ b/etc/build/silent-wrapper.sh @@ -22,7 +22,7 @@ if ${CI}; then EXITCODE=$? export ELAPSED=$(($(date +%s) - ${STARTTIME})) echo " Done (took ${ELAPSED} seconds)" - echo " Exit code: ${EXIT_CODE}" + echo " Exit code: ${EXITCODE}" exit ${EXIT_CODE} else From 49ca31678d1677f2dc2cc70cada20cece9e7b025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 6 May 2024 20:36:48 +0100 Subject: [PATCH 111/124] bash typo --- etc/build/silent-wrapper.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/build/silent-wrapper.sh b/etc/build/silent-wrapper.sh index 41b028432..aa74b3f30 100755 --- a/etc/build/silent-wrapper.sh +++ b/etc/build/silent-wrapper.sh @@ -23,7 +23,7 @@ if ${CI}; then export ELAPSED=$(($(date +%s) - ${STARTTIME})) echo " Done (took ${ELAPSED} seconds)" echo " Exit code: ${EXITCODE}" - exit ${EXIT_CODE} + exit ${EXITCODE} else PID=$$ From ac69efdbc628d86a08f480a083154a620e7321a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 7 May 2024 08:20:37 +0100 Subject: [PATCH 112/124] install autoconf etc --- .github/workflows/solvers.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index 2bc7a7c40..60a6c90b6 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -47,21 +47,19 @@ jobs: run: | echo "${HOME}/.local/bin" >> ${GITHUB_PATH} - - name: Installing dependencies (gperf) on Linux + # libnuma-dev for runsolver + # autoconf, cmake, gmp for yices + + - name: Installing dependencies on Linux shell: bash - run: sudo apt-get install -y gperf + run: sudo apt-get install -y gperf libnuma-dev if: runner.os == 'Linux' - - name: Installing dependencies (gperf) on macOS + - name: Installing dependencies on macOS shell: bash - run: brew install gperf + run: brew install autoconf cmake gmp gperf if: runner.os == 'macOS' - - name: Installing dependencies (libnuma-dev) on Linux - needed for runsolver - shell: bash - run: sudo apt-get install -y libnuma-dev - if: runner.os == 'Linux' - - name: Building solvers shell: bash run: BIN_DIR=${HOME}/.local/bin PROCESSES=2 make solvers From 51309b8d1a22ef12df36ff9dddfdf7b29a2804d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 7 May 2024 15:46:12 +0100 Subject: [PATCH 113/124] install autoconf etc --- .github/workflows/release.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fe6d829bc..0afd68c88 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -72,21 +72,19 @@ jobs: run: | echo "${HOME}/solver-binaries" >> ${GITHUB_PATH} - - name: Installing dependencies (gperf) on Linux + # libnuma-dev for runsolver + # autoconf, cmake, gmp for yices + + - name: Installing dependencies on Linux shell: bash - run: sudo apt-get install -y gperf + run: sudo apt-get install -y gperf libnuma-dev if: runner.os == 'Linux' - - name: Installing dependencies (gperf) on macOS + - name: Installing dependencies on macOS shell: bash - run: brew install gperf + run: brew install autoconf cmake gmp gperf if: runner.os == 'macOS' - - name: Installing dependencies (libnuma-dev) on Linux - needed for runsolver - shell: bash - run: sudo apt-get install -y libnuma-dev - if: runner.os == 'Linux' - - name: Build solvers shell: bash run: | From 2bd675a0d4e660d3a2296678fc3c966285c67d33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 8 May 2024 13:01:23 +0100 Subject: [PATCH 114/124] bring one of the rules back --- src/Conjure/Rules/Horizontal/Sequence.hs | 30 ++++++++++++++++++++++++ src/Conjure/UI/Model.hs | 1 + 2 files changed, 31 insertions(+) diff --git a/src/Conjure/Rules/Horizontal/Sequence.hs b/src/Conjure/Rules/Horizontal/Sequence.hs index 8cb4401c3..520375929 100644 --- a/src/Conjure/Rules/Horizontal/Sequence.hs +++ b/src/Conjure/Rules/Horizontal/Sequence.hs @@ -379,6 +379,36 @@ rule_Restrict_Comprehension = "sequence-restrict-comprehension" `namedRule` theR theRule _ = na "rule_Restrict_Comprehension" +rule_Comprehension_Image :: Rule +rule_Comprehension_Image = "sequence-image-comprehension" `namedRule` theRule where + theRule (Comprehension body gensOrConds) = do + (gofBefore, (pat, expr), gofAfter) <- matchFirst gensOrConds $ \ gof -> case gof of + Generator (GenInExpr pat@Single{} expr) -> return (pat, expr) + _ -> na "rule_Comprehension_Image" + (mkModifier, expr2) <- match opModifier expr + (func, arg) <- match opImage expr2 + TypeSequence{} <- typeOf func + case match opRestrict func of + Nothing -> return () + Just{} -> na "rule_Image_Bool" -- do not use this rule for restricted sequences + let upd val old = lambdaToFunction pat old val + return + ( "Mapping over the image of a sequence" + , do + (iPat, i) <- quantifiedVar + (jPat, j) <- quantifiedVar + return $ Comprehension + (upd j body) + $ gofBefore + ++ [ Generator (GenInExpr iPat (mkModifier func)) + , Condition [essence| &i[1] = &arg |] + , Generator (GenInExpr jPat [essence| &i[2] |]) + ] + ++ transformBi (upd j) gofAfter + ) + theRule _ = na "rule_Comprehension_Image" + + rule_Substring :: Rule rule_Substring = "substring" `namedRule` theRule where theRule [essence| &a substring &b |] = do diff --git a/src/Conjure/UI/Model.hs b/src/Conjure/UI/Model.hs index 7d13a3021..616c2f619 100644 --- a/src/Conjure/UI/Model.hs +++ b/src/Conjure/UI/Model.hs @@ -1575,6 +1575,7 @@ horizontalRules = , Horizontal.Function.rule_DefinedOrRange_Difference , Horizontal.Sequence.rule_Comprehension_Literal + , Horizontal.Sequence.rule_Comprehension_Image , Horizontal.Sequence.rule_Image_Literal_Bool , Horizontal.Sequence.rule_Image_Literal_Int , Horizontal.Sequence.rule_Eq_Literal From fa1a12aff883fce784b27a13dd2a15fa841b2408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 8 May 2024 14:54:42 +0100 Subject: [PATCH 115/124] update expected model --- .../basic/sequence_subseq_dups/expected/model.eprime | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/exhaustive/basic/sequence_subseq_dups/expected/model.eprime b/tests/exhaustive/basic/sequence_subseq_dups/expected/model.eprime index 7a0286b78..4f16192b1 100644 --- a/tests/exhaustive/basic/sequence_subseq_dups/expected/model.eprime +++ b/tests/exhaustive/basic/sequence_subseq_dups/expected/model.eprime @@ -15,10 +15,11 @@ such that b_ExplicitBounded_Length = conjure_aux1_ExplicitBounded_Length, and([q6 <= b_ExplicitBounded_Length -> and([b_ExplicitBounded_Values[q6] = - sum([toInt(q8 = conjure_aux1_ExplicitBounded_Values[q6]) * catchUndef([1, 1, 2; int(1..3)][q8], 0) - | q8 : int(1..3)]), - or([q10 = conjure_aux1_ExplicitBounded_Values[q6] | q10 : int(1..3), q10 <= 3]), - q6 <= conjure_aux1_ExplicitBounded_Length; + sum([toInt(1 = conjure_aux1_ExplicitBounded_Values[q6]), + toInt(2 = conjure_aux1_ExplicitBounded_Values[q6]), + toInt(3 = conjure_aux1_ExplicitBounded_Values[q6]) * 2; + int(1..3)]), + conjure_aux1_ExplicitBounded_Values[q6] <= 3, q6 <= conjure_aux1_ExplicitBounded_Length; int(1..3)]) | q6 : int(1..2)]), and([q1 > b_ExplicitBounded_Length -> b_ExplicitBounded_Values[q1] = 1 | q1 : int(1..2)]), From 9bd202cff84bbbf3f1a460ae601a48773da374df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 8 May 2024 14:55:23 +0100 Subject: [PATCH 116/124] update expected model --- .../basic/sequence_subseq_nodups/expected/model.eprime | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/exhaustive/basic/sequence_subseq_nodups/expected/model.eprime b/tests/exhaustive/basic/sequence_subseq_nodups/expected/model.eprime index 96f687224..f2dda32fe 100644 --- a/tests/exhaustive/basic/sequence_subseq_nodups/expected/model.eprime +++ b/tests/exhaustive/basic/sequence_subseq_nodups/expected/model.eprime @@ -15,10 +15,11 @@ such that b_ExplicitBounded_Length = conjure_aux1_ExplicitBounded_Length, and([q6 <= b_ExplicitBounded_Length -> and([b_ExplicitBounded_Values[q6] = - sum([toInt(q8 = conjure_aux1_ExplicitBounded_Values[q6]) * catchUndef([3, 1, 2; int(1..3)][q8], 0) - | q8 : int(1..3)]), - or([q10 = conjure_aux1_ExplicitBounded_Values[q6] | q10 : int(1..3), q10 <= 3]), - q6 <= conjure_aux1_ExplicitBounded_Length; + sum([toInt(1 = conjure_aux1_ExplicitBounded_Values[q6]) * 3, + toInt(2 = conjure_aux1_ExplicitBounded_Values[q6]), + toInt(3 = conjure_aux1_ExplicitBounded_Values[q6]) * 2; + int(1..3)]), + conjure_aux1_ExplicitBounded_Values[q6] <= 3, q6 <= conjure_aux1_ExplicitBounded_Length; int(1..3)]) | q6 : int(1..2)]), and([q1 > b_ExplicitBounded_Length -> b_ExplicitBounded_Values[q1] = 1 | q1 : int(1..2)]), From 579ef2a34baec5e9ed508205a985ef5a0ebbd55e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sun, 12 May 2024 22:31:24 +0100 Subject: [PATCH 117/124] bring back the rules, except for direct references --- src/Conjure/Rules/Horizontal/Sequence.hs | 98 ++++++++++++++++++++++++ src/Conjure/UI/Model.hs | 2 + 2 files changed, 100 insertions(+) diff --git a/src/Conjure/Rules/Horizontal/Sequence.hs b/src/Conjure/Rules/Horizontal/Sequence.hs index 520375929..6b40159d1 100644 --- a/src/Conjure/Rules/Horizontal/Sequence.hs +++ b/src/Conjure/Rules/Horizontal/Sequence.hs @@ -379,6 +379,104 @@ rule_Restrict_Comprehension = "sequence-restrict-comprehension" `namedRule` theR theRule _ = na "rule_Restrict_Comprehension" + +rule_Image_Bool :: Rule +rule_Image_Bool = "sequence-image-bool" `namedRule` theRule where + theRule Reference{} = na "rule_Image_Bool" + theRule p = do + let + onChildren + :: MonadState (Maybe (Expression, Expression)) m + => Expression + -> m (Expression -> Expression) + onChildren ch = do + let + try = do + (func, arg) <- match opImage ch + case match opRestrict func of + Nothing -> return () + Just{} -> na "rule_Image_Bool" -- do not use this rule for restricted sequences + TypeSequence TypeBool <- typeOf func + return (func, arg) + case try of + Nothing -> return (const ch) -- do not failDoc if a child is not of proper form + Just (func, arg) -> do -- just return it back unchanged + seenBefore <- gets id + case seenBefore of + Nothing -> do + modify $ const $ Just (func, arg) + return id + Just{} -> + return (const ch) + + let (children_, gen) = uniplate p + (genChildren, mFunc) <- runStateT (mapM onChildren children_) Nothing + let + mkP :: Expression -> Expression + mkP new = gen $ fmap ($ new) genChildren + (func, arg) <- maybe (na "rule_Image_Bool") return mFunc -- Nothing signifies no relevant children + return + ( "Sequence image, bool." + , do + (iPat, i) <- quantifiedVar + return $ mkP $ make opOr $ Comprehension [essence| &i[2] |] + [ Generator (GenInExpr iPat func) + , Condition [essence| &i[1] = &arg |] + ] + ) + + +rule_Image_Int :: Rule +rule_Image_Int = "sequence-image-int" `namedRule` theRule where + theRule Reference{} = na "rule_Image_Int" + theRule p = do + let + onChildren + :: MonadState (Maybe (Expression, Expression)) m + => Expression + -> m (Expression -> Expression) + onChildren ch = do + let + try = do + (func, arg) <- match opImage ch + case match opRestrict func of + Nothing -> return () + Just{} -> na "rule_Image_Int" -- do not use this rule for restricted sequences + case func of + Reference{} -> na "rule_Image_Int" -- do not use this rule for a direct reference + _ -> return () + TypeSequence (TypeInt _) <- typeOf func + return (func, arg) + case try of + Nothing -> return (const ch) -- do not failDoc if a child is not of proper form + Just (func, arg) -> do -- just return it back unchanged + seenBefore <- gets id + case seenBefore of + Nothing -> do + modify $ const $ Just (func, arg) + return id + Just{} -> + return (const ch) + + let (children_, gen) = uniplate p + (genChildren, mFunc) <- runStateT (mapM onChildren children_) Nothing + let + mkP :: Expression -> Expression + mkP new = gen $ fmap ($ new) genChildren + (func, arg) <- maybe (na "rule_Image_Int") return mFunc -- Nothing signifies no relevant children + return + ( "Sequence image, int." + , do + (iPat, i) <- quantifiedVar + let val = make opSum $ Comprehension [essence| &i[2] |] + [ Generator (GenInExpr iPat func) + , Condition [essence| &i[1] = &arg |] + ] + isDefined = [essence| &arg in defined(&func) |] + return $ mkP $ WithLocals val (DefinednessConstraints [isDefined]) + ) + + rule_Comprehension_Image :: Rule rule_Comprehension_Image = "sequence-image-comprehension" `namedRule` theRule where theRule (Comprehension body gensOrConds) = do diff --git a/src/Conjure/UI/Model.hs b/src/Conjure/UI/Model.hs index 616c2f619..baf8cb057 100644 --- a/src/Conjure/UI/Model.hs +++ b/src/Conjure/UI/Model.hs @@ -1575,6 +1575,8 @@ horizontalRules = , 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 From eedd9171c8eb6880fe7b757159f0174b6d8e2df9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sun, 12 May 2024 22:41:47 +0100 Subject: [PATCH 118/124] apply these horizontal rules only for transformed sequences --- src/Conjure/Rules/Horizontal/Sequence.hs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Conjure/Rules/Horizontal/Sequence.hs b/src/Conjure/Rules/Horizontal/Sequence.hs index 6b40159d1..2b2218f84 100644 --- a/src/Conjure/Rules/Horizontal/Sequence.hs +++ b/src/Conjure/Rules/Horizontal/Sequence.hs @@ -396,6 +396,9 @@ rule_Image_Bool = "sequence-image-bool" `namedRule` theRule where case match opRestrict func of Nothing -> return () Just{} -> na "rule_Image_Bool" -- do not use this rule for restricted sequences + case match opTransform func of + Nothing -> na "rule_Image_Bool" -- only use this rule for restricted sequences + Just{} -> return () TypeSequence TypeBool <- typeOf func return (func, arg) case try of @@ -442,9 +445,9 @@ rule_Image_Int = "sequence-image-int" `namedRule` theRule where case match opRestrict func of Nothing -> return () Just{} -> na "rule_Image_Int" -- do not use this rule for restricted sequences - case func of - Reference{} -> na "rule_Image_Int" -- do not use this rule for a direct reference - _ -> return () + case match opTransform func of + Nothing -> na "rule_Image_Int" -- only use this rule for restricted sequences + Just{} -> return () TypeSequence (TypeInt _) <- typeOf func return (func, arg) case try of From 5b5156d8d4a2dd68902bd5d93405550f1f279149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 13 May 2024 09:34:11 +0100 Subject: [PATCH 119/124] typo in comment --- src/Conjure/Rules/Horizontal/Sequence.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Conjure/Rules/Horizontal/Sequence.hs b/src/Conjure/Rules/Horizontal/Sequence.hs index 2b2218f84..b8fc6b104 100644 --- a/src/Conjure/Rules/Horizontal/Sequence.hs +++ b/src/Conjure/Rules/Horizontal/Sequence.hs @@ -397,7 +397,7 @@ rule_Image_Bool = "sequence-image-bool" `namedRule` theRule where Nothing -> return () Just{} -> na "rule_Image_Bool" -- do not use this rule for restricted sequences case match opTransform func of - Nothing -> na "rule_Image_Bool" -- only use this rule for restricted sequences + Nothing -> na "rule_Image_Bool" -- only use this rule for transformed sequences Just{} -> return () TypeSequence TypeBool <- typeOf func return (func, arg) @@ -446,7 +446,7 @@ rule_Image_Int = "sequence-image-int" `namedRule` theRule where Nothing -> return () Just{} -> na "rule_Image_Int" -- do not use this rule for restricted sequences case match opTransform func of - Nothing -> na "rule_Image_Int" -- only use this rule for restricted sequences + Nothing -> na "rule_Image_Int" -- only use this rule for transformed sequences Just{} -> return () TypeSequence (TypeInt _) <- typeOf func return (func, arg) From 1dc8cc7050d47fc319466a3b328b111af3ccd7dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 20 Jun 2024 10:34:35 +0100 Subject: [PATCH 120/124] adding a regression test case for issue #659 --- tests/custom/issues/659/659.essence | 3 +++ tests/custom/issues/659/run.sh | 1 + 2 files changed, 4 insertions(+) create mode 100644 tests/custom/issues/659/659.essence create mode 100644 tests/custom/issues/659/run.sh diff --git a/tests/custom/issues/659/659.essence b/tests/custom/issues/659/659.essence new file mode 100644 index 000000000..1f7ee8b0c --- /dev/null +++ b/tests/custom/issues/659/659.essence @@ -0,0 +1,3 @@ +find x : int(1..10) +such that +(x ** 2) % 2 = 0 diff --git a/tests/custom/issues/659/run.sh b/tests/custom/issues/659/run.sh new file mode 100644 index 000000000..0f8912cc9 --- /dev/null +++ b/tests/custom/issues/659/run.sh @@ -0,0 +1 @@ +conjure streamlining 659.essence \ No newline at end of file From f9486845a1f081de9104b0b68253a0c7758a7395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 20 Jun 2024 10:34:52 +0100 Subject: [PATCH 121/124] fix: low-high streamliners should use <= instead of < --- src/Conjure/Process/Streamlining.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Conjure/Process/Streamlining.hs b/src/Conjure/Process/Streamlining.hs index a4d3b5c3d..19d137713 100644 --- a/src/Conjure/Process/Streamlining.hs +++ b/src/Conjure/Process/Streamlining.hs @@ -186,7 +186,7 @@ intLowerHalf x = do DomainInt _ [RangeBounded _lower upper] -> do -- traceM $ show $ "DomainInt " <+> pretty (lower, upper) if typeUnify ty (TypeInt TagInt) - then mkStreamliner "IntLowHigh" [essence| &x < 1 + (&upper -1) /2 |] + then mkStreamliner "IntLowHigh" [essence| &x <= 1 + (&upper -1) /2 |] else noStreamliner _ -> noStreamliner From 147d43d452e5d38d3895d820856f3c03d66d654c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 20 Jun 2024 10:38:50 +0100 Subject: [PATCH 122/124] uses <= now --- tests/custom/issues/659/run.sh | 0 tests/custom/issues/659/stderr.expected | 1 + tests/custom/issues/659/stdout.expected | 12 ++++++++++++ 3 files changed, 13 insertions(+) mode change 100644 => 100755 tests/custom/issues/659/run.sh create mode 100644 tests/custom/issues/659/stderr.expected create mode 100644 tests/custom/issues/659/stdout.expected diff --git a/tests/custom/issues/659/run.sh b/tests/custom/issues/659/run.sh old mode 100644 new mode 100755 diff --git a/tests/custom/issues/659/stderr.expected b/tests/custom/issues/659/stderr.expected new file mode 100644 index 000000000..b174a50c9 --- /dev/null +++ b/tests/custom/issues/659/stderr.expected @@ -0,0 +1 @@ +Number of streamliners: 4 diff --git a/tests/custom/issues/659/stdout.expected b/tests/custom/issues/659/stdout.expected new file mode 100644 index 000000000..bdc7be746 --- /dev/null +++ b/tests/custom/issues/659/stdout.expected @@ -0,0 +1,12 @@ +{"1": {"onVariable": "x", + "groups": ["IntOddEven"], + "constraint": "x % 2 = 1"}, + "2": {"onVariable": "x", + "groups": ["IntOddEven"], + "constraint": "x % 2 = 0"}, + "3": {"onVariable": "x", + "groups": ["IntLowHigh"], + "constraint": "x <= 1 + (10 - 1) / 2"}, + "4": {"onVariable": "x", + "groups": ["IntLowHigh"], + "constraint": "x > 1 + (10 - 1) / 2"}} From 522d4dcc3995789428c76bc7f4e34c9ef1b59bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 20 Jun 2024 12:17:09 +0100 Subject: [PATCH 123/124] udpate test files --- .../covering-array/stdout.expected | 212 +++++++++--------- .../streamlining/int_01/stdout.expected | 42 ++-- .../streamlining/matrix_01/stdout.expected | 12 +- .../streamlining/mset_01/stdout.expected | 12 +- 4 files changed, 139 insertions(+), 139 deletions(-) diff --git a/tests/custom/streamlining/covering-array/stdout.expected b/tests/custom/streamlining/covering-array/stdout.expected index 45318bbea..1c258fba8 100644 --- a/tests/custom/streamlining/covering-array/stdout.expected +++ b/tests/custom/streamlining/covering-array/stdout.expected @@ -9,7 +9,7 @@ "3": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([and([CA[q1, q2] <= 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "4": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], @@ -25,7 +25,7 @@ "7": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] <= 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "8": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], @@ -41,7 +41,7 @@ "11": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] <= 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "12": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], @@ -57,7 +57,7 @@ "15": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "16": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], @@ -73,7 +73,7 @@ "19": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] <= 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "20": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], @@ -89,7 +89,7 @@ "23": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] <= 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 0 * ((k - 1 + 1) / 10)..min([k, 1 + (0 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "24": {"onVariable": "CA", "groups": ["MatrixByRowBucket-0", "MatrixCardinality", "IntLowHigh"], @@ -105,7 +105,7 @@ "27": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([and([CA[q1, q2] <= 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "28": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], @@ -121,7 +121,7 @@ "31": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] <= 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "32": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], @@ -137,7 +137,7 @@ "35": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] <= 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "36": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], @@ -153,7 +153,7 @@ "39": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "40": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], @@ -169,7 +169,7 @@ "43": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] <= 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "44": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], @@ -185,7 +185,7 @@ "47": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] <= 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 1 * ((k - 1 + 1) / 10)..min([k, 1 + (1 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "48": {"onVariable": "CA", "groups": ["MatrixByRowBucket-1", "MatrixCardinality", "IntLowHigh"], @@ -201,7 +201,7 @@ "51": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([and([CA[q1, q2] <= 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "52": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], @@ -217,7 +217,7 @@ "55": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] <= 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "56": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], @@ -233,7 +233,7 @@ "59": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] <= 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "60": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], @@ -249,7 +249,7 @@ "63": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "64": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], @@ -265,7 +265,7 @@ "67": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] <= 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "68": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], @@ -281,7 +281,7 @@ "71": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] <= 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 2 * ((k - 1 + 1) / 10)..min([k, 1 + (2 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "72": {"onVariable": "CA", "groups": ["MatrixByRowBucket-2", "MatrixCardinality", "IntLowHigh"], @@ -297,7 +297,7 @@ "75": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([and([CA[q1, q2] <= 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "76": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], @@ -313,7 +313,7 @@ "79": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] <= 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "80": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], @@ -329,7 +329,7 @@ "83": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] <= 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "84": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], @@ -345,7 +345,7 @@ "87": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "88": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], @@ -361,7 +361,7 @@ "91": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] <= 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "92": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], @@ -377,7 +377,7 @@ "95": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] <= 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 3 * ((k - 1 + 1) / 10)..min([k, 1 + (3 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "96": {"onVariable": "CA", "groups": ["MatrixByRowBucket-3", "MatrixCardinality", "IntLowHigh"], @@ -393,7 +393,7 @@ "99": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([and([CA[q1, q2] <= 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "100": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], @@ -409,7 +409,7 @@ "103": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] <= 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "104": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], @@ -425,7 +425,7 @@ "107": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] <= 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "108": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], @@ -441,7 +441,7 @@ "111": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "112": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], @@ -457,7 +457,7 @@ "115": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] <= 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "116": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], @@ -473,7 +473,7 @@ "119": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] <= 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 4 * ((k - 1 + 1) / 10)..min([k, 1 + (4 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "120": {"onVariable": "CA", "groups": ["MatrixByRowBucket-4", "MatrixCardinality", "IntLowHigh"], @@ -489,7 +489,7 @@ "123": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([and([CA[q1, q2] <= 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "124": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], @@ -505,7 +505,7 @@ "127": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] <= 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "128": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], @@ -521,7 +521,7 @@ "131": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] <= 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "132": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], @@ -537,7 +537,7 @@ "135": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "136": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], @@ -553,7 +553,7 @@ "139": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] <= 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "140": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], @@ -569,7 +569,7 @@ "143": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] <= 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 5 * ((k - 1 + 1) / 10)..min([k, 1 + (5 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "144": {"onVariable": "CA", "groups": ["MatrixByRowBucket-5", "MatrixCardinality", "IntLowHigh"], @@ -585,7 +585,7 @@ "147": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([and([CA[q1, q2] <= 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "148": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], @@ -601,7 +601,7 @@ "151": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] <= 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "152": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], @@ -617,7 +617,7 @@ "155": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] <= 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "156": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], @@ -633,7 +633,7 @@ "159": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "160": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], @@ -649,7 +649,7 @@ "163": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] <= 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "164": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], @@ -665,7 +665,7 @@ "167": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] <= 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 6 * ((k - 1 + 1) / 10)..min([k, 1 + (6 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "168": {"onVariable": "CA", "groups": ["MatrixByRowBucket-6", "MatrixCardinality", "IntLowHigh"], @@ -681,7 +681,7 @@ "171": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([and([CA[q1, q2] <= 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "172": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], @@ -697,7 +697,7 @@ "175": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] <= 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "176": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], @@ -713,7 +713,7 @@ "179": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] <= 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "180": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], @@ -729,7 +729,7 @@ "183": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "184": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], @@ -745,7 +745,7 @@ "187": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] <= 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "188": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], @@ -761,7 +761,7 @@ "191": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] <= 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 7 * ((k - 1 + 1) / 10)..min([k, 1 + (7 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "192": {"onVariable": "CA", "groups": ["MatrixByRowBucket-7", "MatrixCardinality", "IntLowHigh"], @@ -777,7 +777,7 @@ "195": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([and([CA[q1, q2] <= 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "196": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], @@ -793,7 +793,7 @@ "199": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] <= 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "200": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], @@ -809,7 +809,7 @@ "203": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] <= 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "204": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], @@ -825,7 +825,7 @@ "207": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "208": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], @@ -841,7 +841,7 @@ "211": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] <= 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "212": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], @@ -857,7 +857,7 @@ "215": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] <= 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 8 * ((k - 1 + 1) / 10)..min([k, 1 + (8 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "216": {"onVariable": "CA", "groups": ["MatrixByRowBucket-8", "MatrixCardinality", "IntLowHigh"], @@ -873,7 +873,7 @@ "219": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q1, q2] < 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([and([CA[q1, q2] <= 1 + (g - 1) / 2 | q2 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "220": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], @@ -889,7 +889,7 @@ "223": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] < 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q1, q3] <= 1 + (g - 1) / 2) | q3 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "224": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], @@ -905,7 +905,7 @@ "227": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q1, q4] < 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([1 >= sum([toInt(CA[q1, q4] <= 1 + (g - 1) / 2) | q4 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "228": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], @@ -921,7 +921,7 @@ "231": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] < 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q1, q5] <= 1 + (g - 1) / 2) | q5 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "232": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], @@ -937,7 +937,7 @@ "235": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] < 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q1, q6] <= 1 + (g - 1) / 2) | q6 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "236": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], @@ -953,7 +953,7 @@ "239": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] < 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q1, q7] <= 1 + (g - 1) / 2) | q7 : int(1..b)]) | q1 : int(1 + 9 * ((k - 1 + 1) / 10)..min([k, 1 + (9 + 1) * ((k - 1 + 1) / 10); int(1..2)]))])"}, "240": {"onVariable": "CA", "groups": ["MatrixByRowBucket-9", "MatrixCardinality", "IntLowHigh"], @@ -966,7 +966,7 @@ "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..min([b, 1 + (0 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "243": {"onVariable": "CA", "groups": ["MatrixByColBucket-0", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..min([b, 1 + (0 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] <= 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..min([b, 1 + (0 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "244": {"onVariable": "CA", "groups": ["MatrixByColBucket-0", "IntLowHigh"], "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 0 * ((b - 1 + 1) / 10)..min([b, 1 + (0 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, @@ -978,7 +978,7 @@ "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..min([b, 1 + (1 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "247": {"onVariable": "CA", "groups": ["MatrixByColBucket-1", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..min([b, 1 + (1 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] <= 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..min([b, 1 + (1 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "248": {"onVariable": "CA", "groups": ["MatrixByColBucket-1", "IntLowHigh"], "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 1 * ((b - 1 + 1) / 10)..min([b, 1 + (1 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, @@ -990,7 +990,7 @@ "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..min([b, 1 + (2 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "251": {"onVariable": "CA", "groups": ["MatrixByColBucket-2", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..min([b, 1 + (2 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] <= 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..min([b, 1 + (2 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "252": {"onVariable": "CA", "groups": ["MatrixByColBucket-2", "IntLowHigh"], "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 2 * ((b - 1 + 1) / 10)..min([b, 1 + (2 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, @@ -1002,7 +1002,7 @@ "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..min([b, 1 + (3 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "255": {"onVariable": "CA", "groups": ["MatrixByColBucket-3", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..min([b, 1 + (3 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] <= 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..min([b, 1 + (3 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "256": {"onVariable": "CA", "groups": ["MatrixByColBucket-3", "IntLowHigh"], "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 3 * ((b - 1 + 1) / 10)..min([b, 1 + (3 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, @@ -1014,7 +1014,7 @@ "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..min([b, 1 + (4 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "259": {"onVariable": "CA", "groups": ["MatrixByColBucket-4", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..min([b, 1 + (4 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] <= 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..min([b, 1 + (4 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "260": {"onVariable": "CA", "groups": ["MatrixByColBucket-4", "IntLowHigh"], "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 4 * ((b - 1 + 1) / 10)..min([b, 1 + (4 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, @@ -1026,7 +1026,7 @@ "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..min([b, 1 + (5 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "263": {"onVariable": "CA", "groups": ["MatrixByColBucket-5", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..min([b, 1 + (5 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] <= 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..min([b, 1 + (5 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "264": {"onVariable": "CA", "groups": ["MatrixByColBucket-5", "IntLowHigh"], "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 5 * ((b - 1 + 1) / 10)..min([b, 1 + (5 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, @@ -1038,7 +1038,7 @@ "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..min([b, 1 + (6 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "267": {"onVariable": "CA", "groups": ["MatrixByColBucket-6", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..min([b, 1 + (6 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] <= 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..min([b, 1 + (6 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "268": {"onVariable": "CA", "groups": ["MatrixByColBucket-6", "IntLowHigh"], "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 6 * ((b - 1 + 1) / 10)..min([b, 1 + (6 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, @@ -1050,7 +1050,7 @@ "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..min([b, 1 + (7 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "271": {"onVariable": "CA", "groups": ["MatrixByColBucket-7", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..min([b, 1 + (7 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] <= 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..min([b, 1 + (7 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "272": {"onVariable": "CA", "groups": ["MatrixByColBucket-7", "IntLowHigh"], "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 7 * ((b - 1 + 1) / 10)..min([b, 1 + (7 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, @@ -1062,7 +1062,7 @@ "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..min([b, 1 + (8 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "275": {"onVariable": "CA", "groups": ["MatrixByColBucket-8", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..min([b, 1 + (8 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] <= 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..min([b, 1 + (8 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "276": {"onVariable": "CA", "groups": ["MatrixByColBucket-8", "IntLowHigh"], "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 8 * ((b - 1 + 1) / 10)..min([b, 1 + (8 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, @@ -1074,7 +1074,7 @@ "constraint": "and([and([CA[q8, q9] % 2 = 0 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..min([b, 1 + (9 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "279": {"onVariable": "CA", "groups": ["MatrixByColBucket-9", "IntLowHigh"], - "constraint": "and([and([CA[q8, q9] < 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..min([b, 1 + (9 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, + "constraint": "and([and([CA[q8, q9] <= 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..min([b, 1 + (9 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, "280": {"onVariable": "CA", "groups": ["MatrixByColBucket-9", "IntLowHigh"], "constraint": "and([and([CA[q8, q9] > 1 + (g - 1) / 2 | q9 : int(1 + 9 * ((b - 1 + 1) / 10)..min([b, 1 + (9 + 1) * ((b - 1 + 1) / 10); int(1..2)]))]) | q8 : int(1..k)])"}, @@ -1086,7 +1086,7 @@ "constraint": "and([and([CA[q10, q11] % 2 = 0 | q11 : int(1..b)]) | q10 : int(1..k)])"}, "283": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "and([and([CA[q10, q11] < 1 + (g - 1) / 2 | q11 : int(1..b)]) | q10 : int(1..k)])"}, + "constraint": "and([and([CA[q10, q11] <= 1 + (g - 1) / 2 | q11 : int(1..b)]) | q10 : int(1..k)])"}, "284": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "and([and([CA[q10, q11] > 1 + (g - 1) / 2 | q11 : int(1..b)]) | q10 : int(1..k)])"}, @@ -1098,7 +1098,7 @@ "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] % 2 = 0) | q12 : int(1..b)]) | q10 : int(1..k)])"}, "287": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] < 1 + (g - 1) / 2) | q12 : int(1..b)]) | q10 : int(1..k)])"}, + "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] <= 1 + (g - 1) / 2) | q12 : int(1..b)]) | q10 : int(1..k)])"}, "288": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "and([|`int(1..b)`| / 2 = sum([toInt(CA[q10, q12] > 1 + (g - 1) / 2) | q12 : int(1..b)]) | q10 : int(1..k)])"}, @@ -1110,7 +1110,7 @@ "constraint": "and([1 >= sum([toInt(CA[q10, q13] % 2 = 0) | q13 : int(1..b)]) | q10 : int(1..k)])"}, "291": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "and([1 >= sum([toInt(CA[q10, q13] < 1 + (g - 1) / 2) | q13 : int(1..b)]) | q10 : int(1..k)])"}, + "constraint": "and([1 >= sum([toInt(CA[q10, q13] <= 1 + (g - 1) / 2) | q13 : int(1..b)]) | q10 : int(1..k)])"}, "292": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "and([1 >= sum([toInt(CA[q10, q13] > 1 + (g - 1) / 2) | q13 : int(1..b)]) | q10 : int(1..k)])"}, @@ -1122,7 +1122,7 @@ "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] % 2 = 0) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] % 2 = 0) | q14 : int(1..b)]) | q10 : int(1..k)])"}, "295": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] < 1 + (g - 1) / 2) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] < 1 + (g - 1) / 2) | q14 : int(1..b)]) | q10 : int(1..k)])"}, + "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] <= 1 + (g - 1) / 2) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] <= 1 + (g - 1) / 2) | q14 : int(1..b)]) | q10 : int(1..k)])"}, "296": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "and([|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q10, q14] > 1 + (g - 1) / 2) | q14 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q10, q14] > 1 + (g - 1) / 2) | q14 : int(1..b)]) | q10 : int(1..k)])"}, @@ -1134,7 +1134,7 @@ "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] % 2 = 0) | q15 : int(1..b)]) | q10 : int(1..k)])"}, "299": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] < 1 + (g - 1) / 2) | q15 : int(1..b)]) | q10 : int(1..k)])"}, + "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] <= 1 + (g - 1) / 2) | q15 : int(1..b)]) | q10 : int(1..k)])"}, "300": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "and([|`int(1..b)`| / 2 <= sum([toInt(CA[q10, q15] > 1 + (g - 1) / 2) | q15 : int(1..b)]) | q10 : int(1..k)])"}, @@ -1146,7 +1146,7 @@ "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] % 2 = 0) | q16 : int(1..b)]) | q10 : int(1..k)])"}, "303": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] < 1 + (g - 1) / 2) | q16 : int(1..b)]) | q10 : int(1..k)])"}, + "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] <= 1 + (g - 1) / 2) | q16 : int(1..b)]) | q10 : int(1..k)])"}, "304": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "and([|`int(1..b)`| / 2 >= sum([toInt(CA[q10, q16] > 1 + (g - 1) / 2) | q16 : int(1..b)]) | q10 : int(1..k)])"}, @@ -1158,7 +1158,7 @@ "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] % 2 = 0 | q18 : int(1..b)])) | q17 : int(1..k)])"}, "307": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] < 1 + (g - 1) / 2 | q18 : int(1..b)])) | q17 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] <= 1 + (g - 1) / 2 | q18 : int(1..b)])) | q17 : int(1..k)])"}, "308": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 = sum([toInt(and([CA[q17, q18] > 1 + (g - 1) / 2 | q18 : int(1..b)])) | q17 : int(1..k)])"}, @@ -1170,7 +1170,7 @@ "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] % 2 = 0) | q19 : int(1..b)])) | q17 : int(1..k)])"}, "311": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] < 1 + (g - 1) / 2) | q19 : int(1..b)])) | q17 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] <= 1 + (g - 1) / 2) | q19 : int(1..b)])) | q17 : int(1..k)])"}, "312": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q17, q19] > 1 + (g - 1) / 2) | q19 : int(1..b)])) | q17 : int(1..k)])"}, @@ -1182,7 +1182,7 @@ "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] % 2 = 0) | q20 : int(1..b)])) | q17 : int(1..k)])"}, "315": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] < 1 + (g - 1) / 2) | q20 : int(1..b)])) | q17 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] <= 1 + (g - 1) / 2) | q20 : int(1..b)])) | q17 : int(1..k)])"}, "316": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 = sum([toInt(1 >= sum([toInt(CA[q17, q20] > 1 + (g - 1) / 2) | q20 : int(1..b)])) | q17 : int(1..k)])"}, @@ -1194,7 +1194,7 @@ "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] % 2 = 0) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] % 2 = 0) | q21 : int(1..b)])) | q17 : int(1..k)])"}, "319": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] < 1 + (g - 1) / 2) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] < 1 + (g - 1) / 2) | q21 : int(1..b)])) | q17 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] <= 1 + (g - 1) / 2) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] <= 1 + (g - 1) / 2) | q21 : int(1..b)])) | q17 : int(1..k)])"}, "320": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q17, q21] > 1 + (g - 1) / 2) | q21 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q17, q21] > 1 + (g - 1) / 2) | q21 : int(1..b)])) | q17 : int(1..k)])"}, @@ -1206,7 +1206,7 @@ "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] % 2 = 0) | q22 : int(1..b)])) | q17 : int(1..k)])"}, "323": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] < 1 + (g - 1) / 2) | q22 : int(1..b)])) | q17 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] <= 1 + (g - 1) / 2) | q22 : int(1..b)])) | q17 : int(1..k)])"}, "324": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q17, q22] > 1 + (g - 1) / 2) | q22 : int(1..b)])) | q17 : int(1..k)])"}, @@ -1218,7 +1218,7 @@ "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] % 2 = 0) | q23 : int(1..b)])) | q17 : int(1..k)])"}, "327": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] < 1 + (g - 1) / 2) | q23 : int(1..b)])) | q17 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] <= 1 + (g - 1) / 2) | q23 : int(1..b)])) | q17 : int(1..k)])"}, "328": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 = sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q17, q23] > 1 + (g - 1) / 2) | q23 : int(1..b)])) | q17 : int(1..k)])"}, @@ -1230,7 +1230,7 @@ "constraint": "1 >= sum([toInt(and([CA[q24, q25] % 2 = 0 | q25 : int(1..b)])) | q24 : int(1..k)])"}, "331": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "1 >= sum([toInt(and([CA[q24, q25] < 1 + (g - 1) / 2 | q25 : int(1..b)])) | q24 : int(1..k)])"}, + "constraint": "1 >= sum([toInt(and([CA[q24, q25] <= 1 + (g - 1) / 2 | q25 : int(1..b)])) | q24 : int(1..k)])"}, "332": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "1 >= sum([toInt(and([CA[q24, q25] > 1 + (g - 1) / 2 | q25 : int(1..b)])) | q24 : int(1..k)])"}, @@ -1242,7 +1242,7 @@ "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] % 2 = 0) | q26 : int(1..b)])) | q24 : int(1..k)])"}, "335": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] < 1 + (g - 1) / 2) | q26 : int(1..b)])) | q24 : int(1..k)])"}, + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] <= 1 + (g - 1) / 2) | q26 : int(1..b)])) | q24 : int(1..k)])"}, "336": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q24, q26] > 1 + (g - 1) / 2) | q26 : int(1..b)])) | q24 : int(1..k)])"}, @@ -1254,7 +1254,7 @@ "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] % 2 = 0) | q27 : int(1..b)])) | q24 : int(1..k)])"}, "339": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] < 1 + (g - 1) / 2) | q27 : int(1..b)])) | q24 : int(1..k)])"}, + "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] <= 1 + (g - 1) / 2) | q27 : int(1..b)])) | q24 : int(1..k)])"}, "340": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "1 >= sum([toInt(1 >= sum([toInt(CA[q24, q27] > 1 + (g - 1) / 2) | q27 : int(1..b)])) | q24 : int(1..k)])"}, @@ -1266,7 +1266,7 @@ "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] % 2 = 0) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] % 2 = 0) | q28 : int(1..b)])) | q24 : int(1..k)])"}, "343": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] < 1 + (g - 1) / 2) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] < 1 + (g - 1) / 2) | q28 : int(1..b)])) | q24 : int(1..k)])"}, + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] <= 1 + (g - 1) / 2) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] <= 1 + (g - 1) / 2) | q28 : int(1..b)])) | q24 : int(1..k)])"}, "344": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q24, q28] > 1 + (g - 1) / 2) | q28 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q24, q28] > 1 + (g - 1) / 2) | q28 : int(1..b)])) | q24 : int(1..k)])"}, @@ -1278,7 +1278,7 @@ "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] % 2 = 0) | q29 : int(1..b)])) | q24 : int(1..k)])"}, "347": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] < 1 + (g - 1) / 2) | q29 : int(1..b)])) | q24 : int(1..k)])"}, + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] <= 1 + (g - 1) / 2) | q29 : int(1..b)])) | q24 : int(1..k)])"}, "348": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q24, q29] > 1 + (g - 1) / 2) | q29 : int(1..b)])) | q24 : int(1..k)])"}, @@ -1290,7 +1290,7 @@ "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] % 2 = 0) | q30 : int(1..b)])) | q24 : int(1..k)])"}, "351": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] < 1 + (g - 1) / 2) | q30 : int(1..b)])) | q24 : int(1..k)])"}, + "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] <= 1 + (g - 1) / 2) | q30 : int(1..b)])) | q24 : int(1..k)])"}, "352": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q24, q30] > 1 + (g - 1) / 2) | q30 : int(1..b)])) | q24 : int(1..k)])"}, @@ -1302,7 +1302,7 @@ "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] % 2 = 0 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] % 2 = 0 | q32 : int(1..b)])) | q31 : int(1..k)])"}, "355": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] < 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] < 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] <= 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] <= 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)])"}, "356": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(and([CA[q31, q32] > 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(and([CA[q31, q32] > 1 + (g - 1) / 2 | q32 : int(1..b)])) | q31 : int(1..k)])"}, @@ -1314,7 +1314,7 @@ "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 0) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] % 2 = 0) | q33 : int(1..b)])) | q31 : int(1..k)])"}, "359": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] < 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] < 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] <= 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] <= 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)])"}, "360": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] > 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q31, q33] > 1 + (g - 1) / 2) | q33 : int(1..b)])) | q31 : int(1..k)])"}, @@ -1326,7 +1326,7 @@ "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 0) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] % 2 = 0) | q34 : int(1..b)])) | q31 : int(1..k)])"}, "363": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] < 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] < 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] <= 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] <= 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)])"}, "364": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(1 >= sum([toInt(CA[q31, q34] > 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(1 >= sum([toInt(CA[q31, q34] > 1 + (g - 1) / 2) | q34 : int(1..b)])) | q31 : int(1..k)])"}, @@ -1338,7 +1338,7 @@ "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] % 2 = 0) | q35 : int(1..b)])) | q31 : int(1..k)])"}, "367": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] < 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] <= 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] <= 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] <= 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] <= 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)])"}, "368": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q31, q35] > 1 + (g - 1) / 2) | q35 : int(1..b)])) | q31 : int(1..k)])"}, @@ -1350,7 +1350,7 @@ "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 0) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] % 2 = 0) | q36 : int(1..b)])) | q31 : int(1..k)])"}, "371": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] < 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] < 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] <= 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] <= 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)])"}, "372": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] > 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q31, q36] > 1 + (g - 1) / 2) | q36 : int(1..b)])) | q31 : int(1..k)])"}, @@ -1362,7 +1362,7 @@ "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 0) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] % 2 = 0) | q37 : int(1..b)])) | q31 : int(1..k)])"}, "375": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] < 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] < 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] <= 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] <= 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)])"}, "376": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 + 1 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] > 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)]) /\\ |`int(1..k)`| / 2 - 1 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q31, q37] > 1 + (g - 1) / 2) | q37 : int(1..b)])) | q31 : int(1..k)])"}, @@ -1374,7 +1374,7 @@ "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] % 2 = 0 | q39 : int(1..b)])) | q38 : int(1..k)])"}, "379": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] < 1 + (g - 1) / 2 | q39 : int(1..b)])) | q38 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] <= 1 + (g - 1) / 2 | q39 : int(1..b)])) | q38 : int(1..k)])"}, "380": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 <= sum([toInt(and([CA[q38, q39] > 1 + (g - 1) / 2 | q39 : int(1..b)])) | q38 : int(1..k)])"}, @@ -1386,7 +1386,7 @@ "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] % 2 = 0) | q40 : int(1..b)])) | q38 : int(1..k)])"}, "383": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] < 1 + (g - 1) / 2) | q40 : int(1..b)])) | q38 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] <= 1 + (g - 1) / 2) | q40 : int(1..b)])) | q38 : int(1..k)])"}, "384": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q38, q40] > 1 + (g - 1) / 2) | q40 : int(1..b)])) | q38 : int(1..k)])"}, @@ -1398,7 +1398,7 @@ "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] % 2 = 0) | q41 : int(1..b)])) | q38 : int(1..k)])"}, "387": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] < 1 + (g - 1) / 2) | q41 : int(1..b)])) | q38 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] <= 1 + (g - 1) / 2) | q41 : int(1..b)])) | q38 : int(1..k)])"}, "388": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 <= sum([toInt(1 >= sum([toInt(CA[q38, q41] > 1 + (g - 1) / 2) | q41 : int(1..b)])) | q38 : int(1..k)])"}, @@ -1410,7 +1410,7 @@ "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] % 2 = 0) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] % 2 = 0) | q42 : int(1..b)])) | q38 : int(1..k)])"}, "391": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] < 1 + (g - 1) / 2) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] < 1 + (g - 1) / 2) | q42 : int(1..b)])) | q38 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] <= 1 + (g - 1) / 2) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] <= 1 + (g - 1) / 2) | q42 : int(1..b)])) | q38 : int(1..k)])"}, "392": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q38, q42] > 1 + (g - 1) / 2) | q42 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q38, q42] > 1 + (g - 1) / 2) | q42 : int(1..b)])) | q38 : int(1..k)])"}, @@ -1422,7 +1422,7 @@ "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] % 2 = 0) | q43 : int(1..b)])) | q38 : int(1..k)])"}, "395": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] < 1 + (g - 1) / 2) | q43 : int(1..b)])) | q38 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] <= 1 + (g - 1) / 2) | q43 : int(1..b)])) | q38 : int(1..k)])"}, "396": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q38, q43] > 1 + (g - 1) / 2) | q43 : int(1..b)])) | q38 : int(1..k)])"}, @@ -1434,7 +1434,7 @@ "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] % 2 = 0) | q44 : int(1..b)])) | q38 : int(1..k)])"}, "399": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] < 1 + (g - 1) / 2) | q44 : int(1..b)])) | q38 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] <= 1 + (g - 1) / 2) | q44 : int(1..b)])) | q38 : int(1..k)])"}, "400": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 <= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q38, q44] > 1 + (g - 1) / 2) | q44 : int(1..b)])) | q38 : int(1..k)])"}, @@ -1446,7 +1446,7 @@ "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] % 2 = 0 | q46 : int(1..b)])) | q45 : int(1..k)])"}, "403": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] < 1 + (g - 1) / 2 | q46 : int(1..b)])) | q45 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] <= 1 + (g - 1) / 2 | q46 : int(1..b)])) | q45 : int(1..k)])"}, "404": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 >= sum([toInt(and([CA[q45, q46] > 1 + (g - 1) / 2 | q46 : int(1..b)])) | q45 : int(1..k)])"}, @@ -1458,7 +1458,7 @@ "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] % 2 = 0) | q47 : int(1..b)])) | q45 : int(1..k)])"}, "407": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] < 1 + (g - 1) / 2) | q47 : int(1..b)])) | q45 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] <= 1 + (g - 1) / 2) | q47 : int(1..b)])) | q45 : int(1..k)])"}, "408": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 = sum([toInt(CA[q45, q47] > 1 + (g - 1) / 2) | q47 : int(1..b)])) | q45 : int(1..k)])"}, @@ -1470,7 +1470,7 @@ "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] % 2 = 0) | q48 : int(1..b)])) | q45 : int(1..k)])"}, "411": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] < 1 + (g - 1) / 2) | q48 : int(1..b)])) | q45 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] <= 1 + (g - 1) / 2) | q48 : int(1..b)])) | q45 : int(1..k)])"}, "412": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 >= sum([toInt(1 >= sum([toInt(CA[q45, q48] > 1 + (g - 1) / 2) | q48 : int(1..b)])) | q45 : int(1..k)])"}, @@ -1482,7 +1482,7 @@ "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] % 2 = 0) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] % 2 = 0) | q49 : int(1..b)])) | q45 : int(1..k)])"}, "415": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] < 1 + (g - 1) / 2) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] < 1 + (g - 1) / 2) | q49 : int(1..b)])) | q45 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] <= 1 + (g - 1) / 2) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] <= 1 + (g - 1) / 2) | q49 : int(1..b)])) | q45 : int(1..k)])"}, "416": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 + 1 >= sum([toInt(CA[q45, q49] > 1 + (g - 1) / 2) | q49 : int(1..b)]) /\\ |`int(1..b)`| / 2 - 1 <= sum([toInt(CA[q45, q49] > 1 + (g - 1) / 2) | q49 : int(1..b)])) | q45 : int(1..k)])"}, @@ -1494,7 +1494,7 @@ "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] % 2 = 0) | q50 : int(1..b)])) | q45 : int(1..k)])"}, "419": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] < 1 + (g - 1) / 2) | q50 : int(1..b)])) | q45 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] <= 1 + (g - 1) / 2) | q50 : int(1..b)])) | q45 : int(1..k)])"}, "420": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 <= sum([toInt(CA[q45, q50] > 1 + (g - 1) / 2) | q50 : int(1..b)])) | q45 : int(1..k)])"}, @@ -1506,7 +1506,7 @@ "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] % 2 = 0) | q51 : int(1..b)])) | q45 : int(1..k)])"}, "423": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] < 1 + (g - 1) / 2) | q51 : int(1..b)])) | q45 : int(1..k)])"}, + "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] <= 1 + (g - 1) / 2) | q51 : int(1..b)])) | q45 : int(1..k)])"}, "424": {"onVariable": "CA", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..k)`| / 2 >= sum([toInt(|`int(1..b)`| / 2 >= sum([toInt(CA[q45, q51] > 1 + (g - 1) / 2) | q51 : int(1..b)])) | q45 : int(1..k)])"}} diff --git a/tests/custom/streamlining/int_01/stdout.expected b/tests/custom/streamlining/int_01/stdout.expected index e194bc432..7e81f43ff 100644 --- a/tests/custom/streamlining/int_01/stdout.expected +++ b/tests/custom/streamlining/int_01/stdout.expected @@ -6,7 +6,7 @@ "constraint": "a % 2 = 0"}, "3": {"onVariable": "a", "groups": ["IntLowHigh"], - "constraint": "a < 1 + (10 - 1) / 2"}, + "constraint": "a <= 1 + (10 - 1) / 2"}, "4": {"onVariable": "a", "groups": ["IntLowHigh"], "constraint": "a > 1 + (10 - 1) / 2"}, @@ -18,7 +18,7 @@ "constraint": "b % 2 = 0"}, "7": {"onVariable": "b", "groups": ["IntLowHigh"], - "constraint": "b < 1 + (10 - 1) / 2"}, + "constraint": "b <= 1 + (10 - 1) / 2"}, "8": {"onVariable": "b", "groups": ["IntLowHigh"], "constraint": "b > 1 + (10 - 1) / 2"}, @@ -30,7 +30,7 @@ "constraint": "c % 2 = 0"}, "11": {"onVariable": "c", "groups": ["IntLowHigh"], - "constraint": "c < 1 + (10 - 1) / 2"}, + "constraint": "c <= 1 + (10 - 1) / 2"}, "12": {"onVariable": "c", "groups": ["IntLowHigh"], "constraint": "c > 1 + (10 - 1) / 2"}, @@ -42,7 +42,7 @@ "constraint": "and([q1 % 2 = 0 | q1 <- x])"}, "15": {"onVariable": "x", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "and([q1 < 1 + (3 - 1) / 2 | q1 <- x])"}, + "constraint": "and([q1 <= 1 + (3 - 1) / 2 | q1 <- x])"}, "16": {"onVariable": "x", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "and([q1 > 1 + (3 - 1) / 2 | q1 <- x])"}, @@ -54,7 +54,7 @@ "constraint": "|x| / 2 = sum([toInt(q2 % 2 = 0) | q2 <- x])"}, "19": {"onVariable": "x", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "|x| / 2 = sum([toInt(q2 < 1 + (3 - 1) / 2) | q2 <- x])"}, + "constraint": "|x| / 2 = sum([toInt(q2 <= 1 + (3 - 1) / 2) | q2 <- x])"}, "20": {"onVariable": "x", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "|x| / 2 = sum([toInt(q2 > 1 + (3 - 1) / 2) | q2 <- x])"}, @@ -66,7 +66,7 @@ "constraint": "1 >= sum([toInt(q3 % 2 = 0) | q3 <- x])"}, "23": {"onVariable": "x", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "1 >= sum([toInt(q3 < 1 + (3 - 1) / 2) | q3 <- x])"}, + "constraint": "1 >= sum([toInt(q3 <= 1 + (3 - 1) / 2) | q3 <- x])"}, "24": {"onVariable": "x", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "1 >= sum([toInt(q3 > 1 + (3 - 1) / 2) | q3 <- x])"}, @@ -78,7 +78,7 @@ "constraint": "|x| / 2 + 1 >= sum([toInt(q4 % 2 = 0) | q4 <- x]) /\\ |x| / 2 - 1 <= sum([toInt(q4 % 2 = 0) | q4 <- x])"}, "27": {"onVariable": "x", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "|x| / 2 + 1 >= sum([toInt(q4 < 1 + (3 - 1) / 2) | q4 <- x]) /\\ |x| / 2 - 1 <= sum([toInt(q4 < 1 + (3 - 1) / 2) | q4 <- x])"}, + "constraint": "|x| / 2 + 1 >= sum([toInt(q4 <= 1 + (3 - 1) / 2) | q4 <- x]) /\\ |x| / 2 - 1 <= sum([toInt(q4 <= 1 + (3 - 1) / 2) | q4 <- x])"}, "28": {"onVariable": "x", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "|x| / 2 + 1 >= sum([toInt(q4 > 1 + (3 - 1) / 2) | q4 <- x]) /\\ |x| / 2 - 1 <= sum([toInt(q4 > 1 + (3 - 1) / 2) | q4 <- x])"}, @@ -90,7 +90,7 @@ "constraint": "|x| / 2 <= sum([toInt(q5 % 2 = 0) | q5 <- x])"}, "31": {"onVariable": "x", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "|x| / 2 <= sum([toInt(q5 < 1 + (3 - 1) / 2) | q5 <- x])"}, + "constraint": "|x| / 2 <= sum([toInt(q5 <= 1 + (3 - 1) / 2) | q5 <- x])"}, "32": {"onVariable": "x", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "|x| / 2 <= sum([toInt(q5 > 1 + (3 - 1) / 2) | q5 <- x])"}, @@ -102,7 +102,7 @@ "constraint": "|x| / 2 >= sum([toInt(q6 % 2 = 0) | q6 <- x])"}, "35": {"onVariable": "x", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "|x| / 2 >= sum([toInt(q6 < 1 + (3 - 1) / 2) | q6 <- x])"}, + "constraint": "|x| / 2 >= sum([toInt(q6 <= 1 + (3 - 1) / 2) | q6 <- x])"}, "36": {"onVariable": "x", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "|x| / 2 >= sum([toInt(q6 > 1 + (3 - 1) / 2) | q6 <- x])"}, @@ -114,7 +114,7 @@ "constraint": "and([q7 % 2 = 0 | q7 <- y])"}, "39": {"onVariable": "y", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "and([q7 < 1 + (3 - 1) / 2 | q7 <- y])"}, + "constraint": "and([q7 <= 1 + (3 - 1) / 2 | q7 <- y])"}, "40": {"onVariable": "y", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "and([q7 > 1 + (3 - 1) / 2 | q7 <- y])"}, @@ -126,7 +126,7 @@ "constraint": "|y| / 2 = sum([toInt(q8 % 2 = 0) | q8 <- y])"}, "43": {"onVariable": "y", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "|y| / 2 = sum([toInt(q8 < 1 + (3 - 1) / 2) | q8 <- y])"}, + "constraint": "|y| / 2 = sum([toInt(q8 <= 1 + (3 - 1) / 2) | q8 <- y])"}, "44": {"onVariable": "y", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "|y| / 2 = sum([toInt(q8 > 1 + (3 - 1) / 2) | q8 <- y])"}, @@ -138,7 +138,7 @@ "constraint": "1 >= sum([toInt(q9 % 2 = 0) | q9 <- y])"}, "47": {"onVariable": "y", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "1 >= sum([toInt(q9 < 1 + (3 - 1) / 2) | q9 <- y])"}, + "constraint": "1 >= sum([toInt(q9 <= 1 + (3 - 1) / 2) | q9 <- y])"}, "48": {"onVariable": "y", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "1 >= sum([toInt(q9 > 1 + (3 - 1) / 2) | q9 <- y])"}, @@ -150,7 +150,7 @@ "constraint": "|y| / 2 + 1 >= sum([toInt(q10 % 2 = 0) | q10 <- y]) /\\ |y| / 2 - 1 <= sum([toInt(q10 % 2 = 0) | q10 <- y])"}, "51": {"onVariable": "y", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "|y| / 2 + 1 >= sum([toInt(q10 < 1 + (3 - 1) / 2) | q10 <- y]) /\\ |y| / 2 - 1 <= sum([toInt(q10 < 1 + (3 - 1) / 2) | q10 <- y])"}, + "constraint": "|y| / 2 + 1 >= sum([toInt(q10 <= 1 + (3 - 1) / 2) | q10 <- y]) /\\ |y| / 2 - 1 <= sum([toInt(q10 <= 1 + (3 - 1) / 2) | q10 <- y])"}, "52": {"onVariable": "y", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "|y| / 2 + 1 >= sum([toInt(q10 > 1 + (3 - 1) / 2) | q10 <- y]) /\\ |y| / 2 - 1 <= sum([toInt(q10 > 1 + (3 - 1) / 2) | q10 <- y])"}, @@ -162,7 +162,7 @@ "constraint": "|y| / 2 <= sum([toInt(q11 % 2 = 0) | q11 <- y])"}, "55": {"onVariable": "y", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "|y| / 2 <= sum([toInt(q11 < 1 + (3 - 1) / 2) | q11 <- y])"}, + "constraint": "|y| / 2 <= sum([toInt(q11 <= 1 + (3 - 1) / 2) | q11 <- y])"}, "56": {"onVariable": "y", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "|y| / 2 <= sum([toInt(q11 > 1 + (3 - 1) / 2) | q11 <- y])"}, @@ -174,7 +174,7 @@ "constraint": "|y| / 2 >= sum([toInt(q12 % 2 = 0) | q12 <- y])"}, "59": {"onVariable": "y", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "|y| / 2 >= sum([toInt(q12 < 1 + (3 - 1) / 2) | q12 <- y])"}, + "constraint": "|y| / 2 >= sum([toInt(q12 <= 1 + (3 - 1) / 2) | q12 <- y])"}, "60": {"onVariable": "y", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "|y| / 2 >= sum([toInt(q12 > 1 + (3 - 1) / 2) | q12 <- y])"}, @@ -186,7 +186,7 @@ "constraint": "and([q21 % 2 = 0 | q21 <- defined(f)])"}, "63": {"onVariable": "f", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "and([q21 < 1 + (2 - 1) / 2 | q21 <- defined(f)])"}, + "constraint": "and([q21 <= 1 + (2 - 1) / 2 | q21 <- defined(f)])"}, "64": {"onVariable": "f", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "and([q21 > 1 + (2 - 1) / 2 | q21 <- defined(f)])"}, @@ -198,7 +198,7 @@ "constraint": "|defined(f)| / 2 = sum([toInt(q22 % 2 = 0) | q22 <- defined(f)])"}, "67": {"onVariable": "f", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "|defined(f)| / 2 = sum([toInt(q22 < 1 + (2 - 1) / 2) | q22 <- defined(f)])"}, + "constraint": "|defined(f)| / 2 = sum([toInt(q22 <= 1 + (2 - 1) / 2) | q22 <- defined(f)])"}, "68": {"onVariable": "f", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "|defined(f)| / 2 = sum([toInt(q22 > 1 + (2 - 1) / 2) | q22 <- defined(f)])"}, @@ -210,7 +210,7 @@ "constraint": "1 >= sum([toInt(q23 % 2 = 0) | q23 <- defined(f)])"}, "71": {"onVariable": "f", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "1 >= sum([toInt(q23 < 1 + (2 - 1) / 2) | q23 <- defined(f)])"}, + "constraint": "1 >= sum([toInt(q23 <= 1 + (2 - 1) / 2) | q23 <- defined(f)])"}, "72": {"onVariable": "f", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "1 >= sum([toInt(q23 > 1 + (2 - 1) / 2) | q23 <- defined(f)])"}, @@ -222,7 +222,7 @@ "constraint": "|defined(f)| / 2 + 1 >= sum([toInt(q24 % 2 = 0) | q24 <- defined(f)]) /\\ |defined(f)| / 2 - 1 <= sum([toInt(q24 % 2 = 0) | q24 <- defined(f)])"}, "75": {"onVariable": "f", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "|defined(f)| / 2 + 1 >= sum([toInt(q24 < 1 + (2 - 1) / 2) | q24 <- defined(f)]) /\\ |defined(f)| / 2 - 1 <= sum([toInt(q24 < 1 + (2 - 1) / 2) | q24 <- defined(f)])"}, + "constraint": "|defined(f)| / 2 + 1 >= sum([toInt(q24 <= 1 + (2 - 1) / 2) | q24 <- defined(f)]) /\\ |defined(f)| / 2 - 1 <= sum([toInt(q24 <= 1 + (2 - 1) / 2) | q24 <- defined(f)])"}, "76": {"onVariable": "f", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "|defined(f)| / 2 + 1 >= sum([toInt(q24 > 1 + (2 - 1) / 2) | q24 <- defined(f)]) /\\ |defined(f)| / 2 - 1 <= sum([toInt(q24 > 1 + (2 - 1) / 2) | q24 <- defined(f)])"}, @@ -234,7 +234,7 @@ "constraint": "|defined(f)| / 2 <= sum([toInt(q25 % 2 = 0) | q25 <- defined(f)])"}, "79": {"onVariable": "f", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "|defined(f)| / 2 <= sum([toInt(q25 < 1 + (2 - 1) / 2) | q25 <- defined(f)])"}, + "constraint": "|defined(f)| / 2 <= sum([toInt(q25 <= 1 + (2 - 1) / 2) | q25 <- defined(f)])"}, "80": {"onVariable": "f", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "|defined(f)| / 2 <= sum([toInt(q25 > 1 + (2 - 1) / 2) | q25 <- defined(f)])"}, @@ -246,7 +246,7 @@ "constraint": "|defined(f)| / 2 >= sum([toInt(q26 % 2 = 0) | q26 <- defined(f)])"}, "83": {"onVariable": "f", "groups": ["SetCardinality", "IntLowHigh"], - "constraint": "|defined(f)| / 2 >= sum([toInt(q26 < 1 + (2 - 1) / 2) | q26 <- defined(f)])"}, + "constraint": "|defined(f)| / 2 >= sum([toInt(q26 <= 1 + (2 - 1) / 2) | q26 <- defined(f)])"}, "84": {"onVariable": "f", "groups": ["SetCardinality", "IntLowHigh"], "constraint": "|defined(f)| / 2 >= sum([toInt(q26 > 1 + (2 - 1) / 2) | q26 <- defined(f)])"}} diff --git a/tests/custom/streamlining/matrix_01/stdout.expected b/tests/custom/streamlining/matrix_01/stdout.expected index 02e834892..207f75d76 100644 --- a/tests/custom/streamlining/matrix_01/stdout.expected +++ b/tests/custom/streamlining/matrix_01/stdout.expected @@ -6,7 +6,7 @@ "constraint": "and([a[q1] % 2 = 0 | q1 : int(1..3)])"}, "3": {"onVariable": "a", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "and([a[q1] < 1 + (10 - 1) / 2 | q1 : int(1..3)])"}, + "constraint": "and([a[q1] <= 1 + (10 - 1) / 2 | q1 : int(1..3)])"}, "4": {"onVariable": "a", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "and([a[q1] > 1 + (10 - 1) / 2 | q1 : int(1..3)])"}, @@ -18,7 +18,7 @@ "constraint": "|`int(1..3)`| / 2 = sum([toInt(a[q2] % 2 = 0) | q2 : int(1..3)])"}, "7": {"onVariable": "a", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..3)`| / 2 = sum([toInt(a[q2] < 1 + (10 - 1) / 2) | q2 : int(1..3)])"}, + "constraint": "|`int(1..3)`| / 2 = sum([toInt(a[q2] <= 1 + (10 - 1) / 2) | q2 : int(1..3)])"}, "8": {"onVariable": "a", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..3)`| / 2 = sum([toInt(a[q2] > 1 + (10 - 1) / 2) | q2 : int(1..3)])"}, @@ -30,7 +30,7 @@ "constraint": "1 >= sum([toInt(a[q3] % 2 = 0) | q3 : int(1..3)])"}, "11": {"onVariable": "a", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "1 >= sum([toInt(a[q3] < 1 + (10 - 1) / 2) | q3 : int(1..3)])"}, + "constraint": "1 >= sum([toInt(a[q3] <= 1 + (10 - 1) / 2) | q3 : int(1..3)])"}, "12": {"onVariable": "a", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "1 >= sum([toInt(a[q3] > 1 + (10 - 1) / 2) | q3 : int(1..3)])"}, @@ -42,7 +42,7 @@ "constraint": "|`int(1..3)`| / 2 + 1 >= sum([toInt(a[q4] % 2 = 0) | q4 : int(1..3)]) /\\ |`int(1..3)`| / 2 - 1 <= sum([toInt(a[q4] % 2 = 0) | q4 : int(1..3)])"}, "15": {"onVariable": "a", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..3)`| / 2 + 1 >= sum([toInt(a[q4] < 1 + (10 - 1) / 2) | q4 : int(1..3)]) /\\ |`int(1..3)`| / 2 - 1 <= sum([toInt(a[q4] < 1 + (10 - 1) / 2) | q4 : int(1..3)])"}, + "constraint": "|`int(1..3)`| / 2 + 1 >= sum([toInt(a[q4] <= 1 + (10 - 1) / 2) | q4 : int(1..3)]) /\\ |`int(1..3)`| / 2 - 1 <= sum([toInt(a[q4] <= 1 + (10 - 1) / 2) | q4 : int(1..3)])"}, "16": {"onVariable": "a", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..3)`| / 2 + 1 >= sum([toInt(a[q4] > 1 + (10 - 1) / 2) | q4 : int(1..3)]) /\\ |`int(1..3)`| / 2 - 1 <= sum([toInt(a[q4] > 1 + (10 - 1) / 2) | q4 : int(1..3)])"}, @@ -54,7 +54,7 @@ "constraint": "|`int(1..3)`| / 2 <= sum([toInt(a[q5] % 2 = 0) | q5 : int(1..3)])"}, "19": {"onVariable": "a", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..3)`| / 2 <= sum([toInt(a[q5] < 1 + (10 - 1) / 2) | q5 : int(1..3)])"}, + "constraint": "|`int(1..3)`| / 2 <= sum([toInt(a[q5] <= 1 + (10 - 1) / 2) | q5 : int(1..3)])"}, "20": {"onVariable": "a", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..3)`| / 2 <= sum([toInt(a[q5] > 1 + (10 - 1) / 2) | q5 : int(1..3)])"}, @@ -66,7 +66,7 @@ "constraint": "|`int(1..3)`| / 2 >= sum([toInt(a[q6] % 2 = 0) | q6 : int(1..3)])"}, "23": {"onVariable": "a", "groups": ["MatrixCardinality", "IntLowHigh"], - "constraint": "|`int(1..3)`| / 2 >= sum([toInt(a[q6] < 1 + (10 - 1) / 2) | q6 : int(1..3)])"}, + "constraint": "|`int(1..3)`| / 2 >= sum([toInt(a[q6] <= 1 + (10 - 1) / 2) | q6 : int(1..3)])"}, "24": {"onVariable": "a", "groups": ["MatrixCardinality", "IntLowHigh"], "constraint": "|`int(1..3)`| / 2 >= sum([toInt(a[q6] > 1 + (10 - 1) / 2) | q6 : int(1..3)])"}} diff --git a/tests/custom/streamlining/mset_01/stdout.expected b/tests/custom/streamlining/mset_01/stdout.expected index 35369a7c4..8988e5288 100644 --- a/tests/custom/streamlining/mset_01/stdout.expected +++ b/tests/custom/streamlining/mset_01/stdout.expected @@ -6,7 +6,7 @@ "constraint": "and([q1 % 2 = 0 | q1 <- a])"}, "3": {"onVariable": "a", "groups": ["MSetCardinality", "IntLowHigh"], - "constraint": "and([q1 < 1 + (10 - 1) / 2 | q1 <- a])"}, + "constraint": "and([q1 <= 1 + (10 - 1) / 2 | q1 <- a])"}, "4": {"onVariable": "a", "groups": ["MSetCardinality", "IntLowHigh"], "constraint": "and([q1 > 1 + (10 - 1) / 2 | q1 <- a])"}, @@ -18,7 +18,7 @@ "constraint": "|a| / 2 = sum([toInt(q2 % 2 = 0) | q2 <- a])"}, "7": {"onVariable": "a", "groups": ["MSetCardinality", "IntLowHigh"], - "constraint": "|a| / 2 = sum([toInt(q2 < 1 + (10 - 1) / 2) | q2 <- a])"}, + "constraint": "|a| / 2 = sum([toInt(q2 <= 1 + (10 - 1) / 2) | q2 <- a])"}, "8": {"onVariable": "a", "groups": ["MSetCardinality", "IntLowHigh"], "constraint": "|a| / 2 = sum([toInt(q2 > 1 + (10 - 1) / 2) | q2 <- a])"}, @@ -30,7 +30,7 @@ "constraint": "1 >= sum([toInt(q3 % 2 = 0) | q3 <- a])"}, "11": {"onVariable": "a", "groups": ["MSetCardinality", "IntLowHigh"], - "constraint": "1 >= sum([toInt(q3 < 1 + (10 - 1) / 2) | q3 <- a])"}, + "constraint": "1 >= sum([toInt(q3 <= 1 + (10 - 1) / 2) | q3 <- a])"}, "12": {"onVariable": "a", "groups": ["MSetCardinality", "IntLowHigh"], "constraint": "1 >= sum([toInt(q3 > 1 + (10 - 1) / 2) | q3 <- a])"}, @@ -42,7 +42,7 @@ "constraint": "|a| / 2 + 1 >= sum([toInt(q4 % 2 = 0) | q4 <- a]) /\\ |a| / 2 - 1 <= sum([toInt(q4 % 2 = 0) | q4 <- a])"}, "15": {"onVariable": "a", "groups": ["MSetCardinality", "IntLowHigh"], - "constraint": "|a| / 2 + 1 >= sum([toInt(q4 < 1 + (10 - 1) / 2) | q4 <- a]) /\\ |a| / 2 - 1 <= sum([toInt(q4 < 1 + (10 - 1) / 2) | q4 <- a])"}, + "constraint": "|a| / 2 + 1 >= sum([toInt(q4 <= 1 + (10 - 1) / 2) | q4 <- a]) /\\ |a| / 2 - 1 <= sum([toInt(q4 <= 1 + (10 - 1) / 2) | q4 <- a])"}, "16": {"onVariable": "a", "groups": ["MSetCardinality", "IntLowHigh"], "constraint": "|a| / 2 + 1 >= sum([toInt(q4 > 1 + (10 - 1) / 2) | q4 <- a]) /\\ |a| / 2 - 1 <= sum([toInt(q4 > 1 + (10 - 1) / 2) | q4 <- a])"}, @@ -54,7 +54,7 @@ "constraint": "|a| / 2 <= sum([toInt(q5 % 2 = 0) | q5 <- a])"}, "19": {"onVariable": "a", "groups": ["MSetCardinality", "IntLowHigh"], - "constraint": "|a| / 2 <= sum([toInt(q5 < 1 + (10 - 1) / 2) | q5 <- a])"}, + "constraint": "|a| / 2 <= sum([toInt(q5 <= 1 + (10 - 1) / 2) | q5 <- a])"}, "20": {"onVariable": "a", "groups": ["MSetCardinality", "IntLowHigh"], "constraint": "|a| / 2 <= sum([toInt(q5 > 1 + (10 - 1) / 2) | q5 <- a])"}, @@ -66,7 +66,7 @@ "constraint": "|a| / 2 >= sum([toInt(q6 % 2 = 0) | q6 <- a])"}, "23": {"onVariable": "a", "groups": ["MSetCardinality", "IntLowHigh"], - "constraint": "|a| / 2 >= sum([toInt(q6 < 1 + (10 - 1) / 2) | q6 <- a])"}, + "constraint": "|a| / 2 >= sum([toInt(q6 <= 1 + (10 - 1) / 2) | q6 <- a])"}, "24": {"onVariable": "a", "groups": ["MSetCardinality", "IntLowHigh"], "constraint": "|a| / 2 >= sum([toInt(q6 > 1 + (10 - 1) / 2) | q6 <- a])"}} From 86b5afbdd4586746cb451bc07b0c73a776a42518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 20 Jun 2024 14:27:41 +0100 Subject: [PATCH 124/124] Update URL for minion, SR is relocated --- etc/build/install-minion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/build/install-minion.sh b/etc/build/install-minion.sh index 7c8db7e70..cc53d49e7 100755 --- a/etc/build/install-minion.sh +++ b/etc/build/install-minion.sh @@ -19,11 +19,11 @@ pushd tmp-install-minion OS=$(uname) if [ "$OS" == "Darwin" ]; then - download https://savilerow.cs.st-andrews.ac.uk/savilerow-$VERSION-mac.tgz + download https://www-users.york.ac.uk/peter.nightingale/savilerow/savilerow-$VERSION-mac.tgz tar zxf savilerow-$VERSION-mac.tgz mv savilerow-$VERSION-mac/bin/minion ${BIN_DIR}/minion elif [ "$OS" == "Linux" ]; then - download https://savilerow.cs.st-andrews.ac.uk/savilerow-$VERSION-linux.tgz + download https://www-users.york.ac.uk/peter.nightingale/savilerow/savilerow-$VERSION-linux.tgz tar zxf savilerow-$VERSION-linux.tgz mv savilerow-$VERSION-linux/bin/minion ${BIN_DIR}/minion else