diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,7 +1,25 @@
 * Hackage: <http://hackage.haskell.org/package/sbv>
 * GitHub:  <http://leventerkok.github.io/sbv/>
 
-* Latest Hackage released version: 8.16, 2021-08-18
+* Latest Hackage released version: 8.17, 2021-10-25
+
+### Version 8.17, 2021-10-25
+
+  * SBV now supports cvc5; the latest incarnation of CVC. See https://github.com/cvc5/cvc5
+    for details.
+
+  * SBV now supports bitwuzla; the latest incarnation of Boolector. See https://github.com/bitwuzla/bitwuzla
+    for details.
+
+  * Fixed handling of CRational values in constant folding, which was missing a case.
+    Thanks to Jaro Reinders for reporting.
+
+  * Fixed calls to distinct for floating-point values, causing SBV to throw an exception.
+
+  * Add missing instances of SatModel for Char and String. Thanks to eax- on github
+    for the contribution.
+
+  * Export svToSV from Data.SBV.Dynamic. Thanks to Matt Parker for the PR.
 
 ### Version 8.16, 2021-08-18
 
diff --git a/Data/SBV.hs b/Data/SBV.hs
--- a/Data/SBV.hs
+++ b/Data/SBV.hs
@@ -113,9 +113,10 @@
 --
 --   * ABC from University of Berkeley: <http://www.eecs.berkeley.edu/~alanmi/abc/>
 --
---   * CVC4 from Stanford: <https://cvc4.github.io/>
+--   * CVC4, and CVC5 from Stanford University and the University of Iowa. <https://cvc4.github.io/> and <https://cvc5.github.io>
 --
---   * Boolector from Johannes Kepler University: <http://fmv.jku.at/boolector/>
+--   * Boolector from Johannes Kepler University: <http://fmv.jku.at/boolector/> and its successor Bitwuzla from Stanford
+--     university: <https://github.com/bitwuzla/bitwuzla>
 --
 --   * MathSAT from Fondazione Bruno Kessler and DISI-University of Trento: <http://mathsat.fbk.eu/>
 --
@@ -368,7 +369,7 @@
   -- $verbosity
 
   -- ** Solvers
-  , boolector, cvc4, yices, dReal, z3, mathSAT, abc
+  , boolector, bitwuzla, cvc4, cvc5, yices, dReal, z3, mathSAT, abc
   -- ** Configurations
   , defaultSolverConfig, defaultSMTCfg, defaultDeltaSMTCfg, sbvCheckSolverInstallation, getAvailableSolvers
   , setLogic, Logic(..), setOption, setInfo, setTimeOut
diff --git a/Data/SBV/Client.hs b/Data/SBV/Client.hs
--- a/Data/SBV/Client.hs
+++ b/Data/SBV/Client.hs
@@ -49,7 +49,9 @@
 defaultSolverConfig :: Solver -> SMTConfig
 defaultSolverConfig ABC       = abc
 defaultSolverConfig Boolector = boolector
+defaultSolverConfig Bitwuzla  = bitwuzla
 defaultSolverConfig CVC4      = cvc4
+defaultSolverConfig CVC5      = cvc5
 defaultSolverConfig DReal     = dReal
 defaultSolverConfig MathSAT   = mathSAT
 defaultSolverConfig Yices     = yices
diff --git a/Data/SBV/Control.hs b/Data/SBV/Control.hs
--- a/Data/SBV/Control.hs
+++ b/Data/SBV/Control.hs
@@ -127,28 +127,30 @@
                     -- Query the solver: Are the constraints satisfiable?
                     cs <- checkSat
                     case cs of
-                      Unk   -> error "Solver said unknown!"
-                      Unsat -> return Nothing -- no solution!
-                      Sat   -> -- Query the values:
-                               do xv <- getValue x
-                                  yv <- getValue y
+                      Unk    -> error "Solver said unknown!"
+                      DSat{} -> error "Solver said DSat!"
+                      Unsat  -> return Nothing -- no solution!
+                      Sat    -> -- Query the values:
+                                do xv <- getValue x
+                                   yv <- getValue y
 
-                                  io $ putStrLn $ "Solver returned: " ++ show (xv, yv)
+                                   io $ putStrLn $ "Solver returned: " ++ show (xv, yv)
 
-                                  -- We can now add new constraints,
-                                  -- Or perform arbitrary computations and tell
-                                  -- the solver anything we want!
-                                  constrain $ x .> literal xv + literal yv
+                                   -- We can now add new constraints,
+                                   -- Or perform arbitrary computations and tell
+                                   -- the solver anything we want!
+                                   constrain $ x .> literal xv + literal yv
 
-                                  -- call checkSat again
-                                  csNew <- checkSat
-                                  case csNew of
-                                    Unk   -> error "Solver said unknown!"
-                                    Unsat -> return Nothing
-                                    Sat   -> do xv2 <- getValue x
-                                                yv2 <- getValue y
+                                   -- call checkSat again
+                                   csNew <- checkSat
+                                   case csNew of
+                                     Unk    -> error "Solver said unknown!"
+                                     DSat{} -> error "Solver said DSat!"
+                                     Unsat  -> return Nothing
+                                     Sat    -> do xv2 <- getValue x
+                                                  yv2 <- getValue y
 
-                                                return $ Just (xv2, yv2)
+                                                  return $ Just (xv2, yv2)
 @
 
 Note the type of @test@: it returns an optional pair of integers in the 'Symbolic' monad. We turn
diff --git a/Data/SBV/Core/Concrete.hs b/Data/SBV/Core/Concrete.hs
--- a/Data/SBV/Core/Concrete.hs
+++ b/Data/SBV/Core/Concrete.hs
@@ -313,6 +313,7 @@
         -> (Float               -> Float               -> b)
         -> (Double              -> Double              -> b)
         -> (FP                  -> FP                  -> b)
+        -> (Rational            -> Rational            -> b)
         -> (Char                -> Char                -> b)
         -> (String              -> String              -> b)
         -> ([CVal]              -> [CVal]              -> b)
@@ -321,20 +322,21 @@
         -> (Either CVal CVal    -> Either CVal CVal    -> b)
         -> ((Maybe Int, String) -> (Maybe Int, String) -> b)
         -> CV                   -> CV                  -> b
-liftCV2 r i f d af c s u v m e w x y = case (cvVal x, cvVal y) of
-                                         (CAlgReal   a, CAlgReal   b) -> r  a b
-                                         (CInteger   a, CInteger   b) -> i  a b
-                                         (CFloat     a, CFloat     b) -> f  a b
-                                         (CDouble    a, CDouble    b) -> d  a b
-                                         (CFP        a, CFP        b) -> af a b
-                                         (CChar      a, CChar      b) -> c  a b
-                                         (CString    a, CString    b) -> s  a b
-                                         (CList      a, CList      b) -> u  a b
-                                         (CTuple     a, CTuple     b) -> v  a b
-                                         (CMaybe     a, CMaybe     b) -> m  a b
-                                         (CEither    a, CEither    b) -> e  a b
-                                         (CUserSort  a, CUserSort  b) -> w  a b
-                                         _                            -> error $ "SBV.liftCV2: impossible, incompatible args received: " ++ show (x, y)
+liftCV2 r i f d af ra c s u v m e w x y = case (cvVal x, cvVal y) of
+                                           (CAlgReal   a, CAlgReal   b) -> r  a b
+                                           (CInteger   a, CInteger   b) -> i  a b
+                                           (CFloat     a, CFloat     b) -> f  a b
+                                           (CDouble    a, CDouble    b) -> d  a b
+                                           (CFP        a, CFP        b) -> af a b
+                                           (CRational  a, CRational  b) -> ra a b
+                                           (CChar      a, CChar      b) -> c  a b
+                                           (CString    a, CString    b) -> s  a b
+                                           (CList      a, CList      b) -> u  a b
+                                           (CTuple     a, CTuple     b) -> v  a b
+                                           (CMaybe     a, CMaybe     b) -> m  a b
+                                           (CEither    a, CEither    b) -> e  a b
+                                           (CUserSort  a, CUserSort  b) -> w  a b
+                                           _                            -> error $ "SBV.liftCV2: impossible, incompatible args received: " ++ show (x, y)
 
 -- | Map a unary function through a 'CV'.
 mapCV :: (AlgReal             -> AlgReal)
diff --git a/Data/SBV/Core/Operations.hs b/Data/SBV/Core/Operations.hs
--- a/Data/SBV/Core/Operations.hs
+++ b/Data/SBV/Core/Operations.hs
@@ -296,7 +296,7 @@
   | isSet a && isSet b
   = svSetEqual a b
   | True
-  = liftSym2B (mkSymOpSC (eqOptBool Equal trueSV) Equal) rationalCheck (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) a b
+  = liftSym2B (mkSymOpSC (eqOptBool Equal trueSV) Equal) rationalCheck (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) a b
 
 -- | Inequality.
 svNotEqual :: SVal -> SVal -> SVal
@@ -304,7 +304,7 @@
   | isSet a && isSet b
   = svNot $ svEqual a b
   | True
-  = liftSym2B (mkSymOpSC (eqOptBool NotEqual falseSV) NotEqual) rationalCheck (/=) (/=) (/=) (/=) (/=) (/=) (/=) (/=) (/=) (/=) (/=) (/=) a b
+  = liftSym2B (mkSymOpSC (eqOptBool NotEqual falseSV) NotEqual) rationalCheck (/=) (/=) (/=) (/=) (/=) (/=) (/=) (/=) (/=) (/=) (/=) (/=) (/=) a b
 
 -- | Set equality. Note that we only do constant folding if we get both a regular or both a
 -- complement set. Otherwise we get a symbolic value even if they might be completely concrete.
@@ -351,28 +351,28 @@
 svLessThan x y
   | isConcreteMax x = svFalse
   | isConcreteMin y = svFalse
-  | True            = liftSym2B (mkSymOpSC (eqOpt falseSV) LessThan) rationalCheck (<) (<) (<) (<) (<) (<) (<) (<) (<) (<) (<) (uiLift "<" (<)) x y
+  | True            = liftSym2B (mkSymOpSC (eqOpt falseSV) LessThan) rationalCheck (<) (<) (<) (<) (<) (<) (<) (<) (<) (<) (<) (<) (uiLift "<" (<)) x y
 
 -- | Greater than.
 svGreaterThan :: SVal -> SVal -> SVal
 svGreaterThan x y
   | isConcreteMin x = svFalse
   | isConcreteMax y = svFalse
-  | True            = liftSym2B (mkSymOpSC (eqOpt falseSV) GreaterThan) rationalCheck (>) (>) (>) (>) (>) (>) (>) (>) (>) (>) (>) (uiLift ">"  (>)) x y
+  | True            = liftSym2B (mkSymOpSC (eqOpt falseSV) GreaterThan) rationalCheck (>) (>) (>) (>) (>) (>) (>) (>) (>) (>) (>) (>) (uiLift ">"  (>)) x y
 
 -- | Less than or equal to.
 svLessEq :: SVal -> SVal -> SVal
 svLessEq x y
   | isConcreteMin x = svTrue
   | isConcreteMax y = svTrue
-  | True            = liftSym2B (mkSymOpSC (eqOpt trueSV) LessEq) rationalCheck (<=) (<=) (<=) (<=) (<=) (<=) (<=) (<=) (<=) (<=) (<=) (uiLift "<=" (<=)) x y
+  | True            = liftSym2B (mkSymOpSC (eqOpt trueSV) LessEq) rationalCheck (<=) (<=) (<=) (<=) (<=) (<=) (<=) (<=) (<=) (<=) (<=) (<=) (uiLift "<=" (<=)) x y
 
 -- | Greater than or equal to.
 svGreaterEq :: SVal -> SVal -> SVal
 svGreaterEq x y
   | isConcreteMax x = svTrue
   | isConcreteMin y = svTrue
-  | True            = liftSym2B (mkSymOpSC (eqOpt trueSV) GreaterEq) rationalCheck (>=) (>=) (>=) (>=) (>=) (>=) (>=) (>=) (>=) (>=) (>=) (uiLift ">=" (>=)) x y
+  | True            = liftSym2B (mkSymOpSC (eqOpt trueSV) GreaterEq) rationalCheck (>=) (>=) (>=) (>=) (>=) (>=) (>=) (>=) (>=) (>=) (>=) (>=) (uiLift ">=" (>=)) x y
 
 -- | Bitwise and.
 svAnd :: SVal -> SVal -> SVal
@@ -1100,6 +1100,7 @@
           -> (Float               -> Float               -> Bool)
           -> (Double              -> Double              -> Bool)
           -> (FP                  -> FP                  -> Bool)
+          -> (Rational            -> Rational            -> Bool)
           -> (Char                -> Char                -> Bool)
           -> (String              -> String              -> Bool)
           -> ([CVal]              -> [CVal]              -> Bool)
@@ -1108,8 +1109,8 @@
           -> (Either CVal CVal    -> Either CVal CVal    -> Bool)
           -> ((Maybe Int, String) -> (Maybe Int, String) -> Bool)
           -> SVal                 -> SVal                -> SVal
-liftSym2B _   okCV opCR opCI opCF opCD opAF opCC opCS opCSeq opCTup opCMaybe opCEither opUI (SVal _ (Left a)) (SVal _ (Left b)) | okCV a b = svBool (liftCV2 opCR opCI opCF opCD opAF opCC opCS opCSeq opCTup opCMaybe opCEither opUI a b)
-liftSym2B opS _    _    _    _    _    _    _    _    _      _      _        _         _    a                 b                            = SVal KBool $ Right $ liftSV2 opS KBool a b
+liftSym2B _   okCV opCR opCI opCF opCD opAF opAR opCC opCS opCSeq opCTup opCMaybe opCEither opUI (SVal _ (Left a)) (SVal _ (Left b)) | okCV a b = svBool (liftCV2 opCR opCI opCF opCD opAF opAR opCC opCS opCSeq opCTup opCMaybe opCEither opUI a b)
+liftSym2B opS _    _    _    _    _    _    _    _    _    _      _      _        _         _    a                 b                            = SVal KBool $ Right $ liftSV2 opS KBool a b
 
 -- | Create a symbolic two argument operation; with shortcut optimizations
 mkSymOpSC :: (SV -> SV -> Maybe SV) -> Op -> State -> Kind -> SV -> SV -> IO SV
diff --git a/Data/SBV/Core/Symbolic.hs b/Data/SBV/Core/Symbolic.hs
--- a/Data/SBV/Core/Symbolic.hs
+++ b/Data/SBV/Core/Symbolic.hs
@@ -2056,7 +2056,9 @@
 -- | Solvers that SBV is aware of
 data Solver = ABC
             | Boolector
+            | Bitwuzla
             | CVC4
+            | CVC5
             | DReal
             | MathSAT
             | Yices
diff --git a/Data/SBV/Internals.hs b/Data/SBV/Internals.hs
--- a/Data/SBV/Internals.hs
+++ b/Data/SBV/Internals.hs
@@ -30,7 +30,7 @@
   , module Data.SBV.Core.Data
 
   -- * Operations useful for instantiating SBV type classes
-  , genLiteral, genFromCV, CV(..), genMkSymVar, genParse, showModel, SMTModel(..), liftQRem, liftDMod, registerKind
+  , genLiteral, genFromCV, CV(..), genMkSymVar, genParse, showModel, SMTModel(..), liftQRem, liftDMod, registerKind, svToSV
 
   -- * Compilation to C, extras
   , compileToC', compileToCLib'
@@ -61,7 +61,7 @@
 
 import Data.SBV.Core.Data
 import Data.SBV.Core.Model      (genLiteral, genFromCV, genMkSymVar, liftQRem, liftDMod)
-import Data.SBV.Core.Symbolic   (IStage(..), QueryContext(..), MonadQuery, addSValOptGoal, registerKind, VarContext(..))
+import Data.SBV.Core.Symbolic   (IStage(..), QueryContext(..), MonadQuery, addSValOptGoal, registerKind, VarContext(..), svToSV)
 
 import Data.SBV.Core.Floating   ( sFloatAsComparableSWord32,  sDoubleAsComparableSWord64,  sFloatingPointAsComparableSWord
                                 , sComparableSWord32AsSFloat, sComparableSWord64AsSDouble, sComparableSWordAsSFloatingPoint
diff --git a/Data/SBV/Maybe.hs b/Data/SBV/Maybe.hs
--- a/Data/SBV/Maybe.hs
+++ b/Data/SBV/Maybe.hs
@@ -10,11 +10,12 @@
 -- Symbolic option type, symbolic version of Haskell's 'Maybe' type.
 -----------------------------------------------------------------------------
 
+{-# LANGUAGE FlexibleInstances   #-}
 {-# LANGUAGE Rank2Types          #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeApplications    #-}
 
-{-# OPTIONS_GHC -Wall -Werror #-}
+{-# OPTIONS_GHC -Wall -Werror -fno-warn-orphans #-}
 
 module Data.SBV.Maybe (
   -- * Constructing optional values
@@ -22,7 +23,7 @@
   -- * Destructing optionals
   , maybe
   -- * Mapping functions
-  , map
+  , map, map2
   -- * Scrutinizing the branches of an option
   , isNothing, isJust, fromMaybe, fromJust
   ) where
@@ -33,7 +34,7 @@
 import Data.Proxy (Proxy(Proxy))
 
 import Data.SBV.Core.Data
-import Data.SBV.Core.Model () -- instances only
+import Data.SBV.Core.Model (ite)
 
 -- For doctest use only
 --
@@ -41,7 +42,7 @@
 -- >>> import Data.SBV.Core.Model
 -- >>> import Data.SBV.Provers.Prover
 
--- | The symbolic 'Nothing'
+-- | The symbolic 'Nothing'.
 --
 -- >>> sNothing :: SMaybe Integer
 -- Nothing :: SMaybe Integer
@@ -58,7 +59,7 @@
 isNothing :: SymVal a => SMaybe a -> SBool
 isNothing = maybe sTrue (const sFalse)
 
--- | Construct an @SMaybe a@ from an @SBV a@
+-- | Construct an @SMaybe a@ from an @SBV a@.
 --
 -- >>> sJust 3
 -- Just 3 :: SMaybe Integer
@@ -143,7 +144,7 @@
                     -- We're good to go:
                     return e
 
--- | Construct an @SMaybe a@ from a @Maybe (SBV a)@
+-- | Construct an @SMaybe a@ from a @Maybe (SBV a)@.
 --
 -- >>> liftMaybe (Just (3 :: SInteger))
 -- Just 3 :: SMaybe Integer
@@ -152,7 +153,7 @@
 liftMaybe :: SymVal a => Maybe (SBV a) -> SMaybe a
 liftMaybe = Prelude.maybe (literal Nothing) sJust
 
--- | Map over the 'Just' side of a 'Maybe'
+-- | Map over the 'Just' side of a 'Maybe'.
 --
 -- >>> prove $ \x -> fromJust (map (+1) (sJust x)) .== x+1
 -- Q.E.D.
@@ -165,8 +166,14 @@
     => (SBV a -> SBV b)
     -> SMaybe a
     -> SMaybe b
-map f = maybe (literal Nothing) (sJust . f)
+map f = maybe sNothing (sJust . f)
 
+-- | Map over two maybe values.
+map2 :: forall a b c. (SymVal a, SymVal b, SymVal c) => (SBV a -> SBV b -> SBV c) -> SMaybe a -> SMaybe b -> SMaybe c
+map2 op mx my = ite (isJust mx .&& isJust my)
+                    (sJust (fromJust mx `op` fromJust my))
+                    sNothing
+
 -- | Case analysis for symbolic 'Maybe's. If the value 'isNothing', return the
 -- default value; if it 'isJust', apply the function.
 --
@@ -206,3 +213,12 @@
                     -- Do we have a value?
                     noVal <- newExpr st KBool $ SBVApp (MaybeIs ka False) [mav]
                     newExpr st kb $ SBVApp Ite [noVal, br1, br2]
+
+-- | Custom 'Num' instance over 'SMaybe'
+instance {-# OVERLAPPING #-} (Ord a, SymVal a, Num a) => Num (SBV (Maybe a)) where
+  (+)         = map2 (+)
+  (-)         = map2 (-)
+  (*)         = map2 (*)
+  abs         = map  abs
+  signum      = map  signum
+  fromInteger = sJust . fromInteger
diff --git a/Data/SBV/Provers/Bitwuzla.hs b/Data/SBV/Provers/Bitwuzla.hs
new file mode 100644
--- /dev/null
+++ b/Data/SBV/Provers/Bitwuzla.hs
@@ -0,0 +1,50 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module    : Data.SBV.Provers.Bitwuzla
+-- Copyright : (c) Levent Erkok
+-- License   : BSD3
+-- Maintainer: erkokl@gmail.com
+-- Stability : experimental
+--
+-- The connection to the Bitwuzla SMT solver
+-----------------------------------------------------------------------------
+
+{-# OPTIONS_GHC -Wall -Werror #-}
+
+module Data.SBV.Provers.Bitwuzla(bitwuzla) where
+
+import Data.SBV.Core.Data
+import Data.SBV.SMT.SMT
+
+-- | The description of the Bitwuzla SMT solver
+-- The default executable is @\"bitwuzla\"@, which must be in your path. You can use the @SBV_BITWUZLA@ environment variable to point to the executable on your system.
+-- You can use the @SBV_BITWUZLA_OPTIONS@ environment variable to override the options.
+bitwuzla :: SMTSolver
+bitwuzla = SMTSolver {
+           name         = Bitwuzla
+         , executable   = "bitwuzla"
+         , preprocess   = id
+         , options      = const ["--smt2", "-m", "--output-format=smt2", "--no-exit-codes", "--incremental"]
+         , engine       = standardEngine "SBV_BITWUZLA" "SBV_BITWUZLA_OPTIONS"
+         , capabilities = SolverCapabilities {
+                                supportsQuantifiers        = False
+                              , supportsDefineFun          = True
+                              , supportsDistinct           = True
+                              , supportsBitVectors         = True
+                              , supportsUninterpretedSorts = False
+                              , supportsUnboundedInts      = False
+                              , supportsInt2bv             = False
+                              , supportsReals              = False
+                              , supportsApproxReals        = False
+                              , supportsDeltaSat           = Nothing
+                              , supportsIEEE754            = False
+                              , supportsSets               = False
+                              , supportsOptimization       = False
+                              , supportsPseudoBooleans     = False
+                              , supportsCustomQueries      = True
+                              , supportsGlobalDecls        = True
+                              , supportsDataTypes          = False
+                              , supportsDirectAccessors    = False
+                              , supportsFlattenedModels    = Nothing
+                              }
+         }
diff --git a/Data/SBV/Provers/CVC5.hs b/Data/SBV/Provers/CVC5.hs
new file mode 100644
--- /dev/null
+++ b/Data/SBV/Provers/CVC5.hs
@@ -0,0 +1,64 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module    : Data.SBV.Provers.CVC5
+-- Copyright : (c) Levent Erkok
+-- License   : BSD3
+-- Maintainer: erkokl@gmail.com
+-- Stability : experimental
+--
+-- The connection to the CVC5 SMT solver
+-----------------------------------------------------------------------------
+
+{-# LANGUAGE ScopedTypeVariables #-}
+
+{-# OPTIONS_GHC -Wall -Werror #-}
+
+module Data.SBV.Provers.CVC5(cvc5) where
+
+import Data.Char (isSpace)
+
+import Data.SBV.Core.Data
+import Data.SBV.SMT.SMT
+
+-- | The description of the CVC5 SMT solver
+-- The default executable is @\"cvc5\"@, which must be in your path. You can use the @SBV_CVC5@ environment variable to point to the executable on your system.
+-- You can use the @SBV_CVC5_OPTIONS@ environment variable to override the options.
+cvc5 :: SMTSolver
+cvc5 = SMTSolver {
+           name         = CVC5
+         , executable   = "cvc5"
+         , preprocess   = clean
+         , options      = const ["--lang", "smt", "--incremental", "--no-interactive", "--model-witness-value"]
+         , engine       = standardEngine "SBV_CVC5" "SBV_CVC5_OPTIONS"
+         , capabilities = SolverCapabilities {
+                                supportsQuantifiers        = True
+                              , supportsDefineFun          = True
+                              , supportsDistinct           = True
+                              , supportsBitVectors         = True
+                              , supportsUninterpretedSorts = True
+                              , supportsUnboundedInts      = True
+                              , supportsInt2bv             = True
+                              , supportsReals              = True  -- Not quite the same capability as Z3; but works more or less..
+                              , supportsApproxReals        = False
+                              , supportsDeltaSat           = Nothing
+                              , supportsIEEE754            = True
+                              , supportsSets               = False
+                              , supportsOptimization       = False
+                              , supportsPseudoBooleans     = False
+                              , supportsCustomQueries      = True
+                              , supportsGlobalDecls        = True
+                              , supportsDataTypes          = True
+                              , supportsDirectAccessors    = True
+                              , supportsFlattenedModels    = Nothing
+                              }
+         }
+  where -- CVC5 wants all input on one line
+        clean = map simpleSpace . noComment
+
+        noComment ""       = ""
+        noComment (';':cs) = noComment $ dropWhile (/= '\n') cs
+        noComment (c:cs)   = c : noComment cs
+
+        simpleSpace c
+          | isSpace c = ' '
+          | True      = c
diff --git a/Data/SBV/Provers/Prover.hs b/Data/SBV/Provers/Prover.hs
--- a/Data/SBV/Provers/Prover.hs
+++ b/Data/SBV/Provers/Prover.hs
@@ -31,7 +31,7 @@
        , runSMT, runSMTWith
        , SatModel(..), Modelable(..), displayModels, extractModels
        , getModelDictionaries, getModelValues, getModelUninterpretedValues
-       , abc, boolector, cvc4, dReal, mathSAT, yices, z3, defaultSMTCfg, defaultDeltaSMTCfg
+       , abc, boolector, bitwuzla, cvc4, cvc5, dReal, mathSAT, yices, z3, defaultSMTCfg, defaultDeltaSMTCfg
        ) where
 
 
@@ -71,7 +71,9 @@
 
 import qualified Data.SBV.Provers.ABC       as ABC
 import qualified Data.SBV.Provers.Boolector as Boolector
+import qualified Data.SBV.Provers.Bitwuzla  as Bitwuzla
 import qualified Data.SBV.Provers.CVC4      as CVC4
+import qualified Data.SBV.Provers.CVC5      as CVC5
 import qualified Data.SBV.Provers.DReal     as DReal
 import qualified Data.SBV.Provers.MathSAT   as MathSAT
 import qualified Data.SBV.Provers.Yices     as Yices
@@ -115,9 +117,17 @@
 boolector :: SMTConfig
 boolector = mkConfig Boolector.boolector SMTLib2 []
 
+-- | Default configuration for the Bitwuzla SMT solver
+bitwuzla :: SMTConfig
+bitwuzla = mkConfig Bitwuzla.bitwuzla SMTLib2 []
+
 -- | Default configuration for the CVC4 SMT Solver.
 cvc4 :: SMTConfig
 cvc4 = mkConfig CVC4.cvc4 SMTLib2 [allOnStdOut]
+
+-- | Default configuration for the CVC5 SMT Solver.
+cvc5 :: SMTConfig
+cvc5 = mkConfig CVC5.cvc5 SMTLib2 [allOnStdOut]
 
 -- | Default configuration for the Yices SMT Solver.
 dReal :: SMTConfig
diff --git a/Data/SBV/SMT/SMT.hs b/Data/SBV/SMT/SMT.hs
--- a/Data/SBV/SMT/SMT.hs
+++ b/Data/SBV/SMT/SMT.hs
@@ -10,6 +10,7 @@
 -----------------------------------------------------------------------------
 
 {-# LANGUAGE DefaultSignatures          #-}
+{-# LANGUAGE FlexibleInstances          #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE NamedFieldPuns             #-}
 {-# LANGUAGE OverloadedStrings          #-}
@@ -323,10 +324,20 @@
 -- | A rounding mode, extracted from a model. (Default definition suffices)
 instance SatModel RoundingMode
 
+-- | 'String' as extracted from a model
+instance {-# OVERLAPS #-} SatModel [Char] where
+  parseCVs (CV _ (CString c):r) = Just (c, r)
+  parseCVs _                    = Nothing
+
+-- | 'Char' as extracted from a model
+instance SatModel Char where
+  parseCVs (CV _ (CChar c):r) = Just (c, r)
+  parseCVs _                  = Nothing
+
 -- | A list of values as extracted from a model. When reading a list, we
 -- go as long as we can (maximal-munch). Note that this never fails, as
 -- we can always return the empty list!
-instance SatModel a => SatModel [a] where
+instance {-# OVERLAPPABLE #-} SatModel a => SatModel [a] where
   parseCVs [] = Just ([], [])
   parseCVs xs = case parseCVs xs of
                   Just (a, ys) -> case parseCVs ys of
diff --git a/Data/SBV/SMT/SMTLib2.hs b/Data/SBV/SMT/SMTLib2.hs
--- a/Data/SBV/SMT/SMTLib2.hs
+++ b/Data/SBV/SMT/SMTLib2.hs
@@ -761,11 +761,13 @@
           | fpOp = lift2 "fp.eq" sgn sbvs
           | True = lift2 "="     sgn sbvs
 
+        -- Do not use distinct on floats; because +0/-0, and NaNs mess
+        -- up the meaning. Just go with reqular equals.
         notEqual sgn sbvs
           | fpOp || not hasDistinct = liftP sbvs
           | True                    = liftN "distinct" sgn sbvs
-          where liftP [_, _] = "(not " ++ equal sgn sbvs ++ ")"
-                liftP args   = "(and " ++ unwords (walk args) ++ ")"
+          where liftP xs@[_, _] = "(not " ++ equal sgn xs ++ ")"
+                liftP args      = "(and " ++ unwords (walk args) ++ ")"
 
                 walk []     = []
                 walk (e:es) = map (\e' -> liftP [e, e']) es ++ walk es
diff --git a/Data/SBV/Set.hs b/Data/SBV/Set.hs
--- a/Data/SBV/Set.hs
+++ b/Data/SBV/Set.hs
@@ -58,6 +58,8 @@
 import Data.SBV.Core.Model    ((.==), (./=))
 import Data.SBV.Core.Symbolic (SetOp(..))
 
+import qualified Data.Generics.Uniplate.Data as G
+
 -- For doctest use only
 --
 -- $setup
@@ -116,6 +118,16 @@
 -- Q.E.D.
 complement :: forall a. (Ord a, SymVal a) => SSet a -> SSet a
 complement ss
+  | KChar `elem` G.universe k
+  = error $ unlines [ "*** Data.SBV: Set.complement is not available for the type " ++ show k
+                    , "***"
+                    , "*** See: https://github.com/LeventErkok/sbv/issues/601 for a discussion"
+                    , "*** on why SBV does not support this operation at this type."
+                    , "***"
+                    , "*** Alternative: Use sets of strings instead, though the match isn't perfect."
+                    , "*** If you run into this issue, please comment on the above ticket for"
+                    , "*** possible improvements."
+                    ]
   | Just (RegularSet rs) <- unliteral ss
   = literal $ ComplementSet rs
   | Just (ComplementSet cs) <- unliteral ss
diff --git a/Data/SBV/Utils/Lib.hs b/Data/SBV/Utils/Lib.hs
--- a/Data/SBV/Utils/Lib.hs
+++ b/Data/SBV/Utils/Lib.hs
@@ -122,8 +122,8 @@
         -- Otherwise, just proceed; hopefully we covered everything above
         go (c : rest) = c : go rest
 
--- | Given a Haskell string, convert it to SMTLib. if ord is 0x00020 to 0x0007E, then we print it
--- will completely be different!
+-- | Given a Haskell string, convert it to SMTLib. if ord is 0x00020 to 0x0007E, then we print it as is
+-- to cover the printable ASCII range.
 stringToQFS :: String -> String
 stringToQFS = concatMap cvt
   where cvt c
diff --git a/Data/SBV/Utils/Numeric.hs b/Data/SBV/Utils/Numeric.hs
--- a/Data/SBV/Utils/Numeric.hs
+++ b/Data/SBV/Utils/Numeric.hs
@@ -63,8 +63,7 @@
 
 -- | Compute the "floating-point" remainder function, the float/double value that
 -- remains from the division of @x@ and @y@. There are strict rules around 0's, Infinities,
--- and NaN's as coded below, See <http://smt-lib.org/papers/BTRW14.pdf>, towards the
--- end of section 4.c.
+-- and NaN's as coded below.
 fpRemH :: RealFloat a => a -> a -> a
 fpRemH x y
   | isInfinite x || isNaN x = 0 / 0
diff --git a/Data/SBV/Utils/SExpr.hs b/Data/SBV/Utils/SExpr.hs
--- a/Data/SBV/Utils/SExpr.hs
+++ b/Data/SBV/Utils/SExpr.hs
@@ -18,10 +18,12 @@
 import Data.Bits   (setBit, testBit)
 import Data.Char   (isDigit, ord, isSpace)
 import Data.Either (partitionEithers)
-import Data.List   (isPrefixOf)
+import Data.List   (isPrefixOf, nubBy)
 import Data.Maybe  (fromMaybe, listToMaybe)
 import Data.Word   (Word32, Word64)
 
+import Control.Monad (foldM)
+
 import Numeric    (readInt, readDec, readHex, fromRat)
 
 import Data.SBV.Core.AlgReals
@@ -37,7 +39,7 @@
            | EFloat         Float
            | EFloatingPoint FP
            | EDouble        Double
-           | EApp    [SExpr]
+           | EApp           [SExpr]
            deriving Show
 
 -- | Extremely simple minded tokenizer, good for our use model.
@@ -278,8 +280,83 @@
 parseSExprFunction :: SExpr -> Maybe (Either String ([([SExpr], SExpr)], SExpr))
 parseSExprFunction e
   | Just r <- parseLambdaExpression  e = Just (Right r)
+  | Just r <- parseSetLambda         e = Just (Right r)
   | Just r <- parseStoreAssociations e = Just r
   | True                               = Nothing         -- out-of luck. NB. This is where we would add support for other solvers!
+
+-- | Parse a set-lambda expression, which is literally a lambda function, that might look like this:
+--        (lambda ((x!1 String))
+--          (or (not (or (= x!1 "o") (= x!1 "l") (= x!1 "e") (= x!1 "h")))
+--              (= x!1 "o")
+--              (= x!1 "l")
+--              (= x!1 "e")
+--              (= x!1 "h")))
+--   For this, we do a little bit of an interpretative dance to see if we can "construct" the necesary expression.
+--
+--   In parsed form:
+--      EApp [ECon "lambda",EApp [EApp [ECon "x!1",ECon "String"]],EApp [ECon "not",EApp [ECon "or",EApp [ECon "=",ECon "x!1",ECon "\"e\""],EApp [ECon "=",ECon "x!1",ECon "\"l\""]]]]
+--
+--   This is by no means comprehensive, and is quite crude, but hopefully covers the cases we see in practice.
+parseSetLambda :: SExpr -> Maybe ([([SExpr], SExpr)], SExpr)
+parseSetLambda funExpr = case funExpr of
+                               EApp [l@(ECon "lambda"), bv@(EApp [EApp [ECon _, _]]), body] -> go (\bd -> EApp [l, bv, bd]) body
+                               _                                                            -> Nothing
+  where go mkLambda = build
+         where build (EApp [ECon "not",  rest      ]) =         neg =<<      build rest
+               build (EApp (ECon "or"  : rest@(_:_))) = foldM1 disj =<< mapM build rest
+               build (EApp (ECon "and" : rest@(_:_))) = foldM1 conj =<< mapM build rest
+               build other                            = parseLambdaExpression (mkLambda other)
+
+        -- We're guaranteed by above construction that foldM1 will never take an empty list (due to rest@(_:_) pattern match.)
+        foldM1 _ []     = error "Data.SBV.parseSetLambda: Impossible happened; empty arg to foldM1"
+        foldM1 f (x:xs) = foldM f x xs
+
+        checkBool (ENum (1, Nothing)) = True
+        checkBool (ENum (0, Nothing)) = True
+        checkBool _                   = False
+
+        negBool (ENum (1, Nothing)) = ENum (0, Nothing)
+        negBool _                   = ENum (1, Nothing)
+
+        orBool t@(ENum (1, Nothing)) _                      = t
+        orBool _                     t@(ENum (1, Nothing))  = t
+        orBool _ _                                          = ENum (0, Nothing)
+
+        andBool f@(ENum (0, Nothing)) _                     = f
+        andBool _                     f@(ENum (0, Nothing)) = f
+        andBool _ _                                         = ENum (1, Nothing)
+
+        neg :: ([([SExpr], SExpr)], SExpr) -> Maybe ([([SExpr], SExpr)], SExpr)
+        neg (rows, dflt)
+         | all checkBool (dflt : map snd rows) = Just ([(e, negBool r) | (e, r) <- rows], negBool dflt)
+         | True                                = Nothing
+
+        disj, conj :: ([([SExpr], SExpr)], SExpr) -> ([([SExpr], SExpr)], SExpr) -> Maybe ([([SExpr], SExpr)], SExpr)
+        disj = bin orBool
+        conj = bin andBool
+
+        bin f rd1@(rows1, dflt1) rd2@(rows2, dflt2)
+          | all checkBool (dflt1 : dflt2 : map snd rows1 ++ map snd rows2) = Just (combine f rd1 rd2)
+          | True                                                           = Nothing
+
+        -- Since we don't have equality over SExprs (can of worms!), we use "show" equality here. The ice is thin, but it works!
+        combine f (rows1, dflt1) (rows2, dflt2) = (rows, f dflt1 dflt2)
+          where rows = map calc $ nubBy (\x y -> show x == show y) (map fst rows1 ++ map fst rows2)
+
+                calc :: [SExpr] -> ([SExpr], SExpr)
+                calc args = (args, f (find rows1 dflt1 args) (find rows2 dflt2 args))
+
+                find rs d a = case [r | (v, r) <- rs, show v == show a] of
+                               []  -> d
+                               [x] -> x
+                               x   -> error $ unlines [ "Data.SBV.parseSetLambda: Impossible happened while combining rows."
+                                                      , "   First row  :"   ++ show rows1
+                                                      , "   First dflt :"  ++ show dflt1
+                                                      , "   Second row :"  ++ show rows2
+                                                      , "   Second dflt:" ++ show dflt2
+                                                      , "   Looking for: " ++ show a
+                                                      , "Multiple matches found: " ++ show x
+                                                      ]
 
 -- | Parse a lambda expression, most likely z3 specific. There's some guess work
 -- involved here regarding how z3 produces lambda-expressions; while we try to
diff --git a/INSTALL b/INSTALL
--- a/INSTALL
+++ b/INSTALL
@@ -4,7 +4,7 @@
      cabal install sbv
 
 SBV relies on an external SMT solver to be installed. We currently support
-ABC, Boolector, CVC4, MathSAT, Yices, and Z3. We recommend installing the
+ABC, Boolector, Bitwuzla, CVC4, CVC5, MathSAT, Yices, and Z3. We recommend installing the
 freely available z3 SMT solver from Microsoft, the default solver used
 by SBV. You can get it from <http://github.com/Z3Prover/z3>.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,16 +1,7 @@
 ## SBV: SMT Based Verification in Haskell
 
+[![Build Status](https://github.com/LeventErkok/sbv/actions/workflows/haskell-ci.yml/badge.svg)](https://github.com/LeventErkok/sbv/actions/workflows/haskell-ci.yml)
+
 On Hackage: http://hackage.haskell.org/package/sbv
 
 Please see: http://leventerkok.github.io/sbv/
-
-### Build Status
-
- - Travis (Linux/Mac):
-     - [![Build Status](https://travis-ci.com/LeventErkok/sbv.svg?branch=master)](https://travis-ci.com/LeventErkok/sbv)
-
- - Appveyor (Windows):
-     - [![Build5][2]][1]
-
-[1]: https://ci.appveyor.com/project/LeventErkok/sbv
-[2]: https://ci.appveyor.com/api/projects/status/github/LeventErkok/sbv?svg=true
diff --git a/SBVTestSuite/GoldFiles/pareto1.gold b/SBVTestSuite/GoldFiles/pareto1.gold
--- a/SBVTestSuite/GoldFiles/pareto1.gold
+++ b/SBVTestSuite/GoldFiles/pareto1.gold
@@ -5,101 +5,101 @@
   max_x_plus_y = 2 :: Integer
   min_y        = 1 :: Integer
 Pareto front #2: Optimal model:
-  x            = 0 :: Integer
-  y            = 3 :: Integer
-  min_x        = 0 :: Integer
+  x            = 3 :: Integer
+  y            = 0 :: Integer
+  min_x        = 3 :: Integer
   max_x_plus_y = 3 :: Integer
-  min_y        = 3 :: Integer
+  min_y        = 0 :: Integer
 Pareto front #3: Optimal model:
-  x            = 0 :: Integer
-  y            = 4 :: Integer
-  min_x        = 0 :: Integer
+  x            = 4 :: Integer
+  y            = 0 :: Integer
+  min_x        = 4 :: Integer
   max_x_plus_y = 4 :: Integer
-  min_y        = 4 :: Integer
+  min_y        = 0 :: Integer
 Pareto front #4: Optimal model:
-  x            = 2 :: Integer
-  y            = 4 :: Integer
-  min_x        = 2 :: Integer
-  max_x_plus_y = 6 :: Integer
-  min_y        = 4 :: Integer
+  x            = 3 :: Integer
+  y            = 2 :: Integer
+  min_x        = 3 :: Integer
+  max_x_plus_y = 5 :: Integer
+  min_y        = 2 :: Integer
 Pareto front #5: Optimal model:
   x            = 1 :: Integer
-  y            = 4 :: Integer
+  y            = 3 :: Integer
   min_x        = 1 :: Integer
-  max_x_plus_y = 5 :: Integer
-  min_y        = 4 :: Integer
+  max_x_plus_y = 4 :: Integer
+  min_y        = 3 :: Integer
 Pareto front #6: Optimal model:
-  x            = 3 :: Integer
+  x            = 0 :: Integer
   y            = 4 :: Integer
-  min_x        = 3 :: Integer
-  max_x_plus_y = 7 :: Integer
+  min_x        = 0 :: Integer
+  max_x_plus_y = 4 :: Integer
   min_y        = 4 :: Integer
 Pareto front #7: Optimal model:
-  x            = 4 :: Integer
-  y            = 4 :: Integer
-  min_x        = 4 :: Integer
-  max_x_plus_y = 8 :: Integer
-  min_y        = 4 :: Integer
+  x            = 0 :: Integer
+  y            = 3 :: Integer
+  min_x        = 0 :: Integer
+  max_x_plus_y = 3 :: Integer
+  min_y        = 3 :: Integer
 Pareto front #8: Optimal model:
-  x            = 5 :: Integer
-  y            = 4 :: Integer
-  min_x        = 5 :: Integer
-  max_x_plus_y = 9 :: Integer
-  min_y        = 4 :: Integer
+  x            = 0 :: Integer
+  y            = 2 :: Integer
+  min_x        = 0 :: Integer
+  max_x_plus_y = 2 :: Integer
+  min_y        = 2 :: Integer
 Pareto front #9: Optimal model:
+  x            = 1 :: Integer
+  y            = 2 :: Integer
+  min_x        = 1 :: Integer
+  max_x_plus_y = 3 :: Integer
+  min_y        = 2 :: Integer
+Pareto front #10: Optimal model:
   x            = 2 :: Integer
-  y            = 3 :: Integer
+  y            = 1 :: Integer
   min_x        = 2 :: Integer
-  max_x_plus_y = 5 :: Integer
-  min_y        = 3 :: Integer
-Pareto front #10: Optimal model:
+  max_x_plus_y = 3 :: Integer
+  min_y        = 1 :: Integer
+Pareto front #11: Optimal model:
   x            = 3 :: Integer
-  y            = 3 :: Integer
+  y            = 1 :: Integer
   min_x        = 3 :: Integer
-  max_x_plus_y = 6 :: Integer
-  min_y        = 3 :: Integer
-Pareto front #11: Optimal model:
-  x            = 4 :: Integer
-  y            = 2 :: Integer
-  min_x        = 4 :: Integer
-  max_x_plus_y = 6 :: Integer
-  min_y        = 2 :: Integer
+  max_x_plus_y = 4 :: Integer
+  min_y        = 1 :: Integer
 Pareto front #12: Optimal model:
-  x            = 5 :: Integer
-  y            = 2 :: Integer
-  min_x        = 5 :: Integer
-  max_x_plus_y = 7 :: Integer
-  min_y        = 2 :: Integer
-Pareto front #13: Optimal model:
   x            = 4 :: Integer
-  y            = 3 :: Integer
+  y            = 1 :: Integer
   min_x        = 4 :: Integer
-  max_x_plus_y = 7 :: Integer
-  min_y        = 3 :: Integer
-Pareto front #14: Optimal model:
+  max_x_plus_y = 5 :: Integer
+  min_y        = 1 :: Integer
+Pareto front #13: Optimal model:
   x            = 5 :: Integer
   y            = 1 :: Integer
   min_x        = 5 :: Integer
   max_x_plus_y = 6 :: Integer
   min_y        = 1 :: Integer
-Pareto front #15: Optimal model:
+Pareto front #14: Optimal model:
   x            = 5 :: Integer
-  y            = 3 :: Integer
+  y            = 0 :: Integer
   min_x        = 5 :: Integer
-  max_x_plus_y = 8 :: Integer
-  min_y        = 3 :: Integer
-Pareto front #16: Optimal model:
-  x            = 0 :: Integer
+  max_x_plus_y = 5 :: Integer
+  min_y        = 0 :: Integer
+Pareto front #15: Optimal model:
+  x            = 2 :: Integer
   y            = 0 :: Integer
-  min_x        = 0 :: Integer
-  max_x_plus_y = 0 :: Integer
+  min_x        = 2 :: Integer
+  max_x_plus_y = 2 :: Integer
   min_y        = 0 :: Integer
-Pareto front #17: Optimal model:
+Pareto front #16: Optimal model:
   x            = 1 :: Integer
   y            = 0 :: Integer
   min_x        = 1 :: Integer
   max_x_plus_y = 1 :: Integer
   min_y        = 0 :: Integer
+Pareto front #17: Optimal model:
+  x            = 0 :: Integer
+  y            = 0 :: Integer
+  min_x        = 0 :: Integer
+  max_x_plus_y = 0 :: Integer
+  min_y        = 0 :: Integer
 Pareto front #18: Optimal model:
   x            = 0 :: Integer
   y            = 1 :: Integer
@@ -107,74 +107,74 @@
   max_x_plus_y = 1 :: Integer
   min_y        = 1 :: Integer
 Pareto front #19: Optimal model:
-  x            = 0 :: Integer
-  y            = 2 :: Integer
-  min_x        = 0 :: Integer
-  max_x_plus_y = 2 :: Integer
-  min_y        = 2 :: Integer
+  x            = 3 :: Integer
+  y            = 3 :: Integer
+  min_x        = 3 :: Integer
+  max_x_plus_y = 6 :: Integer
+  min_y        = 3 :: Integer
 Pareto front #20: Optimal model:
-  x            = 1 :: Integer
+  x            = 4 :: Integer
   y            = 2 :: Integer
-  min_x        = 1 :: Integer
-  max_x_plus_y = 3 :: Integer
+  min_x        = 4 :: Integer
+  max_x_plus_y = 6 :: Integer
   min_y        = 2 :: Integer
 Pareto front #21: Optimal model:
-  x            = 3 :: Integer
-  y            = 0 :: Integer
-  min_x        = 3 :: Integer
-  max_x_plus_y = 3 :: Integer
-  min_y        = 0 :: Integer
+  x            = 4 :: Integer
+  y            = 3 :: Integer
+  min_x        = 4 :: Integer
+  max_x_plus_y = 7 :: Integer
+  min_y        = 3 :: Integer
 Pareto front #22: Optimal model:
   x            = 4 :: Integer
-  y            = 0 :: Integer
+  y            = 4 :: Integer
   min_x        = 4 :: Integer
-  max_x_plus_y = 4 :: Integer
-  min_y        = 0 :: Integer
+  max_x_plus_y = 8 :: Integer
+  min_y        = 4 :: Integer
 Pareto front #23: Optimal model:
   x            = 3 :: Integer
-  y            = 1 :: Integer
+  y            = 4 :: Integer
   min_x        = 3 :: Integer
-  max_x_plus_y = 4 :: Integer
-  min_y        = 1 :: Integer
+  max_x_plus_y = 7 :: Integer
+  min_y        = 4 :: Integer
 Pareto front #24: Optimal model:
-  x            = 4 :: Integer
-  y            = 1 :: Integer
-  min_x        = 4 :: Integer
-  max_x_plus_y = 5 :: Integer
-  min_y        = 1 :: Integer
+  x            = 5 :: Integer
+  y            = 3 :: Integer
+  min_x        = 5 :: Integer
+  max_x_plus_y = 8 :: Integer
+  min_y        = 3 :: Integer
 Pareto front #25: Optimal model:
-  x            = 2 :: Integer
-  y            = 1 :: Integer
-  min_x        = 2 :: Integer
-  max_x_plus_y = 3 :: Integer
-  min_y        = 1 :: Integer
+  x            = 5 :: Integer
+  y            = 4 :: Integer
+  min_x        = 5 :: Integer
+  max_x_plus_y = 9 :: Integer
+  min_y        = 4 :: Integer
 Pareto front #26: Optimal model:
+  x            = 5 :: Integer
+  y            = 2 :: Integer
+  min_x        = 5 :: Integer
+  max_x_plus_y = 7 :: Integer
+  min_y        = 2 :: Integer
+Pareto front #27: Optimal model:
   x            = 2 :: Integer
   y            = 2 :: Integer
   min_x        = 2 :: Integer
   max_x_plus_y = 4 :: Integer
   min_y        = 2 :: Integer
-Pareto front #27: Optimal model:
+Pareto front #28: Optimal model:
   x            = 2 :: Integer
-  y            = 0 :: Integer
+  y            = 3 :: Integer
   min_x        = 2 :: Integer
-  max_x_plus_y = 2 :: Integer
-  min_y        = 0 :: Integer
-Pareto front #28: Optimal model:
-  x            = 5 :: Integer
-  y            = 0 :: Integer
-  min_x        = 5 :: Integer
   max_x_plus_y = 5 :: Integer
-  min_y        = 0 :: Integer
+  min_y        = 3 :: Integer
 Pareto front #29: Optimal model:
   x            = 1 :: Integer
-  y            = 3 :: Integer
+  y            = 4 :: Integer
   min_x        = 1 :: Integer
-  max_x_plus_y = 4 :: Integer
-  min_y        = 3 :: Integer
-Pareto front #30: Optimal model:
-  x            = 3 :: Integer
-  y            = 2 :: Integer
-  min_x        = 3 :: Integer
   max_x_plus_y = 5 :: Integer
-  min_y        = 2 :: Integer
+  min_y        = 4 :: Integer
+Pareto front #30: Optimal model:
+  x            = 2 :: Integer
+  y            = 4 :: Integer
+  min_x        = 2 :: Integer
+  max_x_plus_y = 6 :: Integer
+  min_y        = 4 :: Integer
diff --git a/SBVTestSuite/GoldFiles/pareto2.gold b/SBVTestSuite/GoldFiles/pareto2.gold
--- a/SBVTestSuite/GoldFiles/pareto2.gold
+++ b/SBVTestSuite/GoldFiles/pareto2.gold
@@ -1,182 +1,182 @@
 Pareto front #1: Optimal model:
-  x            = 0 :: Integer
-  y            = 1 :: Integer
-  min_x        = 0 :: Integer
-  max_y        = 1 :: Integer
-  max_x_plus_y = 1 :: Integer
-Pareto front #2: Optimal model:
-  x            = 0 :: Integer
-  y            = 2 :: Integer
-  min_x        = 0 :: Integer
-  max_y        = 2 :: Integer
-  max_x_plus_y = 2 :: Integer
-Pareto front #3: Optimal model:
-  x            = 0 :: Integer
-  y            = 3 :: Integer
-  min_x        = 0 :: Integer
-  max_y        = 3 :: Integer
-  max_x_plus_y = 3 :: Integer
-Pareto front #4: Optimal model:
-  x            = 0 :: Integer
-  y            = 5 :: Integer
-  min_x        = 0 :: Integer
-  max_y        = 5 :: Integer
-  max_x_plus_y = 5 :: Integer
-Pareto front #5: Optimal model:
-  x            = 0 :: Integer
-  y            = 6 :: Integer
-  min_x        = 0 :: Integer
-  max_y        = 6 :: Integer
-  max_x_plus_y = 6 :: Integer
-Pareto front #6: Optimal model:
-  x            = 0 :: Integer
-  y            = 7 :: Integer
-  min_x        = 0 :: Integer
-  max_y        = 7 :: Integer
-  max_x_plus_y = 7 :: Integer
-Pareto front #7: Optimal model:
-  x            = 0 :: Integer
-  y            = 9 :: Integer
-  min_x        = 0 :: Integer
-  max_y        = 9 :: Integer
-  max_x_plus_y = 9 :: Integer
-Pareto front #8: Optimal model:
-  x            = 0 :: Integer
-  y            = 8 :: Integer
-  min_x        = 0 :: Integer
-  max_y        = 8 :: Integer
-  max_x_plus_y = 8 :: Integer
-Pareto front #9: Optimal model:
   x            =  0 :: Integer
-  y            = 11 :: Integer
+  y            = -1 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 11 :: Integer
-  max_x_plus_y = 11 :: Integer
-Pareto front #10: Optimal model:
+  max_y        = -1 :: Integer
+  max_x_plus_y = -1 :: Integer
+Pareto front #2: Optimal model:
   x            =  0 :: Integer
-  y            = 13 :: Integer
+  y            = -2 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 13 :: Integer
-  max_x_plus_y = 13 :: Integer
-Pareto front #11: Optimal model:
+  max_y        = -2 :: Integer
+  max_x_plus_y = -2 :: Integer
+Pareto front #3: Optimal model:
   x            =  0 :: Integer
-  y            = 14 :: Integer
+  y            = -3 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 14 :: Integer
-  max_x_plus_y = 14 :: Integer
-Pareto front #12: Optimal model:
+  max_y        = -3 :: Integer
+  max_x_plus_y = -3 :: Integer
+Pareto front #4: Optimal model:
   x            =  0 :: Integer
-  y            = 15 :: Integer
+  y            = -4 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 15 :: Integer
-  max_x_plus_y = 15 :: Integer
-Pareto front #13: Optimal model:
+  max_y        = -4 :: Integer
+  max_x_plus_y = -4 :: Integer
+Pareto front #5: Optimal model:
   x            =  0 :: Integer
-  y            = 17 :: Integer
+  y            = -5 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 17 :: Integer
-  max_x_plus_y = 17 :: Integer
-Pareto front #14: Optimal model:
+  max_y        = -5 :: Integer
+  max_x_plus_y = -5 :: Integer
+Pareto front #6: Optimal model:
   x            =  0 :: Integer
-  y            = 19 :: Integer
+  y            = -6 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 19 :: Integer
-  max_x_plus_y = 19 :: Integer
-Pareto front #15: Optimal model:
+  max_y        = -6 :: Integer
+  max_x_plus_y = -6 :: Integer
+Pareto front #7: Optimal model:
   x            =  0 :: Integer
-  y            = 21 :: Integer
+  y            = -7 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 21 :: Integer
-  max_x_plus_y = 21 :: Integer
-Pareto front #16: Optimal model:
+  max_y        = -7 :: Integer
+  max_x_plus_y = -7 :: Integer
+Pareto front #8: Optimal model:
   x            =  0 :: Integer
-  y            = 23 :: Integer
+  y            = -8 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 23 :: Integer
-  max_x_plus_y = 23 :: Integer
-Pareto front #17: Optimal model:
+  max_y        = -8 :: Integer
+  max_x_plus_y = -8 :: Integer
+Pareto front #9: Optimal model:
   x            =  0 :: Integer
-  y            = 25 :: Integer
+  y            = -9 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 25 :: Integer
-  max_x_plus_y = 25 :: Integer
+  max_y        = -9 :: Integer
+  max_x_plus_y = -9 :: Integer
+Pareto front #10: Optimal model:
+  x            =   0 :: Integer
+  y            = -10 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -10 :: Integer
+  max_x_plus_y = -10 :: Integer
+Pareto front #11: Optimal model:
+  x            =   0 :: Integer
+  y            = -11 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -11 :: Integer
+  max_x_plus_y = -11 :: Integer
+Pareto front #12: Optimal model:
+  x            =   0 :: Integer
+  y            = -12 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -12 :: Integer
+  max_x_plus_y = -12 :: Integer
+Pareto front #13: Optimal model:
+  x            =   0 :: Integer
+  y            = -13 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -13 :: Integer
+  max_x_plus_y = -13 :: Integer
+Pareto front #14: Optimal model:
+  x            =   0 :: Integer
+  y            = -14 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -14 :: Integer
+  max_x_plus_y = -14 :: Integer
+Pareto front #15: Optimal model:
+  x            =   0 :: Integer
+  y            = -15 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -15 :: Integer
+  max_x_plus_y = -15 :: Integer
+Pareto front #16: Optimal model:
+  x            =   0 :: Integer
+  y            = -16 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -16 :: Integer
+  max_x_plus_y = -16 :: Integer
+Pareto front #17: Optimal model:
+  x            =   0 :: Integer
+  y            = -17 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -17 :: Integer
+  max_x_plus_y = -17 :: Integer
 Pareto front #18: Optimal model:
-  x            =  0 :: Integer
-  y            = 27 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 27 :: Integer
-  max_x_plus_y = 27 :: Integer
+  x            =   0 :: Integer
+  y            = -18 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -18 :: Integer
+  max_x_plus_y = -18 :: Integer
 Pareto front #19: Optimal model:
-  x            =  0 :: Integer
-  y            = 28 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 28 :: Integer
-  max_x_plus_y = 28 :: Integer
+  x            =   0 :: Integer
+  y            = -19 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -19 :: Integer
+  max_x_plus_y = -19 :: Integer
 Pareto front #20: Optimal model:
-  x            =  0 :: Integer
-  y            = 29 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 29 :: Integer
-  max_x_plus_y = 29 :: Integer
+  x            =   0 :: Integer
+  y            = -20 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -20 :: Integer
+  max_x_plus_y = -20 :: Integer
 Pareto front #21: Optimal model:
-  x            =  0 :: Integer
-  y            = 31 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 31 :: Integer
-  max_x_plus_y = 31 :: Integer
+  x            =   0 :: Integer
+  y            = -21 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -21 :: Integer
+  max_x_plus_y = -21 :: Integer
 Pareto front #22: Optimal model:
-  x            =  0 :: Integer
-  y            = 33 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 33 :: Integer
-  max_x_plus_y = 33 :: Integer
+  x            =   0 :: Integer
+  y            = -22 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -22 :: Integer
+  max_x_plus_y = -22 :: Integer
 Pareto front #23: Optimal model:
-  x            =  0 :: Integer
-  y            = 35 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 35 :: Integer
-  max_x_plus_y = 35 :: Integer
+  x            =   0 :: Integer
+  y            = -23 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -23 :: Integer
+  max_x_plus_y = -23 :: Integer
 Pareto front #24: Optimal model:
-  x            =  0 :: Integer
-  y            = 37 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 37 :: Integer
-  max_x_plus_y = 37 :: Integer
+  x            =   0 :: Integer
+  y            = -24 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -24 :: Integer
+  max_x_plus_y = -24 :: Integer
 Pareto front #25: Optimal model:
-  x            =  0 :: Integer
-  y            = 39 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 39 :: Integer
-  max_x_plus_y = 39 :: Integer
+  x            =   0 :: Integer
+  y            = -25 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -25 :: Integer
+  max_x_plus_y = -25 :: Integer
 Pareto front #26: Optimal model:
-  x            =  0 :: Integer
-  y            = 40 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 40 :: Integer
-  max_x_plus_y = 40 :: Integer
+  x            =   0 :: Integer
+  y            = -26 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -26 :: Integer
+  max_x_plus_y = -26 :: Integer
 Pareto front #27: Optimal model:
-  x            =  0 :: Integer
-  y            = 42 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 42 :: Integer
-  max_x_plus_y = 42 :: Integer
+  x            =   0 :: Integer
+  y            = -27 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -27 :: Integer
+  max_x_plus_y = -27 :: Integer
 Pareto front #28: Optimal model:
-  x            = 0 :: Integer
-  y            = 0 :: Integer
-  min_x        = 0 :: Integer
-  max_y        = 0 :: Integer
-  max_x_plus_y = 0 :: Integer
+  x            =   0 :: Integer
+  y            = -28 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -28 :: Integer
+  max_x_plus_y = -28 :: Integer
 Pareto front #29: Optimal model:
-  x            =  0 :: Integer
-  y            = -2 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = -2 :: Integer
-  max_x_plus_y = -2 :: Integer
+  x            =   0 :: Integer
+  y            = -29 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -29 :: Integer
+  max_x_plus_y = -29 :: Integer
 Pareto front #30: Optimal model:
-  x            =  0 :: Integer
-  y            = -4 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = -4 :: Integer
-  max_x_plus_y = -4 :: Integer
+  x            =   0 :: Integer
+  y            = -30 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -30 :: Integer
+  max_x_plus_y = -30 :: Integer
 *** Note: Pareto-front extraction was terminated as requested by the user.
 ***       There might be many other results!
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_forallforall_satisfiable_p.gold b/SBVTestSuite/GoldFiles/quantified_prove_forallforall_satisfiable_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_forallforall_satisfiable_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_forallforall_satisfiable_p.gold
@@ -32,8 +32,8 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 #x50))
+[RECV] ((s0 #xfe))
 [SEND] (get-value (s1))
-[RECV] ((s1 #x0f))
+[RECV] ((s1 #x01))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_existsexists_satisfiable_c.gold b/SBVTestSuite/GoldFiles/quantified_sat_existsexists_satisfiable_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_existsexists_satisfiable_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_existsexists_satisfiable_c.gold
@@ -32,8 +32,8 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 #x01))
+[RECV] ((s0 #x02))
 [SEND] (get-value (s1))
-[RECV] ((s1 #x00))
+[RECV] ((s1 #x01))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_existsexists_satisfiable_p.gold b/SBVTestSuite/GoldFiles/quantified_sat_existsexists_satisfiable_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_existsexists_satisfiable_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_existsexists_satisfiable_p.gold
@@ -32,8 +32,8 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 #x01))
+[RECV] ((s0 #x02))
 [SEND] (get-value (s1))
-[RECV] ((s1 #x00))
+[RECV] ((s1 #x01))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
diff --git a/SBVTestSuite/GoldFiles/query1.gold b/SBVTestSuite/GoldFiles/query1.gold
--- a/SBVTestSuite/GoldFiles/query1.gold
+++ b/SBVTestSuite/GoldFiles/query1.gold
@@ -153,19 +153,19 @@
 [SEND] (get-proof)
 [RECV] ((set-logic ALL)
        (proof
-       (let (($x221 (<= s0 6)))
-        (let (($x225 (not $x221)))
-        (let (($x232 (or (not bey) $x225)))
-        (let ((@x230 (monotonicity (rewrite (= (> s0 6) $x225)) (= (=> bey (> s0 6)) (=> bey $x225)))))
-        (let ((@x236 (trans @x230 (rewrite (= (=> bey $x225) $x232)) (= (=> bey (> s0 6)) $x232))))
-        (let ((@x237 (mp (asserted (=> bey (> s0 6))) @x236 $x232)))
-        (let (($x249 (>= s0 6)))
-        (let (($x248 (not $x249)))
-        (let (($x256 (or (not hey) $x248)))
-        (let ((@x247 (trans (rewrite (= (< s0 6) (not (<= 6 s0)))) (rewrite (= (not (<= 6 s0)) $x248)) (= (< s0 6) $x248))))
-        (let ((@x260 (trans (monotonicity @x247 (= (=> hey (< s0 6)) (=> hey $x248))) (rewrite (= (=> hey $x248) $x256)) (= (=> hey (< s0 6)) $x256))))
-        (let ((@x261 (mp (asserted (=> hey (< s0 6))) @x260 $x256)))
-        (unit-resolution ((_ th-lemma arith farkas 1 1) (or $x249 $x221)) (unit-resolution @x261 (asserted hey) $x248) (unit-resolution @x237 (asserted bey) $x225) false)))))))))))))))
+       (let (($x265 (<= s0 6)))
+        (let (($x269 (not $x265)))
+        (let (($x276 (or (not bey) $x269)))
+        (let ((@x274 (monotonicity (rewrite (= (> s0 6) $x269)) (= (=> bey (> s0 6)) (=> bey $x269)))))
+        (let ((@x280 (trans @x274 (rewrite (= (=> bey $x269) $x276)) (= (=> bey (> s0 6)) $x276))))
+        (let ((@x281 (mp (asserted (=> bey (> s0 6))) @x280 $x276)))
+        (let (($x293 (>= s0 6)))
+        (let (($x292 (not $x293)))
+        (let (($x300 (or (not hey) $x292)))
+        (let ((@x291 (trans (rewrite (= (< s0 6) (not (<= 6 s0)))) (rewrite (= (not (<= 6 s0)) $x292)) (= (< s0 6) $x292))))
+        (let ((@x304 (trans (monotonicity @x291 (= (=> hey (< s0 6)) (=> hey $x292))) (rewrite (= (=> hey $x292) $x300)) (= (=> hey (< s0 6)) $x300))))
+        (let ((@x305 (mp (asserted (=> hey (< s0 6))) @x304 $x300)))
+        (unit-resolution ((_ th-lemma arith farkas 1 1) (or $x293 $x265)) (unit-resolution @x305 (asserted hey) $x292) (unit-resolution @x281 (asserted bey) $x269) false)))))))))))))))
 [SEND, TimeOut: 90000ms] (get-assertions)
 
 [RECV] ((! s7 :named |a > 0|)
diff --git a/SBVTestSuite/GoldFiles/queryArrays1.gold b/SBVTestSuite/GoldFiles/queryArrays1.gold
--- a/SBVTestSuite/GoldFiles/queryArrays1.gold
+++ b/SBVTestSuite/GoldFiles/queryArrays1.gold
@@ -40,7 +40,7 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 #x01))
+[RECV] ((s0 #xff))
 [SEND] (get-value (s1))
 [RECV] ((s1 #x00))
 [SEND] (get-value (s3))
@@ -48,5 +48,5 @@
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 
- FINAL:(1,0,0)
+ FINAL:(255,0,0)
 DONE!
diff --git a/SBVTestSuite/GoldFiles/queryArrays4.gold b/SBVTestSuite/GoldFiles/queryArrays4.gold
--- a/SBVTestSuite/GoldFiles/queryArrays4.gold
+++ b/SBVTestSuite/GoldFiles/queryArrays4.gold
@@ -550,9 +550,11 @@
 [GOOD] (define-fun s260 () (_ BitVec 8) (table0 s1))
 [GOOD] (define-fun s261 () Bool (= s1 s260))
 [GOOD] (assert s261)
-[GOOD] (define-fun s262 () (_ BitVec 8) (bvadd s0 s3))
-[GOOD] (define-fun s263 () Bool (= s1 s262))
-[GOOD] (assert s263)
+[GOOD] (define-fun s262 () Bool (= s0 s2))
+[GOOD] (assert s262)
+[GOOD] (define-fun s263 () (_ BitVec 8) (bvadd s0 s3))
+[GOOD] (define-fun s264 () Bool (= s1 s263))
+[GOOD] (assert s264)
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s1))
diff --git a/SBVTestSuite/GoldFiles/query_Interpolant4.gold b/SBVTestSuite/GoldFiles/query_Interpolant4.gold
--- a/SBVTestSuite/GoldFiles/query_Interpolant4.gold
+++ b/SBVTestSuite/GoldFiles/query_Interpolant4.gold
@@ -40,12 +40,9 @@
 [GOOD] (define-fun s12 () Bool (distinct s10 s11))
 [GOOD] (define-fun s13 () Bool (and s9 s12))
 [SEND] (get-interpolant s8 s13)
-[RECV] (or (and (= s1 s2) (= s1 s3))
-           (<= (+ (* (- 1) s1) s0) (- 1))
-           (<= (+ s1 (* (- 1) s0)) (- 1))
-           (= s2 s3))
+[RECV] (or (<= (+ (* (- 1) s1) s0) (- 1)) (<= (+ s1 (* (- 1) s0)) (- 1)) (= s2 s3))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 
 FINAL OUTPUT:
-"(or (and (= s1 s2) (= s1 s3)) (<= (+ (* (- 1) s1) s0) (- 1)) (<= (+ s1 (* (- 1) s0)) (- 1)) (= s2 s3))"
+"(or (<= (+ (* (- 1) s1) s0) (- 1)) (<= (+ s1 (* (- 1) s0)) (- 1)) (= s2 s3))"
diff --git a/SBVTestSuite/GoldFiles/query_badOption.gold b/SBVTestSuite/GoldFiles/query_badOption.gold
--- a/SBVTestSuite/GoldFiles/query_badOption.gold
+++ b/SBVTestSuite/GoldFiles/query_badOption.gold
@@ -17,6 +17,7 @@
 ***                  debug_ref_count (bool) (default: false)
 ***                  dot_proof_file (string) (default: proof.dot)
 ***                  dump_models (bool) (default: false)
+***                  encoding (string) (default: unicode)
 ***                  memory_high_watermark (unsigned int) (default: 0)
 ***                  memory_max_alloc_count (unsigned int) (default: 0)
 ***                  memory_max_size (unsigned int) (default: 0)
@@ -30,7 +31,6 @@
 ***                  trace (bool) (default: false)
 ***                  trace_file_name (string) (default: z3.log)
 ***                  type_check (bool) (default: true)
-***                  unicode (bool)
 ***                  unsat_core (bool) (default: false)
 ***                  verbose (unsigned int) (default: 0)
 ***                  warning (bool) (default: true)
diff --git a/SBVTestSuite/GoldFiles/query_bitwuzla.gold b/SBVTestSuite/GoldFiles/query_bitwuzla.gold
new file mode 100644
--- /dev/null
+++ b/SBVTestSuite/GoldFiles/query_bitwuzla.gold
@@ -0,0 +1,63 @@
+** Calling: bitwuzla --smt2 -m --output-format=smt2 --no-exit-codes --incremental
+[GOOD] ; Automatically generated by SBV. Do not edit.
+[GOOD] (set-option :print-success true)
+[GOOD] (set-option :global-declarations true)
+[GOOD] (set-option :produce-models true)
+[GOOD] (set-logic ALL) ; external query, using all logics.
+[GOOD] ; --- uninterpreted sorts ---
+[GOOD] ; --- tuples ---
+[GOOD] ; --- sums ---
+[GOOD] ; --- literal constants ---
+[GOOD] (define-fun s2 () (_ BitVec 32) #x00000000)
+[GOOD] ; --- skolem constants ---
+[GOOD] (declare-fun s0 () (_ BitVec 32)) ; tracks user variable "a"
+[GOOD] (declare-fun s1 () (_ BitVec 32)) ; tracks user variable "b"
+[GOOD] ; --- constant tables ---
+[GOOD] ; --- skolemized tables ---
+[GOOD] ; --- arrays ---
+[GOOD] ; --- uninterpreted constants ---
+[GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] (define-fun s3 () Bool (bvsgt s0 s2))
+[GOOD] (define-fun s4 () Bool (bvsgt s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
+[GOOD] (assert s3)
+[GOOD] (assert s4)
+[GOOD] (define-fun s5 () (_ BitVec 32) #x00000002)
+[GOOD] (define-fun s7 () (_ BitVec 32) #x0000000f)
+[GOOD] (define-fun s6 () (_ BitVec 32) (bvadd s0 s5))
+[GOOD] (define-fun s8 () Bool (bvsle s6 s7))
+[GOOD] (assert s8)
+[GOOD] (define-fun s9 () (_ BitVec 32) #x00000003)
+[GOOD] (define-fun s10 () Bool (bvslt s0 s9))
+[GOOD] (assert s10)
+[GOOD] (define-fun s11 () Bool (bvslt s1 s5))
+[GOOD] (assert s11)
+[GOOD] (define-fun s13 () (_ BitVec 32) #x0000000c)
+[GOOD] (define-fun s12 () (_ BitVec 32) (bvadd s0 s1))
+[GOOD] (define-fun s14 () Bool (bvslt s12 s13))
+[GOOD] (assert s14)
+[GOOD] (define-fun s15 () Bool (bvslt s0 s5))
+[GOOD] (assert s15)
+[SEND] (check-sat)
+[RECV] sat
+[GOOD] (define-fun s16 () (_ BitVec 32) #x00000001)
+[GOOD] (define-fun s17 () Bool (bvsge s0 s16))
+[GOOD] (assert s17)
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (s0))
+[RECV] ((s0 #b00000000000000000000000000000001))
+[SEND] (get-value (s1))
+[RECV] ((s1 #b00000000000000000000000000000001))
+*** Solver   : Bitwuzla
+*** Exit code: ExitSuccess
+*** Std-out  : (
+             (define-fun s0 () (_ BitVec 32) #b00000000000000000000000000000001)
+             (define-fun s1 () (_ BitVec 32) #b00000000000000000000000000000001)
+           )
diff --git a/SBVTestSuite/GoldFiles/query_cvc5.gold b/SBVTestSuite/GoldFiles/query_cvc5.gold
new file mode 100644
--- /dev/null
+++ b/SBVTestSuite/GoldFiles/query_cvc5.gold
@@ -0,0 +1,65 @@
+** Calling: cvc5 --lang smt --incremental --no-interactive --model-witness-value
+[GOOD] ; Automatically generated by SBV. Do not edit.
+[GOOD] (set-option :print-success true)
+[GOOD] (set-option :global-declarations true)
+[GOOD] (set-option :diagnostic-output-channel "stdout")
+[GOOD] (set-option :produce-models true)
+[GOOD] (set-logic ALL) ; external query, using all logics.
+[GOOD] ; --- uninterpreted sorts ---
+[GOOD] ; --- tuples ---
+[GOOD] ; --- sums ---
+[GOOD] ; --- literal constants ---
+[GOOD] (define-fun s2 () (_ BitVec 32) #x00000000)
+[GOOD] ; --- skolem constants ---
+[GOOD] (declare-fun s0 () (_ BitVec 32)) ; tracks user variable "a"
+[GOOD] (declare-fun s1 () (_ BitVec 32)) ; tracks user variable "b"
+[GOOD] ; --- constant tables ---
+[GOOD] ; --- skolemized tables ---
+[GOOD] ; --- arrays ---
+[GOOD] ; --- uninterpreted constants ---
+[GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] (define-fun s3 () Bool (bvsgt s0 s2))
+[GOOD] (define-fun s4 () Bool (bvsgt s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
+[GOOD] (assert (! s3 :named |a > 0|))
+[GOOD] (assert s4)
+[GOOD] (define-fun s5 () (_ BitVec 32) #x00000002)
+[GOOD] (define-fun s7 () (_ BitVec 32) #x0000000f)
+[GOOD] (define-fun s6 () (_ BitVec 32) (bvadd s0 s5))
+[GOOD] (define-fun s8 () Bool (bvsle s6 s7))
+[GOOD] (assert s8)
+[GOOD] (define-fun s9 () (_ BitVec 32) #x00000003)
+[GOOD] (define-fun s10 () Bool (bvslt s0 s9))
+[GOOD] (assert s10)
+[GOOD] (define-fun s11 () Bool (bvslt s1 s5))
+[GOOD] (assert s11)
+[GOOD] (define-fun s13 () (_ BitVec 32) #x0000000c)
+[GOOD] (define-fun s12 () (_ BitVec 32) (bvadd s0 s1))
+[GOOD] (define-fun s14 () Bool (bvslt s12 s13))
+[GOOD] (assert (! s14 :named |a+b_<_12|))
+[GOOD] (push 1)
+[GOOD] (define-fun s15 () Bool (bvslt s0 s5))
+[GOOD] (assert s15)
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (s0))
+[RECV] ((s0 #b00000000000000000000000000000001))
+[GOOD] (pop 1)
+[GOOD] (define-fun s16 () (_ BitVec 32) #x00000001)
+[GOOD] (define-fun s17 () Bool (bvsgt s0 s16))
+[GOOD] (assert (! s17 :named |extra|))
+[GOOD] (assert s11)
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (s0))
+[RECV] ((s0 #b00000000000000000000000000000010))
+[SEND] (get-value (s1))
+[RECV] ((s1 #b00000000000000000000000000000001))
+*** Solver   : CVC5
+*** Exit code: ExitSuccess
diff --git a/SBVTestSuite/GoldFiles/query_uiSat_test2.gold b/SBVTestSuite/GoldFiles/query_uiSat_test2.gold
--- a/SBVTestSuite/GoldFiles/query_uiSat_test2.gold
+++ b/SBVTestSuite/GoldFiles/query_uiSat_test2.gold
@@ -37,16 +37,8 @@
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
 [SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and x!1 x!2) (and x!1 (not x!2))))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
+[RECV] ((q2 (store (store ((as const Array) false) true false true) true true true)))
 
-MODEL: SMTModel {modelObjectives = [], modelBindings = Nothing, modelAssocs = [], modelUIFuns = [("q2",(SBool -> SBool -> SBool,([([True :: Bool,False :: Bool],True :: Bool),([True :: Bool,True :: Bool],True :: Bool)],False :: Bool)))]}
+MODEL: SMTModel {modelObjectives = [], modelBindings = Nothing, modelAssocs = [], modelUIFuns = [("q2",(SBool -> SBool -> SBool,([([True :: Bool,True :: Bool],True :: Bool),([True :: Bool,False :: Bool],True :: Bool)],False :: Bool)))]}
 DONE.*** Solver   : Z3
 *** Exit code: ExitSuccess
diff --git a/SBVTestSuite/GoldFiles/set_compl1.gold b/SBVTestSuite/GoldFiles/set_compl1.gold
--- a/SBVTestSuite/GoldFiles/set_compl1.gold
+++ b/SBVTestSuite/GoldFiles/set_compl1.gold
@@ -8,15 +8,14 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s1 () (Array String Bool) (store (store (store (store ((as const (Array String Bool)) false) (_ char #x6f) true) (_ char #x6c) true) (_ char #x68) true) (_ char #x65) true))
+[GOOD] (define-fun s1 () (Array Int Bool) (store (store (store (store ((as const (Array Int Bool)) false) 4 true) 3 true) 2 true) 1 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () (Array String Bool)) ; tracks user variable "a"
-[GOOD] (assert (forall ((set0 String)) (=> (select s0 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () (Array Int Bool)) ; tracks user variable "a"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -34,40 +33,34 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store (store (store (store ((as const (Array String Bool)) false) "o" true)
-                            "l"
-                            true)
-                     "h"
+[RECV] ((s0 (store (store (store (store ((as const (Array Int Bool)) false) 1 true) 3 true)
+                     4
                      true)
-              "e"
+              2
               true)))
-[GOOD] (define-fun s3 () (Array String Bool) (complement s0))
+[GOOD] (define-fun s3 () (Array Int Bool) (complement s0))
 [SEND] (get-value (s3))
-[RECV] ((s3 (store (store (store (store ((as const (Array String Bool)) true) "o" false)
-                            "l"
-                            false)
-                     "h"
+[RECV] ((s3 (store (store (store (store ((as const (Array Int Bool)) true) 1 false) 3 false)
+                     4
                      false)
-              "e"
+              2
               false)))
-[GOOD] (define-fun s4 () (Array String Bool) (complement s3))
+[GOOD] (define-fun s4 () (Array Int Bool) (complement s3))
 [SEND] (get-value (s4))
-[RECV] ((s4 (store (store (store (store ((as const (Array String Bool)) false) "o" true)
-                            "l"
-                            true)
-                     "h"
+[RECV] ((s4 (store (store (store (store ((as const (Array Int Bool)) false) 1 true) 3 true)
+                     4
                      true)
-              "e"
+              2
               true)))
-[GOOD] (define-fun s5 () (Array String Bool) (intersection s3 s0))
+[GOOD] (define-fun s5 () (Array Int Bool) (intersection s3 s0))
 [SEND] (get-value (s5))
-[RECV] ((s5 ((as const (Array String Bool)) false)))
-[GOOD] (define-fun s6 () (Array String Bool) (union s3 s0))
+[RECV] ((s5 ((as const (Array Int Bool)) false)))
+[GOOD] (define-fun s6 () (Array Int Bool) (union s3 s0))
 [SEND] (get-value (s6))
-[RECV] ((s6 ((as const (Array String Bool)) true)))
+[RECV] ((s6 ((as const (Array Int Bool)) true)))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 
 FINAL:
-({'e','h','l','o'},U - {'e','h','l','o'},{'e','h','l','o'},{},U)
+({1,2,3,4},U - {1,2,3,4},{1,2,3,4},{},U)
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_delete1.gold b/SBVTestSuite/GoldFiles/set_delete1.gold
--- a/SBVTestSuite/GoldFiles/set_delete1.gold
+++ b/SBVTestSuite/GoldFiles/set_delete1.gold
@@ -8,18 +8,16 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s2 () String (_ char #x65))
-[GOOD] (define-fun s4 () (Array String Bool) (store (store (store (store ((as const (Array String Bool)) false) (_ char #x6f) true) (_ char #x6c) true) (_ char #x68) true) (_ char #x65) true))
+[GOOD] (define-fun s2 () Int 2)
+[GOOD] (define-fun s4 () (Array Int Bool) (store (store (store (store ((as const (Array Int Bool)) false) 4 true) 3 true) 2 true) 1 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () String) ; tracks user variable "a"
-[GOOD] (assert (= 1 (str.len s0)))
-[GOOD] (declare-fun s1 () (Array String Bool)) ; tracks user variable "b"
-[GOOD] (assert (forall ((set0 String)) (=> (select s1 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () Int) ; tracks user variable "a"
+[GOOD] (declare-fun s1 () (Array Int Bool)) ; tracks user variable "b"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -39,37 +37,31 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 "e"))
+[RECV] ((s0 2))
 [SEND] (get-value (s1))
-[RECV] ((s1 (store (store (store (store ((as const (Array String Bool)) false) "o" true)
-                            "l"
-                            true)
-                     "h"
+[RECV] ((s1 (store (store (store (store ((as const (Array Int Bool)) false) 1 true) 3 true)
+                     4
                      true)
-              "e"
+              2
               true)))
-[GOOD] (define-fun s6 () (Array String Bool) (store s1 s0 false))
+[GOOD] (define-fun s6 () (Array Int Bool) (store s1 s0 false))
 [SEND] (get-value (s6))
-[RECV] ((s6 (store (store (store (store ((as const (Array String Bool)) false) "o" true)
-                            "l"
-                            true)
-                     "h"
+[RECV] ((s6 (store (store (store (store ((as const (Array Int Bool)) false) 1 true) 3 true)
+                     4
                      true)
-              "e"
+              2
               false)))
-[GOOD] (define-fun s7 () (Array String Bool) (complement s1))
-[GOOD] (define-fun s8 () (Array String Bool) (store s7 s0 false))
+[GOOD] (define-fun s7 () (Array Int Bool) (complement s1))
+[GOOD] (define-fun s8 () (Array Int Bool) (store s7 s0 false))
 [SEND] (get-value (s8))
-[RECV] ((s8 (store (store (store (store ((as const (Array String Bool)) true) "o" false)
-                            "l"
-                            false)
-                     "h"
+[RECV] ((s8 (store (store (store (store ((as const (Array Int Bool)) true) 1 false) 3 false)
+                     4
                      false)
-              "e"
+              2
               false)))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 
 FINAL:
-('e',{'e','h','l','o'},{'h','l','o'},U - {'e','h','l','o'})
+(2,{1,2,3,4},{1,3,4},U - {1,2,3,4})
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_diff1.gold b/SBVTestSuite/GoldFiles/set_diff1.gold
--- a/SBVTestSuite/GoldFiles/set_diff1.gold
+++ b/SBVTestSuite/GoldFiles/set_diff1.gold
@@ -8,17 +8,15 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s2 () (Array String Bool) (store ((as const (Array String Bool)) false) (_ char #x61) true))
+[GOOD] (define-fun s2 () (Array Int Bool) (store ((as const (Array Int Bool)) false) 0 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () (Array String Bool)) ; tracks user variable "a"
-[GOOD] (assert (forall ((set0 String)) (=> (select s0 set0) (= 1 (str.len set0)))))
-[GOOD] (declare-fun s1 () (Array String Bool)) ; tracks user variable "b"
-[GOOD] (assert (forall ((set0 String)) (=> (select s1 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () (Array Int Bool)) ; tracks user variable "a"
+[GOOD] (declare-fun s1 () (Array Int Bool)) ; tracks user variable "b"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -38,26 +36,26 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store ((as const (Array String Bool)) false) "a" true)))
+[RECV] ((s0 (store ((as const (Array Int Bool)) false) 0 true)))
 [SEND] (get-value (s1))
-[RECV] ((s1 (store ((as const (Array String Bool)) false) "a" true)))
-[GOOD] (define-fun s5 () (Array String Bool) (setminus s0 s1))
+[RECV] ((s1 (store ((as const (Array Int Bool)) false) 0 true)))
+[GOOD] (define-fun s5 () (Array Int Bool) (setminus s0 s1))
 [SEND] (get-value (s5))
-[RECV] ((s5 ((as const (Array String Bool)) false)))
-[GOOD] (define-fun s6 () (Array String Bool) (complement s1))
-[GOOD] (define-fun s7 () (Array String Bool) (setminus s0 s6))
+[RECV] ((s5 ((as const (Array Int Bool)) false)))
+[GOOD] (define-fun s6 () (Array Int Bool) (complement s1))
+[GOOD] (define-fun s7 () (Array Int Bool) (setminus s0 s6))
 [SEND] (get-value (s7))
-[RECV] ((s7 (store ((as const (Array String Bool)) false) "a" true)))
-[GOOD] (define-fun s8 () (Array String Bool) (complement s0))
-[GOOD] (define-fun s9 () (Array String Bool) (setminus s8 s1))
+[RECV] ((s7 (store ((as const (Array Int Bool)) false) 0 true)))
+[GOOD] (define-fun s8 () (Array Int Bool) (complement s0))
+[GOOD] (define-fun s9 () (Array Int Bool) (setminus s8 s1))
 [SEND] (get-value (s9))
-[RECV] ((s9 (store ((as const (Array String Bool)) true) "a" false)))
-[GOOD] (define-fun s10 () (Array String Bool) (setminus s8 s6))
+[RECV] ((s9 (store ((as const (Array Int Bool)) true) 0 false)))
+[GOOD] (define-fun s10 () (Array Int Bool) (setminus s8 s6))
 [SEND] (get-value (s10))
-[RECV] ((s10 ((as const (Array String Bool)) false)))
+[RECV] ((s10 ((as const (Array Int Bool)) false)))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 
 FINAL:
-({'a'},{'a'},{},{'a'},U - {'a'},{})
+({0},{0},{},{0},U - {0},{})
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_disj1.gold b/SBVTestSuite/GoldFiles/set_disj1.gold
--- a/SBVTestSuite/GoldFiles/set_disj1.gold
+++ b/SBVTestSuite/GoldFiles/set_disj1.gold
@@ -8,17 +8,15 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s2 () (Array String Bool) (store ((as const (Array String Bool)) false) (_ char #x61) true))
+[GOOD] (define-fun s2 () (Array Int Bool) (store ((as const (Array Int Bool)) false) 0 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () (Array String Bool)) ; tracks user variable "a"
-[GOOD] (assert (forall ((set0 String)) (=> (select s0 set0) (= 1 (str.len set0)))))
-[GOOD] (declare-fun s1 () (Array String Bool)) ; tracks user variable "b"
-[GOOD] (assert (forall ((set0 String)) (=> (select s1 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () (Array Int Bool)) ; tracks user variable "a"
+[GOOD] (declare-fun s1 () (Array Int Bool)) ; tracks user variable "b"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -38,25 +36,25 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store ((as const (Array String Bool)) false) "a" true)))
+[RECV] ((s0 (store ((as const (Array Int Bool)) false) 0 true)))
 [SEND] (get-value (s1))
-[RECV] ((s1 (store ((as const (Array String Bool)) false) "a" true)))
-[GOOD] (define-fun s6 () (Array String Bool) ((as const (Array String Bool)) false))
-[GOOD] (define-fun s5 () (Array String Bool) (intersection s0 s1))
+[RECV] ((s1 (store ((as const (Array Int Bool)) false) 0 true)))
+[GOOD] (define-fun s6 () (Array Int Bool) ((as const (Array Int Bool)) false))
+[GOOD] (define-fun s5 () (Array Int Bool) (intersection s0 s1))
 [GOOD] (define-fun s7 () Bool (= s5 s6))
 [SEND] (get-value (s7))
 [RECV] ((s7 false))
-[GOOD] (define-fun s8 () (Array String Bool) (complement s1))
-[GOOD] (define-fun s9 () (Array String Bool) (intersection s0 s8))
+[GOOD] (define-fun s8 () (Array Int Bool) (complement s1))
+[GOOD] (define-fun s9 () (Array Int Bool) (intersection s0 s8))
 [GOOD] (define-fun s10 () Bool (= s9 s6))
 [SEND] (get-value (s10))
 [RECV] ((s10 true))
-[GOOD] (define-fun s11 () (Array String Bool) (complement s0))
-[GOOD] (define-fun s12 () (Array String Bool) (intersection s11 s1))
+[GOOD] (define-fun s11 () (Array Int Bool) (complement s0))
+[GOOD] (define-fun s12 () (Array Int Bool) (intersection s11 s1))
 [GOOD] (define-fun s13 () Bool (= s12 s6))
 [SEND] (get-value (s13))
 [RECV] ((s13 true))
-[GOOD] (define-fun s14 () (Array String Bool) (intersection s11 s8))
+[GOOD] (define-fun s14 () (Array Int Bool) (intersection s11 s8))
 [GOOD] (define-fun s15 () Bool (= s14 s6))
 [SEND] (get-value (s15))
 [RECV] ((s15 false))
@@ -64,5 +62,5 @@
 *** Exit code: ExitSuccess
 
 FINAL:
-({'a'},{'a'},False,True,True,False)
+({0},{0},False,True,True,False)
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_empty1.gold b/SBVTestSuite/GoldFiles/set_empty1.gold
--- a/SBVTestSuite/GoldFiles/set_empty1.gold
+++ b/SBVTestSuite/GoldFiles/set_empty1.gold
@@ -8,15 +8,14 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s1 () (Array String Bool) (store (store (store (store ((as const (Array String Bool)) false) (_ char #x6f) true) (_ char #x6c) true) (_ char #x68) true) (_ char #x65) true))
+[GOOD] (define-fun s1 () (Array Int Bool) (store (store (store (store ((as const (Array Int Bool)) false) 4 true) 3 true) 2 true) 1 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () (Array String Bool)) ; tracks user variable "a"
-[GOOD] (assert (forall ((set0 String)) (=> (select s0 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () (Array Int Bool)) ; tracks user variable "a"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -34,18 +33,16 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store (store (store (store ((as const (Array String Bool)) false) "o" true)
-                            "l"
-                            true)
-                     "h"
+[RECV] ((s0 (store (store (store (store ((as const (Array Int Bool)) false) 1 true) 3 true)
+                     4
                      true)
-              "e"
+              2
               true)))
-[GOOD] (define-fun s3 () (Array String Bool) ((as const (Array String Bool)) false))
+[GOOD] (define-fun s3 () (Array Int Bool) ((as const (Array Int Bool)) false))
 [GOOD] (define-fun s4 () Bool (= s0 s3))
 [SEND] (get-value (s4))
 [RECV] ((s4 false))
-[GOOD] (define-fun s5 () (Array String Bool) (complement s0))
+[GOOD] (define-fun s5 () (Array Int Bool) (complement s0))
 [GOOD] (define-fun s6 () Bool (= s5 s3))
 [SEND] (get-value (s6))
 [RECV] ((s6 false))
@@ -53,5 +50,5 @@
 *** Exit code: ExitSuccess
 
 FINAL:
-({'e','h','l','o'},False,False)
+({1,2,3,4},False,False)
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_full1.gold b/SBVTestSuite/GoldFiles/set_full1.gold
--- a/SBVTestSuite/GoldFiles/set_full1.gold
+++ b/SBVTestSuite/GoldFiles/set_full1.gold
@@ -8,15 +8,14 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s1 () (Array String Bool) (store (store (store (store ((as const (Array String Bool)) false) (_ char #x6f) true) (_ char #x6c) true) (_ char #x68) true) (_ char #x65) true))
+[GOOD] (define-fun s1 () (Array Int Bool) (store (store (store (store ((as const (Array Int Bool)) false) 4 true) 3 true) 2 true) 1 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () (Array String Bool)) ; tracks user variable "a"
-[GOOD] (assert (forall ((set0 String)) (=> (select s0 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () (Array Int Bool)) ; tracks user variable "a"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -34,18 +33,16 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store (store (store (store ((as const (Array String Bool)) false) "o" true)
-                            "l"
-                            true)
-                     "h"
+[RECV] ((s0 (store (store (store (store ((as const (Array Int Bool)) false) 1 true) 3 true)
+                     4
                      true)
-              "e"
+              2
               true)))
-[GOOD] (define-fun s3 () (Array String Bool) ((as const (Array String Bool)) true))
+[GOOD] (define-fun s3 () (Array Int Bool) ((as const (Array Int Bool)) true))
 [GOOD] (define-fun s4 () Bool (= s0 s3))
 [SEND] (get-value (s4))
 [RECV] ((s4 false))
-[GOOD] (define-fun s5 () (Array String Bool) (complement s0))
+[GOOD] (define-fun s5 () (Array Int Bool) (complement s0))
 [GOOD] (define-fun s6 () Bool (= s5 s3))
 [SEND] (get-value (s6))
 [RECV] ((s6 false))
@@ -53,5 +50,5 @@
 *** Exit code: ExitSuccess
 
 FINAL:
-({'e','h','l','o'},False,False)
+({1,2,3,4},False,False)
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_insert1.gold b/SBVTestSuite/GoldFiles/set_insert1.gold
--- a/SBVTestSuite/GoldFiles/set_insert1.gold
+++ b/SBVTestSuite/GoldFiles/set_insert1.gold
@@ -8,18 +8,16 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s2 () String (_ char #x65))
-[GOOD] (define-fun s4 () (Array String Bool) (store (store (store (store ((as const (Array String Bool)) false) (_ char #x6f) true) (_ char #x6c) true) (_ char #x68) true) (_ char #x65) true))
+[GOOD] (define-fun s2 () Int 2)
+[GOOD] (define-fun s4 () (Array Int Bool) (store (store (store (store ((as const (Array Int Bool)) false) 4 true) 3 true) 2 true) 1 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () String) ; tracks user variable "a"
-[GOOD] (assert (= 1 (str.len s0)))
-[GOOD] (declare-fun s1 () (Array String Bool)) ; tracks user variable "b"
-[GOOD] (assert (forall ((set0 String)) (=> (select s1 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () Int) ; tracks user variable "a"
+[GOOD] (declare-fun s1 () (Array Int Bool)) ; tracks user variable "b"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -39,37 +37,31 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 "e"))
+[RECV] ((s0 2))
 [SEND] (get-value (s1))
-[RECV] ((s1 (store (store (store (store ((as const (Array String Bool)) false) "o" true)
-                            "l"
-                            true)
-                     "h"
+[RECV] ((s1 (store (store (store (store ((as const (Array Int Bool)) false) 1 true) 3 true)
+                     4
                      true)
-              "e"
+              2
               true)))
-[GOOD] (define-fun s6 () (Array String Bool) (store s1 s0 true))
+[GOOD] (define-fun s6 () (Array Int Bool) (store s1 s0 true))
 [SEND] (get-value (s6))
-[RECV] ((s6 (store (store (store (store ((as const (Array String Bool)) false) "o" true)
-                            "l"
-                            true)
-                     "h"
+[RECV] ((s6 (store (store (store (store ((as const (Array Int Bool)) false) 1 true) 3 true)
+                     4
                      true)
-              "e"
+              2
               true)))
-[GOOD] (define-fun s7 () (Array String Bool) (complement s1))
-[GOOD] (define-fun s8 () (Array String Bool) (store s7 s0 true))
+[GOOD] (define-fun s7 () (Array Int Bool) (complement s1))
+[GOOD] (define-fun s8 () (Array Int Bool) (store s7 s0 true))
 [SEND] (get-value (s8))
-[RECV] ((s8 (store (store (store (store ((as const (Array String Bool)) true) "o" false)
-                            "l"
-                            false)
-                     "h"
+[RECV] ((s8 (store (store (store (store ((as const (Array Int Bool)) true) 1 false) 3 false)
+                     4
                      false)
-              "e"
+              2
               true)))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 
 FINAL:
-('e',{'e','h','l','o'},{'e','h','l','o'},U - {'h','l','o'})
+(2,{1,2,3,4},{1,2,3,4},U - {1,3,4})
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_intersect1.gold b/SBVTestSuite/GoldFiles/set_intersect1.gold
--- a/SBVTestSuite/GoldFiles/set_intersect1.gold
+++ b/SBVTestSuite/GoldFiles/set_intersect1.gold
@@ -8,17 +8,15 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s2 () (Array String Bool) (store ((as const (Array String Bool)) false) (_ char #x61) true))
+[GOOD] (define-fun s2 () (Array Int Bool) (store ((as const (Array Int Bool)) false) 0 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () (Array String Bool)) ; tracks user variable "a"
-[GOOD] (assert (forall ((set0 String)) (=> (select s0 set0) (= 1 (str.len set0)))))
-[GOOD] (declare-fun s1 () (Array String Bool)) ; tracks user variable "b"
-[GOOD] (assert (forall ((set0 String)) (=> (select s1 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () (Array Int Bool)) ; tracks user variable "a"
+[GOOD] (declare-fun s1 () (Array Int Bool)) ; tracks user variable "b"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -38,26 +36,26 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store ((as const (Array String Bool)) false) "a" true)))
+[RECV] ((s0 (store ((as const (Array Int Bool)) false) 0 true)))
 [SEND] (get-value (s1))
-[RECV] ((s1 (store ((as const (Array String Bool)) false) "a" true)))
-[GOOD] (define-fun s5 () (Array String Bool) (intersection s0 s1))
+[RECV] ((s1 (store ((as const (Array Int Bool)) false) 0 true)))
+[GOOD] (define-fun s5 () (Array Int Bool) (intersection s0 s1))
 [SEND] (get-value (s5))
-[RECV] ((s5 (store ((as const (Array String Bool)) false) "a" true)))
-[GOOD] (define-fun s6 () (Array String Bool) (complement s1))
-[GOOD] (define-fun s7 () (Array String Bool) (intersection s0 s6))
+[RECV] ((s5 (store ((as const (Array Int Bool)) false) 0 true)))
+[GOOD] (define-fun s6 () (Array Int Bool) (complement s1))
+[GOOD] (define-fun s7 () (Array Int Bool) (intersection s0 s6))
 [SEND] (get-value (s7))
-[RECV] ((s7 ((as const (Array String Bool)) false)))
-[GOOD] (define-fun s8 () (Array String Bool) (complement s0))
-[GOOD] (define-fun s9 () (Array String Bool) (intersection s8 s1))
+[RECV] ((s7 ((as const (Array Int Bool)) false)))
+[GOOD] (define-fun s8 () (Array Int Bool) (complement s0))
+[GOOD] (define-fun s9 () (Array Int Bool) (intersection s8 s1))
 [SEND] (get-value (s9))
-[RECV] ((s9 ((as const (Array String Bool)) false)))
-[GOOD] (define-fun s10 () (Array String Bool) (intersection s8 s6))
+[RECV] ((s9 ((as const (Array Int Bool)) false)))
+[GOOD] (define-fun s10 () (Array Int Bool) (intersection s8 s6))
 [SEND] (get-value (s10))
-[RECV] ((s10 (store ((as const (Array String Bool)) true) "a" false)))
+[RECV] ((s10 (store ((as const (Array Int Bool)) true) 0 false)))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 
 FINAL:
-({'a'},{'a'},{'a'},{},{},U - {'a'})
+({0},{0},{0},{},{},U - {0})
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_member1.gold b/SBVTestSuite/GoldFiles/set_member1.gold
--- a/SBVTestSuite/GoldFiles/set_member1.gold
+++ b/SBVTestSuite/GoldFiles/set_member1.gold
@@ -8,18 +8,16 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s2 () String (_ char #x65))
-[GOOD] (define-fun s4 () (Array String Bool) (store (store (store (store ((as const (Array String Bool)) false) (_ char #x6f) true) (_ char #x6c) true) (_ char #x68) true) (_ char #x65) true))
+[GOOD] (define-fun s2 () Int 2)
+[GOOD] (define-fun s4 () (Array Int Bool) (store (store (store (store ((as const (Array Int Bool)) false) 4 true) 3 true) 2 true) 1 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () String) ; tracks user variable "a"
-[GOOD] (assert (= 1 (str.len s0)))
-[GOOD] (declare-fun s1 () (Array String Bool)) ; tracks user variable "b"
-[GOOD] (assert (forall ((set0 String)) (=> (select s1 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () Int) ; tracks user variable "a"
+[GOOD] (declare-fun s1 () (Array Int Bool)) ; tracks user variable "b"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -39,19 +37,17 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 "e"))
+[RECV] ((s0 2))
 [SEND] (get-value (s1))
-[RECV] ((s1 (store (store (store (store ((as const (Array String Bool)) false) "o" true)
-                            "l"
-                            true)
-                     "h"
+[RECV] ((s1 (store (store (store (store ((as const (Array Int Bool)) false) 1 true) 3 true)
+                     4
                      true)
-              "e"
+              2
               true)))
 [GOOD] (define-fun s6 () Bool (select s1 s0))
 [SEND] (get-value (s6))
 [RECV] ((s6 true))
-[GOOD] (define-fun s7 () (Array String Bool) (complement s1))
+[GOOD] (define-fun s7 () (Array Int Bool) (complement s1))
 [GOOD] (define-fun s8 () Bool (select s7 s0))
 [SEND] (get-value (s8))
 [RECV] ((s8 false))
@@ -59,5 +55,5 @@
 *** Exit code: ExitSuccess
 
 FINAL:
-('e',{'e','h','l','o'},True,False)
+(2,{1,2,3,4},True,False)
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_notMember1.gold b/SBVTestSuite/GoldFiles/set_notMember1.gold
--- a/SBVTestSuite/GoldFiles/set_notMember1.gold
+++ b/SBVTestSuite/GoldFiles/set_notMember1.gold
@@ -8,18 +8,16 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s2 () String (_ char #x65))
-[GOOD] (define-fun s4 () (Array String Bool) (store (store (store (store ((as const (Array String Bool)) false) (_ char #x6f) true) (_ char #x6c) true) (_ char #x68) true) (_ char #x65) true))
+[GOOD] (define-fun s2 () Int 2)
+[GOOD] (define-fun s4 () (Array Int Bool) (store (store (store (store ((as const (Array Int Bool)) false) 4 true) 3 true) 2 true) 1 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () String) ; tracks user variable "a"
-[GOOD] (assert (= 1 (str.len s0)))
-[GOOD] (declare-fun s1 () (Array String Bool)) ; tracks user variable "b"
-[GOOD] (assert (forall ((set0 String)) (=> (select s1 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () Int) ; tracks user variable "a"
+[GOOD] (declare-fun s1 () (Array Int Bool)) ; tracks user variable "b"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -39,20 +37,18 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 "e"))
+[RECV] ((s0 2))
 [SEND] (get-value (s1))
-[RECV] ((s1 (store (store (store (store ((as const (Array String Bool)) false) "o" true)
-                            "l"
-                            true)
-                     "h"
+[RECV] ((s1 (store (store (store (store ((as const (Array Int Bool)) false) 1 true) 3 true)
+                     4
                      true)
-              "e"
+              2
               true)))
 [GOOD] (define-fun s6 () Bool (select s1 s0))
 [GOOD] (define-fun s7 () Bool (not s6))
 [SEND] (get-value (s7))
 [RECV] ((s7 false))
-[GOOD] (define-fun s8 () (Array String Bool) (complement s1))
+[GOOD] (define-fun s8 () (Array Int Bool) (complement s1))
 [GOOD] (define-fun s9 () Bool (select s8 s0))
 [GOOD] (define-fun s10 () Bool (not s9))
 [SEND] (get-value (s10))
@@ -61,5 +57,5 @@
 *** Exit code: ExitSuccess
 
 FINAL:
-('e',{'e','h','l','o'},False,True)
+(2,{1,2,3,4},False,True)
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_psubset1.gold b/SBVTestSuite/GoldFiles/set_psubset1.gold
--- a/SBVTestSuite/GoldFiles/set_psubset1.gold
+++ b/SBVTestSuite/GoldFiles/set_psubset1.gold
@@ -8,17 +8,15 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s2 () (Array String Bool) (store ((as const (Array String Bool)) false) (_ char #x61) true))
+[GOOD] (define-fun s2 () (Array Int Bool) (store ((as const (Array Int Bool)) false) 0 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () (Array String Bool)) ; tracks user variable "a"
-[GOOD] (assert (forall ((set0 String)) (=> (select s0 set0) (= 1 (str.len set0)))))
-[GOOD] (declare-fun s1 () (Array String Bool)) ; tracks user variable "b"
-[GOOD] (assert (forall ((set0 String)) (=> (select s1 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () (Array Int Bool)) ; tracks user variable "a"
+[GOOD] (declare-fun s1 () (Array Int Bool)) ; tracks user variable "b"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -38,23 +36,23 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store ((as const (Array String Bool)) false) "a" true)))
+[RECV] ((s0 (store ((as const (Array Int Bool)) false) 0 true)))
 [SEND] (get-value (s1))
-[RECV] ((s1 (store ((as const (Array String Bool)) false) "a" true)))
+[RECV] ((s1 (store ((as const (Array Int Bool)) false) 0 true)))
 [GOOD] (define-fun s5 () Bool (subset s0 s1))
 [GOOD] (define-fun s6 () Bool (= s0 s1))
 [GOOD] (define-fun s7 () Bool (not s6))
 [GOOD] (define-fun s8 () Bool (and s5 s7))
 [SEND] (get-value (s8))
 [RECV] ((s8 false))
-[GOOD] (define-fun s9 () (Array String Bool) (complement s1))
+[GOOD] (define-fun s9 () (Array Int Bool) (complement s1))
 [GOOD] (define-fun s10 () Bool (subset s0 s9))
 [GOOD] (define-fun s11 () Bool (= s0 s9))
 [GOOD] (define-fun s12 () Bool (not s11))
 [GOOD] (define-fun s13 () Bool (and s10 s12))
 [SEND] (get-value (s13))
 [RECV] ((s13 false))
-[GOOD] (define-fun s14 () (Array String Bool) (complement s0))
+[GOOD] (define-fun s14 () (Array Int Bool) (complement s0))
 [GOOD] (define-fun s15 () Bool (subset s14 s1))
 [GOOD] (define-fun s16 () Bool (= s14 s1))
 [GOOD] (define-fun s17 () Bool (not s16))
@@ -71,5 +69,5 @@
 *** Exit code: ExitSuccess
 
 FINAL:
-({'a'},{'a'},False,False,False,False)
+({0},{0},False,False,False,False)
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_subset1.gold b/SBVTestSuite/GoldFiles/set_subset1.gold
--- a/SBVTestSuite/GoldFiles/set_subset1.gold
+++ b/SBVTestSuite/GoldFiles/set_subset1.gold
@@ -8,17 +8,15 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s2 () (Array String Bool) (store ((as const (Array String Bool)) false) (_ char #x61) true))
+[GOOD] (define-fun s2 () (Array Int Bool) (store ((as const (Array Int Bool)) false) 0 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () (Array String Bool)) ; tracks user variable "a"
-[GOOD] (assert (forall ((set0 String)) (=> (select s0 set0) (= 1 (str.len set0)))))
-[GOOD] (declare-fun s1 () (Array String Bool)) ; tracks user variable "b"
-[GOOD] (assert (forall ((set0 String)) (=> (select s1 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () (Array Int Bool)) ; tracks user variable "a"
+[GOOD] (declare-fun s1 () (Array Int Bool)) ; tracks user variable "b"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -38,17 +36,17 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store ((as const (Array String Bool)) false) "a" true)))
+[RECV] ((s0 (store ((as const (Array Int Bool)) false) 0 true)))
 [SEND] (get-value (s1))
-[RECV] ((s1 (store ((as const (Array String Bool)) false) "a" true)))
+[RECV] ((s1 (store ((as const (Array Int Bool)) false) 0 true)))
 [GOOD] (define-fun s5 () Bool (subset s0 s1))
 [SEND] (get-value (s5))
 [RECV] ((s5 true))
-[GOOD] (define-fun s6 () (Array String Bool) (complement s1))
+[GOOD] (define-fun s6 () (Array Int Bool) (complement s1))
 [GOOD] (define-fun s7 () Bool (subset s0 s6))
 [SEND] (get-value (s7))
 [RECV] ((s7 false))
-[GOOD] (define-fun s8 () (Array String Bool) (complement s0))
+[GOOD] (define-fun s8 () (Array Int Bool) (complement s0))
 [GOOD] (define-fun s9 () Bool (subset s8 s1))
 [SEND] (get-value (s9))
 [RECV] ((s9 false))
@@ -59,5 +57,5 @@
 *** Exit code: ExitSuccess
 
 FINAL:
-({'a'},{'a'},True,False,False,True)
+({0},{0},True,False,False,True)
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_tupleSet.gold b/SBVTestSuite/GoldFiles/set_tupleSet.gold
--- a/SBVTestSuite/GoldFiles/set_tupleSet.gold
+++ b/SBVTestSuite/GoldFiles/set_tupleSet.gold
@@ -36,11 +36,12 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (mkSBVTuple2 (lambda ((x!1 Bool)) x!1) (lambda ((x!1 Bool)) (not x!1)))))
+[RECV] ((s0 (mkSBVTuple2 (lambda ((x!1 Bool)) x!1)
+                    (store ((as const (Array Bool Bool)) false) false true))))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 
 FINAL:
 Satisfiable. Model:
-  s0 = ({True},U - {True}) :: ({Bool}, {Bool})
+  s0 = ({True},{False}) :: ({Bool}, {Bool})
 DONE!
diff --git a/SBVTestSuite/GoldFiles/set_uninterp1.gold b/SBVTestSuite/GoldFiles/set_uninterp1.gold
--- a/SBVTestSuite/GoldFiles/set_uninterp1.gold
+++ b/SBVTestSuite/GoldFiles/set_uninterp1.gold
@@ -46,7 +46,7 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (lambda ((x!1 E)) (= x!1 A))))
+[RECV] ((s0 (store ((as const (Array E Bool)) false) A true)))
 [GOOD] (push 1)
 [GOOD] (define-fun s4 () (Array E Bool) (store ((as const (Array E Bool)) false) A true))
 [GOOD] (define-fun s5 () Bool (= s0 s4))
@@ -66,9 +66,9 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store (store ((as const (Array E Bool)) false) C true) B true)))
+[RECV] ((s0 (store ((as const (Array E Bool)) false) B true)))
 [GOOD] (push 1)
-[GOOD] (define-fun s10 () (Array E Bool) (store (store ((as const (Array E Bool)) false) C true) B true))
+[GOOD] (define-fun s10 () (Array E Bool) (store ((as const (Array E Bool)) false) B true))
 [GOOD] (define-fun s11 () Bool (= s0 s10))
 [GOOD] (define-fun s12 () Bool (not s11))
 [GOOD] (assert s12)
@@ -76,9 +76,9 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (lambda ((x!1 E)) (= x!1 B))))
+[RECV] ((s0 (store ((as const (Array E Bool)) false) C true)))
 [GOOD] (push 1)
-[GOOD] (define-fun s13 () (Array E Bool) (store ((as const (Array E Bool)) false) B true))
+[GOOD] (define-fun s13 () (Array E Bool) (store ((as const (Array E Bool)) false) C true))
 [GOOD] (define-fun s14 () Bool (= s0 s13))
 [GOOD] (define-fun s15 () Bool (not s14))
 [GOOD] (assert s15)
@@ -86,9 +86,9 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store (store ((as const (Array E Bool)) false) C true) A true)))
+[RECV] ((s0 (store (store ((as const (Array E Bool)) false) B true) C true)))
 [GOOD] (push 1)
-[GOOD] (define-fun s16 () (Array E Bool) (store (store ((as const (Array E Bool)) false) C true) A true))
+[GOOD] (define-fun s16 () (Array E Bool) (store (store ((as const (Array E Bool)) false) C true) B true))
 [GOOD] (define-fun s17 () Bool (= s0 s16))
 [GOOD] (define-fun s18 () Bool (not s17))
 [GOOD] (assert s18)
@@ -96,9 +96,9 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store (store (store ((as const (Array E Bool)) false) C true) B true) A true)))
+[RECV] ((s0 (store (store ((as const (Array E Bool)) false) C true) A true)))
 [GOOD] (push 1)
-[GOOD] (define-fun s19 () (Array E Bool) (store (store (store ((as const (Array E Bool)) false) C true) B true) A true))
+[GOOD] (define-fun s19 () (Array E Bool) (store (store ((as const (Array E Bool)) false) C true) A true))
 [GOOD] (define-fun s20 () Bool (= s0 s19))
 [GOOD] (define-fun s21 () Bool (not s20))
 [GOOD] (assert s21)
@@ -106,9 +106,9 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (lambda ((x!1 E)) (= x!1 C))))
+[RECV] ((s0 (store (store (store ((as const (Array E Bool)) false) B true) C true) A true)))
 [GOOD] (push 1)
-[GOOD] (define-fun s22 () (Array E Bool) (store ((as const (Array E Bool)) false) C true))
+[GOOD] (define-fun s22 () (Array E Bool) (store (store (store ((as const (Array E Bool)) false) C true) B true) A true))
 [GOOD] (define-fun s23 () Bool (= s0 s22))
 [GOOD] (define-fun s24 () Bool (not s23))
 [GOOD] (assert s24)
@@ -128,15 +128,15 @@
 
 FINAL:
 Solution #1:
-  s0 = {C} :: {E}
-Solution #2:
   s0 = {A,B,C} :: {E}
-Solution #3:
+Solution #2:
   s0 = {A,C} :: {E}
+Solution #3:
+  s0 = {B,C} :: {E}
 Solution #4:
-  s0 = {B} :: {E}
+  s0 = {C} :: {E}
 Solution #5:
-  s0 = {B,C} :: {E}
+  s0 = {B} :: {E}
 Solution #6:
   s0 = {A,B} :: {E}
 Solution #7:
diff --git a/SBVTestSuite/GoldFiles/set_union1.gold b/SBVTestSuite/GoldFiles/set_union1.gold
--- a/SBVTestSuite/GoldFiles/set_union1.gold
+++ b/SBVTestSuite/GoldFiles/set_union1.gold
@@ -8,17 +8,15 @@
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (set-logic ALL) ; has sets, using catch-all.
+[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
 [GOOD] ; --- uninterpreted sorts ---
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s2 () (Array String Bool) (store ((as const (Array String Bool)) false) (_ char #x61) true))
+[GOOD] (define-fun s2 () (Array Int Bool) (store ((as const (Array Int Bool)) false) 0 true))
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () (Array String Bool)) ; tracks user variable "a"
-[GOOD] (assert (forall ((set0 String)) (=> (select s0 set0) (= 1 (str.len set0)))))
-[GOOD] (declare-fun s1 () (Array String Bool)) ; tracks user variable "b"
-[GOOD] (assert (forall ((set0 String)) (=> (select s1 set0) (= 1 (str.len set0)))))
+[GOOD] (declare-fun s0 () (Array Int Bool)) ; tracks user variable "a"
+[GOOD] (declare-fun s1 () (Array Int Bool)) ; tracks user variable "b"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
@@ -38,26 +36,26 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store ((as const (Array String Bool)) false) "a" true)))
+[RECV] ((s0 (store ((as const (Array Int Bool)) false) 0 true)))
 [SEND] (get-value (s1))
-[RECV] ((s1 (store ((as const (Array String Bool)) false) "a" true)))
-[GOOD] (define-fun s5 () (Array String Bool) (union s0 s1))
+[RECV] ((s1 (store ((as const (Array Int Bool)) false) 0 true)))
+[GOOD] (define-fun s5 () (Array Int Bool) (union s0 s1))
 [SEND] (get-value (s5))
-[RECV] ((s5 (store ((as const (Array String Bool)) false) "a" true)))
-[GOOD] (define-fun s6 () (Array String Bool) (complement s1))
-[GOOD] (define-fun s7 () (Array String Bool) (union s0 s6))
+[RECV] ((s5 (store ((as const (Array Int Bool)) false) 0 true)))
+[GOOD] (define-fun s6 () (Array Int Bool) (complement s1))
+[GOOD] (define-fun s7 () (Array Int Bool) (union s0 s6))
 [SEND] (get-value (s7))
-[RECV] ((s7 ((as const (Array String Bool)) true)))
-[GOOD] (define-fun s8 () (Array String Bool) (complement s0))
-[GOOD] (define-fun s9 () (Array String Bool) (union s8 s1))
+[RECV] ((s7 ((as const (Array Int Bool)) true)))
+[GOOD] (define-fun s8 () (Array Int Bool) (complement s0))
+[GOOD] (define-fun s9 () (Array Int Bool) (union s8 s1))
 [SEND] (get-value (s9))
-[RECV] ((s9 ((as const (Array String Bool)) true)))
-[GOOD] (define-fun s10 () (Array String Bool) (union s8 s6))
+[RECV] ((s9 ((as const (Array Int Bool)) true)))
+[GOOD] (define-fun s10 () (Array Int Bool) (union s8 s6))
 [SEND] (get-value (s10))
-[RECV] ((s10 (store ((as const (Array String Bool)) true) "a" false)))
+[RECV] ((s10 (store ((as const (Array Int Bool)) true) 0 false)))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 
 FINAL:
-({'a'},{'a'},{'a'},U,U,U - {'a'})
+({0},{0},{0},U,U,U - {0})
 DONE!
diff --git a/SBVTestSuite/GoldFiles/uiSat_test2.gold b/SBVTestSuite/GoldFiles/uiSat_test2.gold
--- a/SBVTestSuite/GoldFiles/uiSat_test2.gold
+++ b/SBVTestSuite/GoldFiles/uiSat_test2.gold
@@ -76,15 +76,7 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and (not x!1) x!2))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
+[RECV] ((q2 (store ((as const Array) false) false true true)))
 [GOOD] (define-fun q2_model4 ((x!0 Bool) (x!1 Bool)) Bool
           (ite (and (= x!0 false) (= x!1 true)) true
           false)
@@ -99,18 +91,10 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and x!1 x!2) (and (not x!1) x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
+[RECV] ((q2 (store (store ((as const Array) false) false true true) true false true)))
 [GOOD] (define-fun q2_model5 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) true
           (ite (and (= x!0 false) (= x!1 true)) true
-          (ite (and (= x!0 true) (= x!1 true)) true
           false))
        )
 [GOOD] (define-fun q2_model5_reject () Bool
@@ -123,17 +107,9 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and x!1 x!2))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
+[RECV] ((q2 (store ((as const Array) false) true false true)))
 [GOOD] (define-fun q2_model6 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) true
+          (ite (and (= x!0 true) (= x!1 false)) true
           false)
        )
 [GOOD] (define-fun q2_model6_reject () Bool
@@ -146,18 +122,11 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and x!1 (not x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
+[RECV] ((q2 (store (store ((as const Array) false) true false true) true true true)))
 [GOOD] (define-fun q2_model7 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) true
           (ite (and (= x!0 true) (= x!1 false)) true
-          false)
+          false))
        )
 [GOOD] (define-fun q2_model7_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -169,19 +138,10 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and x!1 x!2) (and x!1 (not x!2))))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
+[RECV] ((q2 (store ((as const Array) false) true true true)))
 [GOOD] (define-fun q2_model8 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) true
           (ite (and (= x!0 true) (= x!1 true)) true
-          false))
+          false)
        )
 [GOOD] (define-fun q2_model8_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -193,19 +153,11 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and (not x!1) x!2) (and x!1 (not x!2))))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
+[RECV] ((q2 (store (store ((as const Array) true) false false false) true false false)))
 [GOOD] (define-fun q2_model9 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) true
-          (ite (and (= x!0 true) (= x!1 false)) true
-          false))
+          (ite (and (= x!0 true) (= x!1 false)) false
+          (ite (and (= x!0 false) (= x!1 false)) false
+          true))
        )
 [GOOD] (define-fun q2_model9_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -217,20 +169,11 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool))
-         (or (and (not x!1) (not x!2)) (and x!1 (not x!2))))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) true))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
+[RECV] ((q2 (store (store ((as const Array) true) true false false) true true false)))
 [GOOD] (define-fun q2_model10 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) true
-          (ite (and (= x!0 true) (= x!1 false)) true
-          false))
+          (ite (and (= x!0 true) (= x!1 true)) false
+          (ite (and (= x!0 true) (= x!1 false)) false
+          true))
        )
 [GOOD] (define-fun q2_model10_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -242,9 +185,9 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) false true false)))
+[RECV] ((q2 (store ((as const Array) true) true false false)))
 [GOOD] (define-fun q2_model11 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) false
+          (ite (and (= x!0 true) (= x!1 false)) false
           true)
        )
 [GOOD] (define-fun q2_model11_reject () Bool
@@ -257,11 +200,10 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) false true false) true false false)))
+[RECV] ((q2 (store ((as const Array) true) true true false)))
 [GOOD] (define-fun q2_model12 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) false
-          (ite (and (= x!0 false) (= x!1 true)) false
-          true))
+          (ite (and (= x!0 true) (= x!1 true)) false
+          true)
        )
 [GOOD] (define-fun q2_model12_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -273,18 +215,11 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and (not x!1) (not x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) true))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
+[RECV] ((q2 (store (store ((as const Array) true) true false false) false true false)))
 [GOOD] (define-fun q2_model13 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) true
-          false)
+          (ite (and (= x!0 false) (= x!1 true)) false
+          (ite (and (= x!0 true) (= x!1 false)) false
+          true))
        )
 [GOOD] (define-fun q2_model13_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -296,20 +231,10 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool))
-         (or (and (not x!1) x!2) (and (not x!1) (not x!2))))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) true))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
+[RECV] ((q2 (store ((as const Array) false) false false true)))
 [GOOD] (define-fun q2_model14 ((x!0 Bool) (x!1 Bool)) Bool
           (ite (and (= x!0 false) (= x!1 false)) true
-          (ite (and (= x!0 false) (= x!1 true)) true
-          false))
+          false)
        )
 [GOOD] (define-fun q2_model14_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -321,10 +246,11 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) true false false)))
+[RECV] ((q2 (store (store ((as const Array) false) false false true) true false true)))
 [GOOD] (define-fun q2_model15 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) false
-          true)
+          (ite (and (= x!0 true) (= x!1 false)) true
+          (ite (and (= x!0 false) (= x!1 false)) true
+          false))
        )
 [GOOD] (define-fun q2_model15_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -336,9 +262,9 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) true true false)))
+[RECV] ((q2 (store ((as const Array) true) false true false)))
 [GOOD] (define-fun q2_model16 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) false
+          (ite (and (= x!0 false) (= x!1 true)) false
           true)
        )
 [GOOD] (define-fun q2_model16_reject () Bool
@@ -355,58 +281,58 @@
 
 RESULT: Solution #1:
   q2 :: Bool -> Bool -> Bool
-  q2 True True = False
-  q2 _    _    = True 
+  q2 False True = False
+  q2 _     _    = True 
 Solution #2:
   q2 :: Bool -> Bool -> Bool
-  q2 True False = False
-  q2 _    _     = True 
-Solution #3:
-  q2 :: Bool -> Bool -> Bool
+  q2 True  False = True 
   q2 False False = True 
-  q2 False True  = True 
   q2 _     _     = False
-Solution #4:
+Solution #3:
   q2 :: Bool -> Bool -> Bool
   q2 False False = True 
   q2 _     _     = False
-Solution #5:
+Solution #4:
   q2 :: Bool -> Bool -> Bool
-  q2 True  False = False
   q2 False True  = False
+  q2 True  False = False
   q2 _     _     = True 
+Solution #5:
+  q2 :: Bool -> Bool -> Bool
+  q2 True True = False
+  q2 _    _    = True 
 Solution #6:
   q2 :: Bool -> Bool -> Bool
-  q2 False True = False
-  q2 _     _    = True 
+  q2 True False = False
+  q2 _    _     = True 
 Solution #7:
   q2 :: Bool -> Bool -> Bool
-  q2 False False = True 
-  q2 True  False = True 
-  q2 _     _     = False
+  q2 True True  = False
+  q2 True False = False
+  q2 _    _     = True 
 Solution #8:
   q2 :: Bool -> Bool -> Bool
-  q2 False True  = True 
-  q2 True  False = True 
-  q2 _     _     = False
+  q2 True  False = False
+  q2 False False = False
+  q2 _     _     = True 
 Solution #9:
   q2 :: Bool -> Bool -> Bool
-  q2 True False = True 
-  q2 True True  = True 
-  q2 _    _     = False
+  q2 True True = True 
+  q2 _    _    = False
 Solution #10:
   q2 :: Bool -> Bool -> Bool
+  q2 True True  = True 
   q2 True False = True 
   q2 _    _     = False
 Solution #11:
   q2 :: Bool -> Bool -> Bool
-  q2 True True = True 
-  q2 _    _    = False
+  q2 True False = True 
+  q2 _    _     = False
 Solution #12:
   q2 :: Bool -> Bool -> Bool
-  q2 False True = True 
-  q2 True  True = True 
-  q2 _     _    = False
+  q2 True  False = True 
+  q2 False True  = True 
+  q2 _     _     = False
 Solution #13:
   q2 :: Bool -> Bool -> Bool
   q2 False True = True 
diff --git a/SBVTestSuite/GoldFiles/uiSat_test3.gold b/SBVTestSuite/GoldFiles/uiSat_test3.gold
--- a/SBVTestSuite/GoldFiles/uiSat_test3.gold
+++ b/SBVTestSuite/GoldFiles/uiSat_test3.gold
@@ -140,2386 +140,2150 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) false true false)))
-[GOOD] (define-fun q1_model5 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model5_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1        x!0)
-                            (q1_model5 x!0))))
-[GOOD] (define-fun q2_model5 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) false
-          true)
-       )
-[GOOD] (define-fun q2_model5_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2        x!0 x!1)
-                            (q2_model5 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_5 () Bool 
-               (or q1_model5_reject
-                   q2_model5_reject
-               ))
-[GOOD] (assert uiFunRejector_model_5)
-Looking for solution 6
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and (not x!1) (not x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) true))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model6 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model6_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1        x!0)
-                            (q1_model6 x!0))))
-[GOOD] (define-fun q2_model6 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) true
-          false)
-       )
-[GOOD] (define-fun q2_model6_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2        x!0 x!1)
-                            (q2_model6 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_6 () Bool 
-               (or q1_model6_reject
-                   q2_model6_reject
-               ))
-[GOOD] (assert uiFunRejector_model_6)
-Looking for solution 7
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) true false false)))
-[GOOD] (define-fun q1_model7 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model7_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1        x!0)
-                            (q1_model7 x!0))))
-[GOOD] (define-fun q2_model7 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) false
-          true)
-       )
-[GOOD] (define-fun q2_model7_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2        x!0 x!1)
-                            (q2_model7 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_7 () Bool 
-               (or q1_model7_reject
-                   q2_model7_reject
-               ))
-[GOOD] (assert uiFunRejector_model_7)
-Looking for solution 8
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) true false false) true true false)))
-[GOOD] (define-fun q1_model8 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model8_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1        x!0)
-                            (q1_model8 x!0))))
-[GOOD] (define-fun q2_model8 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) false
-          (ite (and (= x!0 true) (= x!1 false)) false
-          true))
-       )
-[GOOD] (define-fun q2_model8_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2        x!0 x!1)
-                            (q2_model8 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_8 () Bool 
-               (or q1_model8_reject
-                   q2_model8_reject
-               ))
-[GOOD] (assert uiFunRejector_model_8)
-Looking for solution 9
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) true true false)))
-[GOOD] (define-fun q1_model9 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model9_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1        x!0)
-                            (q1_model9 x!0))))
-[GOOD] (define-fun q2_model9 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) false
-          true)
-       )
-[GOOD] (define-fun q2_model9_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2        x!0 x!1)
-                            (q2_model9 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_9 () Bool 
-               (or q1_model9_reject
-                   q2_model9_reject
-               ))
-[GOOD] (assert uiFunRejector_model_9)
-Looking for solution 10
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 ((as const Array) true)))
-[GOOD] (define-fun q1_model10 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model10_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model10 x!0))))
-[GOOD] (define-fun q2_model10 ((x!0 Bool) (x!1 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q2_model10_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model10 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_10 () Bool 
-               (or q1_model10_reject
-                   q2_model10_reject
-               ))
-[GOOD] (assert uiFunRejector_model_10)
-Looking for solution 11
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) true false false)))
-[GOOD] (define-fun q1_model11 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model11_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model11 x!0))))
-[GOOD] (define-fun q2_model11 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) false
-          true)
-       )
-[GOOD] (define-fun q2_model11_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model11 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_11 () Bool 
-               (or q1_model11_reject
-                   q2_model11_reject
-               ))
-[GOOD] (assert uiFunRejector_model_11)
-Looking for solution 12
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) true true false)))
-[GOOD] (define-fun q1_model12 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model12_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model12 x!0))))
-[GOOD] (define-fun q2_model12 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) false
-          true)
-       )
-[GOOD] (define-fun q2_model12_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model12 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_12 () Bool 
-               (or q1_model12_reject
-                   q2_model12_reject
-               ))
-[GOOD] (assert uiFunRejector_model_12)
-Looking for solution 13
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) true true false) true false false)))
-[GOOD] (define-fun q1_model13 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model13_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model13 x!0))))
-[GOOD] (define-fun q2_model13 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) false
-          (ite (and (= x!0 true) (= x!1 true)) false
-          true))
-       )
-[GOOD] (define-fun q2_model13_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model13 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_13 () Bool 
-               (or q1_model13_reject
-                   q2_model13_reject
-               ))
-[GOOD] (assert uiFunRejector_model_13)
-Looking for solution 14
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool))
-         (or (and (not x!1) (not x!2)) (and x!1 (not x!2))))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) true))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model14 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model14_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model14 x!0))))
-[GOOD] (define-fun q2_model14 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) true
-          (ite (and (= x!0 true) (= x!1 false)) true
-          false))
-       )
-[GOOD] (define-fun q2_model14_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model14 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_14 () Bool 
-               (or q1_model14_reject
-                   q2_model14_reject
-               ))
-[GOOD] (assert uiFunRejector_model_14)
-Looking for solution 15
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) false true false)))
-[GOOD] (define-fun q1_model15 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model15_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model15 x!0))))
-[GOOD] (define-fun q2_model15 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) false
-          true)
-       )
-[GOOD] (define-fun q2_model15_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model15 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_15 () Bool 
-               (or q1_model15_reject
-                   q2_model15_reject
-               ))
-[GOOD] (assert uiFunRejector_model_15)
-Looking for solution 16
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) (not x!1))))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) false true false) true true false)))
-[GOOD] (define-fun q1_model16 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model16_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model16 x!0))))
-[GOOD] (define-fun q2_model16 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) false
-          (ite (and (= x!0 false) (= x!1 true)) false
-          true))
-       )
-[GOOD] (define-fun q2_model16_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model16 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_16 () Bool 
-               (or q1_model16_reject
-                   q2_model16_reject
-               ))
-[GOOD] (assert uiFunRejector_model_16)
-Looking for solution 17
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) false true false)))
-[GOOD] (define-fun q1_model17 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model17_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model17 x!0))))
-[GOOD] (define-fun q2_model17 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) false
-          true)
-       )
-[GOOD] (define-fun q2_model17_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model17 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_17 () Bool 
-               (or q1_model17_reject
-                   q2_model17_reject
-               ))
-[GOOD] (assert uiFunRejector_model_17)
-Looking for solution 18
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) false true false) true true false)))
-[GOOD] (define-fun q1_model18 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model18_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model18 x!0))))
-[GOOD] (define-fun q2_model18 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) false
-          (ite (and (= x!0 false) (= x!1 true)) false
-          true))
-       )
-[GOOD] (define-fun q2_model18_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model18 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_18 () Bool 
-               (or q1_model18_reject
-                   q2_model18_reject
-               ))
-[GOOD] (assert uiFunRejector_model_18)
-Looking for solution 19
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool))
-         (or (and (not x!1) (not x!2)) (and x!1 (not x!2))))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) true))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model19 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model19_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model19 x!0))))
-[GOOD] (define-fun q2_model19 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) true
-          (ite (and (= x!0 true) (= x!1 false)) true
-          false))
-       )
-[GOOD] (define-fun q2_model19_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model19 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_19 () Bool 
-               (or q1_model19_reject
-                   q2_model19_reject
-               ))
-[GOOD] (assert uiFunRejector_model_19)
-Looking for solution 20
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) true false false) false true false)))
-[GOOD] (define-fun q1_model20 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model20_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model20 x!0))))
-[GOOD] (define-fun q2_model20 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) false
-          (ite (and (= x!0 true) (= x!1 false)) false
-          true))
-       )
-[GOOD] (define-fun q2_model20_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model20 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_20 () Bool 
-               (or q1_model20_reject
-                   q2_model20_reject
-               ))
-[GOOD] (assert uiFunRejector_model_20)
-Looking for solution 21
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) false true false) true false false)))
-[GOOD] (define-fun q1_model21 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model21_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model21 x!0))))
-[GOOD] (define-fun q2_model21 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) false
-          (ite (and (= x!0 false) (= x!1 true)) false
-          true))
-       )
-[GOOD] (define-fun q2_model21_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model21 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_21 () Bool 
-               (or q1_model21_reject
-                   q2_model21_reject
-               ))
-[GOOD] (assert uiFunRejector_model_21)
-Looking for solution 22
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) false true false) true false false)))
-[GOOD] (define-fun q1_model22 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model22_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model22 x!0))))
-[GOOD] (define-fun q2_model22 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) false
-          (ite (and (= x!0 false) (= x!1 true)) false
-          true))
-       )
-[GOOD] (define-fun q2_model22_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model22 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_22 () Bool 
-               (or q1_model22_reject
-                   q2_model22_reject
-               ))
-[GOOD] (assert uiFunRejector_model_22)
-Looking for solution 23
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) false true false) true false false)))
-[GOOD] (define-fun q1_model23 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model23_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model23 x!0))))
-[GOOD] (define-fun q2_model23 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) false
-          (ite (and (= x!0 false) (= x!1 true)) false
-          true))
-       )
-[GOOD] (define-fun q2_model23_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model23 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_23 () Bool 
-               (or q1_model23_reject
-                   q2_model23_reject
-               ))
-[GOOD] (assert uiFunRejector_model_23)
-Looking for solution 24
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) true false false)))
-[GOOD] (define-fun q1_model24 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model24_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model24 x!0))))
-[GOOD] (define-fun q2_model24 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) false
-          true)
-       )
-[GOOD] (define-fun q2_model24_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model24 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_24 () Bool 
-               (or q1_model24_reject
-                   q2_model24_reject
-               ))
-[GOOD] (assert uiFunRejector_model_24)
-Looking for solution 25
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) true false false)))
-[GOOD] (define-fun q1_model25 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model25_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model25 x!0))))
-[GOOD] (define-fun q2_model25 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) false
-          true)
-       )
-[GOOD] (define-fun q2_model25_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model25 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_25 () Bool 
-               (or q1_model25_reject
-                   q2_model25_reject
-               ))
-[GOOD] (assert uiFunRejector_model_25)
-Looking for solution 26
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 ((as const Array) true)))
-[GOOD] (define-fun q1_model26 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model26_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model26 x!0))))
-[GOOD] (define-fun q2_model26 ((x!0 Bool) (x!1 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q2_model26_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model26 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_26 () Bool 
-               (or q1_model26_reject
-                   q2_model26_reject
-               ))
-[GOOD] (assert uiFunRejector_model_26)
-Looking for solution 27
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 ((as const Array) true)))
-[GOOD] (define-fun q1_model27 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model27_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model27 x!0))))
-[GOOD] (define-fun q2_model27 ((x!0 Bool) (x!1 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q2_model27_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model27 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_27 () Bool 
-               (or q1_model27_reject
-                   q2_model27_reject
-               ))
-[GOOD] (assert uiFunRejector_model_27)
-Looking for solution 28
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) true true false)))
-[GOOD] (define-fun q1_model28 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model28_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model28 x!0))))
-[GOOD] (define-fun q2_model28 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) false
-          true)
-       )
-[GOOD] (define-fun q2_model28_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model28 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_28 () Bool 
-               (or q1_model28_reject
-                   q2_model28_reject
-               ))
-[GOOD] (assert uiFunRejector_model_28)
-Looking for solution 29
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) false false false)))
-[GOOD] (define-fun q1_model29 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model29_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model29 x!0))))
-[GOOD] (define-fun q2_model29 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) false
-          true)
-       )
-[GOOD] (define-fun q2_model29_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model29 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_29 () Bool 
-               (or q1_model29_reject
-                   q2_model29_reject
-               ))
-[GOOD] (assert uiFunRejector_model_29)
-Looking for solution 30
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and x!1 x!2))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
-[GOOD] (define-fun q1_model30 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model30_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model30 x!0))))
-[GOOD] (define-fun q2_model30 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) true
-          false)
-       )
-[GOOD] (define-fun q2_model30_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model30 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_30 () Bool 
-               (or q1_model30_reject
-                   q2_model30_reject
-               ))
-[GOOD] (assert uiFunRejector_model_30)
-Looking for solution 31
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and x!1 x!2) (and (not x!1) x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
-[GOOD] (define-fun q1_model31 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model31_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model31 x!0))))
-[GOOD] (define-fun q2_model31 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) true
-          (ite (and (= x!0 true) (= x!1 true)) true
-          false))
-       )
-[GOOD] (define-fun q2_model31_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model31 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_31 () Bool 
-               (or q1_model31_reject
-                   q2_model31_reject
-               ))
-[GOOD] (assert uiFunRejector_model_31)
-Looking for solution 32
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and (not x!1) x!2))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model32 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model32_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model32 x!0))))
-[GOOD] (define-fun q2_model32 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) true
-          false)
-       )
-[GOOD] (define-fun q2_model32_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model32 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_32 () Bool 
-               (or q1_model32_reject
-                   q2_model32_reject
-               ))
-[GOOD] (assert uiFunRejector_model_32)
-Looking for solution 33
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and x!1 x!2) (and (not x!1) x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
-[GOOD] (define-fun q1_model33 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model33_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model33 x!0))))
-[GOOD] (define-fun q2_model33 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) true
-          (ite (and (= x!0 true) (= x!1 true)) true
-          false))
-       )
-[GOOD] (define-fun q2_model33_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model33 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_33 () Bool 
-               (or q1_model33_reject
-                   q2_model33_reject
-               ))
-[GOOD] (assert uiFunRejector_model_33)
-Looking for solution 34
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 ((as const Array) false)))
-[GOOD] (define-fun q1_model34 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model34_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model34 x!0))))
-[GOOD] (define-fun q2_model34 ((x!0 Bool) (x!1 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q2_model34_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model34 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_34 () Bool 
-               (or q1_model34_reject
-                   q2_model34_reject
-               ))
-[GOOD] (assert uiFunRejector_model_34)
-Looking for solution 35
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) false false false) true true false)))
-[GOOD] (define-fun q1_model35 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model35_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model35 x!0))))
-[GOOD] (define-fun q2_model35 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) false
-          (ite (and (= x!0 false) (= x!1 false)) false
-          true))
-       )
-[GOOD] (define-fun q2_model35_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model35 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_35 () Bool 
-               (or q1_model35_reject
-                   q2_model35_reject
-               ))
-[GOOD] (assert uiFunRejector_model_35)
-Looking for solution 36
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and x!1 (not x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model36 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model36_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model36 x!0))))
-[GOOD] (define-fun q2_model36 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) true
-          false)
-       )
-[GOOD] (define-fun q2_model36_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model36 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_36 () Bool 
-               (or q1_model36_reject
-                   q2_model36_reject
-               ))
-[GOOD] (assert uiFunRejector_model_36)
-Looking for solution 37
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and x!1 x!2) (and x!1 (not x!2))))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
-[GOOD] (define-fun q1_model37 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model37_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model37 x!0))))
-[GOOD] (define-fun q2_model37 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) true
-          (ite (and (= x!0 true) (= x!1 true)) true
-          false))
-       )
-[GOOD] (define-fun q2_model37_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model37 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_37 () Bool 
-               (or q1_model37_reject
-                   q2_model37_reject
-               ))
-[GOOD] (assert uiFunRejector_model_37)
-Looking for solution 38
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and x!1 (not x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model38 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model38_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model38 x!0))))
-[GOOD] (define-fun q2_model38 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) true
-          false)
-       )
-[GOOD] (define-fun q2_model38_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model38 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_38 () Bool 
-               (or q1_model38_reject
-                   q2_model38_reject
-               ))
-[GOOD] (assert uiFunRejector_model_38)
-Looking for solution 39
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and x!1 x!2) (and x!1 (not x!2))))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
-[GOOD] (define-fun q1_model39 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model39_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model39 x!0))))
-[GOOD] (define-fun q2_model39 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) true
-          (ite (and (= x!0 true) (= x!1 true)) true
-          false))
-       )
-[GOOD] (define-fun q2_model39_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model39 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_39 () Bool 
-               (or q1_model39_reject
-                   q2_model39_reject
-               ))
-[GOOD] (assert uiFunRejector_model_39)
-Looking for solution 40
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) false false false)))
-[GOOD] (define-fun q1_model40 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model40_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model40 x!0))))
-[GOOD] (define-fun q2_model40 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) false
-          true)
-       )
-[GOOD] (define-fun q2_model40_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model40 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_40 () Bool 
-               (or q1_model40_reject
-                   q2_model40_reject
-               ))
-[GOOD] (assert uiFunRejector_model_40)
-Looking for solution 41
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) false false false) true true false)))
-[GOOD] (define-fun q1_model41 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
-       )
-[GOOD] (define-fun q1_model41_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model41 x!0))))
-[GOOD] (define-fun q2_model41 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) false
-          (ite (and (= x!0 false) (= x!1 false)) false
-          true))
-       )
-[GOOD] (define-fun q2_model41_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model41 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_41 () Bool 
-               (or q1_model41_reject
-                   q2_model41_reject
-               ))
-[GOOD] (assert uiFunRejector_model_41)
-Looking for solution 42
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) (not x!1))))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool))
-         (or (and (not x!1) (not x!2)) (and (not x!1) x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) true))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model42 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model42_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model42 x!0))))
-[GOOD] (define-fun q2_model42 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) true
-          (ite (and (= x!0 false) (= x!1 true)) true
-          false))
-       )
-[GOOD] (define-fun q2_model42_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model42 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_42 () Bool 
-               (or q1_model42_reject
-                   q2_model42_reject
-               ))
-[GOOD] (assert uiFunRejector_model_42)
-Looking for solution 43
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and x!1 x!2))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
-[GOOD] (define-fun q1_model43 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model43_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model43 x!0))))
-[GOOD] (define-fun q2_model43 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) true
-          false)
-       )
-[GOOD] (define-fun q2_model43_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model43 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_43 () Bool 
-               (or q1_model43_reject
-                   q2_model43_reject
-               ))
-[GOOD] (assert uiFunRejector_model_43)
-Looking for solution 44
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) (not x!1))))
-[SEND] (get-value (q2))
-[RECV] ((q2 ((as const Array) false)))
-[GOOD] (define-fun q1_model44 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model44_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model44 x!0))))
-[GOOD] (define-fun q2_model44 ((x!0 Bool) (x!1 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q2_model44_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model44 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_44 () Bool 
-               (or q1_model44_reject
-                   q2_model44_reject
-               ))
-[GOOD] (assert uiFunRejector_model_44)
-Looking for solution 45
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) (not x!1))))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and x!1 (not x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model45 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model45_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model45 x!0))))
-[GOOD] (define-fun q2_model45 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) true
-          false)
-       )
-[GOOD] (define-fun q2_model45_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model45 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_45 () Bool 
-               (or q1_model45_reject
-                   q2_model45_reject
-               ))
-[GOOD] (assert uiFunRejector_model_45)
-Looking for solution 46
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) (not x!1))))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and (not x!1) x!2) (and x!1 (not x!2))))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model46 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model46_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model46 x!0))))
-[GOOD] (define-fun q2_model46 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) true
-          (ite (and (= x!0 true) (= x!1 false)) true
-          false))
-       )
-[GOOD] (define-fun q2_model46_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model46 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_46 () Bool 
-               (or q1_model46_reject
-                   q2_model46_reject
-               ))
-[GOOD] (assert uiFunRejector_model_46)
-Looking for solution 47
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) (not x!1))))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) false false false)))
-[GOOD] (define-fun q1_model47 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model47_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model47 x!0))))
-[GOOD] (define-fun q2_model47 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) false
-          true)
-       )
-[GOOD] (define-fun q2_model47_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model47 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_47 () Bool 
-               (or q1_model47_reject
-                   q2_model47_reject
-               ))
-[GOOD] (assert uiFunRejector_model_47)
-Looking for solution 48
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) false false false)))
-[GOOD] (define-fun q1_model48 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model48_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model48 x!0))))
-[GOOD] (define-fun q2_model48 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) false
-          true)
-       )
-[GOOD] (define-fun q2_model48_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model48 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_48 () Bool 
-               (or q1_model48_reject
-                   q2_model48_reject
-               ))
-[GOOD] (assert uiFunRejector_model_48)
-Looking for solution 49
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) false false false) false true false)))
-[GOOD] (define-fun q1_model49 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model49_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model49 x!0))))
-[GOOD] (define-fun q2_model49 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) false
-          (ite (and (= x!0 false) (= x!1 false)) false
-          true))
-       )
-[GOOD] (define-fun q2_model49_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model49 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_49 () Bool 
-               (or q1_model49_reject
-                   q2_model49_reject
-               ))
-[GOOD] (assert uiFunRejector_model_49)
-Looking for solution 50
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and x!1 x!2))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
-[GOOD] (define-fun q1_model50 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model50_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model50 x!0))))
-[GOOD] (define-fun q2_model50 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) true
-          false)
-       )
-[GOOD] (define-fun q2_model50_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model50 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_50 () Bool 
-               (or q1_model50_reject
-                   q2_model50_reject
-               ))
-[GOOD] (assert uiFunRejector_model_50)
-Looking for solution 51
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and x!1 x!2))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
-[GOOD] (define-fun q1_model51 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model51_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model51 x!0))))
-[GOOD] (define-fun q2_model51 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) true
-          false)
-       )
-[GOOD] (define-fun q2_model51_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model51 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_51 () Bool 
-               (or q1_model51_reject
-                   q2_model51_reject
-               ))
-[GOOD] (assert uiFunRejector_model_51)
-Looking for solution 52
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and x!1 x!2) (and x!1 (not x!2))))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
-[GOOD] (define-fun q1_model52 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model52_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model52 x!0))))
-[GOOD] (define-fun q2_model52 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) true
-          (ite (and (= x!0 true) (= x!1 true)) true
-          false))
-       )
-[GOOD] (define-fun q2_model52_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model52 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_52 () Bool 
-               (or q1_model52_reject
-                   q2_model52_reject
-               ))
-[GOOD] (assert uiFunRejector_model_52)
-Looking for solution 53
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and (not x!1) x!2))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model53 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model53_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model53 x!0))))
-[GOOD] (define-fun q2_model53 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) true
-          false)
-       )
-[GOOD] (define-fun q2_model53_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model53 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_53 () Bool 
-               (or q1_model53_reject
-                   q2_model53_reject
-               ))
-[GOOD] (assert uiFunRejector_model_53)
-Looking for solution 54
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and (not x!1) x!2))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model54 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model54_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model54 x!0))))
-[GOOD] (define-fun q2_model54 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) true
-          false)
-       )
-[GOOD] (define-fun q2_model54_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model54 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_54 () Bool 
-               (or q1_model54_reject
-                   q2_model54_reject
-               ))
-[GOOD] (assert uiFunRejector_model_54)
-Looking for solution 55
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and x!1 x!2) (and (not x!1) x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
-[GOOD] (define-fun q1_model55 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model55_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model55 x!0))))
-[GOOD] (define-fun q2_model55 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) true
-          (ite (and (= x!0 true) (= x!1 true)) true
-          false))
-       )
-[GOOD] (define-fun q2_model55_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model55 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_55 () Bool 
-               (or q1_model55_reject
-                   q2_model55_reject
-               ))
-[GOOD] (assert uiFunRejector_model_55)
-Looking for solution 56
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and x!1 x!2) (and (not x!1) x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
-[GOOD] (define-fun q1_model56 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model56_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model56 x!0))))
-[GOOD] (define-fun q2_model56 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) true
-          (ite (and (= x!0 true) (= x!1 true)) true
-          false))
-       )
-[GOOD] (define-fun q2_model56_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model56 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_56 () Bool 
-               (or q1_model56_reject
-                   q2_model56_reject
-               ))
-[GOOD] (assert uiFunRejector_model_56)
-Looking for solution 57
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and (not x!1) x!2))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model57 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model57_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model57 x!0))))
-[GOOD] (define-fun q2_model57 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) true
-          false)
-       )
-[GOOD] (define-fun q2_model57_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model57 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_57 () Bool 
-               (or q1_model57_reject
-                   q2_model57_reject
-               ))
-[GOOD] (assert uiFunRejector_model_57)
-Looking for solution 58
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and (not x!1) x!2) (and x!1 (not x!2))))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model58 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model58_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model58 x!0))))
-[GOOD] (define-fun q2_model58 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) true
-          (ite (and (= x!0 true) (= x!1 false)) true
-          false))
-       )
-[GOOD] (define-fun q2_model58_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model58 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_58 () Bool 
-               (or q1_model58_reject
-                   q2_model58_reject
-               ))
-[GOOD] (assert uiFunRejector_model_58)
-Looking for solution 59
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and x!1 (not x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) false))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model59 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model59_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model59 x!0))))
-[GOOD] (define-fun q2_model59 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) true
-          false)
-       )
-[GOOD] (define-fun q2_model59_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model59 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_59 () Bool 
-               (or q1_model59_reject
-                   q2_model59_reject
-               ))
-[GOOD] (assert uiFunRejector_model_59)
-Looking for solution 60
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and (not x!1) (not x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) true))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model60 ((x!0 Bool)) Bool
-          false
-       )
-[GOOD] (define-fun q1_model60_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model60 x!0))))
-[GOOD] (define-fun q2_model60 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) true
-          false)
-       )
-[GOOD] (define-fun q2_model60_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model60 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_60 () Bool 
-               (or q1_model60_reject
-                   q2_model60_reject
-               ))
-[GOOD] (assert uiFunRejector_model_60)
-Looking for solution 61
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) true true false)))
-[GOOD] (define-fun q1_model61 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model61_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model61 x!0))))
-[GOOD] (define-fun q2_model61 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 true)) false
-          true)
-       )
-[GOOD] (define-fun q2_model61_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model61 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_61 () Bool 
-               (or q1_model61_reject
-                   q2_model61_reject
-               ))
-[GOOD] (assert uiFunRejector_model_61)
-Looking for solution 62
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool))
-         (or (and (not x!1) (not x!2)) (and (not x!1) x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) true))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) true))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model62 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model62_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model62 x!0))))
-[GOOD] (define-fun q2_model62 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) true
-          (ite (and (= x!0 false) (= x!1 true)) true
-          false))
-       )
-[GOOD] (define-fun q2_model62_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model62 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_62 () Bool 
-               (or q1_model62_reject
-                   q2_model62_reject
-               ))
-[GOOD] (assert uiFunRejector_model_62)
-Looking for solution 63
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and (not x!1) (not x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) true))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model63 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
-       )
-[GOOD] (define-fun q1_model63_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model63 x!0))))
-[GOOD] (define-fun q2_model63 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) true
-          false)
-       )
-[GOOD] (define-fun q2_model63_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model63 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_63 () Bool 
-               (or q1_model63_reject
-                   q2_model63_reject
-               ))
-[GOOD] (assert uiFunRejector_model_63)
-Looking for solution 64
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
-[SEND] (get-value (q2))
-[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (and (not x!1) (not x!2)))))
-[SEND] (get-value ((q2 false false)))
-[RECV] (((q2 false false) true))
-[SEND] (get-value ((q2 false true)))
-[RECV] (((q2 false true) false))
-[SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
-[SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
-[GOOD] (define-fun q1_model64 ((x!0 Bool)) Bool
-          true
-       )
-[GOOD] (define-fun q1_model64_reject () Bool
-          (exists ((x!0 Bool))
-                  (distinct (q1         x!0)
-                            (q1_model64 x!0))))
-[GOOD] (define-fun q2_model64 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 false)) true
-          false)
-       )
-[GOOD] (define-fun q2_model64_reject () Bool
-          (exists ((x!0 Bool) (x!1 Bool))
-                  (distinct (q2         x!0 x!1)
-                            (q2_model64 x!0 x!1))))
-[GOOD] (define-fun uiFunRejector_model_64 () Bool 
-               (or q1_model64_reject
-                   q2_model64_reject
-               ))
-[GOOD] (assert uiFunRejector_model_64)
-Looking for solution 65
-[SEND] (check-sat)
-[RECV] unsat
-*** Solver   : Z3
-*** Exit code: ExitSuccess
-
-RESULT: Solution #1:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False False = True 
-  q2 _     _     = False
-Solution #2:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False False = True 
-  q2 _     _     = False
-Solution #3:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False False = True 
-  q2 False True  = True 
-  q2 _     _     = False
-Solution #4:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True True = False
-  q2 _    _    = True 
-Solution #5:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False False = True 
-  q2 _     _     = False
-Solution #6:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True False = True 
-  q2 _    _     = False
-Solution #7:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True  = True 
-  q2 True  False = True 
-  q2 _     _     = False
-Solution #8:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True = True 
-  q2 _     _    = False
-Solution #9:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True = True 
-  q2 True  True = True 
-  q2 _     _    = False
-Solution #10:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True = True 
-  q2 True  True = True 
-  q2 _     _    = False
-Solution #11:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True = True 
-  q2 _     _    = False
-Solution #12:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True = True 
-  q2 _     _    = False
-Solution #13:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True False = True 
-  q2 True True  = True 
-  q2 _    _     = False
-Solution #14:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True True = True 
-  q2 _    _    = False
-Solution #15:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True True = True 
-  q2 _    _    = False
-Solution #16:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True  = False
-  q2 False False = False
-  q2 _     _     = True 
-Solution #17:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False False = False
-  q2 _     _     = True 
-Solution #18:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False False = False
-  q2 _     _     = True 
-Solution #19:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True  = True 
-  q2 True  False = True 
-  q2 _     _     = False
-Solution #20:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True False = True 
-  q2 _    _     = False
-Solution #21:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 _ _ = False
-Solution #22:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True True = True 
-  q2 _    _    = False
-Solution #23:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False False = True 
-  q2 False True  = True 
-  q2 _     _     = False
-Solution #24:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True  True  = False
-  q2 False False = False
-  q2 _     _     = True 
-Solution #25:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False False = False
-  q2 _     _     = True 
-Solution #26:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True False = True 
-  q2 True True  = True 
-  q2 _    _     = False
-Solution #27:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True False = True 
-  q2 _    _     = False
-Solution #28:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True False = True 
-  q2 True True  = True 
-  q2 _    _     = False
-Solution #29:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True False = True 
-  q2 _    _     = False
-Solution #30:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True  True  = False
-  q2 False False = False
-  q2 _     _     = True 
-Solution #31:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 _ _ = False
-Solution #32:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True = True 
-  q2 True  True = True 
-  q2 _     _    = False
-Solution #33:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True = True 
-  q2 _     _    = False
-Solution #34:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True = True 
-  q2 True  True = True 
-  q2 _     _    = False
-Solution #35:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True True = True 
-  q2 _    _    = False
-Solution #36:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False False = False
-  q2 _     _     = True 
-Solution #37:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True True = False
-  q2 _    _    = True 
-Solution #38:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 _ _ = True
-Solution #39:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 _ _ = True
-Solution #40:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True False = False
-  q2 _    _     = True 
-Solution #41:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True False = False
-  q2 _    _     = True 
-Solution #42:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True  False = False
-  q2 False True  = False
-  q2 _     _     = True 
-Solution #43:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True  False = False
-  q2 False True  = False
-  q2 _     _     = True 
-Solution #44:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True  False = False
-  q2 False True  = False
-  q2 _     _     = True 
-Solution #45:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True  = False
-  q2 True  False = False
-  q2 _     _     = True 
-Solution #46:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False False = True 
-  q2 True  False = True 
-  q2 _     _     = False
-Solution #47:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True  True = False
-  q2 False True = False
-  q2 _     _    = True 
-Solution #48:
-  q1 :: Bool -> Bool
-  q1 _ = True
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True = False
-  q2 _     _    = True 
-Solution #49:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True  True = False
-  q2 False True = False
-  q2 _     _    = True 
-Solution #50:
-  q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True = False
-  q2 _     _    = True 
-Solution #51:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False False = True 
-  q2 True  False = True 
-  q2 _     _     = False
-Solution #52:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True False = False
-  q2 True True  = False
-  q2 _    _     = True 
-Solution #53:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True True = False
-  q2 _    _    = True 
-Solution #54:
-  q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True False = False
-  q2 _    _     = True 
-Solution #55:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 _ _ = True
-Solution #56:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True True = False
-  q2 _    _    = True 
-Solution #57:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True True  = False
-  q2 True False = False
-  q2 _    _     = True 
-Solution #58:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 True False = False
-  q2 _    _     = True 
-Solution #59:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False False = True 
-  q2 _     _     = False
-Solution #60:
-  q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True = False
-  q2 _     _    = True 
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) false false true)))
+[GOOD] (define-fun q1_model5 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model5_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1        x!0)
+                            (q1_model5 x!0))))
+[GOOD] (define-fun q2_model5 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 false)) true
+          false)
+       )
+[GOOD] (define-fun q2_model5_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2        x!0 x!1)
+                            (q2_model5 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_5 () Bool 
+               (or q1_model5_reject
+                   q2_model5_reject
+               ))
+[GOOD] (assert uiFunRejector_model_5)
+Looking for solution 6
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) false false true)))
+[GOOD] (define-fun q1_model6 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model6_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1        x!0)
+                            (q1_model6 x!0))))
+[GOOD] (define-fun q2_model6 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 false)) true
+          false)
+       )
+[GOOD] (define-fun q2_model6_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2        x!0 x!1)
+                            (q2_model6 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_6 () Bool 
+               (or q1_model6_reject
+                   q2_model6_reject
+               ))
+[GOOD] (assert uiFunRejector_model_6)
+Looking for solution 7
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) false true false)))
+[GOOD] (define-fun q1_model7 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model7_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1        x!0)
+                            (q1_model7 x!0))))
+[GOOD] (define-fun q2_model7 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) false
+          true)
+       )
+[GOOD] (define-fun q2_model7_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2        x!0 x!1)
+                            (q2_model7 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_7 () Bool 
+               (or q1_model7_reject
+                   q2_model7_reject
+               ))
+[GOOD] (assert uiFunRejector_model_7)
+Looking for solution 8
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) true) false true false) true true false)))
+[GOOD] (define-fun q1_model8 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model8_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1        x!0)
+                            (q1_model8 x!0))))
+[GOOD] (define-fun q2_model8 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) false
+          (ite (and (= x!0 false) (= x!1 true)) false
+          true))
+       )
+[GOOD] (define-fun q2_model8_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2        x!0 x!1)
+                            (q2_model8 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_8 () Bool 
+               (or q1_model8_reject
+                   q2_model8_reject
+               ))
+[GOOD] (assert uiFunRejector_model_8)
+Looking for solution 9
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) true true false)))
+[GOOD] (define-fun q1_model9 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model9_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1        x!0)
+                            (q1_model9 x!0))))
+[GOOD] (define-fun q2_model9 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) false
+          true)
+       )
+[GOOD] (define-fun q2_model9_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2        x!0 x!1)
+                            (q2_model9 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_9 () Bool 
+               (or q1_model9_reject
+                   q2_model9_reject
+               ))
+[GOOD] (assert uiFunRejector_model_9)
+Looking for solution 10
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 ((as const Array) true)))
+[GOOD] (define-fun q1_model10 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model10_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model10 x!0))))
+[GOOD] (define-fun q2_model10 ((x!0 Bool) (x!1 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q2_model10_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model10 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_10 () Bool 
+               (or q1_model10_reject
+                   q2_model10_reject
+               ))
+[GOOD] (assert uiFunRejector_model_10)
+Looking for solution 11
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) true false false)))
+[GOOD] (define-fun q1_model11 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model11_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model11 x!0))))
+[GOOD] (define-fun q2_model11 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) false
+          true)
+       )
+[GOOD] (define-fun q2_model11_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model11 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_11 () Bool 
+               (or q1_model11_reject
+                   q2_model11_reject
+               ))
+[GOOD] (assert uiFunRejector_model_11)
+Looking for solution 12
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) true) true false false) false true false)))
+[GOOD] (define-fun q1_model12 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model12_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model12 x!0))))
+[GOOD] (define-fun q2_model12 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) false
+          (ite (and (= x!0 true) (= x!1 false)) false
+          true))
+       )
+[GOOD] (define-fun q2_model12_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model12 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_12 () Bool 
+               (or q1_model12_reject
+                   q2_model12_reject
+               ))
+[GOOD] (assert uiFunRejector_model_12)
+Looking for solution 13
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) true) true false false) false true false)))
+[GOOD] (define-fun q1_model13 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model13_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model13 x!0))))
+[GOOD] (define-fun q2_model13 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) false
+          (ite (and (= x!0 true) (= x!1 false)) false
+          true))
+       )
+[GOOD] (define-fun q2_model13_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model13 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_13 () Bool 
+               (or q1_model13_reject
+                   q2_model13_reject
+               ))
+[GOOD] (assert uiFunRejector_model_13)
+Looking for solution 14
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) false false true)))
+[GOOD] (define-fun q1_model14 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model14_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model14 x!0))))
+[GOOD] (define-fun q2_model14 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 false)) true
+          false)
+       )
+[GOOD] (define-fun q2_model14_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model14 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_14 () Bool 
+               (or q1_model14_reject
+                   q2_model14_reject
+               ))
+[GOOD] (assert uiFunRejector_model_14)
+Looking for solution 15
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) false false true) true false true)))
+[GOOD] (define-fun q1_model15 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model15_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model15 x!0))))
+[GOOD] (define-fun q2_model15 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) true
+          (ite (and (= x!0 false) (= x!1 false)) true
+          false))
+       )
+[GOOD] (define-fun q2_model15_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model15 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_15 () Bool 
+               (or q1_model15_reject
+                   q2_model15_reject
+               ))
+[GOOD] (assert uiFunRejector_model_15)
+Looking for solution 16
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) true) true false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) false false true) true false true)))
+[GOOD] (define-fun q1_model16 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) false
+          true)
+       )
+[GOOD] (define-fun q1_model16_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model16 x!0))))
+[GOOD] (define-fun q2_model16 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) true
+          (ite (and (= x!0 false) (= x!1 false)) true
+          false))
+       )
+[GOOD] (define-fun q2_model16_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model16 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_16 () Bool 
+               (or q1_model16_reject
+                   q2_model16_reject
+               ))
+[GOOD] (assert uiFunRejector_model_16)
+Looking for solution 17
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) true) true false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) false false true)))
+[GOOD] (define-fun q1_model17 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) false
+          true)
+       )
+[GOOD] (define-fun q1_model17_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model17 x!0))))
+[GOOD] (define-fun q2_model17 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 false)) true
+          false)
+       )
+[GOOD] (define-fun q2_model17_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model17 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_17 () Bool 
+               (or q1_model17_reject
+                   q2_model17_reject
+               ))
+[GOOD] (assert uiFunRejector_model_17)
+Looking for solution 18
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) true) true false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) false false true) true true true)))
+[GOOD] (define-fun q1_model18 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) false
+          true)
+       )
+[GOOD] (define-fun q1_model18_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model18 x!0))))
+[GOOD] (define-fun q2_model18 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) true
+          (ite (and (= x!0 false) (= x!1 false)) true
+          false))
+       )
+[GOOD] (define-fun q2_model18_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model18 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_18 () Bool 
+               (or q1_model18_reject
+                   q2_model18_reject
+               ))
+[GOOD] (assert uiFunRejector_model_18)
+Looking for solution 19
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) true) false true false) true false false)))
+[GOOD] (define-fun q1_model19 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model19_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model19 x!0))))
+[GOOD] (define-fun q2_model19 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) false
+          (ite (and (= x!0 false) (= x!1 true)) false
+          true))
+       )
+[GOOD] (define-fun q2_model19_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model19 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_19 () Bool 
+               (or q1_model19_reject
+                   q2_model19_reject
+               ))
+[GOOD] (assert uiFunRejector_model_19)
+Looking for solution 20
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) true) true true false) false true false)))
+[GOOD] (define-fun q1_model20 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model20_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model20 x!0))))
+[GOOD] (define-fun q2_model20 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) false
+          (ite (and (= x!0 true) (= x!1 true)) false
+          true))
+       )
+[GOOD] (define-fun q2_model20_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model20 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_20 () Bool 
+               (or q1_model20_reject
+                   q2_model20_reject
+               ))
+[GOOD] (assert uiFunRejector_model_20)
+Looking for solution 21
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) false true false)))
+[GOOD] (define-fun q1_model21 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model21_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model21 x!0))))
+[GOOD] (define-fun q2_model21 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) false
+          true)
+       )
+[GOOD] (define-fun q2_model21_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model21 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_21 () Bool 
+               (or q1_model21_reject
+                   q2_model21_reject
+               ))
+[GOOD] (assert uiFunRejector_model_21)
+Looking for solution 22
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) true) true true false) true false false)))
+[GOOD] (define-fun q1_model22 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model22_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model22 x!0))))
+[GOOD] (define-fun q2_model22 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) false
+          (ite (and (= x!0 true) (= x!1 true)) false
+          true))
+       )
+[GOOD] (define-fun q2_model22_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model22 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_22 () Bool 
+               (or q1_model22_reject
+                   q2_model22_reject
+               ))
+[GOOD] (assert uiFunRejector_model_22)
+Looking for solution 23
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) true) true true false) true false false)))
+[GOOD] (define-fun q1_model23 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model23_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model23 x!0))))
+[GOOD] (define-fun q2_model23 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) false
+          (ite (and (= x!0 true) (= x!1 true)) false
+          true))
+       )
+[GOOD] (define-fun q2_model23_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model23 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_23 () Bool 
+               (or q1_model23_reject
+                   q2_model23_reject
+               ))
+[GOOD] (assert uiFunRejector_model_23)
+Looking for solution 24
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) true) true false false) true true false)))
+[GOOD] (define-fun q1_model24 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model24_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model24 x!0))))
+[GOOD] (define-fun q2_model24 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) false
+          (ite (and (= x!0 true) (= x!1 false)) false
+          true))
+       )
+[GOOD] (define-fun q2_model24_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model24 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_24 () Bool 
+               (or q1_model24_reject
+                   q2_model24_reject
+               ))
+[GOOD] (assert uiFunRejector_model_24)
+Looking for solution 25
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) true false false)))
+[GOOD] (define-fun q1_model25 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model25_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model25 x!0))))
+[GOOD] (define-fun q2_model25 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) false
+          true)
+       )
+[GOOD] (define-fun q2_model25_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model25 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_25 () Bool 
+               (or q1_model25_reject
+                   q2_model25_reject
+               ))
+[GOOD] (assert uiFunRejector_model_25)
+Looking for solution 26
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) false) false true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) true) true false false) true true false)))
+[GOOD] (define-fun q1_model26 ((x!0 Bool)) Bool
+          (ite (and (= x!0 false)) true
+          false)
+       )
+[GOOD] (define-fun q1_model26_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model26 x!0))))
+[GOOD] (define-fun q2_model26 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) false
+          (ite (and (= x!0 true) (= x!1 false)) false
+          true))
+       )
+[GOOD] (define-fun q2_model26_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model26 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_26 () Bool 
+               (or q1_model26_reject
+                   q2_model26_reject
+               ))
+[GOOD] (assert uiFunRejector_model_26)
+Looking for solution 27
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 ((as const Array) false)))
+[GOOD] (define-fun q1_model27 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model27_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model27 x!0))))
+[GOOD] (define-fun q2_model27 ((x!0 Bool) (x!1 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q2_model27_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model27 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_27 () Bool 
+               (or q1_model27_reject
+                   q2_model27_reject
+               ))
+[GOOD] (assert uiFunRejector_model_27)
+Looking for solution 28
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) false false false)))
+[GOOD] (define-fun q1_model28 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model28_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model28 x!0))))
+[GOOD] (define-fun q2_model28 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 false)) false
+          true)
+       )
+[GOOD] (define-fun q2_model28_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model28 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_28 () Bool 
+               (or q1_model28_reject
+                   q2_model28_reject
+               ))
+[GOOD] (assert uiFunRejector_model_28)
+Looking for solution 29
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) false true true)))
+[GOOD] (define-fun q1_model29 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model29_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model29 x!0))))
+[GOOD] (define-fun q2_model29 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) true
+          false)
+       )
+[GOOD] (define-fun q2_model29_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model29 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_29 () Bool 
+               (or q1_model29_reject
+                   q2_model29_reject
+               ))
+[GOOD] (assert uiFunRejector_model_29)
+Looking for solution 30
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) false true true) true false true)))
+[GOOD] (define-fun q1_model30 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model30_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model30 x!0))))
+[GOOD] (define-fun q2_model30 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) true
+          (ite (and (= x!0 false) (= x!1 true)) true
+          false))
+       )
+[GOOD] (define-fun q2_model30_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model30 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_30 () Bool 
+               (or q1_model30_reject
+                   q2_model30_reject
+               ))
+[GOOD] (assert uiFunRejector_model_30)
+Looking for solution 31
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) true true true)))
+[GOOD] (define-fun q1_model31 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model31_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model31 x!0))))
+[GOOD] (define-fun q2_model31 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) true
+          false)
+       )
+[GOOD] (define-fun q2_model31_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model31 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_31 () Bool 
+               (or q1_model31_reject
+                   q2_model31_reject
+               ))
+[GOOD] (assert uiFunRejector_model_31)
+Looking for solution 32
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) true false true)))
+[GOOD] (define-fun q1_model32 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model32_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model32 x!0))))
+[GOOD] (define-fun q2_model32 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) true
+          false)
+       )
+[GOOD] (define-fun q2_model32_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model32 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_32 () Bool 
+               (or q1_model32_reject
+                   q2_model32_reject
+               ))
+[GOOD] (assert uiFunRejector_model_32)
+Looking for solution 33
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) false false false)))
+[GOOD] (define-fun q1_model33 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model33_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model33 x!0))))
+[GOOD] (define-fun q2_model33 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 false)) false
+          true)
+       )
+[GOOD] (define-fun q2_model33_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model33 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_33 () Bool 
+               (or q1_model33_reject
+                   q2_model33_reject
+               ))
+[GOOD] (assert uiFunRejector_model_33)
+Looking for solution 34
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) true false true)))
+[GOOD] (define-fun q1_model34 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model34_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model34 x!0))))
+[GOOD] (define-fun q2_model34 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) true
+          false)
+       )
+[GOOD] (define-fun q2_model34_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model34 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_34 () Bool 
+               (or q1_model34_reject
+                   q2_model34_reject
+               ))
+[GOOD] (assert uiFunRejector_model_34)
+Looking for solution 35
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) true false true) true true true)))
+[GOOD] (define-fun q1_model35 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model35_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model35 x!0))))
+[GOOD] (define-fun q2_model35 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) true
+          (ite (and (= x!0 true) (= x!1 false)) true
+          false))
+       )
+[GOOD] (define-fun q2_model35_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model35 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_35 () Bool 
+               (or q1_model35_reject
+                   q2_model35_reject
+               ))
+[GOOD] (assert uiFunRejector_model_35)
+Looking for solution 36
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) true false true) true true true)))
+[GOOD] (define-fun q1_model36 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model36_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model36 x!0))))
+[GOOD] (define-fun q2_model36 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) true
+          (ite (and (= x!0 true) (= x!1 false)) true
+          false))
+       )
+[GOOD] (define-fun q2_model36_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model36 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_36 () Bool 
+               (or q1_model36_reject
+                   q2_model36_reject
+               ))
+[GOOD] (assert uiFunRejector_model_36)
+Looking for solution 37
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) true true true) false true true)))
+[GOOD] (define-fun q1_model37 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) true
+          false)
+       )
+[GOOD] (define-fun q1_model37_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model37 x!0))))
+[GOOD] (define-fun q2_model37 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) true
+          (ite (and (= x!0 true) (= x!1 true)) true
+          false))
+       )
+[GOOD] (define-fun q2_model37_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model37 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_37 () Bool 
+               (or q1_model37_reject
+                   q2_model37_reject
+               ))
+[GOOD] (assert uiFunRejector_model_37)
+Looking for solution 38
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) true true true) false true true)))
+[GOOD] (define-fun q1_model38 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model38_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model38 x!0))))
+[GOOD] (define-fun q2_model38 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) true
+          (ite (and (= x!0 true) (= x!1 true)) true
+          false))
+       )
+[GOOD] (define-fun q2_model38_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model38 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_38 () Bool 
+               (or q1_model38_reject
+                   q2_model38_reject
+               ))
+[GOOD] (assert uiFunRejector_model_38)
+Looking for solution 39
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) false true true)))
+[GOOD] (define-fun q1_model39 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model39_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model39 x!0))))
+[GOOD] (define-fun q2_model39 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) true
+          false)
+       )
+[GOOD] (define-fun q2_model39_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model39 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_39 () Bool 
+               (or q1_model39_reject
+                   q2_model39_reject
+               ))
+[GOOD] (assert uiFunRejector_model_39)
+Looking for solution 40
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) false) false true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) false true true)))
+[GOOD] (define-fun q1_model40 ((x!0 Bool)) Bool
+          (ite (and (= x!0 false)) true
+          false)
+       )
+[GOOD] (define-fun q1_model40_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model40 x!0))))
+[GOOD] (define-fun q2_model40 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) true
+          false)
+       )
+[GOOD] (define-fun q2_model40_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model40 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_40 () Bool 
+               (or q1_model40_reject
+                   q2_model40_reject
+               ))
+[GOOD] (assert uiFunRejector_model_40)
+Looking for solution 41
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) false) false true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) false true true) true true true)))
+[GOOD] (define-fun q1_model41 ((x!0 Bool)) Bool
+          (ite (and (= x!0 false)) true
+          false)
+       )
+[GOOD] (define-fun q1_model41_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model41 x!0))))
+[GOOD] (define-fun q2_model41 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) true
+          (ite (and (= x!0 false) (= x!1 true)) true
+          false))
+       )
+[GOOD] (define-fun q2_model41_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model41 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_41 () Bool 
+               (or q1_model41_reject
+                   q2_model41_reject
+               ))
+[GOOD] (assert uiFunRejector_model_41)
+Looking for solution 42
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) false true true)))
+[GOOD] (define-fun q1_model42 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model42_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model42 x!0))))
+[GOOD] (define-fun q2_model42 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) true
+          false)
+       )
+[GOOD] (define-fun q2_model42_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model42 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_42 () Bool 
+               (or q1_model42_reject
+                   q2_model42_reject
+               ))
+[GOOD] (assert uiFunRejector_model_42)
+Looking for solution 43
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) false true true) true true true)))
+[GOOD] (define-fun q1_model43 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model43_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model43 x!0))))
+[GOOD] (define-fun q2_model43 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) true
+          (ite (and (= x!0 false) (= x!1 true)) true
+          false))
+       )
+[GOOD] (define-fun q2_model43_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model43 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_43 () Bool 
+               (or q1_model43_reject
+                   q2_model43_reject
+               ))
+[GOOD] (assert uiFunRejector_model_43)
+Looking for solution 44
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) true) false false false) true true false)))
+[GOOD] (define-fun q1_model44 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model44_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model44 x!0))))
+[GOOD] (define-fun q2_model44 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) false
+          (ite (and (= x!0 false) (= x!1 false)) false
+          true))
+       )
+[GOOD] (define-fun q2_model44_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model44 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_44 () Bool 
+               (or q1_model44_reject
+                   q2_model44_reject
+               ))
+[GOOD] (assert uiFunRejector_model_44)
+Looking for solution 45
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) false false false)))
+[GOOD] (define-fun q1_model45 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model45_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model45 x!0))))
+[GOOD] (define-fun q2_model45 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 false)) false
+          true)
+       )
+[GOOD] (define-fun q2_model45_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model45 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_45 () Bool 
+               (or q1_model45_reject
+                   q2_model45_reject
+               ))
+[GOOD] (assert uiFunRejector_model_45)
+Looking for solution 46
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) true) false false false) false true false)))
+[GOOD] (define-fun q1_model46 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model46_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model46 x!0))))
+[GOOD] (define-fun q2_model46 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) false
+          (ite (and (= x!0 false) (= x!1 false)) false
+          true))
+       )
+[GOOD] (define-fun q2_model46_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model46 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_46 () Bool 
+               (or q1_model46_reject
+                   q2_model46_reject
+               ))
+[GOOD] (assert uiFunRejector_model_46)
+Looking for solution 47
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) true false true)))
+[GOOD] (define-fun q1_model47 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model47_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model47 x!0))))
+[GOOD] (define-fun q2_model47 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) true
+          false)
+       )
+[GOOD] (define-fun q2_model47_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model47 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_47 () Bool 
+               (or q1_model47_reject
+                   q2_model47_reject
+               ))
+[GOOD] (assert uiFunRejector_model_47)
+Looking for solution 48
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) true true true)))
+[GOOD] (define-fun q1_model48 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model48_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model48 x!0))))
+[GOOD] (define-fun q2_model48 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) true
+          false)
+       )
+[GOOD] (define-fun q2_model48_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model48 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_48 () Bool 
+               (or q1_model48_reject
+                   q2_model48_reject
+               ))
+[GOOD] (assert uiFunRejector_model_48)
+Looking for solution 49
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) false true true) true false true)))
+[GOOD] (define-fun q1_model49 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model49_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model49 x!0))))
+[GOOD] (define-fun q2_model49 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) true
+          (ite (and (= x!0 false) (= x!1 true)) true
+          false))
+       )
+[GOOD] (define-fun q2_model49_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model49 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_49 () Bool 
+               (or q1_model49_reject
+                   q2_model49_reject
+               ))
+[GOOD] (assert uiFunRejector_model_49)
+Looking for solution 50
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) false) false true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) true true true)))
+[GOOD] (define-fun q1_model50 ((x!0 Bool)) Bool
+          (ite (and (= x!0 false)) true
+          false)
+       )
+[GOOD] (define-fun q1_model50_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model50 x!0))))
+[GOOD] (define-fun q2_model50 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) true
+          false)
+       )
+[GOOD] (define-fun q2_model50_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model50 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_50 () Bool 
+               (or q1_model50_reject
+                   q2_model50_reject
+               ))
+[GOOD] (assert uiFunRejector_model_50)
+Looking for solution 51
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) true true true)))
+[GOOD] (define-fun q1_model51 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model51_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model51 x!0))))
+[GOOD] (define-fun q2_model51 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) true
+          false)
+       )
+[GOOD] (define-fun q2_model51_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model51 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_51 () Bool 
+               (or q1_model51_reject
+                   q2_model51_reject
+               ))
+[GOOD] (assert uiFunRejector_model_51)
+Looking for solution 52
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) false) false true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 ((as const Array) false)))
+[GOOD] (define-fun q1_model52 ((x!0 Bool)) Bool
+          (ite (and (= x!0 false)) true
+          false)
+       )
+[GOOD] (define-fun q1_model52_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model52 x!0))))
+[GOOD] (define-fun q2_model52 ((x!0 Bool) (x!1 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q2_model52_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model52 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_52 () Bool 
+               (or q1_model52_reject
+                   q2_model52_reject
+               ))
+[GOOD] (assert uiFunRejector_model_52)
+Looking for solution 53
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) true) true false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) false) true false true)))
+[GOOD] (define-fun q1_model53 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) false
+          true)
+       )
+[GOOD] (define-fun q1_model53_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model53 x!0))))
+[GOOD] (define-fun q2_model53 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) true
+          false)
+       )
+[GOOD] (define-fun q2_model53_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model53 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_53 () Bool 
+               (or q1_model53_reject
+                   q2_model53_reject
+               ))
+[GOOD] (assert uiFunRejector_model_53)
+Looking for solution 54
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) false) false true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) true false true) false true true)))
+[GOOD] (define-fun q1_model54 ((x!0 Bool)) Bool
+          (ite (and (= x!0 false)) true
+          false)
+       )
+[GOOD] (define-fun q1_model54_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model54 x!0))))
+[GOOD] (define-fun q2_model54 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) true
+          (ite (and (= x!0 true) (= x!1 false)) true
+          false))
+       )
+[GOOD] (define-fun q2_model54_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model54 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_54 () Bool 
+               (or q1_model54_reject
+                   q2_model54_reject
+               ))
+[GOOD] (assert uiFunRejector_model_54)
+Looking for solution 55
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) true) true false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store (store ((as const Array) false) true false true) true true true)))
+[GOOD] (define-fun q1_model55 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) false
+          true)
+       )
+[GOOD] (define-fun q1_model55_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model55 x!0))))
+[GOOD] (define-fun q2_model55 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) true
+          (ite (and (= x!0 true) (= x!1 false)) true
+          false))
+       )
+[GOOD] (define-fun q2_model55_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model55 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_55 () Bool 
+               (or q1_model55_reject
+                   q2_model55_reject
+               ))
+[GOOD] (assert uiFunRejector_model_55)
+Looking for solution 56
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) true) true false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) false true false)))
+[GOOD] (define-fun q1_model56 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) false
+          true)
+       )
+[GOOD] (define-fun q1_model56_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model56 x!0))))
+[GOOD] (define-fun q2_model56 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 true)) false
+          true)
+       )
+[GOOD] (define-fun q2_model56_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model56 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_56 () Bool 
+               (or q1_model56_reject
+                   q2_model56_reject
+               ))
+[GOOD] (assert uiFunRejector_model_56)
+Looking for solution 57
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) true false false)))
+[GOOD] (define-fun q1_model57 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model57_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model57 x!0))))
+[GOOD] (define-fun q2_model57 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) false
+          true)
+       )
+[GOOD] (define-fun q2_model57_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model57 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_57 () Bool 
+               (or q1_model57_reject
+                   q2_model57_reject
+               ))
+[GOOD] (assert uiFunRejector_model_57)
+Looking for solution 58
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) true) true false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) true false false)))
+[GOOD] (define-fun q1_model58 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) false
+          true)
+       )
+[GOOD] (define-fun q1_model58_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model58 x!0))))
+[GOOD] (define-fun q2_model58 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 false)) false
+          true)
+       )
+[GOOD] (define-fun q2_model58_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model58 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_58 () Bool 
+               (or q1_model58_reject
+                   q2_model58_reject
+               ))
+[GOOD] (assert uiFunRejector_model_58)
+Looking for solution 59
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) true) true false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 ((as const Array) true)))
+[GOOD] (define-fun q1_model59 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) false
+          true)
+       )
+[GOOD] (define-fun q1_model59_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model59 x!0))))
+[GOOD] (define-fun q2_model59 ((x!0 Bool) (x!1 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q2_model59_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model59 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_59 () Bool 
+               (or q1_model59_reject
+                   q2_model59_reject
+               ))
+[GOOD] (assert uiFunRejector_model_59)
+Looking for solution 60
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 ((as const Array) true)))
+[GOOD] (define-fun q1_model60 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model60_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model60 x!0))))
+[GOOD] (define-fun q2_model60 ((x!0 Bool) (x!1 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q2_model60_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model60 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_60 () Bool 
+               (or q1_model60_reject
+                   q2_model60_reject
+               ))
+[GOOD] (assert uiFunRejector_model_60)
+Looking for solution 61
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) true) true false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) false false false)))
+[GOOD] (define-fun q1_model61 ((x!0 Bool)) Bool
+          (ite (and (= x!0 true)) false
+          true)
+       )
+[GOOD] (define-fun q1_model61_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model61 x!0))))
+[GOOD] (define-fun q2_model61 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 false) (= x!1 false)) false
+          true)
+       )
+[GOOD] (define-fun q2_model61_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model61 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_61 () Bool 
+               (or q1_model61_reject
+                   q2_model61_reject
+               ))
+[GOOD] (assert uiFunRejector_model_61)
+Looking for solution 62
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) true true false)))
+[GOOD] (define-fun q1_model62 ((x!0 Bool)) Bool
+          true
+       )
+[GOOD] (define-fun q1_model62_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model62 x!0))))
+[GOOD] (define-fun q2_model62 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) false
+          true)
+       )
+[GOOD] (define-fun q2_model62_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model62 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_62 () Bool 
+               (or q1_model62_reject
+                   q2_model62_reject
+               ))
+[GOOD] (assert uiFunRejector_model_62)
+Looking for solution 63
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 ((as const Array) false)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) true true false)))
+[GOOD] (define-fun q1_model63 ((x!0 Bool)) Bool
+          false
+       )
+[GOOD] (define-fun q1_model63_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model63 x!0))))
+[GOOD] (define-fun q2_model63 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) false
+          true)
+       )
+[GOOD] (define-fun q2_model63_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model63 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_63 () Bool 
+               (or q1_model63_reject
+                   q2_model63_reject
+               ))
+[GOOD] (assert uiFunRejector_model_63)
+Looking for solution 64
+[SEND] (check-sat)
+[RECV] sat
+[SEND] (get-value (q1))
+[RECV] ((q1 (store ((as const Array) false) false true)))
+[SEND] (get-value (q2))
+[RECV] ((q2 (store ((as const Array) true) true true false)))
+[GOOD] (define-fun q1_model64 ((x!0 Bool)) Bool
+          (ite (and (= x!0 false)) true
+          false)
+       )
+[GOOD] (define-fun q1_model64_reject () Bool
+          (exists ((x!0 Bool))
+                  (distinct (q1         x!0)
+                            (q1_model64 x!0))))
+[GOOD] (define-fun q2_model64 ((x!0 Bool) (x!1 Bool)) Bool
+          (ite (and (= x!0 true) (= x!1 true)) false
+          true)
+       )
+[GOOD] (define-fun q2_model64_reject () Bool
+          (exists ((x!0 Bool) (x!1 Bool))
+                  (distinct (q2         x!0 x!1)
+                            (q2_model64 x!0 x!1))))
+[GOOD] (define-fun uiFunRejector_model_64 () Bool 
+               (or q1_model64_reject
+                   q2_model64_reject
+               ))
+[GOOD] (assert uiFunRejector_model_64)
+Looking for solution 65
+[SEND] (check-sat)
+[RECV] unsat
+*** Solver   : Z3
+*** Exit code: ExitSuccess
+
+RESULT: Solution #1:
+  q1 :: Bool -> Bool
+  q1 False = True 
+  q1 _     = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True = False
+  q2 _    _    = True 
+Solution #2:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True = False
+  q2 _    _    = True 
+Solution #3:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True = False
+  q2 _    _    = True 
+Solution #4:
+  q1 :: Bool -> Bool
+  q1 True = False
+  q1 _    = True 
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False False = False
+  q2 _     _     = True 
+Solution #5:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 _ _ = True
+Solution #6:
+  q1 :: Bool -> Bool
+  q1 True = False
+  q1 _    = True 
+
+  q2 :: Bool -> Bool -> Bool
+  q2 _ _ = True
+Solution #7:
+  q1 :: Bool -> Bool
+  q1 True = False
+  q1 _    = True 
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True False = False
+  q2 _    _     = True 
+Solution #8:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True False = False
+  q2 _    _     = True 
+Solution #9:
+  q1 :: Bool -> Bool
+  q1 True = False
+  q1 _    = True 
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True = False
+  q2 _     _    = True 
+Solution #10:
+  q1 :: Bool -> Bool
+  q1 True = False
+  q1 _    = True 
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True  = True 
+  q2 True False = True 
+  q2 _    _     = False
+Solution #11:
+  q1 :: Bool -> Bool
+  q1 False = True 
+  q1 _     = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True  = True 
+  q2 True  False = True 
+  q2 _     _     = False
+Solution #12:
+  q1 :: Bool -> Bool
+  q1 True = False
+  q1 _    = True 
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True False = True 
+  q2 _    _     = False
+Solution #13:
+  q1 :: Bool -> Bool
+  q1 False = True 
+  q1 _     = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 _ _ = False
+Solution #14:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True = True 
+  q2 _    _    = False
+Solution #15:
+  q1 :: Bool -> Bool
+  q1 False = True 
+  q1 _     = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True = True 
+  q2 _    _    = False
+Solution #16:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True  False = True 
+  q2 False True  = True 
+  q2 _     _     = False
+Solution #17:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True = True 
+  q2 _    _    = False
+Solution #18:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True False = True 
+  q2 _    _     = False
+Solution #19:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True  = False
+  q2 False False = False
+  q2 _     _     = True 
+Solution #20:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False False = False
+  q2 _     _     = True 
+Solution #21:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True  True  = False
+  q2 False False = False
+  q2 _     _     = True 
+Solution #22:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True  True = True 
+  q2 False True = True 
+  q2 _     _    = False
+Solution #23:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True = True 
+  q2 _     _    = False
+Solution #24:
+  q1 :: Bool -> Bool
+  q1 False = True 
+  q1 _     = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True  True = True 
+  q2 False True = True 
+  q2 _     _    = False
+Solution #25:
+  q1 :: Bool -> Bool
+  q1 False = True 
+  q1 _     = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True = True 
+  q2 _     _    = False
+Solution #26:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True = True 
+  q2 _     _    = False
+Solution #27:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True = True 
+  q2 True  True = True 
+  q2 _     _    = False
+Solution #28:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True = True 
+  q2 True  True = True 
+  q2 _     _    = False
+Solution #29:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True  = True 
+  q2 True False = True 
+  q2 _    _     = False
+Solution #30:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True  = True 
+  q2 True False = True 
+  q2 _    _     = False
+Solution #31:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True False = True 
+  q2 _    _     = False
+Solution #32:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False False = False
+  q2 _     _     = True 
+Solution #33:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True False = True 
+  q2 _    _     = False
+Solution #34:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True = True 
+  q2 _    _    = False
+Solution #35:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True  False = True 
+  q2 False True  = True 
+  q2 _     _     = False
+Solution #36:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True = True 
+  q2 _     _    = False
+Solution #37:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False False = False
+  q2 _     _     = True 
+Solution #38:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 _ _ = False
+Solution #39:
+  q1 :: Bool -> Bool
+  q1 False = True 
+  q1 _     = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True  = False
+  q2 True False = False
+  q2 _    _     = True 
+Solution #40:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True False = False
+  q2 _    _     = True 
+Solution #41:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True  = False
+  q2 True False = False
+  q2 _    _     = True 
+Solution #42:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True False = False
+  q2 True True  = False
+  q2 _    _     = True 
+Solution #43:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True False = False
+  q2 True True  = False
+  q2 _    _     = True 
+Solution #44:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True = False
+  q2 _     _    = True 
+Solution #45:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True = False
+  q2 True  True = False
+  q2 _     _    = True 
+Solution #46:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True  False = False
+  q2 False True  = False
+  q2 _     _     = True 
+Solution #47:
+  q1 :: Bool -> Bool
+  q1 True = False
+  q1 _    = True 
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True  True  = True 
+  q2 False False = True 
+  q2 _     _     = False
+Solution #48:
+  q1 :: Bool -> Bool
+  q1 True = False
+  q1 _    = True 
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False False = True 
+  q2 _     _     = False
+Solution #49:
+  q1 :: Bool -> Bool
+  q1 True = False
+  q1 _    = True 
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True  False = True 
+  q2 False False = True 
+  q2 _     _     = False
+Solution #50:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True  False = True 
+  q2 False False = True 
+  q2 _     _     = False
+Solution #51:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False False = True 
+  q2 _     _     = False
+Solution #52:
+  q1 :: Bool -> Bool
+  q1 _ = True
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True  = False
+  q2 True  False = False
+  q2 _     _     = True 
+Solution #53:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True  = False
+  q2 True  False = False
+  q2 _     _     = True 
+Solution #54:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True False = False
+  q2 _    _     = True 
+Solution #55:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 _ _ = True
+Solution #56:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True True = False
+  q2 _    _    = True 
+Solution #57:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 True  True = False
+  q2 False True = False
+  q2 _     _    = True 
+Solution #58:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False True = False
+  q2 _     _    = True 
+Solution #59:
+  q1 :: Bool -> Bool
+  q1 True = True 
+  q1 _    = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False False = True 
+  q2 _     _     = False
+Solution #60:
+  q1 :: Bool -> Bool
+  q1 _ = False
+
+  q2 :: Bool -> Bool -> Bool
+  q2 False False = True 
+  q2 _     _     = False
 Solution #61:
   q1 :: Bool -> Bool
   q1 _ = False
diff --git a/SBVTestSuite/GoldFiles/validate_1.gold b/SBVTestSuite/GoldFiles/validate_1.gold
--- a/SBVTestSuite/GoldFiles/validate_1.gold
+++ b/SBVTestSuite/GoldFiles/validate_1.gold
@@ -31,11 +31,11 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (_ +zero 8 24)))
+[RECV] ((s0 (fp #b0 #xfe #b11111111111111111111111)))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 [VALIDATE] Validating the model. Assignment:
-[VALIDATE]       x = 0.0 :: Float
+[VALIDATE]       x = 3.4028235e38 :: Float
 [VALIDATE] There are no constraints to check.
 [VALIDATE] Validating outputs.
 
@@ -44,7 +44,7 @@
 *** 
 *** Assignment:
 *** 
-***       x = 0.0 :: Float
+***       x = 3.4028235e38 :: Float
 *** 
 *** Not all floating point operations are supported concretely.
 *** 
@@ -54,4 +54,4 @@
 *** Alleged model:
 ***
 *** Satisfiable. Model:
-***   x = 0.0 :: Float
+***   x = 3.4028235e38 :: Float
diff --git a/SBVTestSuite/GoldFiles/validate_2.gold b/SBVTestSuite/GoldFiles/validate_2.gold
--- a/SBVTestSuite/GoldFiles/validate_2.gold
+++ b/SBVTestSuite/GoldFiles/validate_2.gold
@@ -31,11 +31,11 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (_ -zero 8 24)))
+[RECV] ((s0 (fp #b1 #x00 #b10000000000000000000000)))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 [VALIDATE] Validating the model. Assignment:
-[VALIDATE]       x = -0.0 :: Float
+[VALIDATE]       x = -5.877472e-39 :: Float
 [VALIDATE] There are no constraints to check.
 [VALIDATE] Validating outputs.
 
@@ -44,7 +44,7 @@
 *** 
 *** Assignment:
 *** 
-***       x = -0.0 :: Float
+***       x = -5.877472e-39 :: Float
 *** 
 *** Floating point FMA operation is not supported concretely.
 *** 
@@ -54,4 +54,4 @@
 *** Alleged model:
 ***
 *** Satisfiable. Model:
-***   x = -0.0 :: Float
+***   x = -5.877472e-39 :: Float
diff --git a/SBVTestSuite/SBVConnectionTest.hs b/SBVTestSuite/SBVConnectionTest.hs
--- a/SBVTestSuite/SBVConnectionTest.hs
+++ b/SBVTestSuite/SBVConnectionTest.hs
@@ -18,7 +18,7 @@
 solverName = show . name . solver
 
 main :: IO ()
-main = do let allSolvers = map (\s -> (solverName s, s)) [abc, boolector, cvc4, mathSAT, yices, z3, dReal]
+main = do let allSolvers = map (\s -> (solverName s, s)) [abc, boolector, bitwuzla, cvc4, cvc5, mathSAT, yices, z3, dReal]
 
           args <- getArgs
 
diff --git a/SBVTestSuite/TestSuite/Arrays/Query.hs b/SBVTestSuite/TestSuite/Arrays/Query.hs
--- a/SBVTestSuite/TestSuite/Arrays/Query.hs
+++ b/SBVTestSuite/TestSuite/Arrays/Query.hs
@@ -80,6 +80,7 @@
                    _ <- checkSat
                    iv <- getValue i
                    constrain $ j .== select [0 .. 255] 0 j
+                   constrain $ i .== literal iv
                    constrain $ j .== i+1
                    _ <- checkSat
                    jv <- getValue j
diff --git a/SBVTestSuite/TestSuite/Basics/Set.hs b/SBVTestSuite/TestSuite/Basics/Set.hs
--- a/SBVTestSuite/TestSuite/Basics/Set.hs
+++ b/SBVTestSuite/TestSuite/Basics/Set.hs
@@ -34,26 +34,17 @@
 __unused :: SE
 __unused = error "stop GHC from complaining unused names" sA sB sC
 
-type SC = SSet  Char
-type RC = RCSet Char
+type SC = SSet  Integer
+type RC = RCSet Integer
 
 cSetAL :: SC
-cSetAL = fromList "hello"
--- cSetBL :: SC
--- cSetBL = fromList "there"
+cSetAL = fromList [1,2,3,3,4]
 
-cCharA :: SChar
-cCharA = literal 'e'
+cIntA :: SInteger
+cIntA = literal 2
 
--- The goal is to get rid of the following test vectors, and
--- use the more interesting ones above. Unfortunately,
--- there's a z3 bug in set-model generation that spits
--- out models that we cannot parse. So, we're sticking
--- to really simple examples in some cases here.
 cSetA :: SC
-cSetA = singleton $ literal 'a'
--- cSetB :: SC
--- cSetB = singleton $ literal 'b'
+cSetA = singleton $ literal 0
 
 -- Test suite
 tests :: TestTree
@@ -69,10 +60,10 @@
         , goldenCapturedIO "set_subset1"    $ tq $ templateBB  cSetA  cSetA  isSubsetOf
         , goldenCapturedIO "set_psubset1"   $ tq $ templateBB  cSetA  cSetA  isProperSubsetOf
         , goldenCapturedIO "set_disj1"      $ tq $ templateBB  cSetA  cSetA  disjoint
-        , goldenCapturedIO "set_insert1"    $ tq $ templateBE  cCharA cSetAL insert
-        , goldenCapturedIO "set_delete1"    $ tq $ templateBE  cCharA cSetAL delete
-        , goldenCapturedIO "set_member1"    $ tq $ templateBEB cCharA cSetAL member
-        , goldenCapturedIO "set_notMember1" $ tq $ templateBEB cCharA cSetAL notMember
+        , goldenCapturedIO "set_insert1"    $ tq $ templateBE  cIntA  cSetAL insert
+        , goldenCapturedIO "set_delete1"    $ tq $ templateBE  cIntA  cSetAL delete
+        , goldenCapturedIO "set_member1"    $ tq $ templateBEB cIntA  cSetAL member
+        , goldenCapturedIO "set_notMember1" $ tq $ templateBEB cIntA  cSetAL notMember
         , goldenCapturedIO "set_tupleSet"   $ ta setOfTuples
         ]
     where ta tc goldFile    = record goldFile =<< tc defaultSMTCfg{verbose=True, redirectVerbose=Just goldFile}
@@ -145,9 +136,9 @@
                           query $ do ensureSat
                                      (,,,,,) <$> getValue a <*> getValue b <*> getValue o1 <*> getValue o2 <*> getValue o3 <*> getValue o4
 
-templateBE :: SChar -> SC -> (SChar -> SC -> SC) -> Symbolic (Char, RC, RC, RC)
-templateBE ic is f = do a <- sChar "a"
-                        b <- sSet  "b"
+templateBE :: SInteger -> SC -> (SInteger -> SC -> SC) -> Symbolic (Integer, RC, RC, RC)
+templateBE ic is f = do a <- sInteger "a"
+                        b <- sSet     "b"
 
                         constrain $ a .== ic
                         constrain $ b .== is
@@ -158,9 +149,9 @@
                         query $ do ensureSat
                                    (,,,) <$> getValue a <*> getValue b <*> getValue o1 <*> getValue o2
 
-templateBEB :: SChar -> SC -> (SChar -> SC -> SBool) -> Symbolic (Char, RC, Bool, Bool)
-templateBEB ic is f = do a <- sChar "a"
-                         b <- sSet  "b"
+templateBEB :: SInteger -> SC -> (SInteger -> SC -> SBool) -> Symbolic (Integer, RC, Bool, Bool)
+templateBEB ic is f = do a <- sInteger "a"
+                         b <- sSet     "b"
 
                          constrain $ a .== ic
                          constrain $ b .== is
diff --git a/SBVTestSuite/TestSuite/Queries/Int_Boolector.hs b/SBVTestSuite/TestSuite/Queries/Int_Boolector.hs
--- a/SBVTestSuite/TestSuite/Queries/Int_Boolector.hs
+++ b/SBVTestSuite/TestSuite/Queries/Int_Boolector.hs
@@ -26,6 +26,7 @@
 tests =
   testGroup "Basics.QueryIndividual"
     [ goldenCapturedIO "query_boolector" $ \rf -> runSMTWith boolector{verbose=True, redirectVerbose=Just rf} q
+    , goldenCapturedIO "query_bitwuzla"  $ \rf -> runSMTWith bitwuzla {verbose=True, redirectVerbose=Just rf} q
     ]
 
 q :: Symbolic ()
diff --git a/SBVTestSuite/TestSuite/Queries/Int_CVC4.hs b/SBVTestSuite/TestSuite/Queries/Int_CVC4.hs
--- a/SBVTestSuite/TestSuite/Queries/Int_CVC4.hs
+++ b/SBVTestSuite/TestSuite/Queries/Int_CVC4.hs
@@ -26,6 +26,7 @@
 tests =
   testGroup "Basics.QueryIndividual"
     [ goldenCapturedIO "query_cvc4" $ \rf -> runSMTWith cvc4{verbose=True, redirectVerbose=Just rf} q
+    , goldenCapturedIO "query_cvc5" $ \rf -> runSMTWith cvc5{verbose=True, redirectVerbose=Just rf} q
     ]
 
 q :: Symbolic ()
diff --git a/SBVTestSuite/TestSuite/Queries/Tables.hs b/SBVTestSuite/TestSuite/Queries/Tables.hs
--- a/SBVTestSuite/TestSuite/Queries/Tables.hs
+++ b/SBVTestSuite/TestSuite/Queries/Tables.hs
@@ -11,8 +11,10 @@
 
 {-# LANGUAGE DeriveAnyClass                #-}
 {-# LANGUAGE DeriveGeneric                 #-}
+{-# LANGUAGE FlexibleContexts              #-}
 {-# LANGUAGE Rank2Types                    #-}
 {-# LANGUAGE QuantifiedConstraints         #-}
+
 {-# OPTIONS_GHC -Wall -Werror -Wno-orphans #-}
 
 module TestSuite.Queries.Tables (tests)  where
diff --git a/sbv.cabal b/sbv.cabal
--- a/sbv.cabal
+++ b/sbv.cabal
@@ -1,7 +1,7 @@
 Cabal-Version: 2.2
 
 Name        : sbv
-Version     : 8.16
+Version     : 8.17
 Category    : Formal Methods, Theorem Provers, Bit vectors, Symbolic Computation, Math, SMT
 Synopsis    : SMT Based Verification: Symbolic Haskell theorem prover using SMT solving.
 Description : Express properties about Haskell programs and automatically prove them using SMT
@@ -21,7 +21,7 @@
 Data-Files         : SBVTestSuite/GoldFiles/*.gold
 Extra-Source-Files : INSTALL, README.md, COPYRIGHT, CHANGES.md
 
-Tested-With        : GHC==9.0.1, GHC==8.10.2, GHC==8.8.4
+Tested-With        : GHC==9.0.1
 
 source-repository head
     type:       git
@@ -212,7 +212,9 @@
                   , Data.SBV.Provers.Prover
                   , Data.SBV.Provers.ABC
                   , Data.SBV.Provers.Boolector
+                  , Data.SBV.Provers.Bitwuzla
                   , Data.SBV.Provers.CVC4
+                  , Data.SBV.Provers.CVC5
                   , Data.SBV.Provers.DReal
                   , Data.SBV.Provers.MathSAT
                   , Data.SBV.Provers.Yices
